缺少协变量的多元线性回归

Multiple linear regression with missing covariates

假设我有一个像

这样的数据集

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 个观测值。

不,这可能不明智。 因为你运行变成了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