变量选择方法

时间:2014-01-13 19:35:48

标签: r

我一直在为建模问题做变量选择。

我使用了试验和错误来选择(添加/删除变量)并减少了错误。但是,我遇到了挑战,因为变量数量增加到数百个,手动变量选择无法执行,因为模型需要花费1/2小时来计算,从而无法完成任务。

你是否碰巧知道除跳跃包中的regsubsets之外的任何其他包(当使用相同的试验和错误变量进行测试时产生更高的错误,它不包括一些线性依赖的变量 - 排除一些有价值的变量)。

2 个答案:

答案 0 :(得分:6)

您需要更好(即没有缺陷)的模型选择方法。有很多选择,但应该很容易适应你的情况将是使用某种形式的正规化,如套索或弹性网。这些应用缩小到系数的大小;如果系数从其最小二乘解收缩为零,则从模型中移除该变量。得到的模型系数略有偏差,但它们的方差低于选定的OLS项。

查看 lars glmnet penalized 套餐

答案 1 :(得分:2)

尝试使用MASS包的stepAIC功能。

这是一个非常小的例子:

library(MASS)
data(swiss)
str(swiss)

lm <- lm(Fertility ~ ., data = swiss)
lm$coefficients
## (Intercept)      Agriculture      Examination        Education         Catholic 
## 66.9151817       -0.1721140       -0.2580082       -0.8709401        0.1041153 
## Infant.Mortality 
## 1.0770481

st1 <- stepAIC(lm, direction = "both")
st2 <- stepAIC(lm, direction = "forward")
st3 <- stepAIC(lm, direction = "backward")

summary(st1)
summary(st2)
summary(st3)

您应该尝试3个方向,并确保哪个模型更适合您的测试数据。 阅读?stepAIC并查看示例。

修改

这是真正的逐步回归不是最好的方法。正如在GavinSimpson的回答中所提到的,套索回归是一种更好/更有效的方法。它比逐步回归快得多,并且可以处理大型数据集。 看看glmnet包装插图: http://www.stanford.edu/~hastie/glmnet/glmnet_alpha.html