MICE的R归因

问题描述

set.seed(1)
    library(data.table)
    data=data.table(STUDENT = 1:1000,OUTCOME = sample(20:90,r = T),X1 = runif(1000),X2 = runif(1000),X3 = runif(1000))
    data[,X1 := fifelse(X1 > .9,NA_real_,X1)]
    data[,X2 := fifelse(X2 > .78 & X2 < .9,X3 := fifelse(X3 < .1,X1)]

假设您具有如图所示的数据,并且希望为X1,X2,X3估算值,而忽略STUDENT和OUTCOME进行估算处理。

我能做

library(mice)
dataimPUTE=mice(data[,c("X1","X2","X3")],m = 1)

但是如何将dataimPUTE中的估算值与STUDENT和OUTCOME汇总在一起?恐怕我会合并错误,这就是为什么我问您对此有何建议。

解决方法

一种可能性是在插补中使用完整的数据集,但要更改predictorMatrix,以便在插补模型中不使用STUDENTOUTCOME

首先,您需要运行mice来提取predictorMatrix(不计算插补)。然后,您可以将所有不应该包括在归因模型中的列设置为0。但是,所有变量都仍包含在dataIMPUTE对象中:

set.seed(1)
library(data.table)
data=data.table(STUDENT = 1:1000,OUTCOME = sample(20:90,r = T),X1 = runif(1000),X2 = runif(1000),X3 = runif(1000))
index_1 <- sample(1:1000,100)
index_2 <- sample(1:1000,100)
index_3 <- sample(1:1000,100)
data[index_1,X1 := NA_real_]
data[index_2,X2 := NA_real_]
data[index_3,X3 := NA_real_]

library(mice)
init <- mice(data,maxit = 0,print = FALSE)

# extract the predictor matrix
pred_mat <- init$predictorMatrix

# remove STUDENT and OUTCOME as predictors
pred_mat[,c("STUDENT","OUTCOME")] <- 0

# do the imputation
dataIMPUTE = mice(data,pred = pred_mat,m = 1)