计算R中向量的所有子集

时间:2013-06-04 23:10:48

标签: r

我想写一个小函数,我可以在R中的逻辑回归中用于自动特征选择,通过蛮力方式测试所有预测变量子集,然后通过CV评估它们的分类性能。

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

不幸的是,我有限的R知识使我无法编写一个生成给定向量的所有子集的循环,我想知道是否有人可以指出我正确的方向

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

答案 2 :(得分: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) ) )

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