Numpyro

SVI, ELBO y todas esas cosas: un ejemplo básico

I.

Va por delante que esta entrada está basada en esto. Se trata, de hecho, de las notas que he extraído mientras profundizaba en la implementación que hace NumPyro de la inferencia variacional, el ELBO, etc.

Antes de nada, nos quitamos los requisitios de en medio:

import jax.numpy as jnp
import matplotlib.pyplot as plt
import numpyro

import numpyro.distributions as dist
import numpyro.distributions.constraints as constraints

from jax import random
from numpyro.infer import SVI, Predictive, Trace_ELBO, MCMC, NUTS

rng_key = random.PRNGKey(seed=42)

Definimos un consabidísimo modelo —tiradas de moneda con una priori $\text{Beta}(10,10)$— y unos datos —sesenta caras y cuarenta cruces—:

Tutorial de numpyro (I): modelos probabilísticos

I.

Las distintas disciplinas estudian aspectos diferentes de la realidad. Para ello crean modelos. Un modelo es una representación teórica y simplificada de un fenómeno real. Por un lado, el territorio; por el otro, el mapa.

Los físicos modelan cómo oscila un péndulo y se permiten obviar cosas como el rozamiento del aire. Los economistas, la evolución del PIB o la inflación. Los biólogos, la absorción de una determinada sustancia por un tejido. Los ingenieros, el comportamiento aerodinámico de un prototipo. Etc.

El modelo 3PL, ajustado con numpyro

Tenía ganas de meterle mano al modelo 3PL de la teoría de respuesta al ítem. Había un par de motivos para no hacerlo: que viene del mundo de la sicometría, que es un rollo macabeo, y que sirve —en primera aproximación— para evaluar evaluaciones (preguntas de examen, vamos), un asunto muy alejado de mis intereses. Pero acabaron pesando más:

  • Que se trata de un modelo generativo en el que los coeficientes tienen una función —y por tanto, interpretación— determinada y prefijada. Es decir, un modelo ad hoc construido desde primeros principios y no usando herramientas genéricas —piénsese en las anovas o similares—.
  • Que exige métodos de ajuste específicos. Por ahí usan MV vía EM.
  • Que pide a gritos una aproximación bayesiana, sobre todo a la hora de prefijar la distribución de las habilidades de los alumnos.
  • Que, finalmente, puede aplicarse fuera del estrecho ámbito de la teoría de la respuesta al ítem.
  • Y, además, que es fácilmente generalizable.

El problema en el que el modelo 3PL se propone como solución es sencillo:

Ajuste de modelos lineales y predicción de valores con numpyro

Una de mis aficiones más excusables es la de participar en el mercado de predicciones de Hypermind. Una de las preguntas que se suele plantear anualmente —y en la que, gracias a apostar contra el común/apocalíptico sentir, logré pingües beneficios el año pasado— tiene que ver con cuándo nos vamos a morir todos. De otra manera:

Este año también quiero participar, pero como no sabía por dónde empezar, he bajado los datos. En su perspectiva más relevante, tienen este aspecto:

Una regresión de Poisson casi trivial con numpyro

El otro día hubo, parece, cierto interés por modelar la siguiente serie histórica de datos:

Notas al respecto:

  1. El eje horizontal representa años, pero da igual cuáles.
  2. El eje vertical son números naturales, conteos de cosas, cuya naturaleza es poco relevante aquí, más allá de que se trata de eventos independientes.
  3. Se especulaba con un posible cambio de tendencia debido a una intervención ocurrida en alguno de los años centrales de la serie.

Lo que se ve es el resultado del ajuste de un modelo de Poisson casi trivial. Es casi trivial porque utiliza el tipo más simple de splines para modelar una tendencia quebrada en un punto desconocido, uno de los parámetros del modelo.