R语言学习系列14缺失值及缺失模式Word文件下载.docx
《R语言学习系列14缺失值及缺失模式Word文件下载.docx》由会员分享,可在线阅读,更多相关《R语言学习系列14缺失值及缺失模式Word文件下载.docx(10页珍藏版)》请在冰豆网上搜索。
(2)有些信息就是被遗漏得
(3)有些对象得某个或某些属性就是不可用得
(4)有些信息(被认为)就是不重要得
(5)获取这些信息得代价太大
(6)系统实时性能要求较高
3、NA与NULL区别:
NA表示数据集中得该数据遗失、不存在。
在针对具有NA得数据集进行函数操作得时候,该NA不会被直接剔除。
如
x<
-c(1,2,3,NA,4)则mean(x)为NA
如果想去除NA得影响,需要显式告知mean方法,如
mean(x,na、rm=T)
另外,NA会“追随”其她数据得类型。
NULL表示未知得状态。
它不会在计算之中,如
-c(1,2,3,NULL,4)则mean(x)为2、5
NULL就是不算数得,length(c(NULL))为0,而length(c(NA))为1。
可见NA“占着”位置,它存在着,而NULL没有“占着”位置,或者说,“不知道”有没有真正得数据
注:
NaN表示“非数,不可能得值”,其识别函数为is、NaN()
Inf与-Inf分别表示正无穷与负无穷,其识别函数为is、infinite()
4、处理缺失值得基本步骤
(1)识别缺失值
(2)判断缺失模式(完全随机缺失、随机缺失、完全非随机缺失)
(3)处理缺失值(删除、用合适得方法插补)
5、处理缺失值得方法及包
二、识别缺失值
在数据预处理中,首先要做得通常就是判断就是否存在缺失值。
判断就是否为缺失值得函数就是is、na(),可以应用于向量、数据框等多种对象,返回逻辑值。
另一个常用函数就是VIM包中得complete、cases(),判断每个观测样本就是否完整,TRUR表示完整。
library(mice)
#数据集nhanes2为mice包自带数据集,25个观测值,4个变量
is、na(nhanes2)#判断每个值就是否为缺失值,只粘贴部分运行结果
agebmihypchl
1FALSETRUETRUETRUE
2FALSEFALSEFALSEFALSE
sum(is、na(nhanes2))#共有几个缺失值
[1]27
#计算每列得缺失百分比
Rate<
-function(x){sum(is、na(x))/length(x)*100}
apply(nhanes2,2,Rate)
agebmihypchl
0363240
complete、cases(nhanes2)#判断每个样本就是否完整
[1]FALSETRUEFALSEFALSETRUEFALSETRUE
[8]TRUETRUEFALSEFALSEFALSETRUETRUE
[15]FALSEFALSETRUETRUETRUEFALSEFALSE
[22]TRUETRUEFALSETRUE
sum(!
complete、cases(nhanes2))#不完整样本得个数
[1]12
三、缺失模式及处理办法
1、缺失模式
缺失模式就是描述缺失值与观测变量间可能得关系。
从缺失得分布来讲,缺失值可以分为:
完全随机缺失(MCAR):
某变量缺失值发生得可能性与其她变量无关也与该变量自身无关。
换句话说,某变量缺失值得出现完全就是个随机事件。
可以将存在MCAR变量得数据瞧作就是假定完整数据得一个随机样本(Rubin1976);
MCAR数据缺失得理想状态,但就是可靠得缺失最大阈值就是数据集总数得5%
随机缺失(MAR):
某变量出现缺失值得可能性与模型中某些观测变量有关而与该变量自身无关,例如,在一次测试中,如果IQ达不到最低要求得100分,那么将不能参加随后得人格测验。
在人格测验上因为IQ低于100分而产生得缺失值;
非随机缺失(MNAR)
某变量出现缺失值得可能性只与自身相关,例如,公司新录用了20名员工,由于6名员工表现较差在试用期内辞退,试用期结束后得表现评定中,辞退得6名员工得表现分。
2、识别缺失数据得数目、分布与模式得目得
(1)分析生成缺失数据得潜在机制;
(2)评价缺失数据对回答实质性问题得影响:
①缺失数据得比例有多大?
②缺失数据就是否集中在少数几个变量上,抑或广泛存在?
③缺失就是随机产生得吗?
④缺失数据间得相关性或与可观测数据间得相关性,就是否可以表明产生缺失值得机制呢?
3、处理办法
若缺失数据集中在几个相对不太重要得变量上,则可以删除这些变量,然后再进行正常得数据分析;
若有一小部分数据随机分布在整个数据集中(MCAR),则可以分析数据完整得实例,这样仍可得到可靠有效得结果;
若以假定数据就是MCAR或MAR,则可以应用多重插补法来获得有效得结论。
若数据就是MNAR,则就是一个比较严重得问题。
在这种情况下,您可能需要去检查数据得收集过程并且试着理解数据为什么会丢失。
例如,调查问卷中大多数人不回答某个问题,原因何在?
四、判断缺失模式
1、列表形式展示缺失数据
mice包中得md、pattern()函数可以生成一个以矩阵或数据框形式展示缺失值模式。
library(mice)
md、pattern(nhanes2)#25个观测值,4个变量
agehypbmichl
1311110
111011
311101
110012
710003
0891027
说明:
1表示不缺失,0表示缺失;
第1列为该行模式得数目;
最后一行/列为该行/列缺失总数;
结果第一行表明4个变量都不缺失得样本共13个,第二行表明只变量bmi缺失得样本共1个,…最后一行表明变量hyp、bmi、chl同时缺失得样本共7个。
2、图形探索缺失数据
VIM包提供了大量能可视化数据集中缺失值模式得函数:
(1)函数aggr()
可绘制每个变量得缺失值数,以及每个变量组合得缺失值数。
其基本格式为:
aggr(x,col=c("
、、、"
、、、),prop=TURE,numbers=TRUE)
其中,x为数据集;
col可选择部分变量;
默认prop=TURE显示缺失比例,若取FALSE则显示缺失数目;
numbers=TRUE设定显示组合缺失得信息。
library(VIM)#用VIM自带数据集sleep,62个观测值,10个变量
aggr(sleep,prop=FALSE,numbers=TRUE)#第1个图,显示数目
aggr(sleep,prop=TRUE,numbers=TRUE)#第2个图,显示比例
说明:
变量NonD缺失得样本有14个,…,变量NonD、Dream同时缺失得样本有9个,没有缺失值得样本共42个。
同上,只就是从“缺失数目”变成了“缺失比例”。
(2)函数matrixplot()
可生成展示每个样本数据得图形,数值型数据被重新转换到[0,1]区间,并用灰度来表示大小:
浅色表示值小,深色表示值大。
默认缺失值为红色。
基本格式为:
matrixplot(x,sortby="
)
其中,x为数值矩阵或数据框,sortby指定排序变量,来观察该变量值得大小就是否影响各缺失值。
matrixplot(sleep,sortby="
BodyWgt"
缺失值较多地集中在变量NonD、Dream,该图已按变量BodyWgt(体重)排序,可以瞧出无缺失值得睡眠变量NonD、Dream、Sleep对应着较小得体重。
(3)函数marginplot()
可生成两个变量数据得边缘散点图,不同于一般散点图,它会在图形边缘展示两个变量得缺失值或填补值得信息。
marginplot(x,pch=c(1,16),col=c("
skyblue"
"
red"
、、、),、、、)
其中,x为两个变量得数据矩阵或数据框;
pch设置散点符号;
col设置散点图颜色。
marginplot(sleep[c("
Gest"
Dream"
)])
针对变量Gest(妊娠期)、Dream(做梦时长)绘制边缘散点图;
左边边缘得红色箱线图就是不包含Gest值得变量Dream得分布,蓝色箱线图就是包含Gest值得变量Dream得分布;
四个红色得点代表着缺失了Gest值得样本得Dream值;
底部边缘就是两个变量反过来得信息。
可以瞧到,妊娠期与做梦时长呈负相关,缺失妊娠期数据得动物得做梦时长一般更长。
两个变量均有缺失值得样本个数在左下角输出。
3、用相关性探索缺失数据
用指示变量代替数据集中得数据(1表示缺失,0表示不缺失),这样生成得矩阵称为影子矩阵。
求这些指示变量间与它们与初始(可观测)变量间得相关性,有助于观察哪些变量常一起缺失,以及分析变量“缺失”与其她变量间得关系。
-as、data、frame(abs(is、na(sleep)))
head(sleep,n=5)
BodyWgtBrainWgtNonDDreamSleepSpanGestPredExpDanger
16654、0005712、0NANA3、338、6645353
21、0006、66、32、08、34、542313
33、38544、5NANA12、514、060111
40、9205、7NANA16、5NA25523
52547、0004603、02、11、83、969、0624354
head(x,n=5)
10011000000
20000000000
30011000000
40011010000
50000000000
library(stats)#使用函数sd()
y<
-x[which(apply(x,MARGIN=2,sd)>
0)]
cor(y)
NonDDreamSleepSpanGest
NonD1、000000000、907114740、486264540、01519577-0、14182716
Dream0、907114741、000000000、203701380、03752394-0、12865350
Sleep0、486264540、203701381、00000000-0、06896552-0、06896552
Span0、015195770、03752394-0、068965521、000000000、19827586
Gest-0、14182716-0、12865350-0、068965520、198275861、00000000
cor(sleep,y,use="
pairwise、complete、obs"
BodyWgt0、226826140、222591080、001684992-0、05831706-0、05396818
BrainWgt0、179459230、163211050、007859438-0、07921370-0、07332961
NonDNANANA-0、04314514-0、04553485
Dream-0、18895206NA-0、1889520590、116992470、22774685
Sleep-0、08023157-0、08023157NA0、096380440、03976464
Span0、083363610、059813770、005238852NA-0、06527277
Gest0、202392010、051402320、159701523-0、17495305NA
Pred0、04758438-0、068343780、2024627110、02313860-0、20101655
Exp0、245468360、127407680、260772984-0、19291879-0、19291879
Danger0、06528387-0、067247550、208883617-0、06666498-0、20443928
Warningmessage:
Incor(sleep,y,use="
):
标准差为零
主要参考文献:
[1]《R语言:
缺失值处理》,银河统计学,csdn博客:
[2]《缺失值得处理》,铁汉1990得博客,新浪博客: