Sr. Python, muchas gracias por su candidatura; ya le llamaremos cuando… tenga modelos mixtos

Era casi todavía el siglo XX cuando yo, desesperado por hacer cosas que consideraba normales y que SAS no me permitía, pregunté a un profesor por algo como C pero para estadística. Y el profesor me contó que conocía a alguien que conocía a alguien que conocía a alguien que usaba una cosa nueva que se llamaba R y que podía servirme.

Fue amor a primera vista, pero esa es otra historia. La relevante aquí es que volví a hablar con aquel profesor para agradecerle el consejo y, de paso, le pregunté que por qué no lo usaba él. Me contestó que porque en R no había modelos mixtos (aunque nlme es anterior, del 99; ¡a saber en qué estado se encontraba entonces!).

Al cabo de los años, obviamente, las cosas han ido cambiando. Y son pocas las semanas (o meses, por no exagerar) que no uso modelos mixtos para algo.

(Por ejemplo, en Fast moment-based estimation for hierarchical models se puede encontrar uno de mis casos de uso favoritos, en sistemas de recomendación, que ha sido y sigue siendo una fuente de inspiración para proyectos pasados y en ciernes).

¿Y Python?

Revisando el otro día el estado de la cosa en Python quedé poco menos que consternado, pasmado. ¿Cómo puede ser que tanta gente esté diciendo hacer ciencia de datos con Python dado el lastimosísimo estado de todo lo mixto y/o jerárquico en ese lenguaje? ¿Qué tipo de modelos pueden estar implementando? (Sí, vale, los he visto; vi un caso el otro día: haciendo la risa y dando vergüenza ajena).

Claro, porque tienes MCMC para cosas pequeñas, pero… ¿Cómo puedes aproximar un modelo bayesiano en tiempo y forma sin una infraestructura mínima que ser parezca un poco a lme4?

Obviamente, la cosa cambiará. Cambió con R y lo hará pronto o tarde con Python. Y, de hecho, nada deseo más que declarar obsoleta esta entrada lo antes posible.

Coda: igual en esta entrada estoy cometiendo algún tipo de omisión vergonzante y existe lo que busco. Así que aquel que en los comentarios (no vale hacerlo en 2022, ¿eh?) me saca del error, tiene ganado no solo mi agradecimiento sino unas cervezas cuando nos topemos.

7 comentarios sobre “Sr. Python, muchas gracias por su candidatura; ya le llamaremos cuando… tenga modelos mixtos

  1. José Luis Cañadas Reche 12 febrero, 2019 21:07

    ¿Qué queremos? pylme4 con glm. ¿Cuándo lo queremos? Ahora . ¿Y si no? pues un pyINLA !!
    Por lo que comentaba Carlos, parece que la de statmodels usa full bayesian por lo que los tiempos se disparan, lo que hace falta es una aproximación usando máxima verosimilitud restringida o cualquier otra cosa, pero que acabe antes del fin del universo, o al menos antes del fin de la legislatura de Pedro Sánchez.

  2. Carlos J. Gil Bellosta 12 febrero, 2019 23:45

    Sí, en la entrada comento que SAS, efectivamente, los tiene desde tiempos inmemoriales.

  3. Pedro 13 febrero, 2019 0:20

    Esto creo que también lo permite, pero al fin y al cabo creo que es un puente entre python y R, y lo que se ejecuta es R en realidad
    http://eshinjolly.com/pymer4/

  4. Felipe Ortega 23 febrero, 2019 1:20

    Buenas, me quedé con la duda cuando leí este post por primera vez… Quizá me equivoque, pero creo que Edward (http://edwardlib.org/getting-started) implementa una versión de este tipo de modelos en Python: http://edwardlib.org/tutorials/linear-mixed-effects-models De hecho, el ejemplo es con un dataset de lme4.

    En GitHub he encontrado una comparativa de GLMM con varios paquetes: https://github.com/junpenglao/GLMM-in-Python.

    Seguramente, en lme4 se utilizan por debajo métodos de ajuste del modelo más potentes y/o eficientes, pero quizá el futuro ese en Python está más cerca de lo que pensamos…

  5. Carlos J. Gil Bellosta 23 febrero, 2019 1:31

    El enlace que mandas (de Edward) se refiere a los modelos lineales mixtos, no los modelos lineales generalizados mixtos. El modelo lineal es el más simple… Con PyStan se pueden ajustar, por supuesto, pero no a escala. Llegará, sin duda, pero aún no está.

Los comentarios están desabilitados.