计算R中向量的所有子集

计算R中向量的所有子集,r,R,我想写一个小函数,我可以用它在R的逻辑回归中自动选择特征,用蛮力的方式测试预测变量的所有子集,然后通过CV评估它们的分类性能 令人惊讶的是,我没有找到一个包来完成“所有子集特征选择”,因此我想自己实现它 不幸的是,我有限的R知识使我无法编写一个生成给定向量的所有子集的循环,我想知道是否有人能为我指出正确的方向难道drop1()和add1()对您的目的没有帮助吗?它们通常都很谨慎,自动功能选择可能并不总是最合适的选择,但我认为您在这方面做出了明智的选择。您可以使用paste()+combn(),例

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

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

不幸的是,我有限的R知识使我无法编写一个生成给定向量的所有子集的循环,我想知道是否有人能为我指出正确的方向难道
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) ) )
varnames警告

这就是你想要的

函数bestglm为glm族选择输入的最佳子集。selec- 可用的验证方法包括各种信息标准以及交叉验证

这个小插曲有很多例子

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
库(bestglm)
数据(SAHeart)
#使用交叉有效性进行选择
out | z |)
#(截距)-6.44644451 0.92087165-7.000372 2.552830e-12
#烟草0.08037533 0.02587968 3.105731 1.898095e-03
#低密度脂蛋白0.16199164 0.05496893 2.946967 3.209074e-03
#famhistPresent 0.90817526 0.22575844.0227745.751659e-05
#类型A 0.03711521 0.01216676 3.050542.284290e-03
#年龄0.05046038 0.01020606 4.944159 7.647325e-07