R中的老鼠:为什么被动插补结果会受到列位置的影响?
我最近第一次开始使用软件包R中的老鼠:为什么被动插补结果会受到列位置的影响?,r,imputation,r-mice,R,Imputation,R Mice,我最近第一次开始使用软件包mices,并在不同的度量标准上得到了一系列的总分,我需要被动地进行插补 我尽可能地按照相关小插曲中的说明进行操作,但无论我做了什么,我通过mice估算的汇总列都没有达到预期值 经过数小时的实验,我意识到被动插补只有在求和列位于包含在求和中的列之后时才起作用 我将使用nhanes来说明 library(tidyverse) library(mice) >head(nhanes) age bmi hyp chl 1 1 NA NA NA 2
mices
,并在不同的度量标准上得到了一系列的总分,我需要被动地进行插补
我尽可能地按照相关小插曲中的说明进行操作,但无论我做了什么,我通过mice估算的汇总列都没有达到预期值
经过数小时的实验,我意识到被动插补只有在求和列位于包含在求和中的列之后时才起作用
我将使用nhanes来说明
library(tidyverse)
library(mice)
>head(nhanes)
age bmi hyp chl
1 1 NA NA NA
2 2 22.7 1 187
3 1 NA 1 187
4 3 NA NA NA
5 1 20.4 1 113
6 3 NA NA 184
现在,为了使检查是否有效变得简单,让我们通过添加hyp+col
来创建一个名为sum
的列:
nhanes_sum <- nhanes %>%
mutate(sum = hyp+chl)
> head(nhanes_sum)
age bmi hyp chl sum
1 1 NA NA NA NA
2 2 22.7 1 187 188
3 1 NA 1 187 188
4 3 NA NA NA NA
5 1 20.4 1 113 114
6 3 NA NA 184 NA
现在在第1行(原来是NA),sum
=230,即使hyp
=1和chl
=131。
为什么会发生这种情况
imp0 <- mice(nhanes_sum, maxit = 0)
meth <- imp0$method
pred <- imp0$pred
# set the method for sum
meth["sum"] <- "~I(hyp+chl)"
>meth
age bmi hyp chl sum
"" "pmm" "pmm" "pmm" "~I(hyp+chl)"
# use hyp and chl to impute sum
pred["sum", c("hyp", "chl")] <- 1
>pred
age bmi hyp chl sum
age 0 1 1 1 0
bmi 1 0 1 1 0
hyp 1 1 0 1 0
chl 1 1 1 0 0
sum 0 0 1 1 0
# run imputation with 1 iteration
imp <- mice(nhanes_sum, maxit = 1, meth = meth, pred = pred, seed = 2)
> head(complete(imp))
age bmi hyp chl sum
1 1 27.2 1 238 239
2 2 22.7 1 187 188
3 1 22.0 1 187 188
4 3 21.7 1 186 187
5 1 20.4 1 113 114
6 3 25.5 2 184 186
nhanes_sum2 <- nhanes_sum %>%
select(sum, everything())
> head(nhanes_sum2)
sum age bmi hyp chl
1 NA 1 NA NA NA
2 188 2 22.7 1 187
3 188 1 NA 1 187
4 NA 3 NA NA NA
5 114 1 20.4 1 113
6 NA 3 NA NA 184
# repeat same process as above:
imp0.2 <- mice(nhanes_sum2, maxit = 0)
meth2 <- imp0.2$method
pred2 <- imp0.2$pred
meth2["sum"] <- "~I(hyp+chl)"
> meth2
sum age bmi hyp chl
"~I(hyp+chl)" "" "pmm" "pmm" "pmm"
pred2["sum", c("hyp", "chl")] <- 1
> pred2
sum age bmi hyp chl
sum 0 0 0 1 1
age 0 0 1 1 1
bmi 0 1 0 1 1
hyp 0 1 1 0 1
chl 0 1 1 1 0
imp2 <- mice(nhanes_sum2, maxit = 1, meth = meth2, pred = pred2, seed = 2)
# check result
>head(complete(imp2))
sum age bmi hyp chl
1 230 1 27.2 1 131
2 188 2 22.7 1 187
3 188 1 20.4 1 187
4 189 3 20.4 1 184
5 114 1 20.4 1 113
6 185 3 22.7 1 184