15.8 处理缺失值的其他方法

R还支持其他一些处理缺失值的方法。虽然它们不如之前的方法应用广泛,但表15-2列出的包在一些专业领域非常有用。 表15-2 处理缺失数据的专业方法

软 件 包 描  述
Hmisc 包含多种函数,支持简单插补、多重插补和典型变量插补
mvnmle 对多元正态分布数据中缺失值的最大似然估计
cat 对数线性模型中多元类别型变量的多重插补
arrayImputearrayMissPatternSeqKnn 处理微阵列缺失数据的实用函数
longitudinalData 相关的函数列表,比如对时间序列缺失值进行插补的一系列函数
kmi 处理生存分析缺失值的Kaplan-Meier多重插补
mix 一般位置模型中混合类别型和连续型数据的多重插补
pan 多元面板数据或聚类数据的多重插补

最后,还有两种仍在使用中的缺失值处理方法,但它们已经过时,都应被舍弃,分别是成对删除(pairwise deletion)和简单插补(simple imputation)。

15.8.1 成对删除

处理含缺失值的数据集时,成对删除常作为行删除的备选方法使用。对于成对删除,观测只是当它含缺失数据的变量涉及某个特定分析时才会被删除。考虑如下代码:

  1. > cor(sleep, use="pairwise.complete.obs")
  2. BodyWgt BrainWgt NonD Dream Sleep Span Gest Pred Exp Danger
  3. BodyWgt 1.00 0.93 -0.4 -0.1 -0.3 0.30 0.7 0.06 0.3 0.13
  4. BrainWgt 0.93 1.00 -0.4 -0.1 -0.4 0.51 0.7 0.03 0.4 0.15
  5. NonD -0.38 -0.37 1.0 0.5 1.0 -0.38 -0.6 -0.32 -0.5 -0.48
  6. Dream -0.11 -0.11 0.5 1.0 0.7 -0.30 -0.5 -0.45 -0.5 -0.58
  7. Sleep -0.31 -0.36 1.0 0.7 1.0 -0.41 -0.6 -0.40 -0.6 -0.59
  8. Span 0.30 0.51 -0.4 -0.3 -0.4 1.00 0.6 -0.10 0.4 0.06
  9. Gest 0.65 0.75 -0.6 -0.5 -0.6 0.61 1.0 0.20 0.6 0.38
  10. Pred 0.06 0.03 -0.3 -0.4 -0.4 -0.10 0.2 1.00 0.6 0.92
  11. Exp 0.34 0.37 -0.5 -0.5 -0.6 0.36 0.6 0.62 1.0 0.79
  12. Danger 0.13 0.15 -0.5 -0.6 -0.6 0.06 0.4 0.92 0.8 1.00

此例中,任何两个变量的相关系数都只利用了仅这两变量的可用观测(忽略其他变量)。比如BodyWgtBrainWgt基于62个(所有变量下的动物数)动物的数据,而BodyWgtNonD基于42个动物的数据,DreamNonDream则基于46个动物的数据。

虽然成对删除似乎利用了所有可用数据,但实际上每次计算都只用了不同的数据子集。这将会导致一些扭曲的、难以解释的结果,所以我建议不要使用该方法。

15.8.2 简单(非随机)插补

所谓简单插补,即用某个值(如均值、中位数或众数)来替换变量中的缺失值。若使用均值替换Dream变量中的缺失值可用1.97来替换,NonD中的缺失值可用8.67来替换(两个值分别是DreamNonD的均值)。注意这些替换是非随机的,这意味着不会引入随机误差(与多重插补不同)。

简单插补的一个优点是,解决“缺失值问题”时不会减少分析过程中可用的样本量。虽然简单插补用法很简单,但是对于非MCAR的数据会产生有偏的结果。若缺失数据的数目非常大,那么简单插补很可能会低估标准差、曲解变量间的相关性,并会生成不正确的统计检验的p值。与成对删除一样,我建议在解决缺失数据的问题时尽量避免使用该方法。