计算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
答
会不会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)))
...但也许有更优雅的方式?
哦这简化了事情,非常感谢你:) – user695652