2012-08-01 45 views
8

我想獲得使用反向消除與R的最終模型,但我運行代碼時得到以下錯誤消息。任何人都可以幫助我嗎?反向消除在R

base<-lm(Eeff~NDF,data=phuong) 
fullmodel<-lm(Eeff~NDF+ADF+CP+NEL+DMI+FCM,data=phuong) 
step(full, direction = "backward", trace=FALSE) 

> Error in step(full, direction = "backward", trace = FALSE) : 
number of rows in use has changed: remove missing values? 

回答

10

當比較不同的子模型時,有必要將它們擬合到同一組數據中 - 否則結果就沒有意義。 (考慮在極端情況下,您有兩個預測變量AB,這些預測變量僅在您的一半觀測值上測量 - 然後y~A+B將適用於所有數據,但y~Ay~B的型號將適用於非 - 非 - - - - - - - )因此,step將不允許您比較子模型(因爲包含NA值的案例的自動刪除)正在使用原始數據集的不同子集。因此,step將不允許您比較子模型(因爲包含NA值的案例的自動刪除)正在使用原始數據集的不同子集。

對原始數據集使用na.omit應解決問題。

fullmodel <- lm(Eeff ~ NDF + ADF + CP + NEL + DMI + FCM, data = na.omit(phuong)) 
step(fullmodel, direction = "backward", trace=FALSE) 

不過,如果你有很多不同的預測值NA的,你可能會失去大量的數據集 - 在極端情況下,你可能會失去的整個數據集。如果發生這種情況,你必須重新考慮你的建模策略...

+0

我有一個疑問,你不必把fullmodel而不是完整的步驟(完整,方向=「落後」,跟蹤=假)?我錯了嗎? – 2012-08-01 22:08:41

+0

是的。我只是複製了OP的代碼而沒有仔細查看它。謝謝。 – 2012-08-01 22:58:33

+0

是的,它的工作原理。非常感謝Ben Bolker的評論。 – 2012-08-02 08:00:42