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