add*_*ons 1 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))
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
> 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)')
Run Code Online (Sandbox Code Playgroud)
我真的不明白为什么会发生这个错误.如果它是与日志相关的问题,那么当我构建前两个模型时,我应该得到错误.
na.action最有可能是您的默认值na.omit(选中options("na.action")).这意味着NA静默地去除值,导致残差向量的长度不同.您可能想要使用na.action="na.exclude",用NAs 填充残差.
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
Run Code Online (Sandbox Code Playgroud)