Tengo problemas de rendimiento al usar el MCMCglmm
paquete en R para ejecutar un modelo de efectos mixtos. El código se ve así:
MC1<-MCMCglmm(bull~1,random=~school,data=dt,family="categorical"
, prior=list(R=list(V=1,fix=1), G=list(G1=list(V=1, nu=0)))
, slice=T, nitt=iter, ,burnin=burn, verbose=F)
Hay alrededor de 20,000 observaciones en los datos y están agrupadas en alrededor de 200 escuelas. Eliminé todas las variables no utilizadas del marco de datos y eliminé todos los demás objetos de la memoria, antes de ejecutarlos. El problema que tengo es que lleva mucho tiempo ejecutarlo, a menos que reduzca las iteraciones a un número inaceptablemente pequeño. Con 50,000 iteraciones, toma 5 horas y tengo muchos modelos diferentes para ejecutar. Por lo tanto, me gustaría saber si hay formas de acelerar la ejecución del código u otros paquetes que pueda usar. Estoy usando MCMCglmm
porque quiero intervalos de confianza para los efectos aleatorios.
Por otro lado, esperaba obtener una nueva PC más adelante este año, pero con un poco de suerte podría presentarla, así que me he estado preguntando cómo gastar mejor una cantidad limitada de dinero en hardware nuevo: más RAM , CPU más rápida, etc. Al mirar el administrador de tareas no creo que la RAM sea el problema (nunca supera el 50% del uso físico), pero el uso de la CPU tampoco supera el 50%, lo que me parece extraño . Mi configuración actual es un Intel Core i5 2.66GHz, 4GB RAM, 7200rpm HDD. ¿Es razonable obtener la CPU más rápida posible, a expensas de RAM adicional? También me preguntaba sobre el efecto del tamaño de caché de CPU de nivel 3 en problemas informáticos estadísticos como este.
Actualización: Después de haber preguntado en meta SO, me han aconsejado que reformule la pregunta y publique en Superuser. Para hacerlo, necesito dar más detalles sobre lo que está sucediendo "debajo del capó" en MCMCglmm. ¿Estoy en lo cierto al pensar que la mayor parte del tiempo de cálculo se dedica a la optimización, es decir, encontrar el máximo de alguna función complicada? ¿La inversión matricial y / u otras operaciones de álgebra lineal también es una operación común que podría estar causando cuellos de botella? Cualquier otra información que pueda dar a la comunidad de Superusuarios sería muy agradecida.
fuente
lmer()
modelos a grandes conjuntos de datos puede llevar bastante tiempo, especialmente si necesita hacerlo muchas veces. Una respuesta a su pregunta puede estar en la computación paralela, aunque otros usuarios (por ejemplo, @DirkEddelbuettel) serían mucho más útiles que yo con esto. También existe la posibilidad de que obtenga mejores respuestas en stackoverflow.glmer
(como saben por mis otras publicaciones) y eso toma alrededor de 20 segundos, pero el problema es que no da intervalos de confianza o errores estándar, y por lo que leí en una lista de correo, archivé al autor dellme4
El paquete dice que la distribución de muestreo de los efectos aleatorios puede ser muy sesgada, por lo que esas estadísticas no se informan. En realidad, descubrí desdeMCMCglmm
ahora que en mi caso se están acercando a la normalidad (no es que esto ayude mucho, solo digo). ¿Sería mejor si solicito migrarlo a SO?Respuestas:
¿Por qué no ejecutarlo en el servicio de computación en la nube EC2 de Amazon o un servicio similar?
MCMCpack
es, si no recuerdo mal, mayormente implementado en C, por lo que no será mucho más rápido a menos que disminuya la complejidad de su modelo, las iteraciones, etc. Con EC2 o servicios similares de computación en la nube, puede tener múltiples instancias en cualquier especificaciones que desee y ejecute todos sus modelos a la vez.fuente