小鼠:使用 where 参数失败的部分插补
Mice: partial imputation using where argument failing
我在使用 mice 函数进行多重插补时遇到问题。我只想对部分缺失数据进行插补,查看帮助似乎是可能且直接的。但我无法让它工作。
这是示例:
我在 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)
这里我在 y 上还有 NA:
> sum(is.na(test$y))
[1] 10
如果我使用 where to say 来估算所有值,它会起作用:
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 进行插补,我不希望在这种特定情况下(统计模拟研究中的速度原因)
有人知道吗?
发生这种情况是因为以下代码 -
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
和 x
进行预测,因为它的值在第 y 行中为 1。
现在检查您在 x
和 y
列中填充 NA 的样本数据。您会注意到 y
为 NA 的任何地方 x
也具有相同的 NA 值。
所以发生的事情是,当 mice
在 y
列中引用 PredictorMatrix
进行插补时,它在 x
中遇到 NA 并忽略这些行作为所有自变量(即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
和 y
都具有 NA 值,即第 39 行(类似于您的第一个案例).
我在使用 mice 函数进行多重插补时遇到问题。我只想对部分缺失数据进行插补,查看帮助似乎是可能且直接的。但我无法让它工作。 这是示例:
我在 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)
这里我在 y 上还有 NA:
> sum(is.na(test$y))
[1] 10
如果我使用 where to say 来估算所有值,它会起作用:
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 进行插补,我不希望在这种特定情况下(统计模拟研究中的速度原因)
有人知道吗?
发生这种情况是因为以下代码 -
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
和 x
进行预测,因为它的值在第 y 行中为 1。
现在检查您在 x
和 y
列中填充 NA 的样本数据。您会注意到 y
为 NA 的任何地方 x
也具有相同的 NA 值。
所以发生的事情是,当 mice
在 y
列中引用 PredictorMatrix
进行插补时,它在 x
中遇到 NA 并忽略这些行作为所有自变量(即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
和 y
都具有 NA 值,即第 39 行(类似于您的第一个案例).