Как пройтись по 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"))
Другие вопросы по тегам