15.6 完整实例分析(行删除)

在完整实例分析中,只有每个变量都包含了有效数据值的观测才会保留下来做进一步的分析。实际上,这样会导致包含一个或多个缺失值的任意一行都会被删除,因此常称作行删除法(listwise)、个案删除(case-wise)或剔除。大部分流行的统计软件包都默认采用行删除法来处理缺失值,因此许许多多的分析人员在使用诸如回归或者方差分析法来分析数据时,都没有意识到有“缺失值问题”需要处理!

函数complete.cases()可以用来存储没有缺失值的数据框或者矩阵形式的实例(行):

  1. newdata <- mydata[complete.cases(mydata),]

同样的结果可以用na.omit函数获得:

  1. newdata <- na.omit(mydata)

两行代码表示的意思都是:mydata中所有包含缺失数据的行都被删除,然后结果才存储到newdata中。

现假设你对睡眠研究中变量间的关系很感兴趣。计算相关系数前,使用行删除法可删除所有含有缺失值的动物:

  1. > options(digits=1)
  2. > cor(na.omit(sleep))
  3. BodyWgt BrainWgt NonD Dream Sleep Span Gest Pred Exp Danger
  4. BodyWgt 1.00 0.96 -0.4 -0.07 -0.3 0.47 0.71 0.10 0.4 0.26
  5. BrainWgt 0.96 1.00 -0.4 -0.07 -0.3 0.63 0.73 -0.02 0.3 0.15
  6. NonD -0.39 -0.39 1.0 0.52 1.0 -0.37 -0.61 -0.35 -0.6 -0.53
  7. Dream -0.07 -0.07 0.5 1.00 0.7 -0.27 -0.41 -0.40 -0.5 -0.57
  8. Sleep -0.34 -0.34 1.0 0.72 1.0 -0.38 -0.61 -0.40 -0.6 -0.60
  9. Span 0.47 0.63 -0.4 -0.27 -0.4 1.00 0.65 -0.17 0.3 0.01
  10. Gest 0.71 0.73 -0.6 -0.41 -0.6 0.65 1.00 0.09 0.6 0.31
  11. Pred 0.10 -0.02 -0.4 -0.40 -0.4 -0.17 0.09 1.00 0.6 0.93
  12. Exp 0.41 0.32 -0.6 -0.50 -0.6 0.32 0.57 0.63 1.0 0.79
  13. Danger 0.26 0.15 -0.5 -0.57 -0.6 0.01 0.31 0.93 0.8 1.00

表中的相关系数仅通过所有变量均为完整数据的42个动物计算得来。(注意代码cor(sleep, use="complete.obs")可生成同样的结果。)

若想研究寿命和妊娠期对睡眠中做梦时长的影响,可应用行删除法的线性回归:

  1. > fit <- lm(Dream ~ Span + Gest, data=na.omit(sleep))
  2. > summary(fit)
  3. Call:
  4. lm(formula = Dream ~ Span + Gest, data = na.omit(sleep))
  5. Residuals:
  6. Min 1Q Median 3Q Max
  7. -2.333 -0.915 -0.221 0.382 4.183
  8. Coefficients:
  9. Estimate Std. Error t value Pr(>|t|)
  10. (Intercept) 2.480122 0.298476 8.31 3.7e-10 ***
  11. Span -0.000472 0.013130 -0.04 0.971
  12. Gest -0.004394 0.002081 -2.11 0.041 *
  13. ---
  14. Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 1
  15. Residual standard error: 1 on 39 degrees of freedom
  16. Multiple R-squared: 0.167, Adjusted R-squared: 0.125
  17. F-statistic: 3.92 on 2 and 39 DF, p-value: 0.0282

此处可以看到,动物妊娠期越短,做梦时长越长(控制寿命不变);而控制妊娠期不变时,寿命与做梦时长不相关。整个分析基于有完整数据的42个实例。

在之前的例子中,如果data=na.omit(sleep)data = sleep替换,将会出现什么情况呢?和许多R函数一样,lm()将使用有限的行删除法定义。只有用函数拟合的、含缺失值的变量(本例是DreamSpanGest)对应的实例才会被删除,这时数据分析将基于44个实例。

行删除法假定数据是MCAR(即完整的观测只是全数据集的一个随机子样本)。此例中,我们假定42个动物是62个动物的一个随机子样本。如果违反了MCAR假设,回归参数的结果将是有偏的。由于删除了所有含缺失值的观测,减少了可用的样本,这也将导致统计效力的降低。此例中,行删除法减少了32%的样本量。接下来,我们将考虑一种能够利用整个数据集的方法(可以囊括那些含缺失值的观测)。