Estadística Bayesiana

Arqueólogos bayesianos

Se ve que hay arqueólogos bayesianos. Un problema con el que se encuentran es que tropiezan con cacharros antiguos y quieren estimar su antigüedad.

Así que prueban distintos métodos (¿químicos?), cada uno de los cuales con su precisión, y acaban recopilando una serie de estimaciones y errores. Obviamente, tienen que combinarlas de alguna manera.

El modelo más simple es

$$ M_i \sim N(\mu, \sigma_i)$$

donde $\mu$ es la antigüedad (desconocida) del artefacto y los $\sigma_i$ son las varianzas distintas de los distintos métodos de medida, que arrojan las estimaciones $M_i$.

Militancia y datos

Allá por el 2007 publicó The Independent una portada en que se retractaba. El diario había sido un histórico defensor de la legalización de la marihuana. Ese día hizo público su cambio de postura. Al parecer, motivada por las evidencias sobre los efectos sobre la salud mental.

Este fin de semana he asistido a una serie de conferencias. En una de ellas participaba el representante de una organización que:

  • Adoptaba de partida una posición militante, de parte, en cierto asunto de interés público.
  • Se definía como data driven, evidence driven, etc.

La pregunta obvia y que no tuve ocasión de plantear (por eso la traigo aquí) es la siguiente: si los datos y la evidencia se obstinaran en subrayar la bondad de la posición contraria a la que actualmente mantienen, ¿cuál de sus dos principios abandonarían primero?

Trucos cutrebayesianos

El contexto

Cada día $i$ ocurren eventos de cierta naturaleza (transacciones, fallecimientos, infartos, etc.) que interesa contar.

El problema

El número de eventos $n_i$ que ocurren el día $i$ no se conoce el día $i$ sino que va siendo conocido progresivamente los días $i+1, \dots$. Pero hace falta una estimación de $n_i$ antes del fin del mundo.

Los datos

  • La distribución de los $n_i$ (basados en el histórico).
  • La proporción (probabilidad) $p_\Delta$ de eventos del día $i$ que se conocen el día $i+\Delta$.

La solución prebayesiana

La h-filosofía de la estadística en once puntos

  • La estadística tiene que estar totalmente integrada en la investigación: el diseño experimental es fundamental.
  • Que no te asuste utilizar métodos modernos
  • Preserva toda la información disponible en los datos: evita categorizar los predictores continuos y los valores predichos
  • No asumas que algo opera linealmente
  • Ten en cuenta la incerditumbre sobre el (no del) modelo y trata de minimizarlo usando conocimiento previo sobre la materia
  • Usa remuestreos
  • Considera el tamaño muestral una variable aleatoria cuando sea posible
  • Usa estadística bayesiana siempre que sea posible
  • Usa buenos gráficos frecuentemente
  • Para que sea creíble, la investigación tiene que ser reproducible
  • Toda la manipulación de datos y el análisis estadístico tiene que ser reproducible

Weapons of Math Destruction

Así se titula un libro que no he leído y que, pese a lo cual, como los malos críticos, voy a comentar. Los libros suelen estar plagados de hojarasca, tal vez porque de otra manera no se puede hacer crecer un par de ideas más o menos originales a las cientoypico páginas como mínimo que uno espera encontrar entre dos tapas. El relato corto no da caché. Y yo ando corto de tiempo.

GLMs con prioris (casi) a voluntad

Esto que cuento hoy puede ser muy útil: cómo mejorar los GLMs mediante la introducción de prioris (casi) a voluntad sobre los coeficientes. Usando el paquete arm de R, claro.

De momento y porque aún tengo sucios los datos sobre los que me gustaría aplicar el modelo, extraeré un ejemplo de la ayuda de la función principal del paquete, bayesglm.

Primero, preparo unos datos:

n <- 100
x1 <- rnorm (n)
x2 <- rbinom (n, 1, .5)
b0 <- 1
b1 <- 1.5
b2 <- 2
y <- rbinom (n, 1, invlogit(b0+b1*x1+b2*x2))

Comenzamos con un glm de toda la vida.

Metropolis-Hastings en Scala

Tengo la sensación de que un lenguaje funcional (como Scala) está particularmente bien adaptado al tipo de operaciones que exige MCMC.

Juzguen Vds.

Primero, genero datos en R:

datos <- rnorm(500, 0.7, 1)
writeLines(as.character(datos), "/tmp/datos.txt")

Son de una normal con media 0.7. En el modelo que vamos a crear, suponemos conocida (e igual a 1) la varianza de la normal y trataremos de estimar la media suponiéndole una distribución a priori normal estándar. Y con Scala, así:

¿Nos vemos en el Machine Learning Spain XII?

Porque voy a dar una charla en él. Es este jueves, por la tarde, en el Campus de Google de Madrid (los detalles).

Se tratará de una introducción a y justificación de aproximaciones más bayesianas de lo habitual a problemas reales del análisis de datos. Que comenzará con una explicación sobre cuándo 100% no significa 100% para terminar con lo que viene siéndome habitual últimamente: un ejemplo en rstan con su discusión.