Considere un modelo de obstáculo que predice datos de conteo y
de un predictor normal x
:
set.seed(1839)
# simulate poisson with many zeros
x <- rnorm(100)
e <- rnorm(100)
y <- rpois(100, exp(-1.5 + x + e))
# how many zeroes?
table(y == 0)
FALSE TRUE
31 69
En este caso, tengo datos de recuento con 69 ceros y 31 recuentos positivos. No importa por el momento que este es, por definición del procedimiento de generación de datos, un proceso de Poisson, porque mi pregunta es sobre los modelos de obstáculo.
Digamos que quiero manejar estos ceros en exceso por un modelo de obstáculo. De mi lectura sobre ellos, parecía que los modelos de obstáculo no son modelos reales per se, solo están haciendo dos análisis diferentes secuencialmente. Primero, una regresión logística que predice si el valor es positivo o no versus cero. En segundo lugar, una regresión de Poisson truncada a cero con solo incluir los casos distintos de cero. Este segundo paso me pareció incorrecto porque es (a) tirar datos perfectamente buenos, lo que (b) podría conducir a problemas de potencia ya que gran parte de los datos son ceros, y (c) básicamente no es un "modelo" en sí mismo , pero solo ejecuta secuencialmente dos modelos diferentes.
Así que probé un "modelo de obstáculo" en lugar de simplemente ejecutar la regresión de Poisson logística y truncada por separado. Me dieron respuestas idénticas (estoy abreviando la salida, por brevedad):
> # hurdle output
> summary(pscl::hurdle(y ~ x))
Count model coefficients (truncated poisson with log link):
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.5182 0.3597 -1.441 0.1497
x 0.7180 0.2834 2.533 0.0113 *
Zero hurdle model coefficients (binomial with logit link):
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.7772 0.2400 -3.238 0.001204 **
x 1.1173 0.2945 3.794 0.000148 ***
> # separate models output
> summary(VGAM::vglm(y[y > 0] ~ x[y > 0], family = pospoisson()))
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.5182 0.3597 -1.441 0.1497
x[y > 0] 0.7180 0.2834 2.533 0.0113 *
> summary(glm(I(y == 0) ~ x, family = binomial))
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 0.7772 0.2400 3.238 0.001204 **
x -1.1173 0.2945 -3.794 0.000148 ***
---
Esto me parece desagradable ya que muchas representaciones matemáticas diferentes del modelo incluyen la probabilidad de que una observación no sea cero en la estimación de casos de conteo positivo, pero los modelos que ejecuté anteriormente se ignoran por completo. Por ejemplo, esto es del Capítulo 5, página 128 de los Modelos lineales generalizados de Smithson & Merkle para variables dependientes limitadas categóricas y continuas :
... Segundo, la probabilidad de que asuma cualquier valor (cero y los enteros positivos) debe ser igual a uno. Esto no está garantizado en la ecuación (5.33). Para tratar este problema, multiplicamos la probabilidad de Poisson por la probabilidad de éxito de Bernoulli . Estos problemas requieren que expresemos el modelo de obstáculo anterior como donde , ,π
...λ=exp(xβ)π=logit-1(zγ)xzβγson las covariables para el modelo de Poisson, son las covariables para el modelo de regresión logística, y y son los respectivos coeficientes de regresión ... .
Al hacer que los dos modelos estén completamente separados el uno del otro, que parece ser lo que hacen los modelos de obstáculo, no veo cómo se incorpora en la predicción de casos de conteo positivo. Pero según cómo pude replicar la función simplemente ejecutando dos modelos diferentes, no veo cómo juega un papel en el Poisson truncado regresión en absoluto. logit-1(z γ )hurdle
¿Estoy entendiendo correctamente los modelos de obstáculo? Parece que dos solo ejecutan dos modelos secuenciales: Primero, una logística; Segundo, un Poisson, ignorando completamente los casos en que . Agradecería si alguien pudiera aclarar mi confusión con el negocio .π
Si estoy en lo cierto, eso es lo que son los modelos de obstáculo, ¿cuál es la definición de un modelo de "obstáculo", en general? Imagine dos escenarios diferentes:
Imagine que modela la competitividad de las elecciones electorales observando los puntajes de competitividad (1 - (proporción de votos del ganador - proporción de votos del segundo lugar)). Esto es [0, 1), porque no hay vínculos (por ejemplo, 1). Un modelo de obstáculo tiene sentido aquí, porque hay un proceso (a) ¿fue la elección sin oposición? y (b) si no fuera así, ¿qué predijo la competitividad? Entonces, primero hacemos una regresión logística para analizar 0 vs. (0, 1). Luego hacemos una regresión beta para analizar los casos (0, 1).
Imagine un estudio psicológico típico. Las respuestas son [1, 7], como una escala Likert tradicional, con un enorme efecto de techo en 7. Se podría hacer un modelo de obstáculo que sea la regresión logística de [1, 7) frente a 7, y luego una regresión de Tobit para todos los casos donde las respuestas observadas son <7.
¿Sería seguro llamar a estas dos situaciones modelos de "obstáculo" , incluso si los calculo con dos modelos secuenciales (logístico y luego beta en el primer caso, logístico y luego Tobit en el segundo)?
fuente
pscl::hurdle
, pero se ve igual en la Ecuación 5 aquí: cran.r-project.org/web/packages/pscl/vignettes/countreg.pdf O tal vez yo ¿Todavía me falta algo básico que me haga clic?hurdle()
. Sin embargo, en nuestro emparejado / viñeta, intentamos enfatizar los bloques de construcción más generales.Respuestas:
Separar el log-verosimilitud
Es correcto que la mayoría de los modelos de obstáculo se puedan estimar por separado (yo diría, en lugar de secuencialmente ). La razón es que la probabilidad logarítmica se puede descomponer en dos partes que se pueden maximizar por separado. Esto se debe a que es solo un factor de escala en (5.34) que se convierte en un término aditivo en la probabilidad logarítmica.π^
En la notación de Smithson & Merkle: donde es la densidad de la distribución de Poisson (no truncada) y es el factor del truncamiento cero.
Entonces resulta obvio que (modelo logit binario) y (modelo de Poisson truncado a cero) se pueden maximizar por separado, lo que lleva a las mismas estimaciones de parámetros, covarianzas, etc., como en el caso donde se maximizan conjuntamente.ℓ 2 ( β )ℓ1(γ) ℓ2(β)
La misma lógica también funciona si la probabilidad de obstáculo cero no se parametriza a través de un modelo logit sino cualquier otro modelo de regresión binaria, por ejemplo, una distribución de recuento censurada a la derecha en 1. Y, por supuesto, también podría ser otra distribución de conteo, por ejemplo, binomio negativo. La separación completa solo se rompe si hay parámetros compartidos entre el obstáculo cero y la parte de recuento truncado.f ( ⋅ )π f(⋅)
Un ejemplo destacado sería si se emplean distribuciones binomiales negativas con parámetros separados pero comunes en los dos componentes del modelo. (Esto está disponible en el paquete de R-Forge, el sucesor de la implementación).θμ θ
hurdle(..., separate = FALSE, dist = "negbin", zero.dist = "negbin")
countreg
pscl
Preguntas concretas
(a) Desechar datos perfectamente buenos: en su caso sí, en general no. Tiene datos de un solo modelo de Poisson sin exceso de ceros (aunque muchos ceros ). Por lo tanto, no es necesario estimar modelos separados para ceros y no ceros. Sin embargo, si las dos partes están realmente impulsadas por diferentes parámetros, entonces es necesario tener esto en cuenta.
(b) Podría conducir a problemas de energía ya que gran parte de los datos son ceros: no necesariamente. Aquí, tiene un tercio de las observaciones que son "éxitos" (travesías de obstáculos). Esto no se consideraría muy extremo en un modelo de regresión binaria. (Por supuesto, si no es necesario estimar modelos separados, ganarías poder).
(c) Básicamente no es un "modelo" en sí mismo, sino que solo ejecuta secuencialmente dos modelos diferentes: esto es más filosófico y no intentaré dar "una" respuesta. En cambio, señalaré puntos de vista pragmáticos. Para la estimación del modelo , puede ser conveniente enfatizar que los modelos están separados porque, como muestra, es posible que no necesite una función dedicada para la estimación. Para la aplicación del modelo , por ejemplo, para predicciones o residuos, etc., puede ser más conveniente ver esto como un modelo único.
(d) ¿Sería seguro llamar a estas dos situaciones modelos de "obstáculo": en principio sí. Sin embargo, la jerga puede variar de una comunidad a otra. Por ejemplo, la regresión beta de obstáculo cero es más comúnmente (y muy confusamente) llamada regresión beta inflada a cero. Personalmente, este último me parece muy engañoso porque la distribución beta no tiene ceros que puedan inflarse, pero de todos modos es el término estándar en la literatura. Además, el modelo tobit es un modelo censurado y, por lo tanto, no es un modelo de obstáculo. Sin embargo, podría extenderse mediante un modelo probit (o logit) más un modelo normal truncado . En la literatura econométrica esto se conoce como el modelo de dos partes de Cragg.
Comentarios de software
El
countreg
paquete en R-Forge en https://R-Forge.R-project.org/R/?group_id=522 es la implementación sucesora ahurdle()
/zeroinfl()
desdepscl
. La razón principal por la que (todavía) no está en CRAN es que queremos revisar lapredict()
interfaz, posiblemente de una manera que no sea totalmente compatible con versiones anteriores. De lo contrario, la implementación es bastante estable. En comparaciónpscl
, viene con algunas características interesantes, por ejemplo:Una
zerotrunc()
función que usa exactamente el mismo código quehurdle()
para la parte truncada a cero del modelo. Por lo tanto, ofrece una alternativa aVGAM
.Además, funciona como d / p / q / r para las distribuciones de recuento truncadas a cero, con obstáculos e infladas a cero. Esto facilita verlos como modelos "uno" en lugar de modelos separados.
Para evaluar la bondad del ajuste, hay disponibles pantallas gráficas como rootogramas y gráficos residuales cuantiles aleatorios. (Véase Kleiber y Zeileis, 2016, The American Statistician , 70 (3), 296–303. Doi: 10.1080 / 00031305.2016.1173590 .)
Datos simulados
Sus datos simulados provienen de un solo proceso de Poisson. Si
e
se trata como un regresor conocido, entonces sería un GLM Poisson estándar. Si see
trata de un componente de ruido desconocido, entonces hay una cierta heterogeneidad no observada que causa un poco de sobredispersión que podría ser capturada por un modelo binomial negativo o algún otro tipo de mezcla continua o efecto aleatorio, etc. Sin embargo, como el efecto dee
es bastante pequeño aquí , nada de esto hace una gran diferencia. A continuación, lo estoy tratandoe
como un regresor (es decir, con un coeficiente verdadero de 1), pero también podría omitir esto y usar modelos binomiales negativos o de Poisson. Cualitativamente, todos estos conducen a ideas similares.Esto refleja que los tres modelos pueden estimar consistentemente los parámetros verdaderos. Observar los errores estándar correspondientes muestra que en este escenario (sin la necesidad de una parte de obstáculo) el Poisson GLM es más eficiente:
Los criterios de información estándar seleccionarían el verdadero Poisson GLM como el mejor modelo:
Y una prueba de Wald detectaría correctamente que los dos componentes del modelo de obstáculo no son significativamente diferentes:
Finalmente, ambos
rootogram(p)
yqqrplot(p)
muestran que el Poisson GLM se ajusta muy bien a los datos y que no hay ceros en exceso o sugerencias sobre especificaciones erróneas adicionales.fuente
Estoy de acuerdo en que la diferencia entre modelos inflados a cero y obstáculos es difícil de entender. Ambos son una especie de modelo de mezcla. Por lo que puedo decir, la diferencia importante es que, en un modelo inflado a cero, se mezcla una masa a cero con una distribución \ textit {que también puede tomar el valor cero}. Para un modelo de obstáculo, mezcla una masa a cero con una distribución que solo toma valores mayores que 0. Por lo tanto, en el modelo inflado a cero puede distinguir entre 'ceros estructurales' (correspondientes a la masa en cero) y 'muestreo de ceros 'correspondiente a la posibilidad de que ocurra 0 del modelo en el que se está mezclando. ¡Por supuesto, esta identificación depende en gran medida de hacer la elección correcta de distribución! Pero, si tiene un Poisson inflado a cero, por ejemplo, puede distinguir entre ceros que provienen del componente de Poisson (ceros de muestreo) y ceros que provienen de la masa en cero (ceros estructurales). Si tiene un modelo inflado a cero y la distribución en la que está mezclando no tiene masa en cero, podría interpretarse como un modelo de obstáculo.
fuente
Con respecto al aspecto filosófico, "cuándo deberíamos considerar algo un modelo único y cuándo dos modelos separados" , puede ser interesante observar que las estimaciones muestrales de los parámetros del modelo están correlacionadas.
En la siguiente gráfica con una simulación, se ve principalmente la correlación entre la pendiente y la intersección de la parte de conteo. Pero también hay una ligera relación entre la parte de conteo y la parte de obstáculo. Si cambia los parámetros, por ejemplo, hace que la lambda en la distribución de Poisson sea más pequeña o que el tamaño de la muestra sea más pequeño, entonces la correlación se vuelve más fuerte.
Entonces diría que no debe considerarlo como dos modelos separados . O al menos hay alguna relación, incluso cuando en la práctica puede calcular las dos estimaciones independientes entre sí.
No tiene mucho sentido que haya una correlación entre las dos partes. Pero probablemente podría deberse a niveles discretos de las estimaciones para los parámetros en el modelo de Poisson, y cómo estos se relacionan con el número de ceros.
fuente
truncdist::rtrunc(n = 100, spec = 'pois', a = 0, b = Inf, lambda = exp(-1.5 + rnorm(100)))
produce un error (utilizando la versión 1.0.2):Error in if (G.a == G.b) { : the condition has length > 1
. En cualquier caso, usar elrhpois()
paquete fromcountreg
en R-Forge es más fácil para simular desde un modelo de Poisson de obstáculo con una probabilidad de cruce de obstáculo dadapi
y una expectativa de Poisson subyacente (no truncada)lambda
. Si uso estos, obtengo correlaciones empíricas muy pequeñas entre el obstáculo cero y las partes de conteo truncadas.dgp <- function(n = 100, b = c(-0.5, 2), g = c(0.5, -2)) { x <- runif(n, -1, 1) ; y <- rhpois(n, lambda = exp(b[1] + b[2] * x), pi = plogis(g[1] + g[2] * x)); data.frame(x = x, y = y) }
Simulación:set.seed(1); cf <- t(replicate(3000, coef(hurdle(y ~ x, data = dgp()))))
. Evaluación:pairs(cf)
ycor(cf)
. La comprobacióncolMeans(cf)
también muestra que la estimación ha funcionado razonablemente bien.