【问题标题】:Multiple linear regression with missing covariates缺少协变量的多元线性回归
【发布时间】:2016-02-03 22:43:54
【问题描述】:

假设我有一个类似的数据集

df <- data.frame(y=c(11:16), x1=c(23,NA,27,20,20,21), x2=c(NA,9,2,9,7,8))

df
   y x1 x2
1 11 23 NA
2 12 NA  9
3 13 27  2
4 14 20  9
5 15 20  7
6 16 21  8

如果我执行多元线性回归,我会得到

m <- lm(y~x1+x2, data=df)
summary(m)

Call:
lm(formula = y ~ x1 + x2, data = df)

Residuals:
         3          4          5          6 
-1.744e-01 -1.047e+00 -4.233e-16  1.221e+00 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept) 19.72093   27.06244   0.729    0.599
x1          -0.24419    0.93927  -0.260    0.838
x2           0.02326    1.01703   0.023    0.985

Residual standard error: 1.617 on 1 degrees of freedom
  (2 observations deleted due to missingness)
Multiple R-squared:  0.4767,    Adjusted R-squared:  -0.5698 
F-statistic: 0.4556 on 2 and 1 DF,  p-value: 0.7234

这里我们有 2 个观察值(1 和 2)由于缺失而被删除。

为了减少缺失数据的影响,计算 2 个不同的简单线性回归是否明智?

m1 <- lm(y~x1, data=df)
m2 <- lm(y~x2, data=df)

在这种情况下,对于每个模型,由于缺失,我们将仅删除 1 个观察值。

【问题讨论】:

    标签: statistics linear-regression missing-data


    【解决方案1】:

    不,这可能不明智。 因为你遇到了omitted variables bias 的问题。 您可以看到这将如何影响您的估算,例如 x1,它被夸大了:

    summary(lm(y~x1, data=df))
    Call:
    lm(formula = y ~ x1, data = df)
    
    Residuals:
          1       3       4       5       6 
    -2.5287  0.8276 -0.5460  0.4540  1.7931 
    
    Coefficients:
                Estimate Std. Error t value Pr(>|t|)  
    (Intercept)  21.3276     7.1901   2.966   0.0592 .
    x1           -0.3391     0.3216  -1.054   0.3692  
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
    
    Residual standard error: 1.897 on 3 degrees of freedom
      (1 observation deleted due to missingness)
    Multiple R-squared:  0.2703,    Adjusted R-squared:  0.02713 
    F-statistic: 1.112 on 1 and 3 DF,  p-value: 0.3692
    

    请注意,您的利益关系是y~x1+x2,因此x1y 的影响占x2 的影响,反之亦然。 这当然与分别估计 y~x1y~x2 不同,您忽略了其他解释变量的影响。

    现在当然有处理缺失值的策略。 一种选择是估计贝叶斯模型,例如使用JAGS,您可以在其中对缺失值进行建模。例如,下面是一个示例,我采用每个变量的均值和标准差来对缺失值进行建模:

    model{
      for(i in 1:N){
        y[i] ~ dnorm(yhat[i], tau)
        yhat[i] <- a+ b1*x1[i] + b2*x2[i]
    
        # Accounting for missing data
        x1[i]~dnorm(22,3)
        x2[i]~dnorm(7,1.3) 
        }
      # Priors
      b1~dnorm(0, .01)    
      b2~dnorm(0, .01)    
    
      # Hyperpriors
      tau <- pow(sd, -2)
      sd ~ dunif(0, 20)
    }
    

    这只是我的想法。 有关如何处理缺失值的更好和更有见地的建议,我建议您访问stats.stackexchange

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 2019-01-25
      • 1970-01-01
      • 2011-01-06
      • 1970-01-01
      • 1970-01-01
      • 2019-03-30
      相关资源
      最近更新 更多