R中的后向消除

时间:2012-08-01 21:07:26

标签: 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?

1 个答案:

答案 0 :(得分:10)

在比较不同的子模型时,必须将它们拟合到同一组数据中 - 否则结果就没有意义了。 (考虑一下您有两个预测变量AB的极端情况,每个预测变量仅在您的一半观察值上进行测量 - 然后模型y~A+B将适合所有数据,但是模型y~Ay~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个值,那么最终可能会丢失很多数据集 - 在极端情况下,您可能会丢失整个数据集。如果发生这种情况,您必须重新考虑您的建模策略......