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

时间:2015-11-03 16:58:08

标签: statistics linear-regression missing-data

想象一下,我有一个像

这样的数据集

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 个答案:

答案 0 :(得分: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