首页 文章

具有缺失协变量的多元线性回归

提问于
浏览
1

想象一下,我有一个像这样的数据集

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个观察 .

1 回答

  • 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

相关问题