2014-01-13 88 views
2

我一直在爲建模問題做變量選擇。變量選擇方法

我已經在選擇(增加/刪除一個變量)時使用了試錯法,並減少了錯誤。然而,隨着變量數量增加到數百個,我面臨的挑戰是手動變量選擇無法執行,因爲模型需要1/2小時來計算,從而無法完成任務。

您是否碰巧知道其他軟件包,而不是來自leaps軟件包的regsubsets(當使用相同的試驗和錯誤變量進行測試產生更高的錯誤時,它不包括一些變量,它們是線性依賴的 - 不包括一些有價值的變量)。

回答

4

您需要更好的(即沒有缺陷)方法來選擇模型。有很多選擇,但一個應該很容易適應你的情況的選擇是使用某種形式的規則化,例如套索或彈性網。這些適用於係數大小的收縮;如果一個係數從最小二乘解收縮到零,那麼該變量將從模型中刪除。由此產生的模型係數略有偏差,但它們的方差比選擇的OLS項低。

看看在larsglmnet,並penalized

+0

非常感謝Gaving lars似乎是一個更好的方法比常規迴歸方法的變量選擇 – Barnaby

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個方向和ckeck該模型的測試數據更好地工作。 閱讀stepAIC並查看示例。

編輯

這是真的逐步迴歸是不是最大的方法。正如GavinSimpson的回答中所提到的,套索迴歸是一種更好或更有效的方法。它比逐步迴歸快得多,並且可以處理大型數據集。 檢查glmnet包小插曲: http://www.stanford.edu/~hastie/glmnet/glmnet_alpha.html