【发布时间】:2014-10-16 09:23:37
【问题描述】:
在调用鼠标时指定“2l.norm”方法后,我偶然发现了仅包含 1 个 NA 的变量的错误消息。考虑到这些变量的缺失数据量非常少,我意识到这是一个非常小的问题。但是,将这些数据结构也考虑在内会很优雅。
我使用所有人都可以访问的数据库 ChickWeight 数据集重新创建了这种情况。 我非常清楚这个问题也可能是我在执行程序时出错的结果,所以如果是这种情况,请告诉我。
ChickWeight[1:20, ]
dim(ChickWeight)
sum(is.na(ChickWeight)) #contains no NAs
ChickWeight$weight[12] <- NA # add 1 NA
ChickWeight$constant <- 1 #add a constant
ChickWeight$Chick <- as.numeric(levels(ChickWeight$Chick)[ChickWeight$Chick]) #class variable has to be an integer
ini <- mice(ChickWeight, maxit = 0)
pred <- ini$predictorMatrix
pred["weight", ] <- c(0, 2, -2, 1, 2)
method <- ini$method
method["weight"] <- "2l.norm"
imputation <- mice(ChickWeight, m = 5, maxit = 5, pred = pred, method = method)
最后一条命令的结果是:
[<-.data.frame(*tmp*, , i, value = c(37.3233463394145, 159.862324738397) 中的错误:替换有 2 行,数据有 1
添加一个额外的 NA 即可解决问题
ChickWeight$weight[13] <- NA # add another NA
imputation <- mice(ChickWeight, m = 5, maxit = 5, pred = pred, method = method)
有谁知道可能导致错误的原因?
【问题讨论】:
-
在这种情况下,您可以同样使用
"2l.pan",这不会产生该错误。您不需要只有一个缺失值的异质组内方差。这两种方法在其他方面是等价的。很可能这甚至是问题...如果这解决了您的问题(我无法回答为什么"2l.norm"不会这样做),那么我会将其发布为答案。虽然我认为mice会自动添加拦截,但我看不出你的程序有缺陷,所以在我看来你不需要它。 -
感谢您的评论西蒙。它有一个很好的逻辑,不幸的是我没有看到。另外,我认为您对自动添加拦截是正确的。至于最终答案,我仍然倾向于暂时保持开放状态,以便对代码进行小的修复/调整(如果需要的话);然而,对我个人而言,它解决了我的问题
-
逻辑很简单,“2l.pan”还将在具有固定和随机效应的两级模型下执行 MI 拦截和预测变量。它基本上是实际
pan包的接口,它使pan以完全有条件的方式估算值(通过在变量之间迭代;最初pan使用联合模型),就像mice一样。如果你真的有这么少的缺失值,那么“2l.pan”就可以了。你不会“失去”太多,而且我个人在大多数情况下更喜欢 pan 模型。 -
再次感谢西蒙。我的意思是说在我阅读您的评论之前我没有看到它,但任何额外的解释总是受欢迎的。