【引言】
在医学数据管理过程中,时常会遭遇数据不完整的情况。当数据列表扩展至成百上千甚至更多时,利用Excel进行处理变得不切实际。R语言便显现出其强大的作用,能够快速识别并处理缺失值,从而极大地节省了科研人员在数据预处理阶段的时间和精力。
【正文】
一、数据缺失类型的详解
完全随机缺失:指的是数据的缺失与任何观察到的或未观察到的变量值无关。
随机缺失:指的是数据的缺失概率仅与数据集中被观察到的变量值相关,与未观察到的变量值无关。例如,患者的体重缺失可能与其年龄、疾病状况等观察到的变量有关,但不受已缺失的体重值的影响。
非随机缺失:指数据的缺失概率与缺失值的实际取值有关,通常由非偶然因素导致。例如,在调查患者体重时,由于更多肥胖患者不愿意透露体重信息,导致肥胖患者的体重数据缺失较多。
二、识别和处理缺失值的方法
借助complete.cases()函数,我们可以快速识别出含有缺失值的案例。
通过md.pattern()和aggr()函数,我们可以生成相应的图形以辅助分析。
三、处理缺失值的策略
一种常用的方法是删除行。
1. 使用na.omit()函数可以直接移除含有缺失值的行。
2. 利用complete.cases()函数进行逻辑判断,再通过数据框对象提取出非缺失值所在行。
四、插补法处理缺失值
另一种方法是使用均值、中位数或众数进行插补。
主要使用Hmisc包的impute()函数和DMwR2包的centralImputation()函数来执行插补操作。
1. 可以手动使用impute()函数进行插值操作。
2. 利用centralImputation()函数可实现自动插补功能。该函数使用数据的中心趋势值(如数值型变量的中位数或名义变量的众数)来填补缺失值。
五、多重插补法
多重插补法(Multiple Imputation, MI)是一种处理复杂缺失值问题的常用方法。在面对复杂的缺失值问题时,MI是首选的处理方法。它可以从一个包含缺失值的数据集中生成一组完整的数据集(通常为3至10个)。在每个模拟的数据集中,缺失数据将使用蒙特卡洛方法进行插补。R语言中,Amelia、mice和mi包可用于执行这些操作。这里我们将重点关注mice包(它利用链式方程进行多元插补)提供的方法。
主要函数mice(data, m, meth, seed)
参数解释:
m:指生成的插补数据集数量,默认值为5;
meth:补方法。在此我们选用预测均值匹配作为插补方法。对于其他可用方法,可在R中输入“?mice()”进行查询。由于age无缺失值,故显示" ";
PredictorMatrix矩阵显示了在进行各变量插补时所利用的其他变量的信息,1表示使用该变量信息,0表示未使用。
对于不同类型的变量,可以选择适合的插补方法。
利用lattice包的stripplot()函数和densityplot()函数,可以可视化数据的插补情况。
数据分布可视化(stripplot图)
数据密度曲线图(densityplot图)