【问题标题】:Imputing based on specific columns基于特定列的插补
【发布时间】:2019-12-14 20:51:27
【问题描述】:

我即将对缺失值进行插补,我使用mice-package。我需要根据特定的列内容进行插补。所以基本上,我有 24 列用于测量 4 个潜在变量(使用 plspm-package)。我希望根据特定的专栏内容估算 N/A。因此,对于第 1-6 列,我希望仅根据这 6 列中的内容来估算那些特定列中的 NA。(对于第 7-12、13-18 和 19-24 列,依此类推)。

我希望这对你们有意义。

我的数据结构是:

p1  p2  p3  p4  p5  p6  l1  l2  l3  l4  l5  l6
4   3   5   4   5   N/A 2   1   4   5   1   N/A
4   4   1   3   1   2   1   1   1   1   1   1
5   4   5   4   4   4   4   4   5   5   4   4
5   4   5   5   4   5   4   4   N/A 5   4   4
5   5   5   5   5   5   3   2   5   5   2   2
4   3   4   3   3   3   3   2   3   4   3   2
5   4   5   5   3   4   4   1   5   5   5   4
5   5   5   5   5   5   5   3   4   5   3   4
4   4   4   4   3   N/A 4   4   5   4   3   3
5   4   4   4   3   2   1   3   2   5   1   1
4   4   4   4   5   5   3   4   5   5   3   3
4   3   2   N/A 1   2   N/A 1   2   N/A 1   N/A
3   3   4   4   3   2   1   3   3   3   1   3
5   3   4   4   4   2   3   4   4   4   3   3
4   4   4   5   2   2   2   2   2   2   3   3
5   4   4   4   4   4   4   4   5   5   4   3
4   3   3   3   5   2   2   2   4   4   1   1
5   4   5   4   5   3   1   1   5   5   2   3
4   3   1   3   4   4   2   1   4   3   2   3
4   3   1   4   3   1   2   1   4   4   3   2
3   3   5   4   5   1   2   2   4   5   3   2
4   4   5   3   5   5   2   2   3   4   2   3
4   4   2   3   2   3   2   2   3   4   2   2
5   5   5   5   5   5   4   3   3   3   3   3
5   5   5   5   5   4   4   N/A 5   5   N/A N/A

所以我猜它本质上是将数据分成 4 个块,然后进行插补。我在 help(mice) 中阅读了有关 blocks() 函数的信息,但我不确定我是否可以将它实际用于此特定任务。

到目前为止我一直在使用的代码是:

temp_pmm <- mice(data_predict,
                  m = 3,
                  maxit = 10,
                  method = "pmm", 
                  seed = 2374)

但我理解包的方式是基于整行内容进行估算(因此我的潜在变量构造重叠,我试图减轻这种情况)。

希望你能帮助我,我很感激任何帮助。 提前致谢!

托比亚斯

【问题讨论】:

  • 抱歉,忘记跟进了:我在stackoverflow.com/questions/30637522/… 查了一个类似的问题——但这种方法的问题在于它本质上是基于行的(而不是基于列的)。
  • 你为什么不简单地为每个列块运行单独的插补。例如,mice(data_predict[,c(1:6)],... mice(data_predict[,c(7:12)],... ?

标签: r imputation


【解决方案1】:

因此,Dominix 建议简单地运行单独的插补似乎是正确的方法。非常感谢!

对于任何将来的参考,这是我的工作方式:

test_pmm_firstv <- mice(data_predict[,c(1:6)],
                      m = 10,
                      maxit = 20,
                      method = "pmm",
                      seed = 127493)

test_pmm_secondv <- mice(data_predict[,c(7:12)],
                      m = 10,
                      maxit = 20,
                      method = "pmm",
                      seed = 1239754111)

test_pmm_thirdv <- mice(data_predict[,c(13:18)],
                      m = 10,
                      maxit = 20,
                      method = "pmm",
                      seed = 1238603)

test_pmm_fourthv <- mice(data_predict[,c(19:24)],
                      m = 10,
                      maxit = 20,
                      method = "pmm",
                      seed = 356811)

data_pmm_firstv <- mice::complete(test_pmm_firstv, 1)
data_pmm_secondv <- mice::complete(test_pmm_secondv, 1)
data_pmm_thirdv <- mice::complete(test_pmm_thirdv, 1)
data_pmm_fourthv <- mice::complete(test_pmm_fourthv, 1)

data_fixed <- as.data.frame(cbind(data_pmm_firstv, data_pmm_secondv, data_pmm_thirdv, data_pmm_fourthv))

anyNA(data_fixed)
[1] FALSE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    • 2018-07-07
    • 2018-01-14
    相关资源
    最近更新 更多