楼主: jpld
2400 0

[学习分享] R in action读书笔记(20)第十五章 处理缺失数据的高级方法 [推广有奖]

  • 2关注
  • 50粉丝

讲师

2%

还不是VIP/贵宾

-

威望
0
论坛币
1263 个
通用积分
9.4733
学术水平
120 点
热心指数
120 点
信用等级
99 点
经验
1249 点
帖子
192
精华
0
在线时间
271 小时
注册时间
2009-5-29
最后登录
2024-6-25

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

处理缺失数据的高级方法

15.1 处理缺失值的步骤

一个完整的处理方法通常包含以下几个步骤:

(1) 识别缺失数据;

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

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

缺失数据的分类:

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

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

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

处理缺失数据的方法:


15.2 识别缺失值

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


> data(sleep,package="VIM")#加载数据集

> sleep[complete.cases(sleep),]#列出没有缺失值的行

> sleep[!complete.cases(sleep),]#列出有一个或多个缺失值的行> options(digits=2)> sum(is.na(sleep$Dream))[1] 12> mean(is.na(sleep$Dream))[1] 0.19> mean(!complete.cases(sleep))[1] 0.32

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

15.3 探索缺失值模式

15.3.1 列表显示缺失值

mice包中的md.pattern()函数可生成一个以矩阵或数据框形式展示缺失值模式的表格:

> library(mice)> data(sleep,package="VIM")> 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

0表示变量的列中有缺失值,1则表示没有缺失值.

15.3.2 图形探究缺失数据

aggr()函数不仅绘制每个变量的缺失值数,还绘制每个变量组合的缺失值数。

> library(VIM)> aggr(sleep,prop=FALSE,numbers=TRUE)


marginplot()函数可生成一幅散点图,在图形边界展示两个变量的缺失值信息:

> marginplot(sleep[c("Gest","Dream")],pch=c(20),+            col=c("darkgray","red","blue"))


15.3.3 用相关性探索缺失值

用指示变量替代数据集中的数据(1表示缺失,0表示存在),这样生成的矩阵有时称作影子矩阵。求这些指示变量间和它们与初始(可观测)变量间的相关性,有助于观察哪些变量常一起缺失,以及分析变量“缺失”与其他变量间的关系:

> x<-as.data.frame(abs(is.na(sleep)))> head(sleep,n=5)> head(x,n=5)> y<-x[which(sd(x) > 0)]> cor(y)

15.4 理解缺失数据的来由和影响

三种非常流行的方法:恢复数据的推理方法、涉及删除缺失值的传统方法、涉及模拟的现代方法。

15.5 理性处理不完整数据

15.6 完整实例分析(行删除)

函数complete.cases()可以用来存储没有缺失值的数据框或者矩阵形式的实例(行):

newdata<-mydata[complete.cases(mydata),]

计算相关系数前,使用行删除法可删除所有含有缺失值的动物:

> options(digits=1)> cor(na.omit(sleep))         BodyWgt BrainWgt NonD Dream Sleep  Span  Gest  Pred  Exp DangerBodyWgt     1.00     0.96 -0.4 -0.07  -0.3  0.47  0.71  0.10  0.4   0.26BrainWgt    0.96     1.00 -0.4 -0.07  -0.3  0.63  0.73 -0.02  0.3   0.15NonD       -0.39    -0.39  1.0  0.52   1.0 -0.37 -0.61 -0.35 -0.6  -0.53Dream      -0.07    -0.07  0.5  1.00   0.7 -0.27 -0.41 -0.40 -0.5  -0.57Sleep      -0.34    -0.34  1.0  0.72   1.0 -0.38 -0.61 -0.40 -0.6  -0.60Span        0.47     0.63 -0.4 -0.27  -0.4  1.00  0.65 -0.17  0.3   0.01Gest        0.71     0.73 -0.6 -0.41  -0.6  0.65  1.00  0.09  0.6   0.31Pred        0.10    -0.02 -0.4 -0.40  -0.4 -0.17  0.09  1.00  0.6   0.93Exp         0.41     0.32 -0.6 -0.50  -0.6  0.32  0.57  0.63  1.0   0.79Danger      0.26     0.15 -0.5 -0.57  -0.6  0.01  0.31  0.93  0.8   1.00

15.7 多重插补

多重插补(MI)是一种基于重复模拟的处理缺失值的方法, 它将从一个包含缺失值的数据集中生成一组完整的数据集(通常是3到10个)。每个模拟数据集中,缺失数据将用蒙特卡洛方法来填补。此时,标准的统计方法便可应用到每个模拟的数据集上,通过组合输出结果给出估计的结果,以及引入缺失值时的置信区间。R中可利用Amelia、mice和mi包来执行这些操作。


> library(mice)> imp<-mice(mydata,m)> fit<-with(imp,analysis)> pooled<-pool(fit)> summary(pooled)

mydata是一个包含缺失值的矩阵或数据框。

imp是一个包含m个插补数据集的列表对象,同时还含有完成插补过程的信息。默认地,m为5。

analysis是一个表达式对象,用来设定应用于m个插补数据集的统计分析方法。方法包括做线性回归模型的lm()函数、做广义线性模型的glm()函数、做广义可加模型的

gam(),以及做负二项模型的nbrm()函数。表达式在函数的括号中,~的左边是响应变量,右边是预测变量(用+符号分隔开)。

fit是一个包含m个单独统计分析结果的列表对象。

pooled是一个包含这m个统计分析平均结果的列表对象。

15.8 处理缺失值的其他方法

处理缺失数据的专业方法


15.8.1 成对删除

处理含缺失值的数据集时,成对删除常作为行删除的备选方法使用。对于成对删除,观测只

是当它含缺失数据的变量涉及某个特定分析时才会被删除。

> cor(sleep,use="pairwise.complete.obs")         BodyWgt BrainWgt NonD Dream Sleep  Span Gest  Pred  Exp DangerBodyWgt     1.00     0.93 -0.4  -0.1  -0.3  0.30  0.7  0.06  0.3   0.13BrainWgt    0.93     1.00 -0.4  -0.1  -0.4  0.51  0.7  0.03  0.4   0.15NonD       -0.38    -0.37  1.0   0.5   1.0 -0.38 -0.6 -0.32 -0.5  -0.48Dream      -0.11    -0.11  0.5   1.0   0.7 -0.30 -0.5 -0.45 -0.5  -0.58Sleep      -0.31    -0.36  1.0   0.7   1.0 -0.41 -0.6 -0.40 -0.6  -0.59Span        0.30     0.51 -0.4  -0.3  -0.4  1.00  0.6 -0.10  0.4   0.06Gest        0.65     0.75 -0.6  -0.5  -0.6  0.61  1.0  0.20  0.6   0.38Pred        0.06     0.03 -0.3  -0.4  -0.4 -0.10  0.2  1.00  0.6   0.92Exp         0.34     0.37 -0.5  -0.5  -0.6  0.36  0.6  0.62  1.0   0.79Danger      0.13     0.15 -0.5  -0.6  -0.6  0.06  0.4  0.92  0.8   1.00

15.8.2 简单(非随机)插补

所谓简单插补,即用某个值(如均值、中位数或众数)来替换变量中的缺失值。若使用均值

替换,Dream变量中的缺失值可用1.97来替换,NonD中的缺失值可用8.67来替换(两个值分别是Dream和NonD的均值)简单插补的一个优点是,解决“缺失值问题”时不会减少分析过程中可用的样本量。虽然简单插补用法很简单,但是对于非MCAR的数据会产生有偏的结果。若缺失数据的数目非常大,那么简单插补很可能会低估标准差、曲解变量间的相关性,并会生成不正确的统计检验的p值。


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Action 缺失数据 读书笔记 TIO ACT 读书笔记 action

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-11-9 08:20