2013-06-04 3 views
2

Я хочу написать небольшую функцию, которую я могу использовать для автоматического выбора функции в логистической регрессии в R, путем тестирования в грубой силе всех подмножеств переменных-предикторов, а затем оценить через CV их классификации.Вычисление всех подмножеств вектора в R

Удивительно, но я не нашел пакет, который выполняет этот «выбор всех подмножеств», и поэтому я хотел бы реализовать его сам.

К сожалению, мое ограниченное знание R заставляет меня не написать цикл, который генерирует все подмножества данного вектора и мне было интересно, если кто-то может мне точку в правильном направлении

ответ

5

Caveat incernor

bestglm package является то, что вы после

Функция bestglm выбирает наилучшее подмножество входов для семейства GLM. В селективной методы Тиона доступны включает различные критерии информации, а также кросс-проверки

Виньетка проходит через ряд примеров.

library(bestglm) 
data(SAHeart) 
# using Cross valiation for selection 
out<-bestglm(SAheart,IC = 'CV', family=binomial, t = 10) 
out 
# CVd(d = 373, REP = 10) 
# BICq equivalent for q in (0.190525988534159, 0.901583162187443) 
# Best Model: 
#     Estimate Std. Error z value  Pr(>|z|) 
# (Intercept) -6.44644451 0.92087165 -7.000372 2.552830e-12 
# tobacco   0.08037533 0.02587968 3.105731 1.898095e-03 
# ldl    0.16199164 0.05496893 2.946967 3.209074e-03 
# famhistPresent 0.90817526 0.22575844 4.022774 5.751659e-05 
# typea   0.03711521 0.01216676 3.050542 2.284290e-03 
# age    0.05046038 0.01020606 4.944159 7.647325e-07 
+0

О, это упрощает вопросы, большое вам спасибо :) – user695652

0

бы не drop1() и add1() полезно ваша цель? Они приходят с обычной осторожностью, что автоматический выбор функций не всегда может быть наиболее подходящим, но я полагаю, что вы сделали осознанный выбор.

0

Вы можете использовать paste() + combn(), например.

varnames <- c("a","b","c") 
rhs <- unlist(sapply(1:length(varnames),function(k) apply(combn(varnames,k),2,paste,collapse=" + "))) 
formulae <- as.formula(quote(paste("z ~", rhs))) 

... но, возможно, есть более элегантный способ?

Смежные вопросы