我遇到使用鼠标功能进行多次插补的问题。我只想对部分丢失的数据进行估算,看看帮助似乎是可能的并且是直接的。但我无法让它发挥作用。 这是一个例子:
我在x和y上有一些缺失的数据:
library(mice)
plouf <- data.frame(ID = rep(LETTERS[1:10],each = 10), x = sample(10,100,replace = T), y = sample(10,100,replace = T))
plouf[sample(100,10),c("x","y")] <- NA
我只想在y上隐瞒丢失的数据:
where <- data.frame(ID = rep(FALSE,100),x = rep(FALSE,100),y = is.na(plouf$y))
我做了插补
plouf.imp <- mice(plouf, m = 1,method="pmm",maxit=5,where = where)
我看一下估算值:
test <- complete(plouf.imp)
我在这里仍然有NAs:
> sum(is.na(test$y))
[1] 10
如果我在哪里说要对所有价值进行估算,那就有效:
where <- data.frame(ID = rep(FALSE,100),x = is.na(plouf$x),y = is.na(plouf$y))
plouf.imp <- mice(plouf, m = 1,method="pmm",maxit=5,where = where)
test <- complete(plouf.imp)
> sum(is.na(test$y))
[1] 0
但它也对x进行了估算,我不想在这个特定情况下(统计模拟研究中的速度原因)
有人有任何想法吗?
答案 0 :(得分:1)
这是因为下面的代码 -
plouf[sample(100,10),c("x","y")] <- NA
让我们考虑您的第一种情况,即您只想归咎于y
。检查PredictorMatrix
plouf.imp <- mice(plouf, m = 1, method="pmm", maxit=5, where = whr)
plouf.imp
#PredictorMatrix:
# ID x y
#ID 0 0 0
#x 0 0 0
#y 1 1 0
它表示y
的缺失值将根据ID
&amp; x
因为它在y行中的值为1。
现在检查您在x
&amp;中填写NA的样本数据。 y
列。您可以注意到y
NA x
的任何地方也具有相同的NA值。
所以会发生的情况是,当mice
在PredictorMatrix
列中引用y
进行估算时,它会在x
中遇到NA并将这些行视为所有独立变量(即{{ 1}}&amp; ID
)预计不会丢失,以便预测结果,即x
中缺少值。
试试这个 -
y
这里只留下library(mice)
#sample data
set.seed(123)
plouf <- data.frame(ID = rep(LETTERS[1:10],each = 10), x = sample(10,100,replace = T), y = sample(10,100,replace = T))
plouf[sample(100,10), "x"] <- NA
set.seed(999)
plouf[sample(100,10), "y"] <- NA
#missing value imputation
whr <- data.frame(ID = rep(FALSE,100), x = rep(FALSE,100), y = is.na(plouf$y))
plouf.imp <- mice(plouf, m = 1, method="pmm", maxit=5, where = whr)
test <- complete(plouf.imp)
sum(is.na(test$y))
#[1] 1
的一个值,在这种情况下,y
和{ x
具有NA值,即第39行(与第一种情况类似)。