Path: blob/master/site/es-419/probability/examples/HLM_TFP_R_Stan.ipynb
25118 views
Copyright 2018 The TensorFlow Probability Authors.
Licensed under the Apache License, Version 2.0 (the "License");
Regresión lineal de efectos mixtos en {TF Probability, R, Stan}
1 Introducción
En este Colab, ajustaremos un modelo de regresión lineal de efectos mixtos a un conjunto de datos de juguetes popular. Haremos que esto se ajuste tres veces, mediante el uso de lme4
de R, el paquete de efectos mixtos de Stan y las primitivas de probabilidad de TensorFlow (TFP). Concluimos con la demostración de que los tres dan aproximadamente los mismos parámetros ajustados y distribuciones posteriores.
Nuestra principal conclusión es que TFP tiene las piezas generales necesarias para adaptarse a modelos similares al HLM y que produce resultados que son consistentes con otros paquetes de software, es decir, lme4
, rstanarm
. Este Colab no es un reflejo exacto de la eficiencia computacional de ninguno de los paquetes comparados.
2 Modelo lineal jerárquico
Para nuestra comparación entre R, Stan y TFP, ajustaremos un modelo lineal jerárquico (HLM) al conjunto de datos radon que se popularizó en el análisis de datos bayesiano de Gelman, et. Alabama. (página 559, segunda ed.; página 250, tercera ed.).
Se asume el siguiente modelo generativo:
En la "notación de tilde" lme4
de R, este modelo es equivalente a:
log_radon ~ 1 + floor + (0 + log_uranium_ppm | county)
Encontraremos el MLE para mediante el uso de la distribución posterior (condicionada a la evidencia) de .
Si se desea obtener básicamente el mismo modelo, pero con una intersección aleatoria, consulte el Apéndice A.
Para obtener una especificación más general del HLM, consulte el Apéndice B.
3 Manipulación de datos
En esta sección, obtenemos el conjunto de datos radon
y ejecutamos un preprocesamiento mínimo para que cumpla con nuestro modelo asumido.
3.1 Conocimiento de los datos
En esta sección, exploramos el conjunto de datos radon
para entender mejor por qué el modelo propuesto podría ser razonable.
Conclusiones:
Hay una larga cola de 85 condados. (Una ocurrencia común en los GLMM).
De hecho, no tiene restricciones. (Por tanto, la regresión lineal podría tener sentido).
La mayoría de las lecturas se realizan en el piso ; no se realizó ninguna lectura por encima del piso . (Por lo tanto, nuestros efectos fijos solo tendrán dos ponderaciones).
4 HLM en R
En esta sección se usa el paquete lme4
de R para ajustar el modelo probabilístico descrito anteriormente.
NOTA: Para ejecutar esta sección, se debe cambiar a un tiempo de ejecución de Colab de R.
5 HLM en Stan
En esta sección se usa rstanarm para ajustar un modelo Stan con la misma fórmula/sintaxis que el modelo lme4
anterior.
A diferencia de lme4
y el siguiente modelo de TF, rstanarm
es un modelo completamente bayesiano, es decir, se supone que todos los parámetros se extraen de una distribución Normal y los propios parámetros se extraen de una distribución.
NOTA: Para ejecutar esta sección, se debe cambiar a un tiempo de ejecución de Colab de R
.
Nota: Los tiempos de ejecución provienen de un único núcleo de CPU. (Este Colab no pretende ser una representación fiel del tiempo de ejecución de Stan ni de TFP).
Nota: Vuelva al tiempo de ejecución del núcleo de TF de Python.
Recupere las estimaciones puntuales y las desviaciones estándar condicionales para los efectos aleatorios del grupo de lme4 para visualizarlas más adelante.
Extraiga muestras para las ponderaciones de los condados con ayuda de las medias estimadas y las desviaciones estándar de lme4.
También recuperamos las muestras posteriores de las ponderaciones del condado del ajuste de Stan.
En este ejemplo de Stan se muestra cómo se implementaría LMER en un estilo más cercano a TFP, es decir, al especificar directamente el modelo probabilístico.
6 HLM en TF Probability
En esta sección usaremos primitivas de probabilidad de TensorFlow de bajo nivel (Distributions
) para especificar nuestro modelo lineal jerárquico y ajustar los parámetros desconocidos.
6.1 Especificación del modelo
En esta sección especificamos el modelo lineal de efectos mixtos de radón con ayuda de las primitivas de TFP. Para hacer esto, especificamos dos funciones que producen dos distribuciones de TFP:
make_weights_prior
: un valor previo normal multivariado para las ponderaciones aleatorias (que se multiplican por para calcular el predictor lineal).make_log_radon_likelihood
: un lote de distribucionesNormal
sobre cada variable dependiente observada.
Dado que ajustaremos los parámetros de cada una de estas distribuciones, debemos usar variables de TF (es decir, tf.get_variable
). Sin embargo, dado que deseamos utilizar optimización sin restricciones, debemos encontrar una manera de restringir los valores reales para lograr la semántica necesaria, por ejemplo, positivos que representen desviaciones estándar.
La siguiente función construye nuestra previa, donde denota los pesos de efectos aleatorios y la desviación estándar.
Usamos tf.make_template
para garantizar que la primera llamada a esta función cree una instancia de las variables de TF que usa y que todas las llamadas posteriores reutilicen el valor actual de la variable.
La siguiente función construye nuestra probabilidad, donde denota respuesta y evidencia, denota ponderaciones de efectos fijos y aleatorios, y la desviación estándar.
Aquí nuevamente usamos tf.make_template
para garantizar que las variables de TF se reutilicen en las llamadas.
Finalmente, recurrimos a los generadores de previa y de probabilidad para construir la densidad logarítmica conjunta.
6.2 Entrenamiento (aproximación estocástica de maximización de expectativas)
Para ajustar nuestro modelo de regresión lineal de efectos mixtos, utilizaremos una versión de aproximación estocástica del algoritmo de maximización de expectativas (SAEM). La idea básica consiste en el uso de muestras de la posterior para aproximar la densidad logarítmica conjunta esperada (paso E). Luego, encontramos los parámetros que maximizan este cálculo (paso M). De manera algo más concreta, la iteración de punto fijo viene dada por:
donde denota evidencia, alguna variable latente que necesita ser marginada y posibles parametrizaciones.
Para obtener una explicación más detallada, consulte Convergencia de una versión de aproximación estocástica de los algoritmos de maximización de expectativas de Bernard Delyon, Marc Lavielle, Eric, Moulines (Ann. Statist., 1999).
Para calcular el paso E, necesitamos tomar una muestra de la posterior. Dado que no es fácil tomar muestras de nuestra posterior, utilizamos el Hamiltoniano de Monte Carlo (HMC). El HMC es un procedimiento de método de Monte Carlo basado en cadenas de Markov que usa gradientes (estado wrt, no parámetros) de la densidad logarítmica posterior no normalizada para proponer nuevas muestras.
Especificar la densidad logarítmica posterior no normalizada es simple: es solo la densidad logarítmica conjunta "fijada" en cualquier cosa que queramos condicionar.
Ahora completamos la configuración del paso E mediante la creación de un núcleo de transición del HMC.
Notas:
Usamos
state_stop_gradient=True
para evitar que el paso M retroceda a través de extracciones del MCMC. (Recuerde, no necesitamos retroceder porque nuestro paso E está parametrizado intencionalmente en los estimadores previos más conocidos).Usamos
tf.placeholder
para que cuando finalmente ejecutemos nuestro grafo de TF, podamos alimentar la muestra MCMC aleatoria de la iteración anterior como el valor de la cadena de la siguiente iteración.Usamos la heurística adaptativa
step_size
de TFP,tfp.mcmc.hmc_step_size_update_fn
.
Ahora configuramos el paso M. Esto es esencialmente lo mismo que una optimización que uno podría hacer en TF.
Concluimos con algunas tareas de limpieza. Debemos decirle a TF que todas las variables están inicializadas. También creamos identificadores para nuestras variables de TF para que podamos print
sus valores en cada iteración del procedimiento.
6.3 Ejecución
En esta sección ejecutamos nuestro grafo de SAEM de TF. El truco principal aquí es introducir nuestro último extracto del núcleo del HMC en la siguiente iteración. Esto se logra mediante nuestro uso de feed_dict
en la llamada sess.run
.
Al parecer, después de ~1500 pasos, nuestras estimaciones de los parámetros se han estabilizado.
6.4 Resultados
Ahora que hemos ajustado los parámetros, generemos una gran cantidad de muestras de la posterior y estudiemos los resultados.
Ahora construimos un diagrama de caja y bigotes del efecto aleatorio . Ordenaremos los efectos aleatorios mediante la disminución de la frecuencia del condado.
En este diagrama de caja y bigotes, observamos que la varianza del efecto aleatorio a nivel de condado aumenta a medida que el condado tiene menos representación en el conjunto de datos. Intuitivamente, esto tiene sentido: deberíamos estar menos seguros sobre el impacto de un determinado condado si tenemos menos evidencia de ello.
7 Comparación lado a lado
Ahora comparamos los resultados de los tres procedimientos. Para hacer esto, calcularemos estimaciones no paramétricas de las muestras de la posterior generadas por Stan y TFP. También compararemos con las estimaciones paramétricas (aproximadas) producidas por el paquete lme4
de R.
El siguiente gráfico muestra la distribución posterior de cada ponderación para cada condado de Minnesota. Mostramos resultados para Stan (rojo), TFP (azul) y R's lme4
(naranja). Sombreamos los resultados de Stan y TFP, por lo que esperamos ver violeta cuando los dos coincidan. Para simplificar, no sombreamos los resultados de R. Cada subgráfico representa un solo condado y está ordenado en frecuencia descendente en orden de escaneo ráster (es decir, de izquierda a derecha y luego de arriba a abajo).
8 Conclusión
En este Colab ajustamos un modelo de regresión lineal de efectos mixtos al conjunto de datos radón. Probamos tres paquetes de software diferentes: R, Stan y TensorFlow Probability. Concluimos con el trazado de las 85 distribuciones posteriores calculadas por los tres distintos paquetes de software.
Apéndice A: HLM de radón alternativo (agregar intercepción aleatoria)
En esta sección describimos un HLM alternativo que también tiene una intersección aleatoria que se asocia con cada condado.
En la "notación de tilde" lme4
de R, este modelo es equivalente a:
log_radon ~ 1 + floor + (1 + log_county_uranium_ppm | county)
Apéndice B: Modelos lineales generalizados de efectos mixtos
En esta sección se ofrece una caracterización más general de los modelos lineales jerárquicos que la que se usa en el cuerpo principal. Este modelo más general se conoce como modelo lineal generalizado de efectos mixtos (GLMM).
Los GLMM son generalizaciones de modelos lineales generalizados (GLM). Los GLMM amplían los GLM mediante la incorporación de ruido aleatorio específico de la muestra en la respuesta lineal predicha. Esto es útil en parte porque permite que las características poco vistas compartan información con las características que se ven con más frecuencia.
Como proceso generativo, un Modelo Lineal Generalizado de Efectos Mixtos (GLMM) se caracteriza por lo siguiente:
ParseError: KaTeX parse error: Expected 'EOF', got '#' at position 70: …e{2.45cm}\text{#̲ for each rando…donde:
En palabras, esto significa que cada categoría de cada grupo está asociada con una MVN i. i. d., . Aunque las extracciones son siempre independientes, solo se distribuyen de forma idéntica para un grupo ; tenga en cuenta que hay exactamente un por cada .
Cuando se combina de forma afín con las características del grupo de una muestra, , el resultado es un ruido específico de la muestra en la -ésima respuesta lineal predicha (que de otro modo sería ).
Cuando estimamos esencialmente estamos estimando la cantidad de ruido que transporta un grupo de efectos aleatorios que, de otro modo, ahogaría la señal presente en .
Hay una variedad de opciones para la función y la función de enlace inverso, . Las opciones comunes son estas:
,
ParseError: KaTeX parse error: Expected 'EOF', got '_' at position 81: …i), \text{total_̲count}=n_i), and,
.
Si desea conocer más posibilidades, consulte el módulo tfp.glm
.