处理缺失值--处理步骤、识别缺失值


处理缺失数据的高级方法

缺失数据的传统方法和现代方法,主要使用VIMmice。使用VIM包提供的哺乳动物睡眠数据(sleep,注意不要将其与基础安装中描述药效的sleep数据集混淆)。数据来源于AllisonChichetti1976)的研究,他们研究了62种哺乳动物的睡眠、生态学变量和体质变量间的关系。他们对动物的睡眠需求为什么会随着物种变化很感兴趣。睡眠数据是因变量,生态学变量和体质变量是自变量或预测变量。

睡眠变量包含睡眠中做梦时长(Dream)、不做梦时长(NonD)以及它们的和(Sleep体质变量包含体重(BodyWgt,单位为千克)、脑重(BrainWgt,单位为克)、寿命(Span,单位为年)和妊娠期(Gest,单位为天)。生态学变量包含物种被捕食的程度(Pred)、睡眠时的暴露程度(Exp)和面临的总危险度(Danger)。生态学变量以从1(低)到5(高)的5分制进行测量。

1 处理缺失值的步骤

(1) 识别缺失数据;

(2) 检查导致数据缺失的原因;

(3) 删除包含缺失值的实例或用合理的数值代替(插补)缺失值。

缺失数据的分类

(1) 完全随机缺失 若某变量的缺失数据与其他任何观测或未观测变量都不相关,则数据

为完全随机缺失(MCAR

(2) 随机缺失 若某变量上的缺失数据与其他观测变量相关,与它自己的未观测值不相关,

则数据为随机缺失(MAR)。

(3) 非随机缺失 若缺失数据不属于MCARMAR,则数据为非随机缺失(NMAR)。

处理缺失数据的方法有很多,但不能保证都生成一样的结果。下图列出了一系列可用来处理不完整数据的方法,以及相应的R包:

 

2 识别缺失值

R使用NA(不可得)代表缺失值,NaN(不是一个数)代表不可能值。另外,符号Inf-Inf分别代表正无穷和负无穷。函数is.na()is.nan()is.infinite()可分别用来识别缺失值、不可能值和无穷值。每个返回结果都是TRUEFALSE。 下表给出了一些示例:

is.na()is.nan()is.infinite()函数的返回值示例

 

注:这些函数返回的对象与其自身参数的个数相同。

函数complete.cases()可以用来识别矩阵或数据框中没有缺失值的行。若每行都包含完整的实例,则返回TRUE的逻辑向量;若每行有一个或多个缺失值,则返回FALSE

以睡眠数据集为例:

data(sleep, package="VIM")

sleep[complete.cases(sleep),]

 

结果分析:输出结果显示42个实例为完整数据(截图未完整)。

sleep[!complete.cases(sleep),]

 

结果分析:输出结果显示20个实例含一个或多个缺失值(截图完整)。

由于逻辑值TRUEFALSE分别等价于数值10,可用sum()mean()函数来获取关于缺失数据的有用信息。如:

sum(is.na(sleep$Dream))

 

mean(is.na(sleep$Dream))

 

mean(!complete.cases(sleep))

 

结果分析:结果表明变量Dream12个缺失值,19%的实例在此变量上有缺失值。另外,数据集中32%的实例包含一个或多个缺失值。

对于识别缺失值,有两点需要牢记。第一,complete.cases()函数仅将NANaN识别为缺失值,无穷值(Inf-Inf)被当作有效值。第二,必须使用与上述中类似的缺失值函数来识别R数据对象中的缺失值,像myvar == NA这样的逻辑比较无法实现。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM