Leftover NAs after imputing using mice

前提是你 提交于 2019-12-11 08:45:46

问题


What is going on in the following?

#create some data
library(data.table)
library(mice)
myData = data.table(invisible.covariate=rnorm(10),
         visible.covariate=rnorm(10),
         category=factor(sample(1:3,10, replace=TRUE)),
         treatment=sample(0:1,10, replace=TRUE))
myData[,outcome:=invisible.covariate+visible.covariate+treatment*as.integer(category)]
myData[,invisible.covariate:=NULL]    
myData[treatment == 0,untreated.outcome:=outcome]
myData[treatment == 1,treated.outcome:=outcome]

#impute missing values
myPredictors = matrix(0,ncol(myData),ncol(myData))
myPredictors[5,] = c(1,1,0,0,0,0)
myPredictors[6,] = c(1,1,0,0,0,0)
myImp = mice(myData,predictorMatrix=myPredictors)

#Now look at the "complete" data
completeData = data.table(complete(myImp,0))
print(nrow(completeData[is.na(untreated.outcome)]))

The result should be 0, if mice had successfully replaced all the NA values. But it's not. What am I doing wrong?


回答1:


The second argument in complete is intended to something other than zero (which returns the original, incomplete data), e.g., a scalar between 1 and the number of imputations generated. It also accepts some character inputs (see the documentation for details).

Try this:

completeData = data.table(complete(myImp, 1))

Compare:

> completeData = data.table(complete(myImp,0))
> print(nrow(completeData[is.na(untreated.outcome)]))
[1] 5
> completeData = data.table(complete(myImp,1))
> print(nrow(completeData[is.na(untreated.outcome)]))
[1] 0

Cheers!



来源:https://stackoverflow.com/questions/25472640/leftover-nas-after-imputing-using-mice

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!