R处理缺失数据

缺失数据的处理

 
对于缺失数据通常有几种应付手段,一种是当缺失数据较少时直接删除相应样本,另一种是对缺失数据进行插补,最后是使用对缺失数据不敏感的分析方法,例如决策树。基本上缺失数据处理的流程是首先判断其模式是否随机,然后找出缺失的原因,最后对缺失值进行处理。


一、判断缺失数据
在R语言中缺失值通常以NA表示,判断是否缺失值的函数是is.na。另一个常用到的函数是complete.cases,它对数据框进行分析,判断某一观测样本是否完整。下面我们读取VIM包中的sleep数据作为例子,它的样本数为62,变量数为10,由complete.cases函数计算可知完整的样本个数为42。
----------------------
data(sleep, package="VIM")
dim(sleep)
sum(complete.cases(sleep))
----------------------
二、探索缺失数据的模式
存在缺失数据情况下,需进一步判断缺失数据的模式是否随机。在R中是利用mice包中的md.pattern函数。
----------------------
library(mice)
md.pattern(sleep)
----------------------

   BodyWgt BrainWgt Pred Exp Danger Sleep Span Gest Dream NonD   
42       1        1    1   1      1     1    1    1     1    1  0
 2       1        1    1   1      1     1    0    1     1    1  1
 3       1        1    1   1      1     1    1    0     1    1  1
 9       1        1    1   1      1     1    1    1     0    0  2
 2       1        1    1   1      1     0    1    1     1    0  2
 1       1        1    1   1      1     1    0    0     1    1  2
 2       1        1    1   1      1     0    1    1     0    0  3
 1       1        1    1   1      1     1    0    1     0    0  3
         0        0    0   0      0     4    4    4    12   14 38

上表中的1表示没有缺失数据,0表示存在缺失数据。第一列第一行的42表示有42个样本是完整的,第一列最后一行的1表示有一个样本缺少了span、dream、nond三个变量,最后一行表示各个变量缺失的样本数合计。

此外还可以使用vim包的aggr函数以图形方式描述缺失数据
----------------------
aggr(sleep)
----------------------

上面的左图显示各变量缺失数据比例,右图显示了各种缺失模式和对应的样本数目,显示nond和dream经常同时出现缺失值。

三、处理缺失数据

  • 删除缺失数据样本,其前提是缺失数据的比例较少,而且缺失数据是随机出现的,这样删除缺失数据后对分析结果影响不大。
  • 用变量均值或中位数来代替缺失值,其优点在于不会减少样本信息,处理简单。但是缺点在于当缺失数据不是随机出现时会产成偏误。
  • 多重插补法(Multiple imputation):多重插补是通过变量间关系来预测缺失数据,利用蒙特卡罗方法生成多个完整数据集,再对这些数据集分别进行分析,最后对这些分析结果进行汇总处理。在R语言中实现方法是使用mice包中的mice函数,生成多个完整数据集存在imp中,再对imp进行线性回归,最后用pool函数对回归结果进行汇总。汇总结果的前面部分和普通回归结果相似,nmis表示了变量中的缺失数据个数,fmi表示fraction of missing information,即由缺失数据贡献的变异。
----------------------
library(mice)
imp=mice(sleep,seed=1234)
fit=with(imp,lm(Dream~Span+Gest))
pooled=pool(fit)
summary(pooled)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值