我有大量的特征向量,可以用来解决二进制分类问题(在Python中使用scikit learning)。在开始考虑归因之前,我有兴趣尝试从数据的其余部分确定丢失的数据是“随机丢失”还是不是随机丢失。
解决这个问题的明智方法是什么?
事实证明,更好的问题是询问数据是否“完全随机丢失”。什么是明智的做法?
我有大量的特征向量,可以用来解决二进制分类问题(在Python中使用scikit learning)。在开始考虑归因之前,我有兴趣尝试从数据的其余部分确定丢失的数据是“随机丢失”还是不是随机丢失。
解决这个问题的明智方法是什么?
事实证明,更好的问题是询问数据是否“完全随机丢失”。什么是明智的做法?
Answers:
我在评论中找到了我正在谈论的信息。
在范布伦斯的书第31页中,他写道
“已经提出了几种测试来测试MCAR与MAR的测试。这些测试并未广泛使用,其实际价值还不清楚。有关两种程序的评估,请参阅Enders(2010,pp。17-21)。无法进行测试MAR与MNAR的比较,因为缺少此类测试所需的信息。”
除非您设法检索丢失的数据,否则这是不可能的。您无法从观察到的数据中确定丢失的数据是随机(MAR)还是随机(MNAR)。您只能判断数据是否明显没有完全随机丢失(MCAR)。除此之外,仅根据您所了解的信息(例如,报告的数据丢失原因),才可以使MCAR或MAR相对于MNAR更具真实性。另外,您可能会认为这没什么大不了的,因为丢失的数据所占的比例很小,在MNAR下,极有可能发生极端情况以使结果被推翻(请参阅“临界点分析”)。
您想知道要素中缺少的值与任何其他要素的值之间是否存在某种关联。
为每个功能创建一个新功能,以指示该值是否丢失(我们称它们为“ is_missing”功能)。计算is_missing特征和其余特征的最喜欢的相关度量(我建议在这里使用相互信息)。
请注意,如果您找不到两个要素之间的任何关联,则由于要素组的缘故,仍然可能存在关联(根据十个其他要素的XOR函数缺少值)。
如果您具有大量功能和大量值,由于随机性,您将得到错误的相关性。除了解决该问题的常规方法(验证集,足够高的阈值)以外,您还可以检查相关性是否对称且可传递。如果它们是正确的,则很可能是真实的,您应该进一步检查它们。
我使用的一种方法是阴影矩阵,其中的数据集由指标变量组成,如果存在值,则给出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.