想象一下,我有一个像
这样的数据集 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个观察。
答案 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
,因此x1
对y
的影响会计算x2
的影响,反之亦然。
这当然与分别估算y~x1
和y~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