带缺失值的分类数据降维
我有一个回归模型,里面的因变量是连续的,但有90%的自变量是分类的(有序和无序的都有),而且大约30%的记录有缺失值(更糟的是,这些缺失值是随机的,没有任何规律,也就是说,超过45%的数据至少有一个缺失值)。由于没有现成的理论来选择模型的具体形式,所以在进行回归之前,减少维度是一个关键任务。虽然我知道一些针对连续变量的维度减少方法,但对于分类数据的相关统计文献我就不太了解了(也许只有在对应分析中提到过,这基本上是频率表上的主成分分析的一种变体)。另外,我的数据集规模适中,有50万条记录和200个变量。我有两个问题。
- 有没有好的统计参考资料,专门讲解分类数据的维度减少和稳健的缺失值填补(我觉得第一个问题是填补缺失值,然后再进行维度减少)?
- 这个问题与上述问题的实现有关。我之前广泛使用过R语言,通常会大量使用transcan和impute函数来处理连续变量,并且用一种树的方法来填补分类值。我对Python有一定的了解,所以如果有合适的工具可以用来解决这个问题,我会考虑使用。关于在Python或R中的实现建议会非常有帮助。谢谢。
2 个回答
你说有45%的数据至少有一个缺失值,这个比例挺高的。首先,我会看看这些缺失值有没有什么规律。你提到它们是随机缺失的,那你有没有测试过“随机缺失”的情况?还有,针对不同的小组你有没有做过类似的测试?
因为我不了解你的数据,我会先看看有没有一些缺失值特别多的情况,然后考虑是否有理论或实际的原因可以把这些情况排除掉。实际原因可能跟数据的产生有关,比如数据的收集不够全面,机器在工作时可能没有一直开着,调查可能没有覆盖到所有国家等等。举个例子,你有关于当前职业的调查数据,但部分受访者已经退休了,所以他们的数据肯定是缺失的。你不能用某个计算出来的值来替代这些缺失的数据。
也许你可以从那些数据完整的案例中切出一些片段,看看数据产生的条件是什么。
关于分类数据的填补,我建议你看看 mice 这个包。还有这个 演示文稿,它解释了如何填补多变量的分类数据。另一个用于处理不完整多变量数据的多重填补包是 Amelia。Amelia 对有序和名义变量的处理能力有限。
至于对分类数据进行降维(也就是把变量整理成同类的组),我建议使用 多重对应分析(MCA) 方法,这样可以得到最大化组内同质性的潜在变量。这个方法和主成分分析(PCA)以及因子分析类似,MCA 的结果也可以旋转,以简化成分。旋转的想法是找到与旋转后的成分更清晰对应的变量子集。这意味着,最大化成分的简单性有助于因子的解释和变量的聚类。在 R 语言中,MCA 方法包含在 ade4、MASS、FactoMineR 和 ca 等包中。对于 FactoMineR,你可以通过图形界面使用它,只需将其作为额外菜单添加到 Rcmdr 包中已有的菜单中,安装 RcmdrPlugin.FactoMineR 即可。