【问题标题】:Imputation based on factor level基于因子水平的插补
【发布时间】:2018-02-15 01:26:00
【问题描述】:

我正在尝试在以下数据帧上使用 MICE 执行插补。

marketValue <- c(NA, 234234, NA, 243243, NA, NA, 234523, NA, 232427, 112214)
bathrooms <- c(3,3,2,3,5,4,1,5,6,3)
garageSqFt <- c(400, 385, 454, 534, 210, NA, 342, 423, 535, NA)
totalSqFT <- c(NA, NA, 1231, 2232, 4564, 2122, 4324, 4342, 1299, 4355)
units <- c(1, 1, 1, 1, 1, 1, 1.5, NA, 2, 5)
subDivId <- c("112", "111", "111", "111", "112", "111", "112", "112", "111", 
"112")
data <- data.frame(marketValue, bathrooms, garageSqFt, totalSqFT, units, 
subDivId)

在实际的数据框中,大约有 1300 个 subDivId 因子级别,我想创建新的数据框(每个数据框都有具有相同 subDivId 的行),然后在每个数据框中进行插补。我的尝试

splitSubDiv <- split(data, data$subDivId) 
for (neighborhood in splitSubDiv){
    testData <- mice(neighborhood, m=5, maxit = 5) 
    impData <- complete(testData, 5) 
    str(impData) }

这似乎不起作用。没有进行插补,事情仍然是 NA。我做错了什么?

【问题讨论】:

  • 您的预期结果是什么?简要说明如何到达那里

标签: r r-mice


【解决方案1】:

在您的尝试中,您没有将估算的数据框分配给对象,因此不会保留结果。

您可以使用 lapply 而不是 for 循环来尝试这种方法。您最终会得到一个估算数据框列表。

splitSubDivImp <- lapply(splitSubDiv, function(neighborhood) {
  testData <- mice(neighborhood, m = 5, maxit = 5) 
  impData <- complete(testData, 5)
})

splitSubDivImp

【讨论】:

  • 这将运行mice 五次,只使用最后一个插补并浪费其他 4 个。只运行testData &lt;- mice(...) 然后运行impData &lt;- lapply(1:5, function(i) complete(testData,i)) 会更有效。
猜你喜欢
  • 1970-01-01
  • 2014-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-07
相关资源
最近更新 更多