R

时间:2016-02-25 13:38:42

标签: r r-mice

我最近在R中发现了MICE包,用于多重插补,我目前正在学习我的方法。我想尝试一下   对我归咎的一些变量设置限制。虽然“灵活插补缺失数据”一书提供了一些内容   简单的例子,我想得到一些更复杂的限制。但是,我在弄清楚如何解决这个问题时遇到了一些麻烦   正确指定限制。

例如,请考虑以下数据集:

#Variables to use for restrictions'     
Var1= c(6, 10, 2, 12, 15, NA, 14, NA, 16, 2, 1, 0, 20, NA,NA,NA, 9, 17, 15,13)' 
 Var2= c(35, NA, 23,22, 33, 45, NA, 34, 12, 32, 33, 18, 18,NA,NA, NA, 22, NA, 19, 35)

  #Testvariable 1 check imputation restrictions
  TestVar1 = c(54, 6000, 56,42, 53, 63, 700, 52, 48, 47, 54, 69, 61,935,675, 456, 42, 912, 59, 55)

  #Variable I want to impute given certain restrictions
  MaininterestVar = c(1, NA, 0, 1, 1, NA, NA ,NA, 0, 0, 0, 0, 1, NA, NA, NA, 0, NA, 0, 1)

  #Overview of the data
   dat=data.frame(Var1 = Var1, Var2 = Var2, TestVar1 = TestVar1,     MaininterestVar = MaininterestVar)
   View(dat)` 

我想将MaininterestVar设置为给定Var1和Varlo2值的特定值(无论是观察还是估算)。我认为   最直接的方法是通过后处理。我可以管理简单的限制,例如设置MaininterestVar   如果Var1高于8,则为1:

library(mice)

base_imputation <- mice(dat, m=0, maxit = 0, seed = 835)
post <-base_imputation$post
methods = base_imputation$meth

post["MaininterestVar"] <- "imp[[j]][p$data$Var1[!r[,j]]>8,i]  <- 1"
Restricted_imputation<- mice(dat, m=2, maxit = 20,method = methods,post=post, seed = 835) 

   #looks ok
completeoverview= complete(Restricted_imputation,1)
View(completeoverview)
completeoverview2= complete(Restricted_imputation,2)
View(completeoverview2)

但是,我遇到了以下问题:

1)如何确保Var1&lt; 8的MaininterestVar设置为0?虽然这似乎在这个例子中是正确的,但这不是一个特定的限制,我想确保这种情况发生。

2)假设我想将MaininterestVar设置为与推算的MaininterestVar在同一行中的TestVar1中列出的值而不是0。    例如,第2行中MaininterestValue的插补值将为6000,具体取决于Var 1的观察值或估算值是否<8。我认为这    应该可以通过指定被估算的变量的行索引来实现,但是我无法正确指定它。

以下代码:

base_imputation <- mice(dat, m=0, maxit = 0, seed = 835)
post <-base_imputation$post
methods = base_imputation$meth

post["MaininterestVar"] <- "imp[[j]][p$data$Var1[!r[,j]]>8,i]  <- p$data$TestVar1[!r[,j]]"
Restricted_imputation<- mice(dat, m=2, maxit = 20,method = methods,post=post, seed = 835) 

给我错误:

 iter imp variable
  1   1  Var1  Var2  MaininterestVarError in `[<-.data.frame`(`*tmp*`,     p$data$Var1[!r[, j]] > 8, i, value = c(6000,  : 
  replacement has 8 rows, data has 6

这表明需要一些额外的行索引规范,但我不太清楚如何这样做。

3)最后,假设我想将MaininterestVar设置为0,如果Var1 <5(这与一般数据模式相反,我用它来检查限制是否有效)和Var2> 28。    我尝试过如下规范:

base_imputation <- mice(dat, m=0, maxit = 0, seed = 835)
post <-base_imputation$post
methods = base_imputation$meth

post["MaininterestVar"] <- "imp[[j]][(p$data$Var1[!r[,j]]<5)&(p$data$Var2[!r[,j]]>28),i]  <- 1"
Restricted_imputation<- mice(dat, m=2, maxit = 20,method = methods,post=post, seed = 835) 

completeoverview= complete(Restricted_imputation,1)
View(completeoverview)

#Row 2 in completeoverview is 1, despite Var1 being 10.

但是MICE似乎不会同时处理这两个限制(并且不提供它没有的错误消息),或者问题1)在这里发生。

提前致谢!

0 个答案:

没有答案