R中丢失数据的完整信息最大可能性


19

上下文:具有某些缺失数据的层次回归。

问题:如何使用完整信息最大似然(FIML)估计来解决R中的丢失数据?有没有推荐的软件包,典型的步骤是什么?在线资源和示例也将非常有帮助。

PS:我是一名社会科学家,最近刚开始使用R。可以选择多重插补,但是我非常喜欢Mplus之类的程序如何使用FIML优雅地处理丢失的数据。不幸的是,Mplus目前似乎没有在层次回归的情况下比较模型(请告诉我您是否知道这样做的方法!)。我想知道R中是否有类似的东西?非常感谢!


1
您考虑过WinBugs吗?它以一种非常自然的方式处理丢失的数据。
Mike Dunlavey

WinBUGS的替代方法是OpenBUGS或STAN。这些应该对Mac更友好。
Maxim.K 2014年

Answers:


16

这个答案幸得@Joshua当我张贴了这个问题向谁给了一个真棒答案R和统计界在Google+上。我只是在下面粘贴他的答案。

要进行回归分析(没有潜在变量建模),请阅读我在引文后面键入的注释。

在所有可用数据上以最大可能性处理丢失的数据(所谓的FIML)是一种非常有用的技术。但是,有许多复杂性使得以通用方式实施具有挑战性。考虑一个简单的线性回归模型,该模型根据年龄,性别和职业类型预测一些连续结果。在OLS中,您不必担心年龄,性别和职业的分布,而只担心结果。通常,对于类别预测变量,它们是伪编码(0/1)。要使用ML,需要对所有缺失的变量进行分布假设。到目前为止,最简单的方法是多元正态(MVN)。例如,如果您不自行声明变量类型(例如,分类变量),Mplus将默认执行此操作。在我给出的简单示例中,您可能要假设年龄正常,伯努利性别,工作类型是多项式。后者很棘手,因为您实际拥有的是几个二进制变量,但是您不想将它们视为Bernoulli。这意味着您不想使用伪编码变量,需要使用实际的分类变量,以便ML估计量可以正确使用多项式,但这又意味着需要在模型中构建伪编码过程,而不是数据。再次使生活复杂化。此外,连续变量和分类变量的联合分布对于计算而言并非无关紧要(当我在Mplus中遇到类似问题时,它很快就会开始崩溃和挣扎)。最后,您确实可以理想地指定丢失的数据机制。以SEM样式FIML,所有变量基本上都以其他变量为条件,但这不一定是正确的。例如,年龄的缺失可能不是性别和职业类型的函数,而是性别之间的相互作用。交互作用对于焦点结果可能并不重要,但是如果对于年龄的缺失很重要,则它也必须存在于模型中,不一定是关注的实质模型,而是缺失的数据模型。

lavaan将ML用于MVN,但目前我认为分类数据选项是有限的(同样来自SEM领域,这是标准)。起初,多重插补似乎不太优雅,因为它在FIML背后做出了许多隐含的假设(例如,每个变量的分布假设和每个变量缺失的预测模型)。但是,它为您提供了很多控制权,并明确地考虑了每个变量的分布,并且每个变量的最佳缺失数据机制都很有价值。

我越来越相信贝叶斯模型是处理丢失数据的方法。原因是它们在包含每个变量的分布时非常灵活,允许使用多种不同类型的分布,并且可以轻松地将预测变量缺失数据引入的可变性纳入整体模型估算中(这是使用多重估算的技巧然后必须以某种方式组合结果)。当然,这些方法不是最简单的,并且可能需要大量的培训和时间才能使用。

因此,这并不能真正回答您的问题,而是说明了为什么处理缺失的完全通用框架很棘手。在用于协方差矩阵的semutils程序包中,我在下面使用lavaan来使用ML。之所以这样做,是因为我假设对于方差协方差矩阵,无论如何您都在使用连续变量,因此我假设我的用户已经为他们的数据假设了MVN。

这意味着,如果所有带有缺失项的变量都是连续的,lavaan,则结构方程模型(SEM)包是在R中用于FIML的不错的选择。

现在回到我最初的问题。我的意图是对运行线性回归时的缺失进行魔术修复。我所有缺少的变量都很好并且持续不断。因此,我以两种方式进行分析:

  • 多重插补的通常方式
  • 使用FIML以lavaan制成SEM样式。

通过以SEM风格进行回归,我错过了很多东西。两种样式都给出相似的系数和R平方,但是在SEM样式中,我没有进行回归的显着性检验(典型的F值和df),相反,我得到的拟合指数无用,因为我用完了我所有的学位自由。同样,当一个模型的R2比另一个模型大时,我找不到一种方法来比较差异是否显着。此外,以通常的方式进行回归可以访问大量的回归假设测试,这些假设非常宝贵。有关此问题的更详细答案,请参阅@StasK很好地回答了我的另一个问题

因此,结论似乎是,lavaan是R中FIML的一个不错的包装,但FIML的使用取决于统计假设和进行的分析类型。就回归(没有潜在变量建模)而言,将其排除在SEM程序之外,并使用多重插补可能是明智之举。



-3

有两种处理丢失的数据/记录的主要方法。U要么删除具有缺失值的整个观察值行,要么找到一种生成该缺失值的方法。如果您采用第一种方法,那么您可能最终会丢失大量数据。在第二种方法中,您必须找到一种“巧妙”的方式来生成此丢失的数据,以使新数据集的参数估计与观察到的数据集的参数估计相差无几。

第二种方法称为数据插补,有多个R软件包可以执行此操作。其中之一称为mclust,而您需要的功能称为imputeData。该功能使用EM(期望最大化)算法来估计给定观察部分的数据集未观察部分的参数。找到参数后,将生成新的数据点。缺失数据,观测数据和整个数据集的分布假设被假定为高斯分布。

希望这种解释可以帮助您实现您想要做的事情


谢谢。我知道用于多重插值的包,但想了解是否存在相对简单的方法来进行最大似然估计。
Sootica

当缺少样本x时,未定义似然函数。所以我认为您可能正在寻找不存在的东西。
拉拉斯

2
有关使用最大似然方法处理缺失数据的说明,请参见本白皮书(Allison,2012年)。OP描述的内容存在。
安迪W

2
这是SAS的一些相关信息。 support.sas.com/documentation/cdl/zh-CN/statug/63347/HTML/default / ...在R中我从未见过任何东西。
杰里米万里

谢谢@JeremyMiles,我刚刚发布了对回答这个问题有帮助的内容,以为其他人也可能会觉得有用。PS。您与安迪·菲尔德(Andy Field)撰写的R书太棒了!!:D
Sootica
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.