计算R中一个向量的所有子集

问题描述:

我想要编写一个小函数,我可以用它在R中的逻辑回归中进行自动特征选择,方法是以蛮力方式测试预测变量的所有子集,然后通过CV他们的分类表现。计算R中一个向量的所有子集

令人惊讶的是,我没有找到一个这样做“所有子集特征选择”的包,因此我想自己实现它。

不幸的是我有限的知识 - [R使我不能写一个循环,产生一个给定的矢量的所有子集,我想知道,如果有人可以点我在正确的方向

买者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

会不会drop1()add1()是有帮助你的目的?他们通常会提醒您,自动功能选择并不总是最合适的,但我认为您已经做出了明智的选择。

您可以使用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))) 

...但也许有更优雅的方式?