【引言】
在医学数据处理的过程中经常会遇到数据缺失的情况,数据列表在成百上千甚至过万的情况下难以通过Excel进行处理,该情况下,使用R语言就能帮助大家快速识别缺失值并处理,大大节省了科研前期处理数据的时间和精力。
【正文】
一、数据缺失类型
l完全随机缺失:指缺失的概率和任何变量(包括观察到的和未观察到的变量) 的取值无关。
l随机缺失:指缺失的概率只与数据集中被观察到的变量值有关,与未观察到的变量值无关。比如患者体重确实可能和患者的年龄、疾病状况等因素相关,但是并不受已经缺失的体重值影响。
l非随机缺失:指数据缺失的概率与缺失值的取值有关,这种缺失大都不是偶然因素造成的。例如调查患者的体重,但是更多肥胖的患者不愿意告知体重,导致肥胖患者体重缺失较多。
二、识别缺失值
使用complete.cases()函数可以判断缺失值项。
md.pattern()输出图形
aggr()输出图形
处理缺失值的方法如下,有删除行和插补两种方式:
三、删除行
有两种方式可进行操作:
1.使用na.omit()函数直接删除缺失值所在行;
2.使用complete.cases()函数给出非缺失值所在行的逻辑判断,再利用数据框对象进行提取。
四、用均值/中位数/众数进行插补
主要使用Hmisc包的impute()函数和DMwR2包的centralImputation()函数。
1.使用impute()函数手动插值
2.使用centralImputation()函数进行自动插补
centralImputation()函数可以用数据的中心趋势值来填补缺失值:数值型变量使用中位数,名义变量使用众数。
五、多重插补
多重插补(Multiple Imputation,MI)是一种基于重复模拟的处理缺失值的方法。在面对复杂的缺失值问题时,MI是最常选用的方法,它将从一个包含缺失值的数据集中生成一组完整的数据集(通常是3到10个)。每个模拟数据集中,缺失数据将用蒙特卡洛方法来填补。R中可利用Amelia、 mice和mi包来执行这些操作。这里重点学习mice包(利用链式方程的多元插补)提供的方法。
主要函数mice(data,m,meth,seed)
参数说明:
m:指的是插补数据集的数量,5是默认值;
meth:指的是插补方法。在这里,我们使用预测均值匹配(Predictive mean matching)作为插补方法,其他方法使用可以在R中输入“?mice()”进行查询,age无缺失值,所以显示" ";
PredictorMatrix矩阵显示了各变量插补时利用其它变量的信息,1表示使用,0表示未使用。
不同类型的变量可以选择对应的插补方法
其他:
利用lattice包的stripplot()函数和densityplot()函数可视化数据的插补情况。
变量分布图(stripplot)
数据密度曲线(densityplot)