【问题标题】:Calculated values on imputed data估算数据的计算值
【发布时间】:2014-08-23 01:08:54
【问题描述】:

我想做如下的事情:(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”调用中的一些复杂函数。

【问题讨论】:

    标签: r r-mice


    【解决方案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
    

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

    【讨论】:

    • 好答案。两个厘米。 1:complete() 采用从 0 到 imp$m - 1 的数字,而不是从 1 到 imp$m。 2:为了对结果使用池化,请使用as.mira(fits)
    猜你喜欢
    • 2022-11-17
    • 1970-01-01
    • 2019-04-19
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多