Как пройти через 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 принадлежит к какой модели. Заранее спасибо.


person Thomas    schedule 03.10.2014    source источник
comment
Альтернативным подходом к выбору модели для логистической регрессии было бы использование регуляризации L1. Это уменьшит коэффициенты несущественных ковариат до 0. Учебное пособие можно найти здесь, в Интернете. stanford.edu/~hastie/glmnet/glmnet_alpha.html   -  person Jonathan Lisic    schedule 03.10.2014
comment
Спасибо за ваш вклад. Я посмотрю на это на выходных. Думаю, моя первая попытка немного наивна ...   -  person Thomas    schedule 03.10.2014


Ответы (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"))
person Klim    schedule 03.10.2014