数据分析中的数据缺失问题

发布时间 2023-09-17 15:42:40作者: Lucky_Glass

本文是对《A Review of Methods for Missing Data》的学习笔记,部分观点和定义收集自其他地方。有一些术语对不上号,就直接用英文了……

简要

一些建模方法是基于数据的,而数据表单可能存在缺失项(尤其是社会调查类),此时主要的处理方法包括complete case analysis, available case analysis, single value imputation, maximum likelihood for multivariate normal data, 和 multiple imputation。

但是这些方法或多或少有一些前提条件,即使满足统计上的前提条件,在实际操作中也可能不适用。本文将阐释其中的一些概念,以及具体分析各种方法合适的应用场景。我们将重点关注缺失数据的规模,它们与完整观测的数据的在分布上的关系,以及数据缺失的原因

数据缺失的类型

首先明确本文中出现的一些描述的含义:

  • 变量,是指某个统计量,既有自变量也有因变量;
  • 数据,是指某个变量的统计数值,我们说的“缺失”是针对数据来说的;
  • 样本,包含若干数据。

如果一个变量在所有样本中的数据都没有缺失,则这个变量没有数据缺失。如果一个样本的所有变量的数据都没有缺失,则这个样本没有数据缺失。

基于数据缺失的原因,我们对有缺失数据的变量进行分类,此处给出一些通俗的定义:

  • MCAR(missing completely at random),顾名思义,该变量发生数据缺失是完全随机的,缺失的原因与所有数据无关;或者说,对于任意两个样本,它们该项数据缺失的可能性一样。比较有用的等价说法是,没有数据缺失的样本是在样本空间中的随机采样。比如说被试者抛硬币决定他们是否填写这一数据,这与所有被调查的数据无关。
  • MAR(missing at random),此处的 "random" 是对于该变量来说的,该数据是否缺失与该数据本身的值无关,但是与其他数据有关;或者说,任意取两个除了该变量以外,其他没有数据缺失的变量取值完全一样的两个样本,它们的该项数据缺失的可能性一样。比方说某个变量与被试者的年龄有关,年龄越大,发生缺失的可能性越大,但是对于年龄相同的人来说,它们缺失的可能性是相同的,并不与它们原本的值有关。
  • MNAR(missing not at random),数据发生缺失的可能性与该数据原本的值有关。比如说高收入人群可能不愿意透露自己的收入,如果我们只调查收入,那么该项缺失的概率与它原本的值有关,收入越高,收入这一项缺失的可能性越高。

我们可以想到 MNAR 是最难处理的情况,我们缺失的值与它本身有关,这样我们既不能直接去除样本(这样会导致样本集的分布发生变化),也很难用预测算法去补充缺失的值。

至于如何判断变量的数据缺失是什么类型,一种是直观的,比如说某个变量从现实意义上就与其他没有数据缺失的变量无关,那么它自然是 MNAR;并且,我们可以假设该变量符合 MNAR 情况,然后对该样本空间计算似然(Little's MCAR Test)。MAR 是相当难判断的。MNAR 是最难处理,但普适性也最强的情况,对于这种情况我们会将数据的缺失机制进行建模,但这些方法在本文中不会涉及,因此在确认变量不是 MCAR 时,我们往往直接用 MNAR 的处理方法。

数据分析方法

常用的方法分为两类,一类是不考虑数据结构的,包括 complete case analysis, available case analysis 和 single-value imputation;另一类是基于对数据分布的建模的,包括最大似然和多重插补。

下面我们会逐个分析这五种方法,其中有一些是不建议使用的,下文将会阐明其原因,而另一些则在某些情况下适合。

常规方法

Complete case analysis

一种非常暴力的方法,直接删去有数据缺失的样本。使用这种方法需要作出数据缺失符合 MCAR 的假设,否则样本空间的分布会发生变化,导致结果的偏差。此外,这种方法也只适用于数据缺失量小的情况下。一方面,数据缺少量小时,我们可以认为删除极小部分样本对样本空间分布影响不大,另一方面,我们仍然有足够的数据用于分析。

Available case analysis

类似于 complete case analysis 的忽视数据缺失样本的方法,当我们计算只与某几个变量相关的统计量时,我们只关注这几个变量是否缺失。如果我们关注的变量的数据缺失了,那么舍弃这个样本,而其他变量的数据是否缺失我们并不关心。

如果这些变量的缺失都是 MCAR 的话,这个统计量并不会有什么问题(注意如果是 MAR 也有问题,会导致整个样本空间的分布变化)。但是如果我们同时要计算多个统计量,比如说计算 \(X, Y\) 的协方差,用 \(S_X, S_Y\) 分别表示样本中 \(X, Y\) 未缺失的子集

\[C(X,Y)=\frac{\sum_{i\in S_X\cap S_Y}(x_i-\bar{x})(y_i-\bar{y})}{|S_X\cap S_Y|} \]

而我们的 \(\bar{x}, \bar{y}\) 是分别在 \(S_X, S_Y\) 上计算的,假设并不能保证 \(S_X\cap S_Y\)\(S_X, S_Y\) 的分布相同,那么这样计算就有偏差,甚至于计算出不符合统计量的实际意义的值(比方说计算 correlation 计算出绝对值大于 \(1\) 的值)。

有论文表明在研究多变量统计量时,如果变量间存在强相关性,available case analysis 不如 complete case analysis。

Single-value imputation

除了直接扔掉有数据缺失的样本,我们还可以尝试填补缺失的数据。Single-value imputation 指的是只看单变量进行填补,并不考虑它和其他变量的关系,而一般来说我们采用均值填补。

我们从一些基本的统计量分析这样填补造成的影响。由于填入的数是原本未缺失的数据的均值,所以变量的均值和填补前一样;填入均值不会贡献到方差的分子,但是会增加分母(增大样本量),所以方差会减小。

这样的填补的问题自然是很明显的:首先,未缺失数据的均值未必是真实数据的均值;其次,填入过后方差必然减少,如果填入量较大的话,很有可能得到一个相当小的方差,无法反映自然数据中的不确定性。此外,如果变量的实际意义重要,那么直接填入均值并不能提供有效信息。

实际上,在任何情况下都不建议使用均值填补!

基于对数据分布建模的方法

上文的三种方法都没有考虑整个数据集的变量结构——单个变量自身的分布和变量间的关系,也即所有变量的联合分布。如果我们对这一结构作出假设,进行建模,那么我们可以更好地估计缺失数据的值。而我们对联合分布的形式的假设为多元正态分布,这一假设是经验性的,并且在许多机器学习领域的例子表明正态分布的容错率很高。

当然,多元正态分布也有缺点——无法处理分类变量。如果分类变量的类别较少(比如性别),那么直接把类别编号强行拟合正态分布的效果往往很差。而通常的处理方法就是只考虑相同分类的样本(在给定分类中,样本集仍然是多元正态分布)。这就要求所有的分类变量都已知

但是我们并不打算对数据的缺失机制进行建模,于是在多元正态分布的假设上再加一条假设,数据缺失符合 MCAR 或 MAR,这是依据已知数据预测缺失数据的基础。(实际上由于 MAR 很难验证,MCAR 又很难满足,我们往往直接这样假设。经验表明,造成的偏差不会太大。)

最大似然法

在这里,我们并不打算真的填补缺失的数据,而是从high-level的角度直接得到对所有变量的联合分布的估计,按论文的说法,我们要估计样本空间的充分统计量。在我们的假设(多元正态分布)下,就是估计均值、协方差矩阵。当我们求得了这个分布,我们可以直接从这个分布中获取所需的统计量,或者进行回归等计算。

我们认为变量本身有客观存在的分布,而我们现在要求出这个分布,使得其在被观测到的数据(没有缺失的数据)上的似然最大——这一原理是说得通的。直接列出似然对于均值、协方差均值的函数是非常复杂的,我们采用 EM 算法来求解这个最大似然问题。具体地:

  • E步:基于上一次获得的分布(均值和协方差,如果是第一次,则初始化均值和协方差矩阵,具体策略不展开),对每一个样本的缺失数据的分布进行估计。这是一个条件分布,也即给定未缺失的数据的条件下,缺失数据的分布仍然是多元高斯分布。也可以理解为这个分布就是我们对缺失数据的填补。
  • M步:根据我们对缺失数据的分布的估计,重新计算均值和协方差矩阵的期望。这里直接取期望实际上是最大化似然的结果。

论文 Maximum Likelihood from Incomplete Data via the EM Algorithm 中证明了 EM 算法在这一问题上的收敛性。

需要注意的是,作为一种迭代算法,EM 算法可能会收敛到局部最优,不过就像神经网络的梯度下降法,这里的局部最优往往问题也不大。此外,EM算法收敛可能比较慢。

多重插补

这个部分可能会在之后进行补充关于 Data augmentation 的具体实现。

多重插补相较于最大似然法的区别主要是:最大似然法目标是估计充分统计量,而多重插补则直接获取缺失数据的估计值。但是我们不会只取一个估计值填入缺失数据,一般会生成三个(或者更多)平行的数据集,我们在这些数据集上做平行的计算,最后统一结果。

具体地,多重插补分为两步。第一步即数据填补获得多个平行数据集。我们用 Bayesian Theory 推导变量的联合分布,进而计算缺失的数据在给定已知数据的后验分布。数据的填补就是从这个后验分布中抽样获得的。第二步则是在数据集上进行平行的计算。其中第二步相当于在完整的数据上进行运算,主要难度在于第一步如何推导缺失的数据的后验分布。我们采用另外一种迭代方法——data augmentation,具体实现不展开。

如果缺失的数据量较多,我们可能需要数千次迭代。


THE END