我有一个数据集 (4,898 X 17,000),跟踪了 4898 位母亲、父亲和他们的孩子在 15 年的时间里。访谈在基线(孩子出生时)、第 1 年、第 3 年、第 5 年、第 9 年和第 15 年进行。我想使用随机森林从一组特征(性别、家庭收入、家庭教育、父母参与学习、父母期望、家庭结构、认知和非认知变量)预测 GPA(15 岁)。所有这些变量除了在第 15 年捕获的认知变量。在第 9 年捕获了认知变量。第 9 年丢失了大约 1300 个值,而第 15 年由于第 9 年和第 15 年的无响应而丢失了大约 1454 个值。我对插补很陌生,我不确定如何在这里使用多重插补(特别是当有超过 1000 行的所有列都缺少值时)。在这方面的任何帮助都会非常有帮助。
我可以删除丢失的数据吗?
如果您决定在分析之前“删除”缺失的数据,则称为“完整案例分析”(即,您只使用具有完整信息的数据点)。这是一种相当简单且常用的分析方法,但也存在一些风险。特别是,如果分析中的变量在统计上与“缺失”相关,那么忽略缺失的数据将导致您的推论出现偏差。
创建插补方法是为了尝试对缺失值和数据中的“缺失”之间的统计依赖性进行近似建模。在缺少整类数据点的情况下,可能是没有可用信息支持插补,在这种情况下,您可能不得不依靠完整案例分析,并在结论中提出适当的警告和谨慎。在任何情况下,缺失数据方法都需要大量学习才能正确实施,但在有足够信息来估计缺失数据值和“缺失”之间关系的各种问题中,插补方法比完整案例分析表现得更好指标。
如果您想了解有关缺失数据方法的更多信息,您可以在Pigott (2001)中找到简单的教育介绍,在Little and Rubin (2002)中找到更详细的说明。
重要的是要考虑导致数据丢失的机制。可能会发生三种缺失数据:
- 完全随机缺失 (MCAR)。这意味着条目丢失的概率是固定的,独立于其(未观察到的)值并且独立于其他变量。在这种情况下,删除不完整的数据是可以的,并且不会影响您的结果。但是,进行多重插补可能更有效,因为您不需要删除任何有价值的数据。它还取决于您的数据集丢失了多少(也许在进行完整的案例分析时您会丢失太多数据,或者丢失的数据太少以至于不值得进行估算)。
- 随机缺失(MAR)。这意味着条目丢失的概率取决于其他变量,而不是未观察到的值。在这种情况下,忽略缺失数据可能会使您的结果产生偏差,建议进行多重插补。
- 非随机缺失 (MNAR)。在这种情况下,缺失的概率确实取决于未观察到的值。一个极端的例子就是审查。在这种情况下,无论是插补还是完整的案例分析都无法消除偏见,这里也没有通用的解决方案。
如果您确定自己处于 MCAR 场景(不太可能)或丢失数据的比例很小,则可以进行完整的案例分析。否则,您应该尝试插补。如果您处于 MNAR 情况,您可能需要重新考虑您的数据集是否可以以公正的方式回答您提出的问题。
我认为多重插补可能仍然适用于完全缺失的行(至少基于贝叶斯模型的插补会起作用,我不确定其他方法),但这些行根本没有信息,所以我认为无论如何删除它们是安全的。
如果我正确地阅读了您的问题,您的数据集的结构可能会使这变得更加困难。远离更高的统计数据(在其他答案中涵盖)并且仅在基本调查/研究设计领域中,您可能有三种受访者:
- Non Responders -在调查中的任何时候都没有回应的人
- 部分响应者 - 对某些年份做出响应的人,但不是全部
- 完成 -每年在调查中做出回应的人
每个小组都有一些关于他们的数据,希望是可用的,甚至是非响应者。有时,在调查中,您有来自样本框架的数据,用于抽取样本的数据,其中通常包含一些人口统计信息,以便您可以抽取平衡的样本。无论他们是否回应,这些信息都是可用的。仅当样本是从已知人群中抽取时,这才是正确的——如果它是通过随机数字拨号抽取的,则不然。在这种情况下,您可能没有关于非响应者的信息,但您也可能不会在数据文件中包含它们。
部分响应者,即对第一轮调查做出响应但后来离开(或错过一年但后来回来)的人,当然会有更多可用信息。
无论哪种方式,您都需要一个受访者级别的数据集,其中包含您拥有的关于这些受访者的所有初始人口统计数据,无论他们是未响应者、部分响应者还是完成者。听起来您的数据没有以这种方式组织 - 所以,重新组织它!这不必附加到每年的数据行 - 它可以是一个单独的数据集。
然后,您使用此基线人口统计信息进行任何估算或加权。第一年对人口统计问题的回答将用于估算后来几年的变量,包括他们的人口变量。您还可以设计一个更复杂的模型,逐年滚动 - 出生预测 1,1 预测 3,3 预测 5,依此类推。那可能会更好,但我不知道你的数据,也不知道你设计这样的模型的技能水平;我经常会在更简单的方面犯错,因为我更有可能做对了!
我不是插补方面的专家,所以我不会谈论具体的选择 - 但希望这能让你知道从哪里开始,然后你可以使用这些其他很好的答案之一来解决你的插补/删除/等等 问题。
使用基于树的模型删除丢失的数据并不是一个好主意(如果要删除至少有一个丢失数据的行),最好在拆分节点时忽略丢失的数据决策树,因为这个模型只会忽略缺失值,而不是忽略整个实例(因为你有很多列,所以可能有很多非缺失值)