我正在尝试使用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?
答案 0 :(得分:10)
在比较不同的子模型时,必须将它们拟合到同一组数据中 - 否则结果就没有意义了。 (考虑一下您有两个预测变量A
和B
的极端情况,每个预测变量仅在您的一半观察值上进行测量 - 然后模型y~A+B
将适合所有数据,但是模型y~A
和y~B
将适合数据的非重叠子集。)因此,step
将不允许您比较那些子模型(因为自动删除包含NA
个值的个案)正在使用原始数据集的不同子集。
在原始数据集上使用na.omit
可以解决问题。
fullmodel <- lm(Eeff ~ NDF + ADF + CP + NEL + DMI + FCM, data = na.omit(phuong))
step(fullmodel, direction = "backward", trace=FALSE )
但是,如果您在不同的预测变量中有很多NA
个值,那么最终可能会丢失很多数据集 - 在极端情况下,您可能会丢失整个数据集。如果发生这种情况,您必须重新考虑您的建模策略......