Como posso obter efeitos aleatórios agrupados para lmer após imputação múltipla?
Estou usando mouses para atribuir múltiplos quadros de dados. E lme4 para um modelo misto com interceptação aleatória e inclinação aleatória. O pool de pool funciona bem, exceto que ele não combina os efeitos aleatórios. Eu procurei muito por uma solução sem sorte. Eu tentei o pacote mi, no entanto, só vejo a saída agrupada para a estimativa e std.error. Eu tentei exportar objetos de mouse para spss sem sorte. Eu vi algumas discussões sobre Zelig. Eu pensei que isso poderia resolver o meu problema. No entanto, não consegui descobrir como usar o pacote com dados imputados para o lmer.
Eu sei que o pacote de mouses suporta apenas o pool dos efeitos fixos. Existe uma solução alternativa?
Imputação múltipla:
library(mice)
Data <- subset(Data0, select=c(id, faculty, gender, age, age_sqr, occupation, degree, private_sector, overtime, wage))
ini <- mice(Data, maxit=0, pri=F) #get predictor matrix
pred <- ini$pred
pred[,"id"] <- 0 #don't use id as predictor
meth <- ini$meth
meth[c("id", "faculty", "gender", "age", "age_sqr", "occupation", "degree", "private_sector", "overtime", "wage")] <- "" #don't impute these variables, use only as predictors.
imp <- mice(Data, m=22, maxit=10, printFlag=TRUE, pred=pred, meth=meth) #impute Data with 22 imputations and 10 iterations.
Modelo multinível:
library(lme4)
fm1 <- with(imp, lmer(log(wage) ~ gender + age + age_sqr + occupation + degree + private_sector + overtime + (1+gender|faculty))) #my multilevel model
summary(est <- pool(fm1)) #pool my results
Atualizar resultados do pool lmer:
> summary(est <- pool(fm1))
est se t df Pr(>|t|) lo 95 hi 95 nmis fmi lambda
(Intercept) 7,635148e+00 0,1749178710 43,649905006 212,5553 0,000000e+00 7,2903525425 7,9799443672 NA 0,2632782 0,2563786
Gender -1,094186e-01 0,0286629154 -3,817427078 117,1059 2,171066e-04 -0,1661834550 -0,0526537238 NA 0,3846276 0,3742069
Occupation1 1,125022e-01 0,0250082538 4,498601518 157,6557 1,320753e-05 0,0631077322 0,1618966049 NA 0,3207350 0,3121722
Occupation2 2,753089e-02 0,0176032487 1,563966385 215,6197 1,192919e-01 -0,0071655902 0,0622273689 NA 0,2606725 0,2538465
Occupation3 1,881908e-04 0,0221992053 0,008477365 235,3705 9,932433e-01 -0,0435463305 0,0439227120 NA 0,2449795 0,2385910
Age 1,131147e-02 0,0087366178 1,294719230 187,0021 1,970135e-01 -0,0059235288 0,0285464629 0 0,2871640 0,2795807
Age_sqr -7,790476e-05 0,0001033263 -0,753968159 185,4630 4,518245e-01 -0,0002817508 0,0001259413 0 0,2887420 0,2811131
Overtime -2,376501e-03 0,0004065466 -5,845581504 243,3563 1,614693e-08 -0,0031773002 -0,0015757019 9 0,2391179 0,2328903
Private_sector 8,322438e-02 0,0203047665 4,098760934 371,9971 5,102752e-05 0,0432978716 0,1231508962 NA 0,1688478 0,1643912
Esta informação está faltando, que recebo ao executar o lmer sem imputação múltipla:
Random effects:
Groups Name Variance Std.Dev. Corr
Faculty (Intercept) 0,008383 0,09156
Genderfemale0,002240 0,04732 1,00
Residual 0,041845 0,20456
Number of obs: 698, groups: Faculty, 17
fonte
Respostas:
Você pode fazer isso manualmente, aproveitando a
lapply
funcionalidade em R e a estrutura de lista retornada peloAmelia
pacote de múltiplas imputações. Aqui está um exemplo de script rápido.Amelia
é semelhante aomice
que você pode simplesmente substituir suas variáveis namice
chamada aqui - este exemplo é de um projeto no qual eu estava trabalhando.a.out
é o objeto de imputação, agora precisamos executar o modelo em cada conjunto de dados imputado. Para fazer isso, usamos alapply
função em R para repetir uma função sobre os elementos da lista. Esta função aplica a função - que é a especificação do modelo - a cada conjunto de dados (d) na lista e retorna os resultados em uma lista de modelos.Agora criamos um data.frame a partir dessa lista, simulando os valores dos efeitos fixos e aleatórios usando as funções FEsim e REsim do pacote merTools
Os data.frames acima incluem estimativas separadas para cada conjunto de dados, agora precisamos combiná-los usando um recolhimento como o recolhimento de argumentos
Agora também podemos extrair algumas estatísticas sobre a variância / covariância para os efeitos aleatórios nos valores imputados. Aqui, escrevi duas funções simples de extrator para fazer isso.
E agora podemos aplicá-los aos modelos e armazená-los como um vetor:
Atualizar
As funções abaixo o aproximam muito mais da saída fornecida
arm::display
ao operar na lista delmer
ouglmer
objetos. Esperemos que isso seja incorporado aomerTools
pacote em um futuro próximo:fonte
lmerModList
e oprint
método, que combina os resultados das listas de modelos.Você também pode usar a função testEstimates após a imputação usando mouses, testEstimates (como.mitml.result (fm1), var.comp = T) $ var.comp
fonte