Как выполнить цикл тестирования glm различных моделей

У меня есть вектор a который содержит некоторые комбинации моих переменных. Чтобы получить наилучшую возможную модель (самый маленький BIC), я надеялся, что смогу зациклиться на функции glm - ну, это не сработало.

Данные выглядят примерно так:

de.dat <- data.frame(death=c(0,0,0,1,0), ac=c(1, 2, 2, 3, 2), fv=c(1,0,0,0,1), vs=c(0,0,0,0,0), v2=c(0,0,1,1,1), ms=c(0,0,0,0,0), yv=c(0,0,1,0,1))

vars <- c("ac", "fv", "vs", "v2", "ms", "yv")
a <- apply(data.frame(t(combn(vars, 5))), 1, paste, collapse="+")

Модель должна выглядеть так: с зависимой переменной death и независимыми переменными каждого элемента a:

glm(death ~ a, data=de.dat, family="binomial")

Чтобы получить лучшую модель, мне нужно извлечь BIC каждой модели и затем определить, какой BIC принадлежит к какой модели. Заранее спасибо.

1 ответ

Это должно помочь вам. Вот ваши данные:

de.dat <- data.frame(death=c(0,0,0,1,0), ac=c(1, 2, 2, 3, 2), fv=c(1,0,0,0,1), vs=c(0,0,0,0,0), v2=c(0,0,1,1,1), ms=c(0,0,0,0,0), yv=c(0,0,1,0,1))
vars <- c("ac", "fv", "vs", "v2", "ms", "yv")

Вы должны создать вектор символов со всей формулой внутри (а не только в правой части):

a <- apply(cbind(paste(names(de.dat)[1],"~"),data.frame(t(combn(vars, 5)))), 1, paste, collapse="+")

Затем, используя функцию lapply вы можете создать список, который состоит из всех ваших 6 моделей:

models <- lapply(a,FUN = function(X) glm(X, data=de.dat, family="binomial"))

licensed under cc by-sa 3.0 with attribution.