在进行小鼠插补并保存结果后,如何使缺失值保持不变?

Posted

技术标签:

【中文标题】在进行小鼠插补并保存结果后,如何使缺失值保持不变?【英文标题】:How do I keep my missing values to stay the same after I do mice imputation and save my results? 【发布时间】:2022-01-22 15:08:04 【问题描述】:

作为一个新的 R 用户,我无法理解为什么我的数据框中的 NA 值不断变化。我在 Kaggle 上运行我的代码。也许这就是我的问题所在?

Original dataframe titled "abc"

有多个列具有 NA 值,因此我决定尝试使用多重插补来处理 na 值。

所以我创建了一个新数据框,其中仅包含具有 na 值的列并开始插补 This is the new dataframe titled "abc1"

abc1 <- select(abc, c(9,10,15,16,17,18,19,25,26))

#mice imputation
input_data = abc1

my_imp = mice(input_data, m=5, method="pmm", maxit=20)

summary(input_data$m_0_9)
my_imp$imp$m_0_9

当插补开始时,它会创建 5 个包含新值的列,以填充 m_0_9 列的 NA 值,然后我选择哪一列。

Imputation of column 'm_0_9'

然后我运行这段代码:

final_clean_abc1 <- complete(my_imp,5)

这会将最后一张图像的第 5 列的值分配给我的“abc1”数据帧中的 NA 值,并保存为“final_clean_abc1”。

最后,我用“final_clean_abc1”中的新列替换原始“abc”数据框中缺失值的列。

我知道这可能不是最干净的:

abc$m_0_9 <- final_clean_abc1$m_0_9
abc$m_10_12 <- final_clean_abc1$m_10_12
abc$f_0_9 <- final_clean_abc1$f_0_9
abc$f_10_12 <- final_clean_abc1$f_10_12
abc$f_13_14 <- final_clean_abc1$f_13_14
abc$f_15 <- final_clean_abc1$f_15
abc$f_16 <- final_clean_abc1$f_16
abc$asian_pacific_islander <- final_clean_abc1$asian_pacific_islander
abc$american_indian <- final_clean_abc1$american_indian

现在我有一个没有缺失值的数据框“abc”,这就是我的问题出现的地方。我应该在 m_0_9 列的第 10 行看到“162”,但是当我保存我的代码并在 Kaggle 上查看它时,我得到该特定行和列的值“7”。如下图所示。

"abc" dataframe with no NA values

希望这是有道理的,我尽量做到具体。

【问题讨论】:

欢迎!请务必使用dput(your_data)dput(head(your_data)) 制作your example reproductible,而不是截图,其他人无法使用 首先,我希望您知道您使用鼠标的方式并不规范:多重插补意味着您同时使用多个插补,而不是只选择一个插补。这个想法是,几个插补之间的方差代表了您对缺失值的不确定性。你这样做的方式,就像你真的知道缺失值一样。无论如何,关于你的问题:我不知道 Kaggle 做了什么,但也许它会在保存/查看时重新运行你的代码,改变mice 使用的随机数。尝试在使用 mice() 之前设置种子,如下所示:set.seed(123) 【参考方案1】:

在小鼠中进行了多个随机过程来为一个目标值估算多个值,然后对其进行平均。每次运行鼠标时,您不应期望得到相同的结果。

来自 MICE 文档

在第一步中,具有缺失值的数据集(即 不完整的数据集)被复制了几次。然后在下一步中, 缺失值被替换为每个副本中的估算值 数据集。在每个副本中,由于估算值略有不同 为随机变化。这会产生多个估算数据集。在里面 第三步,对估算的数据集进行分析和研究 然后将结果汇总到最终的研究结果中。在这一章当中, 多重插补的第一阶段,即插补步骤,是 主题。在下一章中,分析和汇集阶段是 讨论过。

https://bookdown.org/mwheymans/bookmi/multiple-imputation.html

【讨论】:

【参考方案2】:

我们有一个wonderful series of vignettes,详细说明了mice 的使用。本系列的一部分是算法的随机性以及如何解决这个问题。设置mice(yourdata, seed = 123) 每次都会产生相同的多重插补。

【讨论】:

以上是关于在进行小鼠插补并保存结果后,如何使缺失值保持不变?的主要内容,如果未能解决你的问题,请参考以下文章

R语言高级方法进行缺失数据多重插补案例演示

多重插补为啥要汇总分析

python中的缺失值插补

如何处理插补没有意义的 NaN 值? (对于 PCA)

如何使MySQL前后端连接SESSION变量保持一致

r 用小鼠多次插补