有缺失值怎么办?介绍5种处理缺失值的方法

专题合集更多教程

文章来源:“小白学统计”微信公众号

 

如果你调查的数据发现有缺失(这几乎是不可避免的),首先建议先做一些分析,比如这些缺失数据和全部数据在性别、年龄等一些指标上有无差异(但愿是没有差异的)。

 

如果差别不大,那还勉强说的过去,如果差别较大,那就麻烦了。审稿人肯定会说,为什么全部数据中男性占50%,而缺失数据中男性占70%?这是不是说明缺失的主要是男性,那会不会影响你的主要研究结局?等等之类的。当然,理论上,你需要证明在所有的因素中差别都不大,但这一点很难,实际中,很多人都是大概看看在一些主要的基线资料中差别不大就算是心里安慰了。

 

先说一个原则性问题,处理缺失值最好的方式是什么?答案是:没有最好的方式。或者说,最好的方式只有一个,预防缺失,尽量不要缺失。

 

听起来像开玩笑,但这是真理。任何的填补技术都是有问题的,就像有人说的,所有的统计方法都是错误的,任何的统计方法都是有条件的,在适当条件下,结论可能比较可信,否则就是错误的。

 

缺失值的处理有很多种方式,本文先说一些比较简单的。

 

直接删除法

 

这种方法简单粗暴,是非专业人士很喜欢用的方式。可能你会说,这算是什么方法?事实上,在有些时候,这种方法也是有效的。在缺失数很少的时候,这种方法无可厚非,而且效率很高。如调查了1000人,只有30人缺失,可以考虑删除,通常影响不会太大。

 

但这么理想的情况不多见,更多的是缺失率较高的情形。如每个变量缺失30个,这时尽管每个变量缺失都不多,但如果缺失没有重合,只要有一个变量缺失,就要删除整条观测。因此如果直接删除的话,如果有10个变量缺失,就要删除300条,那就不一样了。

 

一般情况下,很少有恰好所有变量都在相同的观测缺失,所以,当有缺失数据的变量很多的时候,直接删除会导致样本量减少很多。即使你不在乎分析精度,起码也得考虑一下前期花费的精力吧,相当于你花了100%的精力却只拿到了70%或60%的回报。

 

所以,除非你调查的自变量很少,而且每个自变量缺失的都特别少,否则尽量不要采用这种方法。

 

LOCF法

 

这种方法主要用于临床试验中。临床试验中经常需要多次观察,这就会导致有的人可能第1次随访有数据,而第2次(或第3次、第4次)就失访了,后面就没有数据了。

 

这种时候最简单直接、而且也是很常用的一种方式就是LOCF(last observation carried forward),意思就是,用前一次的数据填补后面的数据

 

比如张三,第一次随访的血糖是11.3,第二次失访了,那么第二次以及后面所有的随访都填补为11.3。

 

既然提到LOCF,就顺便提一下与其有关的其它类似的几种方式,比如BOCF(baseline observation carried forward),顾名思义,以基线数据填补后面的缺失;WOCF(worst observation carried forward),以各次随访中最差的结果作为缺失值的填补,或者以各次随访中最优的结果作为缺失值的填补,做一些敏感性分析,看看最差是什么样,最好是什么样。 

 

虚拟变量法

 

该法主要用于分类自变量的缺失,把缺失值作为一类,这样类别数就多了一类。例如性别,本来是男性和女性两类,虚拟变量的话以女性为0,男性为1。如果有缺失,可以把缺失值赋值为2,这样就变成了3类。仍以女性为参照,分别给出男性比女性、缺失比女性的结果,但我们只看男性比女性的结果。

 

这种方法的好处在于,由于将缺失赋值,统计软件就不会把它当做一个缺失值删除,避免了由于性别这一个变量缺失而导致整个观测被删除的悲剧。

 

这种方法简单且容易理解,但一般只用于分类自变量,而且对该变量本身而言,样本量仍是变少,估计精度肯定也会变差。另外,对其它变量的估计值有时会有较大影响。所以也不是一种很好的方法。

 

均值填补法

 

这种方法主要用于连续资料的缺失,顾名思义,就是把缺失值用该变量的均值来填补。比如身高,一共100人,结果缺失了10人,那就计算剩余的90人的均值,作为身高的填补值。

 

这种方法的缺点显而易见,没有考虑到人与人之间的变异。不同性别、年龄等特征的人群,身高本来就不应该相等,强行作为一个值,比如导致变异减少。当然,稍微有点方法可以调整一下,比如,分性别计算,计算女性和男性的平均身高,然后分别作为女性和男性的填补。

 

但无论如何,这种方法是很少用的。误差太大。

 

回归填补法

 

回归填补法的思路很简单,假定有糖化血红蛋白和体重两个变量,要填补糖化血红蛋白的缺失值,我们可以糖化血红蛋白作为因变量,建立体重对糖化血红蛋白的回归方程,然后根据体重的非缺失值,预测糖化血红蛋白的缺失值。

 

例如建立糖化血红蛋白对体重的回归方程为:

糖化血红蛋白 = 6.5 + 0.05*体重

 

对于该模型,如果已知体重值,不难估计出缺失的糖化血红蛋白。如体重为50,可以估计糖化血红蛋白为6.5+0.05*50=9。

 

回归填补法听起来很简单,也有一定的理论依据。比均值填补要可靠,因为它考虑到了其它因素的影响。但这种方法有一个问题:容易低估标准误,高估检验统计量

 

原因很容易理解,由于糖化血红蛋白的一部分值是根据体重估计而来,也就是说,这几个值与体重是完全的直线关系(因为是通过直线回归估计的)。在原来的数据中,尽管我们建立线性方程,但几乎没有点恰好位于直线上,总会有一定的偏离,也就是残差。而现在所有的缺失值估计都位于直线上,那就必然导致误差减少,从而标准误变低。

 

本文先介绍这几种比较简单的缺失值填补方式,剩下的比较复杂的,留待后面再详细介绍。

描述问题
选择一个标签 (请选择一个与您问题最相符的标签)
提交问题
我要提问
描述问题
选择一个标签 (请选择一个与您问题最相符的标签)
提交问题
描述问题
选择一个标签 (请选择一个与您问题最相符的标签)
    提交问题