Как пройтись по 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"))