步骤()的奇怪行为

时间:2014-01-24 22:38:11

标签: r

step()和stepAIC()在缺少值的数据上运行代码时会产生“删除缺失值错误”。

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

根据?步骤:

    The model fitting must apply the models to the same dataset. This may be 
a problem if there are missing values and R's default of na.action = na.omit 
is used. We suggest you remove the missing values first.

我有一个数据框,其中一个变量有四个na值。但是,当我在lm对象上运行步骤时,即使它缺少值,也不会出现“缺失值”错误。谁能告诉我可能会发生什么?

    > d1$Impressions
     [1]        NA        NA        NA   6924180   9313226  27888455  
18213812  54557205  13495553
...

这不会产生错误消息:

mod1 = lm(Leads ~ G + Con + GOO + DAY + Res + SD + ED + 
            ME + Impressions + Inc + Sea, data=d1)

step(mod1, direction="backward")
stepAIC(mod1)

即使有一个缺少值的变量,它也不会生成错误消息。关于发生了什么的任何想法?

1 个答案:

答案 0 :(得分:2)

所述行为的一个原因是这一点。 step()符合完整模型,因此由于NA s的存在而下降3(如所述)观察。只要NA的变量保留在模型中,lm()函数就会在每一步中删除这些观察结果。如果步骤在删除变量之前停止,该变量将导致之前删除的观察之一模型中,则不会引发错误,因为模型矩阵中的行数不会发生变化

顺便说一句,像这样的逐步选择被认为是有些可疑的有效性。尤其是,在使用它时,你做了一个相当大胆的陈述,即消除的变量的影响正好等于零。这也具有使模型中保留的变量的影响(估计系数)偏差以具有更大(绝对)值的效果。

这种逐步选择的替代方法包括收缩方法,如Lasso和弹性网。