处理缺失值--多重插补
多重插补(MI)是一种基于重复模拟的处理缺失值的方法。在面对复杂的缺失值问题时,MI是最常选用的方法,它将从一个包含缺失值的数据集中生成一组完整的数据集(通常是3到10个)。每个模拟数据集中,缺失数据将用蒙特卡洛方法来填补。此时,标准的统计方法便可应用到每个模拟的数据集上,通过组合输出结果给出估计的结果,以及引入缺失值时的置信区间。R中可利用Amelia、mice和mi包来执行这些操作。
通过mice包应用多重插补的步骤:
函数mice()首先从一个包含缺失数据的数据框开始,然后返回一个包含多个(默认为5个)完整数据集的对象。每个完整数据集都是通过对原始数据框中的缺失数据进行插补而生成的。由于插补有随机的成分,因此每个完整数据集都略有不同。然后,with()函数可依次对每个完整数据集应用统计模型(如线性模型或广义线性模型),最后,pool()函数将这些单独的分析结果整合为一组结果。最终模型的标准误和p值都将准确地反映出由于缺失值和多重插补而产生的不确定性。
mice()函数如何插补缺失值呢?
答:缺失值的插补通过Gibbs抽样完成。每个包含缺失值的变量都默认可通过数据集中的其他变量预测得来,于是这些预测方程便可用来预测缺失数据的有效值。该过程不断迭代直到所有的缺失值都收敛为止。对于每个变量,用户可以选择预测模型的形式(称为基本插补法)和待选入的变量。
默认地,预测的均值用来替换连续型变量中的缺失数据,而Logistic或多元Logistic回归则分别用来替换二值目标变量(两水平因子)或多值变量(多于两水平的因子)。其他基本插补法包括贝叶斯线性回归、判别分析、两水平正态插补和从观测值中随机抽样。用户也可以选择自己独有的方法。
基于mice包的分析通常符合以下分析过程:
library(mice)
imp <- mice(data, m)
fit <- with(imp, analysis)
pooled <- pool(fit)
summary(pooled)
其中:
data是一个包含缺失值的矩阵或数据框。
q imp是一个包含m个插补数据集的列表对象,同时还含有完成插补过程的信息。默认m为5。 q
analysis是一个表达式对象,用来设定应用于m个插补数据集的统计分析方法。方法包括做线性回归模型的lm()函数、做广义线性模型的glm()函数、做广义可加模型的gam(),以及做负二项模型的nbrm()函数。表达式在函数的括号中,~的左边是响应变量,右边是预测变量(用+符号分隔开)。
q fit是一个包含m个单独统计分析结果的列表对象。
pooled是一个包含这m个统计分析平均结果的列表对象。
现将多重插补法应用到sleep数据集上。重复上面的分析过程,不过此处我们将利用所有的62种动物。设定随机种子为1234:
library(mice)
data(sleep, package="VIM")
imp <- mice(sleep, seed=1234)
fit <- with(imp, lm(Dream ~ Span + Gest))
pooled <- pool(fit)
summary(pooled)
结果分析:此处,你可以看到Span的回归系数不显著(p≈0.08 ),Gest的系数在p<0.01的水平下很显著。fmi栏也展示了缺失信息(即由于引入了缺失数据而引起的变异所占整体不确定性的比例)。
处理缺失值的其他方法
R还支持其他一些处理缺失值的方法。虽然它们不如之前的方法应用广泛,下表列出的包在一些专业领域非常有用。
处理缺失数据的专业方法