10.3 Otras regresiones de conteo
Los datos de conteo reales a menudo muestran sobredispersión, inflación de ceros u otras características que el modelo Poisson simple no puede capturar. Los modelos alternativos añaden flexibilidad.
10.3.1 Binomial negativa (Gamma-Poisson)
La binomial negativa (también llamada Gamma-Poisson) añade un parámetro de dispersión, permitiendo que la varianza exceda la media:
Cuando , el modelo se reduce a Poisson. Menor significa más sobredispersión.
# Negative binomial regression for overdispersed counts
set.seed(42)
n <- 100
x <- runif(n, 0, 10)
# Overdispersed data: lambda varies with a Gamma-distributed multiplier
lambda*base <- exp(0.5 + 0.2 * x)
y <- rpois(n, lambda*base * rgamma(n, shape = 3, rate = 3))
# Fit Poisson (wrong)
m_pois <- glm(y ~ x, family = poisson)
# Fit negative binomial (correct)
library(MASS)
m_nb <- glm.nb(y ~ x)
cat("Poisson vs Negative Binomial:\n")
cat(" Poisson: intercept =", round(coef(m_pois)[1], 3),
" slope =", round(coef(m_pois)[2], 3), "\n")
cat(" NegBin: intercept =", round(coef(m_nb)[1], 3),
" slope =", round(coef(m_nb)[2], 3), "\n")
cat(" NegBin dispersion (theta):", round(m_nb$theta, 2), "\n")
cat("\n AIC comparison:\n")
cat(" Poisson:", round(AIC(m_pois), 1), "\n")
cat(" NegBin: ", round(AIC(m_nb), 1), "\n")
if (AIC(m_nb) < AIC(m_pois)) {
cat("\n NegBin preferred (lower AIC).\n")
}10.3.2 Poisson con inflación de ceros
Cuando hay más ceros de lo esperado, un modelo Poisson con inflación de ceros (ZIP) usa una mezcla:
- Con probabilidad , (cero estructural).
- Con probabilidad , .
# Zero-inflated Poisson: simulate and visualize
set.seed(42)
n <- 200
x <- runif(n, 0, 10)
# Structural zeros: 30% of observations always produce 0
pi_struct <- 0.3
is_structural <- rbinom(n, 1, pi_struct)
# Poisson counts for non-structural
lambda <- exp(0.3 + 0.15 * x)
y_pois <- rpois(n, lambda)
# Final: structural zeros override Poisson
y <- ifelse(is_structural, 0, y_pois)
# Count zeros
cat("Zero-inflated data:\n")
cat(" Total zeros:", sum(y == 0), "out of", n, "\n")
cat(" Proportion of zeros:", round(mean(y == 0), 3), "\n")
cat(" Expected zeros from Poisson alone:", round(sum(exp(-lambda)), 1), "\n")
cat(" Extra zeros (structural):", sum(y == 0) - round(sum(exp(-lambda)), 0), "\n")
# Plot
par(mfrow = c(1, 2))
hist(y, breaks = max(y) + 1, col = "steelblue",
main = "Zero-inflated counts", xlab = "y")
plot(x, y, pch = 16, col = adjustcolor("steelblue", 0.5),
main = "Zero-inflated: y vs x", xlab = "x", ylab = "y")
par(mfrow = c(1, 1))10.3.3 Modelos de barrera
Los modelos de barrera separan el proceso en dos partes:
- Barrera: ¿Es o ? (Binario: regresión logística)
- Conteo: Dado , ¿cuál es el conteo? (Poisson truncado)
Esto es diferente del ZIP: en un modelo de barrera, todos los ceros vienen de la barrera. En ZIP, los ceros pueden venir del proceso estructural o de la Poisson.
# Hurdle model concept: two-part model
set.seed(42)
n <- 200
x <- runif(n, 0, 10)
# Part 1: probability of non-zero (logistic)
p_nonzero <- 1 / (1 + exp(-(-1 + 0.3 * x)))
is_nonzero <- rbinom(n, 1, p_nonzero)
# Part 2: count given non-zero (truncated Poisson)
lambda <- exp(0.5 + 0.1 * x)
y_count <- rpois(n, lambda)
# Truncate at 1 (no zeros in the count part)
y_count <- y_count + 1
# Combine
y <- ifelse(is_nonzero, y_count, 0)
cat("Hurdle model data:\n")
cat(" Zeros:", sum(y == 0), "\n")
cat(" Non-zeros:", sum(y > 0), "\n")
cat(" Mean of non-zeros:", round(mean(y[y > 0]), 2), "\n")
# Fit two-part model
# Part 1: logistic regression for y > 0
m_hurdle <- glm(I(y > 0) ~ x, family = binomial)
# Part 2: Poisson for y given y > 0
m_count <- glm(y[y > 0] ~ x[y > 0], family = poisson)
cat("\nHurdle model:\n")
cat(" Part 1 (y > 0): intercept =", round(coef(m_hurdle)[1], 3),
" slope =", round(coef(m_hurdle)[2], 3), "\n")
cat(" Part 2 (count): intercept =", round(coef(m_count)[1], 3),
" slope =", round(coef(m_count)[2], 3), "\n")Elija el modelo basándose en el proceso generador de datos. La Poisson, la binomial negativa, ZIP y los modelos de barrera son todas herramientas para datos de conteo, pero responden preguntas diferentes. ¿Sobredispersión? Use binomial negativa. ¿Demasiados ceros de un proceso separado? Use ZIP. ¿Demasiados ceros porque algunas observaciones nunca empiezan? Use un modelo de barrera. La elección debe guiarse por la teoría, no solo por qué modelo ajusta mejor. Las comprobaciones predictivas a posteriori ayudan a verificar que el modelo elegido reproduce las características clave de los datos.
Resumen de la Sección 10.3
- Binomial negativa (Gamma-Poisson): añade un parámetro de dispersión para conteos sobredispersados.
- Poisson con inflación de ceros (ZIP): mezcla de ceros estructurales y conteos Poisson.
- Modelo de barrera: separa la decisión de contar del conteo mismo.
- Elija basándose en el proceso generador de datos, no solo en el ajuste.
- Siempre use comprobaciones predictivas a posteriori para verificar el modelo.