Skip to content
Statistical RethinkingStatistical Rethinking

10.2 Regresión de Poisson

La regresión Poisson modela datos de conteo usando un enlace log. Asume que el logaritmo del conteo esperado es una función lineal de los predictores.

10.2.1 El modelo Poisson

log⁡(λi)=α+βxi,yi∼Poisson(λi)\log(\lambda_i) = \alpha + \beta x_i, \quad y_i \sim \text{Poisson}(\lambda_i)

El enlace log asegura λi>0\lambda_i > 0. El supuesto clave es que media = varianza (E[yi]=Var(yi)=λiE[y_i] = \text{Var}(y_i) = \lambda_i).

# Poisson regression: tool count and population
set.seed(42)
n <- 30

# Simulate: tool count increases with log population

log_pop <- runif(n, 7, 12)
lambda_true <- exp(-2 + 0.3 * log_pop)
total_tools <- rpois(n, lambda_true)

# Fit Poisson regression

m <- glm(total_tools ~ log_pop, family = poisson)

cat("Poisson regression:\n")
cat(" Intercept:", round(coef(m)[1], 3), "\n")
cat(" log_pop:", round(coef(m)[2], 3), "\n")

# Interpret: each unit increase in log_pop multiplies expected count by exp(beta)

cat("\n Multiplicative effect of log_pop:", round(exp(coef(m)[2]), 3), "\n")

# Predicted counts

cat("\nPredicted counts:\n")
for (lp in c(8, 10, 12)) {
cat(sprintf(" log_pop = %d: lambda = %.1f\n", lp, exp(coef(m)[1] + coef(m)[2] * lp)))
}

# Plot

x_seq <- seq(7, 12, length.out = 100)
log_pred <- coef(m)[1] + coef(m)[2] * x_seq
lambda_pred <- exp(log_pred)

plot(log_pop, total_tools, pch = 16, col = "steelblue",
xlab = "log(population)", ylab = "Total tools",
main = "Poisson regression: tools vs population")
lines(x_seq, lambda_pred, lwd = 2, col = "firebrick")
Click Run to execute this code in your browser with WebR

10.2.2 Exposición y offset

Cuando las observaciones tienen diferente exposición (ej., diferentes períodos de tiempo o áreas), incluimos un offset:

log⁡λiexposici0˘0f3ni=α+βxi\log\frac{\lambda_i}{\text{exposici\u00f3n}_i} = \alpha + \beta x_i

log⁡(λi)=log⁡(exposici0˘0f3ni)+α+βxi\log(\lambda_i) = \log(\text{exposici\u00f3n}_i) + \alpha + \beta x_i

# Poisson regression with offset (exposure)
set.seed(42)
n <- 50

# Different exposure times

exposure <- runif(n, 1, 10)

# Rate depends on x

x <- runif(n, 0, 5)
rate <- exp(-1 + 0.4 _ x) # events per unit time
counts <- rpois(n, rate _ exposure)

# Fit with offset

m_offset <- glm(counts ~ x + offset(log(exposure)), family = poisson)

cat("Poisson regression with offset:\n")
cat(" Intercept:", round(coef(m_offset)[1], 3), "\n")
cat(" x:", round(coef(m_offset)[2], 3), "\n")
cat("\n The offset adjusts for different exposure times.\n")
cat(" The coefficient on x is the rate ratio per unit x.\n")

# Compare without offset (wrong!)

m_no_offset <- glm(counts ~ x, family = poisson)
cat("\nWithout offset (wrong):\n")
cat(" x:", round(coef(m_no_offset)[2], 3), "(biased)\n")
Click Run to execute this code in your browser with WebR

10.2.3 Verificación de sobredispersión

La Poisson asume media = varianza. La sobredispersión (varianza > media) es común y lleva a subestimar la incertidumbre.

# Check for overdispersion
set.seed(42)
n <- 100
x <- runif(n, 0, 10)

# Overdispersed counts: variance > mean

lambda <- exp(0.5 + 0.2 * x)

# Add extra variation

y <- rpois(n, lambda * rgamma(n, shape = 2, rate = 2))

# Fit Poisson

m <- glm(y ~ x, family = poisson)

# Check: mean vs variance

cat("Overdispersion check:\n")
cat(" Mean of y:", round(mean(y), 2), "\n")
cat(" Variance of y:", round(var(y), 2), "\n")
cat(" Ratio (var/mean):", round(var(y) / mean(y), 2), "\n")

if (var(y) / mean(y) > 1.5) {
cat("\n Overdispersion detected! Ratio > 1\n")
cat(" Consider negative-binomial or gamma-Poisson model.\n")
}

# Deviance-based overdispersion test

deviance_stat <- deviance(m) / df.residual(m)
cat("\n Deviance / df:", round(deviance_stat, 2), "\n")
cat(" (Values >> 1 indicate overdispersion)\n")
Click Run to execute this code in your browser with WebR
Rethinking

El supuesto Poisson es fuerte. La distribución Poisson asume que la media es igual a la varianza. Este es un supuesto muy específico — significa que el proceso de conteo no tiene heterogeneidad no observada. En la práctica, los conteos casi siempre tienen más varianza de la que permite la Poisson, porque hay factores no observados que varían entre observaciones. Esto es sobredispersión, y es la regla, no la excepción. Siempre verifique. Si está presente, use un modelo que permita varianza extra (Sección 10.3).

Resumen de la Sección 10.2

  • Regresión Poisson: log⁡(λi)=α+βxi\log(\lambda_i) = \alpha + \beta x_i con yi∼Poisson(λi)y_i \sim \text{Poisson}(\lambda_i).
  • Los coeficientes son razones de tasas logarítmicas — eβe^\beta es el efecto multiplicativo.
  • Use un offset para exposición variable: log⁡(λi)=log⁡(exposici0˘0f3ni)+α+βxi\log(\lambda_i) = \log(\text{exposici\u00f3n}_i) + \alpha + \beta x_i.
  • Verifique sobredispersión: si varianza > media, la Poisson subestima la incertidumbre.
  • La sobredispersión es la regla, no la excepción — siempre verifique.