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.tables ではなく data.frames を返すことに注意してください。(もちろん、必要に応じて変換できます)。しかし、これらすべてのモデルに適合する1つの方法があります

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 に答える