0

データセットを男性と女性に分割し、miceパッケージを使用して別々に帰属させました。

#Generate predictormatrix
pred_gender_0<-quickpred(data_gender_0, include=c("age","weight_trunc"),exclude=c("ID","X","gender"),mincor = 0.1)
pred_gender_1<-quickpred(data_gender_1, include=c("age","weight_trunc"),exclude=c("ID","X","gender"),mincor = 0.1)

#impute the data with mice 
imp_pred_gen0 <- mice(data_gender_0,
                 pred=pred_gender_0,
                 m=10,
                 maxit=5,            
                 diagnostics=TRUE,
                 MaxNWts=3000) #i had to set this to 3000 because of an problematic unordered categorical variable 

imp_pred_gen1 <- mice(data_gender_1,
                 pred=pred_gender_1,
                 m=10,
                 maxit=5,            
                 diagnostics=TRUE,
                 MaxNWts=3000)

これで、10 個の帰属データセットを持つ 2 つのオブジェクトができました。男性用、女性用。私の質問は、それらをどのように組み合わせるかです。通常、私はただ使用します:

comp_imp<-complete(imp,"long")

するべきか:

  1. rbind.mids()男性と女性のデータを組み合わせて長い形式に変換するために使用しますか?
  2. 最初に長い形式に変換してから or を使用しますrbind.mids()rbind()?

ヒントをありがとう!=)

-------------------------------------------------- -------------------------

更新 - 再現可能な例

library("dplyr")
library("mice")

# We use nhanes-dataset from the mice-package as example

# first: combine age-category 2 and 3 to get two groups (as example)
nhanes$age[nhanes$age == 3] <- "2"
nhanes$age<-as.numeric(nhanes$age)
nhanes$hyp<-as.factor(nhanes$hyp)

#split data into two groups
nhanes_age_1<-nhanes %>% filter(age==1)
nhanes_age_2<-nhanes %>% filter(age==2)

#generate predictormatrix
pred1<-quickpred(nhanes_age_1, mincor=0.1, inc=c('age','bmi'), exc='chl')
pred2<-quickpred(nhanes_age_2, mincor=0.1, inc=c('age','bmi'), exc='chl')

# seperately impute data
set.seed(121012)
imp_gen1 <- mice(nhanes_age_1,
                 pred=pred1,
                 m=10,
                 maxit=5,            
                 diagnostics=TRUE,
                 MaxNWts=3000)

imp_gen2 <- mice(nhanes_age_2,
                 pred=pred2,
                 m=10,
                 maxit=5,            
                 diagnostics=TRUE,
                 MaxNWts=3000)


#------ ALTERNATIVE 1:

#combine imputed data
combined_imp<-rbind.mids(imp_gen1,imp_gen2)
complete_imp<-complete(combined_imp,"long")

#output
   > combined_imp<-rbind.mids(imp_gen1,imp_gen2)
Warning messages:
1: In rbind.mids(imp_gen1, imp_gen2) :
  Predictormatrix is not equal in x and y; y$predictorMatrix is ignored
.
2: In x$visitSequence == y$visitSequence :
  longer object length is not a multiple of shorter object length
3: In rbind.mids(imp_gen1, imp_gen2) :
  Visitsequence is not equal in x and y; y$visitSequence is ignored
.
   
> complete_imp<-complete(combined_imp,"long")
Error in inherits(x, "mids") : object 'combined_imp' not found


#------ ALTERNATIVE 2:

complete_imp1<-complete(imp_gen1,"long")
complete_imp2<-complete(imp_gen2,"long")
combined_imp<-rbind.mids(complete_imp1,complete_imp2)

#Output
> complete_imp1<-complete(imp_gen1,"long")
> complete_imp2<-complete(imp_gen2,"long")
> combined_imp<-rbind.mids(complete_imp1,complete_imp2)
Error in if (ncol(y) != ncol(x$data)) stop("The two datasets do not have the same number of columns\n") : 
  argument is of length zero
4

3 に答える 3

0

正直なところ、パッケージについての知識はなくmice、代入の概念についてのかすかな考えしかありません。

どのような分析を行いたいのかわかりませんが、通常は : を実行するとおっしゃっていますcomp_imp<-complete(imp,"long")ので、それに応じて回答してみます。

私にとって、最初のアプローチは data.frame を返しますが、欠落はありません。complete(imp_gen1,"long")に欠落データがあるため、これは奇妙hypです。そこで何をしているのかわかりませんrbind.mids

したがって、私はあなたの2番目のアプローチに行きます。

からの結果complete(., "long")は通常の data.frame であるため、 でバインドする必要はありませんrbind.mids

2番目のアプローチを次のように変更します。

library(dplyr)
complete_imp1 <- complete(imp_gen1, "long")
complete_imp2 <- complete(imp_gen2, "long")
combined_imp <- bind_rows(complete_imp1, complete_imp2)
于 2015-05-04T09:33:16.217 に答える