在“算命”系列(六)我们介绍了在建模前怎么用R分析数据缺失模式。
在了解了数据缺失模式之后,我们接下来要学习的是根据不同的缺失模式对缺失值进行必要的处理。
1直接删除有缺失值个体
假如你现在有一组样本量非常大的数据,其中缺失值的占比又很低,如果预期直接删除有缺失值的个体不会对结果产生明显的干扰,此时可以选择将存在缺失值的数据删除,得到一个完整的数据组。
这种方法属于典型的家里有矿随便挥霍型,适合于完全随机缺失和随机缺失。
在R中操作的代码也很简单,只需要用data[complete.cases(data),]处理存在缺失值的数据集。
优点是容易操作,省去了多重插补后续分析的麻烦;
但如果缺失数据所占比例较大,特别当非随机缺失时,这种方法可能导致数据发生偏离,从而引出错误的结论,同时也是容易被审稿人诟病的地方。
2补齐数据
与直接删除相反,另一种处理的策略是尽可能把这些空缺用最接近的数据来填补。
(1)补齐数据中最low的方法,就是采用中位数或者平均值进行填补,也称为简单插补。
对于分类变量,可以采用在完整数据中出现频率最高的类别进行填充;而连续变量则统一用均值或者中位数。
这个方法颇有和稀泥的味道,既能保留样本量,又减少了插补的数值对整体的效应估计的影响。
然而如果缺失数据的数目非常大,那么简单插补很可能会低估标准差、曲解变量间的相关性,进一步还会影响统计检验的p值。
以系列(六)“科学算命”之临床预测模型(六) 缺失变值分析及数据插补 (上)示范数据df为例,我们进行中位数插补:
如果不想和稀泥,尽可能填补更贴近真实情况的数值,有什么办法呢?
(2)多重插补
为了实现“精准填补”,我们要利用一切可用的信息来预测缺失变量最可能的数值,即摸清数据的内在规律。
因此,目前应用较广泛的多重插补法,便是基于蒙特卡洛方法,在每个数据集中利用线性回归(lm)或广义线性规格(glm)等方法进行插补建模,使用已知的变量预测缺失的变量,从而得到相对可靠的预测值。
接下来意粉以R中最常用的mice包进行介绍。
基本过程
使用多重插补分析的过程如下:先通过上述介绍的方法分别填补得到5个(或更多)完整数据集,由于插补过程具有随机性,每个插补得到的完整数据并不完全一致。
随后基于填补的完整数据分别进行分析得到5个独立的结果,并通过Rubin方法将分析结果汇总合并得到最终结果。
R软件实现
①数据准备
首先我们先随机生成一个数据集,其中X1-5为预测因子,outcome为终点,样本量为20000。
接下来假设我们我们的研究问题是计算X1、X2、X3、X4、X5 作为预测因子在模型中的系数(权重大小)
②目前我们的数据集df是完整的,我们先看看完整数据下各预测因子的系数情况
结果如下,X5与outcome是存在显著相关性的,其系数为0.038980,p值为0.00592
③接下来生成缺失值,然后用mice包进行插补
其中df为存在缺失值待插补的数据集,m为插补生成完整数据集的个数,seed为随机数,插补完成的数据集保存在imp中。
④基于插补数据分析并汇总
R软件的mice包使用‘with’函数,对插补后的数据集进行分析,得到独立的结果。
‘pool’函数则是基于Rubin原则将结果进行汇总,下图是最终得到的模型系数:
对比最初的数据和插补后的分析结果,我们发现多重插补数据的结果与完整数据非常接近,效应量和p值均变化不大,证明多重插补的可以较好地模拟原先数据背后的规律。
⑤接下来我们尝试不用多重插补,直接保留不含缺失值的样本进行分析,看看能否得到一致的结果。
如下图,我们发现如果仅保留完整数据的样本,变量V5的效应量相比多重插补的结果出现了一定程度的偏离(0.0409 & 0.0391),P值也变得更为临界(0.037 & 0.0057),说明仅保留完整数据的样本分析可能对结果造成明显的偏倚。
小结一下,算命系列6和8给大家介绍了预测模型建模时如何分析及处理缺失值。除了这里介绍的简单插补、mice包,还有其他插补方法,如missForest等。
需要知道的是,没有十全十美的插补方法,只有最适合的。正确解读数据的缺失情况,并采用相应的处理,才能得到最真实的结果。
转自:双鸭山科研小黑屋
如有侵权,请联系本站删除!