2013-06-04 76 views
2

我想要編寫一個小函數,我可以用它在R中的邏輯迴歸中進行自動特徵選擇,方法是以蠻力方式測試預測變量的所有子集,然後通過CV他們的分類表現。計算R中一個向量的所有子集

令人驚訝的是,我沒有找到一個這樣做「所有子集特徵選擇」的包,因此我想自己實現它。

不幸的是我有限的知識 - [R使我不能寫一個循環,產生一個給定的矢量的所有子集,我想知道,如果有人可以點我在正確的方向

回答

5

買者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))) 

...但也許有更優雅的方式?

相關問題