分享

原始数据中几类缺失值(Missing Data)的SPSS及R处理方法

 生物_医药_科研 2019-01-24


一、缺失值产生的原因
缺失值的产生的原因多种多样,主要分为机械原因和人为原因。机械原因是由于机械原因导致的数据收集或保存的失败造成的数据缺失,比如数据存储的失败,存储器损坏,机械故障导致某段时间数据未能收集(对于定时数据采集而言)。人为原因是由于人的主观失误、历史局限或有意隐瞒造成的数据缺失,比如,在调查中被访人拒绝透露相关问题的答案,或者回答的问题是无效的,数据录入人员失误漏录了数据。
二、缺失值的类型
缺失值从缺失的分布来讲可以分为完全随机缺失,随机缺失和完全非随机缺失。完全随机缺失(Missing Completely At Random, MCAR)指的是数据的缺失是随机的,数据的缺失不依赖于任何不完全变量或完全变量。随机缺失(missing at random,MAR)指的是数据的缺失不是完全随机的,即该类数据的缺失依赖于其他完全变量。完全非随机缺失(missing not at random,MNAR)指的是数据的缺失依赖于不完全变量自身。
从缺失值的所属属性上讲,如果所有的缺失值都是同一属性,那么这种缺失成为单值缺失,如果缺失值属于不同的属性,称为任意缺失。另外对于时间序列类的数据,可能存在随着时间的缺失,这种缺失称为单调缺失。
三、缺失值的处理方法

对于缺失值的处理,从总体上来说分为删除存在缺失值的个案和缺失值插补。对于主观数据,人将影响数据的真实性,存在缺失值的样本的其他属性的真实值不能保证,那么依赖于这些属性值的插补也是不可靠的,所以对于主观数据一般不推荐插补的方法。插补主要是针对客观数据,它的可靠性有保证。


1.删除含有缺失值的个案

主要有简单删除法和权重法。简单删除法是对缺失值进行处理的最原始方法。它将存在缺失值的个案删除。如果数据缺失问题可以通过简单的删除小部分样本来达到目标,那么这个方法是最有效的。当缺失值的类型为非完全随机缺失的时候,可以通过对完整的数据加权来减小偏差。把数据不完全的个案标记后,将完整的数据个案赋予不同的权重,个案的权重可以通过logistic或probit回归求得。如果解释变量中存在对权重估计起决定性因素的变量,那么这种方法可以有效减小偏差。如果解释变量和权重并不相关,它并不能减小偏差。对于存在多个属性缺失的情况,就需要对不同属性的缺失组合赋不同的权重,这将大大增加计算的难度,降低预测的准确性,这时权重法并不理想。


2.可能值插补缺失值

它的思想来源是以最可能的值来插补缺失值比全部删除不完全样本所产生的信息丢失要少。在数据挖掘中,面对的通常是大型的数据库,它的属性有几十个甚至几百个,因为一个属性值的缺失而放弃大量的其他属性值,这种删除是对信息的极大浪费,所以产生了以可能值对缺失值进行插补的思想与方法。常用的有如下几种方法。
(1)均值插补。
数据的属性分为定距型和非定距型。如果缺失值是定距型的,就以该属性存在值的平均值来插补缺失的值;如果缺失值是非定距型的,就根据统计学中的众数原理,用该属性的众数(即出现频率最高的值)来补齐缺失的值。
(2)利用同类均值插补
同均值插补的方法都属于单值插补,不同的是,它用层次聚类模型预测缺失变量的类型,再以该类型的均值插补。假设X=(X1,X2,…,Xp)为信息完全的变量,Y为存在缺失值的变量,那么首先对X或其子集行聚类,然后按缺失个案所属类来插补不同类的均值。如果在以后统计分析中还需以引入的解释变量和Y做分析,那么这种插补方法将在模型中引入自相关,给分析造成障碍。
(3)极大似然估计(Max Likelihood ,ML)
在缺失类型为随机缺失的条件下,假设模型对于完整的样本是正确的,那么通过观测数据的边际分布可以对未知参数进行极大似然估计(Little and Rubin)。这种方法也被称为忽略缺失值的极大似然估计,对于极大似然的参数估计实际中常采用的计算方法是期望值最大化(Expectation Maximization,EM)。该方法比删除个案和单值插补更有吸引力,它一个重要前提:适用于大样本。有效样本的数量足够以保证ML估计值是渐近无偏的并服从正态分布。但是这种方法可能会陷入局部极值,收敛速度也不是很快,并且计算很复杂。
(4)多重插补(Multiple Imputation,MI)
多值插补的思想来源于贝叶斯估计,认为待插补的值是随机的,它的值来自于已观测到的值。具体实践上通常是估计出待插补的值,然后再加上不同的噪声,形成多组可选插补值。根据某种选择依据,选取最合适的插补值。

多重插补方法分为三个步骤:①为每个空值产生一套可能的插补值,这些值反映了无响应模型的不确定性;每个值都可以被用来插补数据集中的缺失值,产生若干个完整数据集合。②每个插补数据集合都用针对完整数据集的统计方法进行统计分析。③对来自各个插补数据集的结果,根据评分函数进行选择,产生最终的插补值。

以上四种插补方法,对于缺失值的类型为随机缺失的插补有很好的效果。两种均值插补方法是最容易实现的,也是以前人们经常使用的,但是它对样本存在极大的干扰,尤其是当插补后的值作为解释变量进行回归时,参数的估计值与真实值的偏差很大。相比较而言,极大似然估计和多重插补是两种比较好的插补方法,与多重插补对比,极大似然缺少不确定成分,所以越来越多的人倾向于使用多值插补方法。

四、SPSS中缺失值处理方法
在spss中,简单的缺失值替代可以通过Transform(数据转换)菜单下的“缺失值替代过程”,更加复杂的缺失值估计要通过“分析”菜单下“缺失值分析过程”。
(1)替换缺失值

首先,打开已经存在的数据。


选择需要替换缺失值的数据,这里是案例中的一个数据。


打开之后可以看到,有一处数据是缺失了的,下面我们将要新建一个变量填补这个缺失值。


打开转换,找到替换缺失值,单击将其打开。


打开之后会弹出一个替换缺失值的窗口,先要选择替换缺失值的变量,选择添加到右边的白色方框,然后设置变量名,选择更改,最后选择序列均值,确定即可。

单击确定之后会弹出一个日志文件窗口,可以看到替换缺失值到底有没有成功,出现下面的值就是成功了。


可以看到出现了一个新的用自定义的名字命名的变量,对缺失值进行了填补。


(2)缺失值分析过程
首先,打开已经存在的数据。点击“分析”--“缺失值分析”

分类变量:若分组分析,选择相应的分组变量,在“最大类别”输入最大的分类数,默认25,超过规定分类数则不进行分析。
“个案标签”选择一定变量作为标记变量,也不可不选择。
“估计”方法选择如图所示的几个。

模式”:“按照缺失值模式分组的表格个案”:以表格形式列出每个变量各种缺失方式的缺失例数。
“按照缺失值模式对变量排序”:缺失率太小的缺失方式不予显示,系统默认1%。
“变量”:规定用何变量标记观察单位观察单位及对结果排序。
“附加信息”:显示每个观察单位的观察值,对于列表方式如选择该项可给出定量变量的均数及分类变量每一类各种缺失方式的缺失数。
“排序依据”:没激活时是不能用的,选择一个变量,依据该变量大小依次列出各观察单位的结果。


“单变量统计分析”:给出每个变量的未缺失数、缺失数与缺失率,对于“定量变量”给出均数、标准差及极端值个数等。
“百分比不匹配”:以矩阵形式给出每一对变量不匹配(其中一个变量缺失而另一个变量不缺失)例数占总例数的百分比,对角线位置上即为单个变量的缺失率。
“T检验”:按照缺失指示变量将各计量变量分为两组,用T检验比较两组均数有无差别,助于判断变量是否为完全随机缺失。
“交叉表”:按各分类变量分类给出其他变量的缺失数和缺失率及每种缺失方式的比例。
缺失率太小的不予显示,默认为5%。


“估计”:估计含有缺失值的变量的均数、相关阵和协方差矩阵。
按列表:各入选变量均无缺失值的观察单位参加估计。
成对:所有入选变量两两匹配,每对变量无缺失值的观察单位参加估计。
EM(Expectation-Maximization):期望-最大似然估计法,采用迭代法建模.关于EM建模法,先利用未缺失值建模估计缺失值的期望值,然后迭代计算,用最大似然估计法重新估计参数。
回归:多元线性回归估计缺失值,给出被预测值的均数、协方差阵即相关阵。

“使用所有定量变量”:所有的定量变量均参与估计,系统默认。
“选择变量”:用户自己选择变量,选择相关的变量作为“预测变量(R)”、“被预测变量(D)”。


EM:正态分布是系统默认的;混合正太分布,两个分布混合比例,在0-1之间,标准差的比值,取值大于0,余下的值用户自己定义;假定服从t分布,自由度用户自己定义。最大迭代次数为系统默认25。


回归:四个选项中选择一个作为回归模型中的误差项,系统默认随机抽取未缺失数据的残差作误差项。



五、R中缺失值处理方法

R软件中除了可以进行上述SPSS的缺失值处理方法外,提供另外一种思路,对数据分析方法上采用对缺失值数据不敏感的方法,例如数据挖掘中的决策树分析方法。
(1)判断缺失数据
在R语言中缺失值通常以NA表示,判断是否缺失值的函数是is.na。另一个常用到的函数是complete.cases,它对数据框进行分析,判断某一观测样本是否完整。下面我们读取VIM包中的sleep数据作为例子,它的样本数为62,变量数为10,由complete.cases函数计算可知完整的样本个数为42。
----------------------
data(sleep, package='VIM')
dim(sleep)
sum(complete.cases(sleep))
----------------------

(2)探索缺失数据的模式
存在缺失数据情况下,需进一步判断缺失数据的模式是否随机。在R中是利用mice包中的md.pattern函数。
----------------------
library(mice)
md.pattern(sleep)

----------------------


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

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



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

marginplot()函数可生成一幅散点图,在图形边界展示两个变量的缺失值信息:
marginplot(sleep[c('Gest','Dream')],pch=c(20),col=c('darkgray','red','blue'))

(3) 用相关性探索缺失值

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

x<>

head(sleep,n=5)
head(x,n=5)
y<-x[which(sd(x)> 0)]
cor(y)

(4) 理解缺失数据的来由和影响

三种非常流行的方法:恢复数据的推理方法、涉及删除缺失值的传统方法、涉及模拟的现代方法。
(5) 多重插补
多重插补(MI)是一种基于重复模拟的处理缺失值的方法, 它将从一个包含缺失值的数据集中生成一组完整的数据集(通常是3到10个)。每个模拟数据集中,缺失数据将用蒙特卡洛方法来填补。此时,标准的统计方法便可应用到每个模拟的数据集上,通过组合输出结果给出估计的结果,以及引入缺失值时的置信区间。R中可利用Amelia、mice和mi包来执行这些操作。
----------------------
library(mice)
imp<>
fit<>
pooled<>
summary(pooled)
----------------------
mydata是一个包含缺失值的矩阵或数据框。
imp是一个包含m个插补数据集的列表对象,同时还含有完成插补过程的信息。默认地,m为5。
analysis是一个表达式对象,用来设定应用于m个插补数据集的统计分析方法。方法包括做线性回归模型的lm()函数、做广义线性模型的glm()函数、做广义可加模型的
gam(),以及做负二项模型的nbrm()函数。表达式在函数的括号中,~的左边是响应变量,右边是预测变量(用+符号分隔开)。
fit是一个包含m个单独统计分析结果的列表对象。

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

六、常用数据缺失填补软件及处理方法选择与评价


七、小结
插补处理只是将未知值补以我们的主观估计值,不一定完全符合客观事实。以上的分析都是理论分析,对于缺失值由于它本身无法观测,也就不可能知道它的缺失所属类型,也就无从估计一个插补方法的插补效果。另外这些方法通用于各个领域,具有了普遍性,那么针对一个领域的专业的插补效果就不会很理想,正是因为这个原因,很多专业数据挖掘人员通过他们对行业的理解,手动对缺失值进行插补的效果反而可能比这些方法更好。缺失值的插补是在数据挖掘过程中为了不放弃大量的信息,而采用的人为干涉缺失值的情况,无论是那种处理方法都会影响变量间的相互关系,在对不完备信息进行补齐处理的同时,我们或多或少地改变了原始的数据的信息系统,对以后的分析存在潜在的影响,所以对缺失值的处理一定要慎重。



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多