参考

https://www.jianshu.com/p/494e479c9037
https://www.cnblogs.com/cloudtj/articles/5512335.html
https://stefvanbuuren.name/mice/
https://stefvanbuuren.name/fimd/
https://cran.r-project.org/web/packages/mice/mice.pdf

前言

分析数据第一步就是清理数据了,包括异常值,缺失值处理等。首先要明白为什么会缺失,然后可以将缺失分为三类。最后是根据缺失的原因分类结果选用不同的方法来处理缺失值。例如缺失是完全随机的,不受其他因素或者变量影响,这个时候就可以直接删除有缺失的样本,只保留完整的样本。这里可以理解为数据完整的样本是随机的重新抽样(大样本中的一部分),可以反应总体。其实我们好好想想,抽样分析其实就是一个填补缺失值的研究,总体的中没有抽到的样本都算缺失。上面的参考中有更详细的阐述,这里主要介绍 mice 包的使用方法和适用条件。文章只用来参考,若有错误请指出,共同学习。

1、均值填充

  1. library("mice")
  2. data("airquality")
  3. imp <- mice(airquality, method = "mean", m = 1, maxit = 1)
  4. ##The argument method = mean specifies mean imputation, the argument m = 1 requests a single imputed dataset, and maxit = 1 sets the number of iterations to 1 (no iteration).

均值填补很快捷但是不推荐,因为大多数情况下会改变原始数据的分布,干扰变量之间的关系。

2、回归填补(Regression imputation)

  1. data <- airquality[, c("Ozone", "Solar.R")]
  2. imp <- mice(data, method = "norm.predict", seed = 1,
  3. m = 1, print = FALSE)
  4. xyplot(imp, Ozone ~ Solar.R)

多重补插,缺失值处理 mice 包使用(一) - 图1
根据变量之间的关系,建立回归模型,然后再预测缺失值。但从上图中可以看出,预测值和真实观测值还是会有区别,观测值是随机分布的,而不是完美的在某一条回归曲线上。预测的缺失值会增加变量之间的相关性。

3、随机回归 (Stochastic regression imputation)

  1. data <- airquality[, c("Ozone", "Solar.R")]
  2. imp <- mice(data, method = "norm.nob", m = 1, maxit = 1,
  3. seed = 1, print = FALSE)

多重补插,缺失值处理 mice 包使用(一) - 图2
此种方法是上面方法的改进,在回归中加入噪音(随机残差),这样可以减少相关偏差。即保留了回归权重,又不太影响变量之间的相关性。
当然回归分析也有局限性,变量之间有依赖性才行。

4、向填充或者向前填充

  1. airquality2 <- tidyr::fill(airquality, Ozone)

多重补插,缺失值处理 mice 包使用(一) - 图3
这种方法应该对时间依赖型的数据比较友好,比如每天的室温记录,如果有缺失,这个温度很有可能和前天或者后天的温度保持一致。这种方法多用于临床和药物研究中。

5、多重补插

如下图所示,通过可信值替换缺失值,生成多个完整数据集,然后进行我们感兴趣的分析。最终结果之间的差异就完全是因为缺失值造成的。最后进行合并,在适当的条件下,合并的估计是无偏的,并且具有正确的统计特性。

多重补插,缺失值处理 mice 包使用(一) - 图4