【问题标题】:backward elimination in RR中的反向消除
【发布时间】:2023-03-07 09:43:02
【问题描述】:

我正在尝试使用 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?

【问题讨论】:

    标签: r


    【解决方案1】:

    在比较不同的子模型时,有必要将它们拟合到同一组数据 - 否则结果就没有意义。 (考虑极端情况,您有两个预测变量 AB,每个预测变量仅对一半的观测值进行测量 - 然后模型 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 值,您最终可能会丢失大量数据集——在极端情况下,您可能会丢失整个数据集.如果发生这种情况,您必须重新考虑您的建模策略...

    【讨论】:

    • 我有一个疑问,你不是必须把 fullmodel 而不是 full in step(full, direction = "backward", trace=FALSE ) 吗?我错了吗?
    • 是的。我只是复制了 OP 的代码,没有仔细看它。谢谢。
    • 是的,它有效。非常感谢 Ben Bolker 的 cmets。
    • 另一个问题是,我们是否可以像上面那样做同样的“向后消除”,但现在不使用线性回归 (lm) 而是使用混合模型 (lmer) 来代替? fullmodel
    • 我相信drop1 适合lmer,但看起来step 不适合。我也可以提醒您不要采取逐步方法吗?在一些上下文中它们是有意义的,但大多数时候它们不是一个好主意——尝试在谷歌上搜索“Harrell stepwise”来阅读一些批评。
    猜你喜欢
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    相关资源
    最近更新 更多