R可变长度在构建残差线性模型时不同

时间:2013-02-17 18:31:32

标签: r linear-regression lm

我正在研究一个问题,我想使用其他两个线性模型的残差来构建线性模型。我使用UN3数据集来显示我的问题,因为这里的问题比使用我的实际数据集容易。

这是我的R代码:

head(UN3)
m1.lgFert.purban <- lm(log(Fertility) ~ Purban, data=UN3)
m2.lgPPgdp.purban <- lm(log(PPgdp) ~ Purban,  data=UN3)
m3 <- lm(residuals(m1.lgFert.purban) ~ residuals(m2.lgPPgdp.purban))

以下是我遇到的错误:

> m3 <- lm(residuals(m1.lgFert.purban) ~ residuals(m2.lgPPgdp.purban))
Error in model.frame.default(formula = residuals(m1.lgFert.purban) ~ residuals(m2.lgPPgdp.purban),  : 
  variable lengths differ (found for 'residuals(m2.lgPPgdp.purban)')

我真的不明白为什么会发生这个错误。如果它是与日志相关的问题,那么当我构建前两个模型时,我应该得到错误。

1 个答案:

答案 0 :(得分:6)

您的默认na.action很可能是na.omit(请与options("na.action")核对)。这意味着NA值会被静默删除,从而导致残差向量的长度不同。您可能希望使用na.action="na.exclude",用NA s填充残差。

library(alr3)
options("na.action")
#$na.action
#[1] "na.omit"

m1.lgFert.purban <- lm(log(Fertility) ~ Purban, data=UN3,na.action="na.exclude")
m2.lgPPgdp.purban <- lm(log(PPgdp) ~ Purban,  data=UN3,na.action="na.exclude")

m3 <- lm(residuals(m1.lgFert.purban) ~ residuals(m2.lgPPgdp.purban))
#Coefficients:
#                 (Intercept)  residuals(m2.lgPPgdp.purban)  
#                    -0.01245                      -0.18127