确定数据是否随机丢失的统计方法


21

我有大量的特征向量,可以用来解决二进制分类问题(在Python中使用scikit learning)。在开始考虑归因之前,我有兴趣尝试从数据的其余部分确定丢失的数据是“随机丢失”还是不是随机丢失。

解决这个问题的明智方法是什么?


事实证明,更好的问题是询问数据是否“完全随机丢失”。什么是明智的做法?


如果缺失的指标与任何观察到的变量之间没有关联,则缺失的数据机制为MCAR。
Randel

@Randel在实践中有什么好的测试方法可以对此进行测试?
伦比克2015年

没有什么比关联测试或回归特别的了。
Randel

3
这不是您要测试的东西,而是您假设的东西。
蒂姆

3
只是要清楚:完全随机丢失意味着丢失概率是一个常数,它不依赖任何东西。随机缺失意味着缺失取决于某些衡量的因素,例如年龄或性别,因此您可以使用某些模型来填充缺失模式。并非随机缺失意味着缺失取决于您衡量的事情。在问题中,OP 表示 NMAR与MAR,但OP 表示 MAR与MCAR。
AdamO '18年

Answers:


8

我在评论中找到了我正在谈论的信息。

范布伦斯的书第31页中,他写道

“已经提出了几种测试来测试MCAR与MAR的测试。这些测试并未广泛使用,其实际价值还不清楚。有关两种程序的评估,请参阅Enders(2010,pp。17-21)。无法进行测试MAR与MNAR的比较,因为缺少此类测试所需的信息。”


该问题询问有关MAR与MNAR的问题,但您的答案与MCAR与MAR有关。MCAR与MNAR完全不同。
蒂姆(Tim)

如果您可以确定数据为MAR,那么就足够了。正如Bjorn所说,无法确定是否是MAR / MNAR,但这是我相信他的问题的一个很好的代表。如果您要进行Enders测试并发现它是MCAR,则不需要插补。如果您发现它是MAR,则可以估算或仔细查看您的数据,以查看是否有理由认为它可能是MNAR。
RayVelcoro '17

@RayVelcoro这是一个可识别性的问题:NMAR数据可能会出现MCAR。蒂姆说对了,NMAR(或相反)不是我们要测试的东西,而是我们假设的东西。就您的MCAR vs MAR而言,更重要的是:如果数据是MCAR且您使用MAR方法,那么对数据真的有净影响吗?我不这么认为。考虑到MAR方法的渗透性,可用性和易用性,也许最好只使用非参数加权或插补过程,而不是进行大量的测试和测试。
AdamO '18年

17

除非您设法检索丢失的数据,否则这是不可能的。您无法从观察到的数据中确定丢失的数据是随机(MAR)还是随机(MNAR)。您只能判断数据是否明显没有完全随机丢失(MCAR)。除此之外,仅根据您所了解的信息(例如,报告的数据丢失原因),才可以使MCAR或MAR相对于MNAR更具真实性。另外,您可能会认为这没什么大不了的,因为丢失的数据所占的比例很小,在MNAR下,极有可能发生极端情况以使结果被推翻(请参阅“临界点分析”)。


1
非常感谢你。判断数据是否为MCAR的好方法是什么?
Lembik 2015年

@Björn,可能需要改写以上内容,以反映我们可以从数据中学到的基本不对称性。尽管可以伪造数据是MCAR的假设(即,通过建立利用观察到的协变量来解释缺失的某些部分的模型),但无法确认 MCAR或任何其他此类假设。
David C. Norris

好点子。我说得更清楚了。
比约恩2015年

4

从分类的角度来看,这听起来很可行。

您想使用所有其他功能对丢失数据和不丢失数据进行分类。如果您获得的结果明显好于随机结果,那么您的数据就不会随机丢失。


2

您想知道要素中缺少的值与任何其他要素的值之间是否存在某种关联。

为每个功能创建一个新功能,以指示该值是否丢失(我们称它们为“ is_missing”功能)。计算is_missing特征和其余特征的最喜欢的相关度量(我建议在这里使用相互信息)。

请注意,如果您找不到两个要素之间的任何关联,则由于要素组的缘故,仍然可能存在关联(根据十个其他要素的XOR函数缺少值)。

如果您具有大量功能和大量值,由于随机性,您将得到错误的相关性。除了解决该问题的常规方法(验证集,足够高的阈值)以外,您还可以检查相关性是否对称且可传递。如果它们是正确的,则很可能是真实的,您应该进一步检查它们。


1

我使用的一种方法是阴影矩阵,其中的数据集由指标变量组成,如果存在值,则给出1,否则给出0。将它们与原始数据相互关联可以帮助确定变量是否倾向于一起丢失(MAR)(MCAR)。使用R的一个例子(从书借“行动中R”由罗伯特·Kabacoff):

#Load dataset
data(sleep, package = "VIM")

x <- as.data.frame(abs(is.na(sleep)))

#Elements of x are 1 if a value in the sleep data is missing and 0 if non-missing.
head(sleep)
head(x)

#Extracting variables that have some missing values.
y <- x[which(sapply(x, sd) > 0)]
cor(y)

#We see that variables Dream and NonD tend to be missing together. To a lesser extent, this is also true with Sleep and NonD, as well as Sleep and Dream.

#Now, looking at the relationship between the presence of missing values in each variable and the observed values in other variables:
cor(sleep, y, use="pairwise.complete.obs")

#NonD is more likely to be missing as Exp, BodyWgt, and Gest increases, suggesting that the missingness for NonD is likely MAR rather than MCAR.

1
VIM中,您还可以检出Spinoplot。他们给出两个变量的直方图,每个变量都有缺失。我们可以绘制两个变量,并查看其中一个的缺失如何随另一个变化。例如,如果我们绘制生存时间和治疗分配图,如果我们看到缺失的正确偏斜分布,我们可以假定生存时间越短,缺失就越多……也就是说,治疗缺失是MAR,因为它取决于观察到可变的生存时间。
RayVelcoro

1
该问题询问有关MAR与MNAR的问题,但您的答案与MCAR与MAR有关。MCAR与MNAR完全不同。
蒂姆(Tim)

@Tim正如AdamO在问题下方的评论中所述,OP表示MAR vs MCAR。
Phil
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.