1

我想做类似以下的事情:(myData是一个数据表)

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

#process it
myData[treatment == 0,untreated.outcome:=outcome]
myData[treatment == 1,treated.outcome:=outcome]
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)
fit1 = with(myImp, lm(treated.outcome ~ category)) #this works fine

for_each_imputed_dataset(myImp,  #THIS IS NOT A REAL FUNCTION but I hope you get the idea
     function(imputed_data_table) {
        imputed_data_table[,treatment.effect:=treated.outcome-untreated.outcome]
     })

fit2 = with(myImp, lm(treatment.effect ~ category)) 
#I want fit2 to be an object similar to fit1
...

我想为每个估算的数据集添加一个计算值,然后使用该计算值进行统计。显然,上面的结构可能不是你会怎么做的。我会对任何解决方案感到满意,无论是在老鼠之前以某种方式准备数据表,在上面勾勒的“fit =”之前的一步,还是在“with”调用中的一些复杂函数。

4

1 回答 1

1

complete()函数将为每个请求的迭代生成“完整的”估算数据集。但请注意,它mice期望与 data.frames 一起使用,因此它返回 data.frames 而不是 data.tables。(当然,如果你愿意,你可以转换)。但这是适合所有这些模型的一种方法

imp = mice(myData,predictorMatrix=predictors)
fits<-lapply(seq.int(imp$m), function(i) {
   lm(I(treated.outcome-untreated.outcome)~category, complete(imp, i))
})
fits

结果将在一个列表中,您可以通过、等提取特定lm对象fits[[1]]fits[[2]]

于 2014-08-23T03:26:52.543 回答