R 如何在小鼠中执行多项目水平插补?

R 如何在小鼠中执行多项目水平插补?,r,imputation,r-mice,R,Imputation,R Mice,这是我第一次执行多重插补,我选择了R软件包MICE,因为它在处理不同类型的数据方面具有灵活性。我有一个包含100多个变量的非常大的数据集,所以我需要将模型限制在最重要的预测值上 我发现了以下关于如何为插补模型选择预测因子的建议,这些建议稍作修改以适合我下面的示例数据集,以下是原始来源: 假设数据由一个结果变量out、两个背景变量bck1和bck2、一个包含3项a1-a3的量表a、一个包含4项b1-b4的量表b组成,并且所有变量都包含缺失值。填写开始插补后,插补模型将采取以下步骤: 计算出给定的b

这是我第一次执行多重插补,我选择了R软件包MICE,因为它在处理不同类型的数据方面具有灵活性。我有一个包含100多个变量的非常大的数据集,所以我需要将模型限制在最重要的预测值上

我发现了以下关于如何为插补模型选择预测因子的建议,这些建议稍作修改以适合我下面的示例数据集,以下是原始来源:

假设数据由一个结果变量out、两个背景变量bck1和bck2、一个包含3项a1-a3的量表a、一个包含4项b1-b4的量表b组成,并且所有变量都包含缺失值。填写开始插补后,插补模型将采取以下步骤:

计算出给定的bck1、bck2、a、b,其中a和b是a1-a3和b1-b4的总分; 输入给出的bck1、bck2、a和b; 输入给出的bck2、bck1、a和b; 输入给出的a1、bck、b和a2-a3; 输入给出的a2,bck,b和a1,a3-a3; 按同样的方法输入a3; 估算给出的b1、bck、a和b2-b4,其中a是更新的汇总量表分数; 按照相同的方法输入b2-b4。 我根据上述描述创建了一个示例数据集:

> out<-c(45,433,234,435, 234,234,243,243,243,24,244,242, 453,234,689)
> a1<-c(1,4,2,1,4,4,2,5,7,3,2,5,2,2,2)
> a2<-c(4,3,4,3,2,1,3,4,2,3,4,5,6,6,7)
> a3<-c(2,2,1,3,4,2,1,3,4,2,3,4,4,2,1)
> b1<-c(5,5,2,3,6,7,3,2,4,5,6,7,4,5,6)
> b2<-c(2,3,1,2,3,2,1,2,2,3,4,3,1,2,4)
> b3<-c(4,3,4,5,2,1,2,3,4,2,1,2,3,4,2)
> b4<-c(1,1,1,2,4,2,2,4,2,1,1,3,4,2,1)
> bck1<-factor(c(1,1,1,1,1,1,1,1,2,2,2,2,2,2,2), level=c(1,2), label = c('x','y'))
> bck2<-c(44,32,34,23,45,23,67,43,23,18,45,33,23,45,74)
> test<-data.frame(out,a1,a2,a3,b1,b2,b3,b4,bck1,bck2)
> #Produce NAs 
> library(missForest)
> test.na <- prodNA(test, noNA = 0.1)
> head(test.na)
  out a1 a2 a3 b1 b2 b3 b4 bck1 bck2
1  45  1  4  2  5  2  4  1    x   44
2 433  4  3 NA  5  3  3  1 <NA>   32
3 234 NA NA  1  2  1  4  1    x   34
4 435  1 NA  3  3  2 NA  2    x   23
5 234  4  2  4  6  3  2  4    x   45
6 234  4  1  2  7  2 NA  2    x   23
然后,我尝试按照推荐的方式编写MI模型。如果我做对了,我会很不安全。使用此代码,R是否会在插补过程中更新量表总分?在预测矩阵中哪一个变量排在第一位有关系吗

> ini <- mice(cbind(test.na,a=NA, b =NA),max=0,print=FALSE)
Warning message:
Number of logged events: 2 
> meth <- ini$meth
> meth["a"] <- "~I(a1 + a2 + a3)"
> meth["b"] <- "~I(b1 + b2 + b3 + b4)"
> 
> pred<-ini$pred
> pred[c("out"),c("a1","a2", "a3","b1","b2","b3","b4")] <- 0
> pred[c("a1","a2","a3"),"a"] <- 0
> pred[c("out"),c("a","b")] <- 1
> pred[c("b1","b2","b3", "b4"),"b"] <- 0
> pred[c("a1","a2","a3"),c("b1","b2","b3", "b4")] <- 0
> pred[c("a1","a2","a3"),c("b")] <- 1
> pred[c("b1","b2","b3","b4"),c("a")] <- 1
> pred[c("bck1","bck2"),c("a1", "a2","a3","b1","b2","b3", "b4")] <- 0
> pred[c("bck1","bck2"),c("a", "b")] <- 1
> pred
     out a1 a2 a3 b1 b2 b3 b4 bck1 bck2 a b
out    0  0  0  0  0  0  0  0    1    1 1 1
a1     1  0  1  1  0  0  0  0    1    1 0 1
a2     1  1  0  1  0  0  0  0    1    1 0 1
a3     1  1  1  0  0  0  0  0    1    1 0 1
b1     1  1  1  1  0  1  1  1    1    1 1 0
b2     1  1  1  1  1  0  1  1    1    1 1 0
b3     1  1  1  1  1  1  0  1    1    1 1 0
b4     1  1  1  1  1  1  1  0    1    1 1 0
bck1   1  0  0  0  0  0  0  0    0    1 1 1
bck2   1  0  0  0  0  0  0  0    1    0 1 1
a      0  0  0  0  0  0  0  0    0    0 0 0
b      0  0  0  0  0  0  0  0    0    0 0 0
> 
> impdat<-mice(cbind(test.na, a = NA, b = NA), pred=pred, meth = meth)

 iter imp variable
  1   1  out  a1  a2  a3  b1  b3  bck1  a  b
  1   2  out  a1  a2  a3  b1  b3  bck1  a  b
  1   3  out  a1  a2  a3  b1  b3  bck1  a  b
  1   4  out  a1  a2  a3  b1  b3  bck1  a  b
  1   5  out  a1  a2  a3  b1  b3  bck1  a  b
  2   1  out  a1  a2  a3  b1  b3  bck1  a  b
  2   2  out  a1  a2  a3  b1  b3  bck1  a  b
  2   3  out  a1  a2  a3  b1  b3  bck1  a  b
  2   4  out  a1  a2  a3  b1  b3  bck1  a  b
  2   5  out  a1  a2  a3  b1  b3  bck1  a  b
  3   1  out  a1  a2  a3  b1  b3  bck1  a  b
  3   2  out  a1  a2  a3  b1  b3  bck1  a  b
  3   3  out  a1  a2  a3  b1  b3  bck1  a  b
  3   4  out  a1  a2  a3  b1  b3  bck1  a  b
  3   5  out  a1  a2  a3  b1  b3  bck1  a  b
  4   1  out  a1  a2  a3  b1  b3  bck1  a  b
  4   2  out  a1  a2  a3  b1  b3  bck1  a  b
  4   3  out  a1  a2  a3  b1  b3  bck1  a  b
  4   4  out  a1  a2  a3  b1  b3  bck1  a  b
  4   5  out  a1  a2  a3  b1  b3  bck1  a  b
  5   1  out  a1  a2  a3  b1  b3  bck1  a  b
  5   2  out  a1  a2  a3  b1  b3  bck1  a  b
  5   3  out  a1  a2  a3  b1  b3  bck1  a  b
  5   4  out  a1  a2  a3  b1  b3  bck1  a  b
  5   5  out  a1  a2  a3  b1  b3  bck1  a  b
There were 11 warnings (use warnings() to see them)
> impdat
Class: mids
Number of multiple imputations:  5 
Imputation methods:
                    out                      a1                      a2 
                  "pmm"                   "pmm"                   "pmm" 
                     a3                      b1                      b2 
                  "pmm"                   "pmm"                      "" 
                     b3                      b4                    bck1 
                  "pmm"                      ""                "logreg" 
                   bck2                       a                       b 
                     ""      "~I(a1 + a2 + a3)" "~I(b1 + b2 + b3 + b4)" 
PredictorMatrix:
    out a1 a2 a3 b1 b2 b3 b4 bck1 bck2 a b
out   0  0  0  0  0  0  0  0    1    1 1 1
a1    1  0  1  1  0  0  0  0    1    1 0 1
a2    1  1  0  1  0  0  0  0    1    1 0 1
a3    1  1  1  0  0  0  0  0    1    1 0 1
b1    1  1  1  1  0  1  1  1    1    1 1 0
b2    1  1  1  1  1  0  1  1    1    1 1 0

我不确定是否会使用a和b分别估算a1-a和b1-b4。除此之外,它看起来很好,我不期望他访问专栏的顺序有多大影响。你评估过估算的数据了吗?另见,谢谢。在建立预测矩阵时,我遵循了本文中的建议,并在6.4.5中查看总和分数。因此,a1-3和b1-4分别基于b和a进行插补。啊,我看到反之亦然,抱歉混淆。我不确定我是否会使用a和b分别插补a1-a和b1-b4。除此之外,它看起来很好,我不期望他访问专栏的顺序有多大影响。你评估过估算的数据了吗?另见,谢谢。在建立预测矩阵时,我遵循了本文中的建议,并在6.4.5中查看总和分数。因此,a1-3和b1-4分别基于b和a进行插补。啊,我看到它是相反的,很抱歉混淆了。