Skip to content
Statistical RethinkingStatistical Rethinking

11.2 Resultados con inflación de ceros

Los resultados con inflación de ceros surgen cuando los datos contienen más ceros de los que un modelo de conteo simple predice. Los modelos de mezcla combinan un proceso que genera ceros con un proceso que genera conteos.

11.2.1 La mezcla con inflación de ceros

Los datos con inflación de ceros provienen de dos procesos:

  1. Con probabilidad π\pi, la observación es siempre cero (cero estructural).
  2. Con probabilidad 1−π1 - \pi, la observación proviene de una distribución de conteo (ej., Poisson).

p(yi)={π+(1−π) pconteo(0)yi=0(1−π) pconteo(yi)yi>0p(y_i) = \begin{cases} \pi + (1-\pi) \, p_{\text{conteo}}(0) & y_i = 0 \\ (1-\pi) \, p_{\text{conteo}}(y_i) & y_i > 0 \end{cases}

# Zero-inflated Poisson: simulate and fit
set.seed(42)
n <- 300
x <- runif(n, 0, 10)

# Process 1: structural zeros (probability depends on x)

logit_pi <- 0.5 - 0.2 * x
pi <- 1 / (1 + exp(-logit_pi))
is_structural <- rbinom(n, 1, pi)

# Process 2: Poisson counts

lambda <- exp(0.3 + 0.15 * x)
y_pois <- rpois(n, lambda)

# Combine

y <- ifelse(is_structural, 0, y_pois)

cat("Zero-inflated data:\n")
cat(" Total zeros:", sum(y == 0), "/", n, "\n")
cat(" Proportion zeros:", round(mean(y == 0), 3), "\n")
cat(" Mean of non-zeros:", round(mean(y[y > 0]), 2), "\n")

# Fit zero-inflated Poisson using pscl package (if available)

# Here we demonstrate the concept with a two-part model

# Part 1: logistic for y > 0

m_zero <- 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("\nTwo-part (hurdle) approximation:\n")
cat(" Zero process: intercept =", round(coef(m_zero)[1], 3),
" slope =", round(coef(m_zero)[2], 3), "\n")
cat(" Count process: intercept =", round(coef(m_count)[1], 3),
" slope =", round(coef(m_count)[2], 3), "\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 = "y vs x", xlab = "x", ylab = "y")
par(mfrow = c(1, 1))
Click Run to execute this code in your browser with WebR

11.2.2 ZIP vs barrera

Tanto los modelos ZIP como los de barrera manejan el exceso de ceros, pero difieren:

  • ZIP: Los ceros pueden venir tanto del proceso estructural como de la Poisson. La Poisson también puede producir ceros.
  • Barrera: Todos los ceros vienen de la barrera. La parte de conteo es una Poisson truncada (sin ceros).
# Compare ZIP and hurdle concepts
set.seed(42)
n <- 500
x <- runif(n, 0, 10)

# ZIP: zeros from structural + Poisson

pi_zip <- 0.3
is_struct <- rbinom(n, 1, pi_zip)
lambda <- exp(0.5 + 0.1 * x)
y_zip <- ifelse(is_struct, 0, rpois(n, lambda))

# Hurdle: zeros only from hurdle, counts are truncated Poisson

p_nonzero <- 1 / (1 + exp(-(0 + 0.2 * x)))
is_nonzero <- rbinom(n, 1, p_nonzero)
y_hurdle <- ifelse(is_nonzero, rpois(n, lambda) + 1, 0) # +1 to avoid 0

cat("ZIP data:\n")
cat(" Zeros:", sum(y_zip == 0), " Mean (y>0):", round(mean(y_zip[y_zip > 0]), 2), "\n")

cat("\nHurdle data:\n")
cat(" Zeros:", sum(y_hurdle == 0), " Mean (y>0):", round(mean(y_hurdle[y_hurdle > 0]), 2), "\n")

cat("\nKey difference:\n")
cat(" ZIP: Poisson can produce 0 (so some zeros are 'count zeros')\n")
cat(" Hurdle: count part starts at 1 (all zeros are 'hurdle zeros')\n")
Click Run to execute this code in your browser with WebR
Rethinking

Los ceros no son todos iguales. En un modelo ZIP, un cero puede significar "esta observación no puede producir un conteo" (cero estructural) o "esta observación podría producir un conteo pero resultó ser cero" (cero Poisson). Esta distinción importa para la interpretación: los ceros estructurales nos dicen sobre idoneidad o participación, mientras que los ceros Poisson nos dicen sobre azar. En un modelo de barrera, todos los ceros son iguales — todos significan "la barrera no fue cruzada". La elección entre ZIP y barrera depende de la pregunta científica: ¿hay dos tipos de ceros, o solo uno?

Resumen de la Sección 11.2

  • Los datos con inflación de ceros tienen más ceros de los que un modelo de conteo predice.
  • ZIP: mezcla de ceros estructurales y Poisson — ceros de dos fuentes.
  • Barrera: todos los ceros vienen de la barrera; la parte de conteo es truncada.
  • Ambos tienen dos predictores lineales: uno para el proceso de ceros, otro para el conteo.
  • Elija basándose en si los ceros vienen de uno o dos procesos.