¿Cómo puedo acelerar el cálculo de los efectos fijos en un GLMM?


9

Estoy haciendo un estudio de simulación que requiere estimaciones de arranque obtenidas de un modelo mixto lineal generalizado (en realidad, el producto de dos estimaciones para efectos fijos, una de un GLMM y otra de un LMM). Hacer bien el estudio requeriría alrededor de 1000 simulaciones con 1000 o 1500 repeticiones de arranque cada vez. Esto lleva una cantidad significativa de tiempo en mi computadora (muchos días).

How can I speed up the computation of these fixed effects?

Para ser más específico, tengo sujetos que se miden repetidamente de tres maneras, dando lugar a las variables X, M e Y, donde X e M son continuos e Y es binario. Tenemos dos ecuaciones de regresión Y = β 0 + β 1 X + β 2 M + ϵ 2 donde Y es la variable continua latente subyacente para Y y los errores no son iid. La estadística que queremos arrancar es α 1 β 2

M=α0+α1X+ϵ1
Y=β0+β1X+β2M+ϵ2
Y
α1β2. Por lo tanto, cada replicación de arranque requiere ajustar un LMM y un GLMM. Mi código R es (usando lme4)
    stat=function(dat){
        a=fixef(lmer(M~X+(X|person),data=dat))["X"]
        b=fixef(glmer(Y~X+M+(X+M|person),data=dat,family="binomial"))["M"]
        return(a*b)
    }

Me doy cuenta de que obtengo la misma estimación para si solo lo ajusto como un modelo lineal, por lo que ahorra algo de tiempo, pero el mismo truco no funciona para β 2 .α1β2

¿Solo necesito comprar una computadora más rápida? :)


1
@BR ¿cuál es el cuello de la botella aquí? Básicamente lo que está tomando tiempo Rprof.
suncoolsu

1
Una forma es ignorar la parte "mixta" del GLMM. Sólo una ajustarse GLM ordinaria, las estimaciones no cambiarán mucho, pero sus errores estándar probable que
probabilityislogic

@probabilityislogic. Además de su comentario, también creo que si la respuesta sería muy diferente depende del tamaño del grupo y del comportamiento individual en el grupo. Como dicen Gelman y Hill: los resultados del modelo de efectos mixtos estarían entre agrupar y no agrupar. (Obv. Esto es para los modelos jerárquicos bayesianos, pero los modelos mixtos son una forma clásica de hacer lo mismo.)
suncoolsu

@probabilityislogic: Eso funciona para LMM, pero parece fallar para GLMM (lo que significa que ejecuté modelos con y sin la M adicional en los mismos datos y terminé con resultados significativamente diferentes). A menos, por supuesto, que haya un error en la implementación de glmer.
BR

@suncoolsu: el cuello de botella es la estimación del GLMM, que puede tardar un par de segundos (especialmente con varios efectos aleatorios). Pero haz eso 1000 * 1000 veces, y eso es 280 horas de cálculo. Ajustar un GLM toma aproximadamente 1/100 del tiempo.
BR

Respuestas:


4

Debería ayudar a especificar valores iniciales, aunque es difícil saber cuánto. Mientras realiza simulación y bootstrapping, debe conocer los valores "verdaderos" o las estimaciones sin bootstrap o ambas. Intente usar aquellos en la start =opción de glmer.

También podría considerar investigar si las tolerancias para declarar la convergencia son más estrictas de lo que necesita. Sin lme4embargo, no tengo claro cómo modificarlos de la documentación.


4

Considere también otras dos posibilidades, antes de comprar una computadora nueva.

  1. Computación en paralelo: el arranque es fácil de ejecutar en paralelo. Si su computadora es razonablemente nueva, probablemente tenga cuatro núcleos. Echa un vistazo a la biblioteca multinúcleo en R.
  2. La computación en la nube también es una posibilidad y es razonablemente barata. Tengo colegas que han usado la nube de Amazon para ejecutar scripts R. Descubrieron que era bastante rentable.

1
Gracias por la respuesta. De alguna manera, he pasado por alto el hecho de que tengo dos núcleos (mi computadora no es muy nueva). Debería haber mirado multinúcleo hace mucho tiempo.
BR

2

Posiblemente podría ser una computadora más rápida. Pero aquí hay un truco que puede funcionar.

YYY

g(.)Y=1Yg(z)=log(z1z)

YYBernoulli(p)pBeta(Yobs+12,1Yobs+12)Ys1niYi

psimYsyometro=sol(pagsyometro)Ysyometronorte×SnorteS

solmetrolmir()lmetromir()Ylmetromir()si

una=...
si=0 0
reo s=1,...,S
simist=lmetromir(Ys...)
si=si+1s(simist-si)
minortere
rmitturnorte(unasi)

Avíseme si necesito explicar algo un poco más claro


Gracias por la respuesta, me llevará un poco digerirlo (y ya tengo planes para mi sábado por la noche). Es lo suficientemente diferente como para que no me quede claro si da la misma respuesta que el enfoque GLMM, pero necesito pensarlo más.
BR
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.