Skip to content
Statistical RethinkingStatistical Rethinking

2.2 Construyendo un modelo

Un modelo bayesiano se construye a partir de tres ingredientes: una historia sobre cómo surgen los datos, los parámetros que aparecen en esa historia, y distribuciones a priori que codifican lo que sabemos antes de ver los datos. Usando el ejemplo del lanzamiento del globo de la Sección 2.1, esta sección muestra cómo combinar estos ingredientes en una distribución a posteriori.

2.2.1 Los tres ingredientes de un modelo bayesiano

Todo modelo bayesiano tiene tres componentes:

  1. La verosimilitud: Una función que especifica la plausibilidad de los datos, dados los parámetros. Nos dice cómo los datos podrían surgir del modelo.
  2. Los parámetros: Las cantidades desconocidas que queremos estimar. Indexan la familia de posibles procesos generadores de datos.
  3. La distribución a priori: Una distribución sobre los parámetros que codifica lo que sabemos (o creemos) antes de ver los datos.

La distribución a posteriori combina los tres:

p(θ∣D)=p(D∣θ)⋅p(θ)p(D)∝p(D∣θ)⋅p(θ)p(\theta \mid D) = \frac{p(D \mid \theta) \cdot p(\theta)}{p(D)} \propto p(D \mid \theta) \cdot p(\theta)

La proporcionalidad es suficiente para la mayoría de los cálculos, porque siempre podemos normalizar al final.

2.2.2 El modelo de lanzamiento del globo

Para el ejemplo del lanzamiento del globo, el modelo es:

  • Verosimilitud: D∼Binomial(n,p)D \sim \text{Binomial}(n, p) — el número de aguas en nn lanzamientos sigue una distribución binomial con probabilidad pp.
  • Parámetro: pp — la proporción del globo cubierta por agua.
  • Distribución a priori: p∼Uniform(0,1)p \sim \text{Uniform}(0, 1) — todos los valores de pp son igualmente plausibles antes de ver los datos.

Combinando estos, la posterior es:

p(p∣D)∝Binomial(D∣n,p)⋅Uniform(p)p(p \mid D) \propto \text{Binomial}(D \mid n, p) \cdot \text{Uniform}(p)

# Build the globe-tossing model from its three ingredients
# 1. Parameter grid
p_grid <- seq(from = 0, to = 1, length.out = 100)

# 2. Prior: uniform over [0, 1]

prior <- rep(1, length(p_grid))

# 3. Likelihood: binomial probability of 6 waters in 9 tosses

likelihood <- dbinom(6, size = 9, prob = p_grid)

# 4. Posterior: multiply and normalize

unstd_posterior <- likelihood * prior
posterior <- unstd_posterior / sum(unstd_posterior)

# Summarize

cat("Posterior mean:", round(sum(p_grid * posterior), 4), "\n")
cat("Posterior mode:", round(p_grid[which.max(posterior)], 4), "\n")
cat("95% credible interval: [",
round(p_grid[which(cumsum(posterior) >= 0.025)[1]], 4), ",",
round(p_grid[which(cumsum(posterior) >= 0.975)[1]], 4), "]\n")
Click Run to execute this code in your browser with WebR

La media a posteriori es aproximadamente 0.670.67, que coincide con la proporción observada 6/96/9. El intervalo de credibilidad del 95% nos da un rango de valores plausibles para pp.

2.2.3 Una malla más refinada

Con 100 puntos de malla en lugar de 20, la posterior es mucho más suave. Comparemos:

# Compare 20-point and 100-point grid approximations
par(mfrow = c(1, 2))

# 20-point grid

p20 <- seq(0, 1, length.out = 20)
post20 <- dbinom(6, 9, p20) / sum(dbinom(6, 9, p20))
plot(p20, post20, type = "b", pch = 16, col = "steelblue",
xlab = "p", ylab = "posterior", main = "20 grid points", lwd = 2)

# 100-point grid

p100 <- seq(0, 1, length.out = 100)
post100 <- dbinom(6, 9, p100) / sum(dbinom(6, 9, p100))
plot(p100, post100, type = "l", col = "firebrick",
xlab = "p", ylab = "posterior", main = "100 grid points", lwd = 2)

par(mfrow = c(1, 1))
Click Run to execute this code in your browser with WebR

La malla de 20 puntos produce una posterior dentada, mientras que la de 100 puntos es suave. En la práctica, usamos suficientes puntos de malla para capturar la forma de la posterior sin cálculo excesivo. Para modelos con muchos parámetros, la aproximación por malla se vuelve impracticable, y pasamos a la aproximación cuadrática o MCMC (Capítulo 8).

2.2.4 De la historia al modelo

El paso más importante al construir un modelo bayesiano es escribir la historia de los datos. La historia describe cómo surgen los datos, paso a paso. Para el ejemplo del lanzamiento del globo:

  1. La verdadera proporción de agua en el globo es pp.
  2. Cada lanzamiento es independiente, y la probabilidad de aterrizar sobre agua es pp.
  3. El número de aguas en nn lanzamientos sigue una distribución binomial.

Esta historia se traduce directamente en la función de verosimilitud. Los parámetros surgen naturalmente de la historia, y la distribución a priori codifica lo que sabemos sobre ellos.

# Simulate data from the globe-tossing story
# True proportion of water
p_true <- 0.7

# Simulate 9 tosses

set.seed(42)
tosses <- rbinom(9, size = 1, prob = p_true)
cat("Simulated tosses (1=water, 0=land):", tosses, "\n")
cat("Number of waters:", sum(tosses), "\n")

# Now infer p from the simulated data

p_grid <- seq(0, 1, length.out = 100)
likelihood <- dbinom(sum(tosses), size = 9, prob = p_grid)
posterior <- likelihood / sum(likelihood)

cat("Posterior mean:", round(sum(p_grid * posterior), 3), "\n")
cat("True p:", p_true, "\n")
Click Run to execute this code in your browser with WebR

Note que la media a posteriori no es exactamente igual al pp verdadero. Esto es esperado — la posterior refleja lo que podemos aprender de los datos, no la verdad. Con más lanzamientos, la posterior se concentraría alrededor del valor verdadero.

2.2.5 Las distribuciones a priori como modelos

Una distribución a priori no es solo una necesidad técnica. Es un modelo de lo que sabemos. Diferentes distribuciones a priori representan diferentes estados de conocimiento:

  • Distribución uniforme: No sabemos nada sobre pp; todos los valores son igualmente plausibles.
  • Distribución informativa: Tenemos conocimiento de fondo que restringe pp.
  • Distribución escéptica: Concentramos probabilidad cerca de un valor nulo (ej., p=0.5p = 0.5).
# Compare priors as models of knowledge
p_grid <- seq(0, 1, length.out = 200)
likelihood <- dbinom(6, size = 9, prob = p_grid)

# Uniform: "I know nothing"

prior_unif <- rep(1, 200)

# Beta(2,2): "I weakly believe p is near 0.5"

prior_beta22 <- dbeta(p_grid, 2, 2)

# Beta(5,5): "I strongly believe p is near 0.5"

prior_beta55 <- dbeta(p_grid, 5, 5)

# Beta(1,1) = Uniform (for reference)

prior_beta11 <- dbeta(p_grid, 1, 1)

par(mfrow = c(2, 2))

for (prior in list(prior*unif, prior_beta22, prior_beta55, prior_beta11)) {
post <- (likelihood * prior) / sum(likelihood _ prior)
plot(p_grid, post, type = "l", lwd = 2, col = "steelblue",
xlab = "p", ylab = "posterior",
main = sprintf("Posterior mean: %.3f", round(sum(p_grid * post), 3)))
abline(v = 6/9, lty = 2, col = "gray50")
}

par(mfrow = c(1, 1))
Click Run to execute this code in your browser with WebR

La línea discontinua en cada panel muestra la proporción observada 6/9≈0.6676/9 \approx 0.667. La distribución uniforme deja que los datos hablen libremente. La distribución Beta(2,2) atrae suavemente la posterior hacia 0.5. La distribución Beta(5,5) atrae más fuertemente. Esto es regularización — la distribución a priori previene que el modelo sobreajuste a muestras pequeñas.

Rethinking

Las distribuciones a priori no son sesgos subjetivos. Una crítica común a la inferencia bayesiana es que las distribuciones a priori introducen subjetividad. Pero todo modelo estadístico tiene supuestos — la pregunta es si son explícitos u ocultos. Una distribución uniforme no es "objetiva"; es una afirmación específica de que todos los valores del parámetro son igualmente plausibles, lo cual a menudo es irreal. Una distribución a priori informativa hace visibles y verificables los supuestos del modelo. El peligro real no está en tener distribuciones a priori, sino en no saber qué implican.

Overthinking

Distribuciones a priori conjugadas para la binomial. La distribución Beta es la distribución a priori conjugada para la verosimilitud binomial. Esto significa que si la distribución a priori es Beta(α,β)\text{Beta}(\alpha, \beta) y los datos son ww aguas en nn lanzamientos, la posterior también es una distribución Beta:

p∣D∼Beta(α+w,β+n−w)p \mid D \sim \text{Beta}(\alpha + w, \beta + n - w)

Para el ejemplo del lanzamiento del globo con una distribución uniforme Beta(1,1)\text{Beta}(1, 1) y datos w=6w = 6, n=9n = 9:

p∣D∼Beta(1+6,1+3)=Beta(7,4)p \mid D \sim \text{Beta}(1 + 6, 1 + 3) = \text{Beta}(7, 4)

La media a posteriori de una distribución Beta(α,β)\text{Beta}(\alpha, \beta) es α/(α+β)=7/11≈0.636\alpha / (\alpha + \beta) = 7/11 \approx 0.636, que es ligeramente inferior a la proporción cruda 6/9≈0.6676/9 \approx 0.667 debido a la influencia de la distribución a priori.

Las distribuciones a priori conjugadas son convenientes porque la posterior tiene una forma cerrada. Sin embargo, en la mayoría de los modelos reales, la conjugación no está disponible, y dependemos de métodos numéricos.

Resumen de la Sección 2.2

  • Un modelo bayesiano tiene tres ingredientes: verosimilitud, parámetros y distribución a priori.
  • La historia de los datos traduce una narrativa sobre cómo surgen los datos en un modelo matemático.
  • La posterior es proporcional a la verosimilitud por la distribución a priori: p(θ∣D)∝p(D∣θ)⋅p(θ)p(\theta \mid D) \propto p(D \mid \theta) \cdot p(\theta).
  • La aproximación por malla calcula la posterior en valores discretos del parámetro; más puntos de malla producen una posterior más suave.
  • Las distribuciones a priori son modelos de conocimiento, no sesgos subjetivos. Diferentes distribuciones representan diferentes estados de información.
  • La distribución Beta es la distribución a priori conjugada para la verosimilitud binomial, produciendo una posterior de forma cerrada.