1、R语言学习系列14缺失值与缺失模式14. 缺失值及缺失模式目录:1.什么是缺失值?2.识别缺失值3.缺失模式及处理办法四判断缺失模式正文:一、什么是缺失值?1.缺失值 缺失值是任何数据集中经常出现的问题,无回答、录入错误等 调查中常会出现的现象都会导致缺失数据。 缺失值通常会用一些特殊 符号进行标记, 比如 9999、1990年 1月 1日,或者是“ * ”、“?” “#”、“ $”等符号。还有一种数值缺失情况,是统计的时间窗口并非对所有数据都 适合。例如,需要“客户近 6 个月的最大存款余额”,对于那些建立 账户尚不满 6 个月的客户来说,统计出来的数值与想要得到的就可能 存在差距。缺失数据
2、会影响分析工作的进行和统计工作的效率,还会导致 分析的偏差。数据使用者、分析者往往缺乏缺失值处理方面的知识, 仅仅对数据进行简单删除或插补会影响数据规模和数据结构, 进而影 响分析结果。一般来说,对缺失值的填充方法,最好是先判断其缺失模式, 再建立一些适当模型,根据数据的分布来填充一个更恰当的数值。R 语言中,缺失值用 NA 表示。2.缺失值的产生原因(1)有些信息暂时无法获取(2)有些信息是被遗漏的(3)有些对象的某个或某些属性是不可用的(4)有些信息(被认为)是不重要的(5)获取这些信息的代价太大(6)系统实时性能要求较高3.NA 与 NULL 区别:NA 表示数据集中的该数据遗失、不存在
3、。在针对具有 NA 的数 据集进行函数操作的时候,该 NA 不会被直接剔除。如x-c(1,2,3,NA,4) 则 mean(x) 为 NA如果想去除NA的影响,需要显式告知 mean方法,如mean(x,n a.rm=T)另外,NA会“追随”其他数据的类型。NULL表示未知的状态。它不会在计算之中,如x-c(1,2,3,NULL,4) 贝卩 mean(x)为 2.5NULL 是不算数的,length(c(NULL) 为 0,而 length(c(NA) 为 1。可见NA “占着”位置,它存在着,而 NULL没有“占着”位置,或 者说,“不知道”有没有真正的数据注:NaN表示“非数,不可能的值”
4、,其识别函数为 is.NaN()Inf和-Inf分别表示正无穷和负无穷,其识别函数为 is. infinite()4.处理缺失值的基本步骤(1)识别缺失值(2)判断缺失模式(完全随机缺失、随机缺失、完全非随机缺失)(3)处理缺失值(删除、用合适的方法插补)5.处理缺失值的方法及包二、识别缺失值在数据预处理中,首先要做的通常是判断是否存在缺失值。判断是否为缺失值的函数是is.na(),可以应用于向量、数据框 等多种对象,返回逻辑值。另一个常用函数是 VIM包中的complete.cases() ,判断每个观测样本是否完整,TRUR表示完整。library(mice)#数据集nhanes2为mic
5、e包自带数据集,25个观测值,4个变量 is.n a( nhan es2) #判断每个值是否为缺失值,只粘贴部分运行结果age bmi hyp chl1FALSE TRUE TRUE TRUE2FALSE FALSE FALSE FALSEsum(is .n a( nhan es2) #共有几个缺失值1 27#计算每列的缺失百分比Rate - fun ctio n(x)sum(is. na(x)/le ngth(x)*1OOapply (nhan es2,2,Rate)age bmi hyp chl0 36 32 40complete.cases( nha nes2) #判断每个样本是否完整1
6、 FALSE TRUE FALSE FALSE TRUE FALSE TRUE8 TRUE TRUE FALSE FALSE FALSE TRUE TRUE15 FALSE FALSE TRUE TRUE TRUE FALSE FALSE 22 TRUE TRUE FALSE TRUEsum(!complete.cases( nha nes2) # 不完整样本的个数1 12三、缺失模式及处理办法1.缺失模式缺失模式是描述缺失值与观测变量间可能的关系。从缺失的分 布来讲,缺失值可以分为:完全随机缺失( MCAR ): 某变量缺失值发生的可能性与其他变量无关也与该变量自身无 关。换句话说, 某变量
7、缺失值的出现完全是个随机事件。 可以将存在 MCAR 变量的数据看作是假定完整数据的一个随机样本( Rubin 1976);注: MCAR 数据缺失的理想状态,但是可靠的缺失最大阈值是 数据集总数的 5%随机缺失( MAR ): 某变量出现缺失值的可能性与模型中某些观测变量有关而与该 变量自身无关, 例如,在一次测试中,如果 IQ 达不到最低要求的 100 分,那么将不能参加随后的人格测验。 在人格测验上因为 IQ 低于 100 分而产生的缺失值;非随机缺失( MNAR ) 某变量出现缺失值的可能性只与自身相关,例如,公司新录用 了 20 名员工,由于 6 名员工表现较差在试用期辞退,试用期结
8、束后 的表现评定中,辞退的 6 名员工的表现分。2.识别缺失数据的数目、分布和模式的 目的(1)分析生成缺失数据的潜在机制;(2)评价缺失数据对回答实质性问题的影响:1缺失数据的比例有多大?2缺失数据是否集中在少数几个变量上,抑或广泛存在?3缺失是随机产生的吗?4缺失数据间的相关性或与可观测数据间的相关性,是否 可以表明产生缺失值的机制呢?3.处理办法若缺失数据集中在几个相对不太重要的变量上, 则可以删除这些变量,然后再进行正常的数据分析;若有一小部分数据随机分布在整个数据集中 (MCAR ),则可以分析数据完整的实例,这样仍可得到可靠有效的结果;若以假定数据是 MCAR 或 MAR ,则可以
9、应用多重插补法来获得 有效的结论。若数据是 MNAR ,则是一个比较严重的问题。在这种情况下,你可能需要去检查数据的收集过程并且试着理解数据为什么会丢失。例如,调查问卷多数人不回答某个问题,原因何在?四、判断缺失模式1.列表形式展示缺失数据mice 包中的 md.pattern() 函数可以生成一个以矩阵或数据框形#25个观测值,4个变量式展示缺失值模式。library(mice)md.pattern( nhan es2)agehyp bmi chl13111101110113111011100127100030 891C)27说明:1表示不缺失,0表示缺失;第1列为该行模式的数目;最后一行/
10、列为该行/列缺失总数;结果第一行表明4个变量都不缺失 的样本共13个,第二行表明只变量bmi缺失的样本共1个,最后 一行表明变量hyp、bmi、chl同时缺失的样本共7个。2.图形探索缺失数据VIM包提供了大量能可视化数据集中缺失值模式的函数:(1)函数 aggr()可绘制每个变量的缺失值数,以及每个变量组合的缺失值数。其基本格式为:aggr(x, col=c(,.),prop=TURE, nu mbers=TRUE)其中,x为数据集;col可选择部分变量;默认prop=TURE显示缺失 比例,若取FALSE则显示缺失数目;numbers=TRUE设定显示组合 缺失的信息。说明:变量NonD缺
11、失的样本有14个,变量NonD、Dream 同时缺失的样本有9个,没有缺失值的样本共42个说明:同上,只是从“缺失数丁 变成了 “缺失比例”(2)函数 matrixplot()可生成展示每个样本数据的图形,数值型数据被重新转换到0,1 区间,并用灰度来表示大小:浅色表示值小,深色表示值大。 默认缺 失值为红色。基本格式为:matrixplot(x, sortby=.)其中,x为数值矩阵或数据框,sortby指定排序变量,来观察该变量 值的大小是否影响各缺失值。matrixplot(sleep,sortby=BodyWgt)说明:缺失值较多地集中在变量 NonD、Dream,该图已按变量Body
12、Wgt (体重)排序,可以看出无缺失值的睡眠变量 NonD、Dream、 Sleep对应着较小的体重。(3)函数 marginplot()可生成两个变量数据的边缘散点图,不同于一般散点图,它会在 图形边缘展示两个变量的缺失值或填补值的信息。基本格式为:margi nplot(x, pch=c(1,16), col=c(skyblue,red,.),.)其中,x为两个变量的数据矩阵或数据框;pch设置散点符号;col 设置散点图颜色。margi nplot(sleepc(Gest,Dream)stG说明:针对变量Gest (妊娠期)、Dream (做梦时长)绘制边缘 散点图;左边边缘的红色箱线图
13、是不包含 Gest值的变量Dream的分 布,蓝色箱线图是包含 Gest值的变量Dream的分布;四个红色的点 代表着缺失了 Gest值的样本的Dream值;底部边缘是两个变量反过 来的信息。可以看到,妊娠期和做梦时长呈负相关,缺失妊娠期数据的动 物的做梦时长一般更长。注:两个变量均有缺失值的样本个数在左下角输出。3.用相关性探索缺失数据用指示变量代替数据集中的数据(1表示缺失,0表示不缺失), 这样生成的矩阵称为影子矩阵。求这些指示变量间和它们与初始(可观测)变量间的相关性,有助于观察哪些变量常一起缺失,以及分析变量“缺失”与其他变量间 的关系x0)cor(y)NonD Dream Slee
14、p Spa n GestNo nD 1.00000000 0.90711474 0.48626454 0.01519577 -0.14182716 Dream 0.90711474 1.00000000 0.20370138 0.03752394 -0.12865350 Sleep 0.48626454 0.20370138 1.00000000 -0.06896552 -0.06896552 Span 0.01519577 0.03752394 -0.06896552 1.00000000 0.19827586 Gest -0.14182716 -0.12865350 -0.06896552
15、 0.19827586 1.00000000 cor(sleep,y,use=plete.obs)NonD Dream Sleep Span GestBodyWgt 0.22682614 0.22259108 0.001684992 -0.05831706 -0.05396818 BrainWgt 0.17945923 0.16321105 0.007859438 -0.07921370 -0.07332961 NonD NA NA NA -0.04314514 -0.04553485Dream -0.18895206 NA -0.188952059 0.11699247 0.22774685
16、Sleep -0.08023157 -0.08023157 NA 0.09638044 0.03976464Spa n 0.08336361 0.05981377 0.005238852 NA -0.06527277Gest 0.20239201 0.05140232 0.159701523 -0.17495305 NAPred 0.04758438 -0.06834378 0.202462711 0.02313860 -0.20101655Exp 0.24546836 0.12740768 0.260772984 -0.19291879 -0.19291879Dan ger 0.06528387 -0.06724755 0.208883617 -0.06666498 -0.20443928Warning message:标准差为零In cor(sleep, y, use = plete.obs):主要参考文献:1R语言:缺失值处理,银河统计学,csdn博客:.c nblogs./cloudtj/articles/5512335.html2缺失值的处理,铁汉1990的博客,新浪博客:blog.s in a.c n/s/blog_2v08m.html
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1