【问题标题】:R Variable Length Differ when build linear model for residuals为残差建立线性模型时R可变长度不同
【发布时间】:2013-02-17 18:31:32
【问题描述】:

我正在解决一个问题,我想使用其他两个线性模型的残差来构建一个线性模型。我使用 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)')

我并不真正理解为什么会实际发生此错误。如果是与日志相关的问题,那么我在构建前两个模型时应该会收到错误消息。

【问题讨论】:

  • 您可能正在创建负数日志,即NaN?

标签: r linear-regression lm


【解决方案1】:

您的默认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  

【讨论】:

    猜你喜欢
    • 2021-07-26
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    • 2019-10-10
    • 1970-01-01
    相关资源
    最近更新 更多