¿Es un "modelo de obstáculo" realmente un modelo? ¿O solo dos modelos separados y secuenciales?


25

Considere un modelo de obstáculo que predice datos de conteo yde 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 , ,πyπ

...λ=exp(xβ)π=logit-1(zγ)xzβγ

(5.34)P(Y=y|x,z,β,γ)={1π^for y=0π^×exp(λ^)λ^y/y!1exp(λ^)for y=1,2,
λ^=exp(xβ)π^=logit1(zγ)xson 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 ... . zβ^γ^

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 γ )π^hurdlelogit1(zγ^)

¿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 .πy=0π^


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)?


55
Creo que los modelos de obstáculo son equivalentes a ejecutar los dos modelos separados (binario + truncado a cero). La razón técnica por la que funciona es que el primer modelo usa solo cero / no cero para estimar ; el segundo modelo condiciona una respuesta distinta de cero para estimar . λπλ
Ben Bolker

¿Entonces sería por cada cuyo ? π^1iy>0
Mark White

3
No. El modelo condicional término , es decir, ...π^P(Y=y|Y>0)=exp(λ^)etc.
Ben Bolker

Ah gracias. Así que supongo que la ecuación de Smithson y Merkle describe un modelo diferente al implementado 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?
Mark White

44
Es el mismo modelo. Mike y Ed se centran en el caso más simple (logit + Poisson), que es el predeterminado hurdle(). Sin embargo, en nuestro emparejado / viñeta, intentamos enfatizar los bloques de construcción más generales.
Achim Zeileis

Respuestas:


35

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.

(β,γ;y,x,z)=1(γ;y,z)+2(β;y,x)=i:yi=0log{1logit1(ziγ)}+i:yi>0log{logit1(ziγ)}+i:yi>0[log{f(yi;exp(xiβ)}log{1f(0;exp(xiβ)}]
f(y;λ)=exp(λ)λy/y!1f(0;λ)=1exp(λ)

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")countregpscl

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 countregpaquete en R-Forge en https://R-Forge.R-project.org/R/?group_id=522 es la implementación sucesora a hurdle()/ zeroinfl()desde pscl. La razón principal por la que (todavía) no está en CRAN es que queremos revisar la predict()interfaz, posiblemente de una manera que no sea totalmente compatible con versiones anteriores. De lo contrario, la implementación es bastante estable. En comparación pscl, viene con algunas características interesantes, por ejemplo:

  • Una zerotrunc()función que usa exactamente el mismo código que hurdle()para la parte truncada a cero del modelo. Por lo tanto, ofrece una alternativa a VGAM.

  • 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 ese trata como un regresor conocido, entonces sería un GLM Poisson estándar. Si se etrata 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 de ees bastante pequeño aquí , nada de esto hace una gran diferencia. A continuación, lo estoy tratando ecomo 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.

## Poisson GLM
p <- glm(y ~ x + e, family = poisson)
## Hurdle Poisson (zero-truncated Poisson + right-censored Poisson)
library("countreg")
hp <- hurdle(y ~ x + e, dist = "poisson", zero.dist = "poisson")
## all coefficients very similar and close to true -1.5, 1, 1
cbind(coef(p), coef(hp, model = "zero"), coef(hp, model = "count"))
##                   [,1]       [,2]      [,3]
## (Intercept) -1.3371364 -1.2691271 -1.741320
## x            0.9118365  0.9791725  1.020992
## e            0.9598940  1.0192031  1.100175

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:

serr <- function(object, ...) sqrt(diag(vcov(object, ...)))
cbind(serr(p), serr(hp, model = "zero"), serr(hp, model = "count"))
##                  [,1]      [,2]      [,3]
## (Intercept) 0.2226027 0.2487211 0.5702826
## x           0.1594961 0.2340700 0.2853921
## e           0.1640422 0.2698122 0.2852902

Los criterios de información estándar seleccionarían el verdadero Poisson GLM como el mejor modelo:

AIC(p, hp)
##    df      AIC
## p   3 141.0473
## hp  6 145.9287

Y una prueba de Wald detectaría correctamente que los dos componentes del modelo de obstáculo no son significativamente diferentes:

hurdletest(hp)
## Wald test for hurdle models
## 
## Restrictions:
## count_((Intercept) - zero_(Intercept) = 0
## count_x - zero_x = 0
## count_e - zero_e = 0
## 
## Model 1: restricted model
## Model 2: y ~ x + e
## 
##   Res.Df Df  Chisq Pr(>Chisq)
## 1     97                     
## 2     94  3 1.0562     0.7877

Finalmente, ambos rootogram(p)y qqrplot(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.

rootograma + qqrplot


¿Cuál es la diferencia entre el exceso de ceros y muchos ceros?
tatami

1
Un ejemplo: una distribución de Poisson con expectativa tiene una probabilidad de aproximadamente . Eso es seguramente muchos ceros . Sin embargo, si tiene una distribución que tiene la forma de un Poisson (0.5) pero más ceros, entonces son ceros en exceso . f ( 0 ; λ = 0.5 ) 60 %λ=0.5f(0;λ=0.5)60%
Achim Zeileis

4

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.


Si bien la distinción entre los dos tipos de ceros es una necesidad que surge directamente de la especificación del modelo, es posible calcular el mismo tipo de cantidad para un modelo de obstáculo. Los llamados ceros estructurales también se pueden calcular a partir de la distribución de recuento no truncada (por ejemplo, Poisson) a pesar de que sus parámetros se basaron en una muestra truncada . La probabilidad de ceros estructurales es, entonces, la diferencia entre la probabilidad de cero (en general, desde la parte del obstáculo cero) y el muestreo de ceros.
Achim Zeileis

1

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í.

correlaciones

set.seed(1839)

Nrep <- 3000
Ns <- 100
pars <- matrix(rep(0,3*Nrep),Nrep)
colnames(pars) <- c("count_intercept","count_slope","hurdle_intercept")

# simulation-loop
# Note that a truncated poisson is used to generate data
# this will make the parameters from the hurdle function easier to interpret and compare
for (i in 1:Nrep) {
  x <- rnorm(Ns,0,1)
  e <- rbinom(Ns,1,exp(-0.7))
  y <- e*truncdist::rtrunc(n=Ns,spec='pois',a=0,b=Inf,lambda=exp(-1.5 + x))
  mod <- pscl::hurdle(y ~ 1+x|1, link="log")
  pars[i,1]<-mod$coefficients$count[1]
  pars[i,2]<-mod$coefficients$count[2]
  pars[i,3]<-mod$coefficients$zero[1]
}  

# viewing data
plotpars <- pars[pars[,1]>-7,] #clipping
pairs(plotpars,cex=0.7,pch=21,
      col= rgb(0,0,0,0.03),
      bg = rgb(0,0,0,0.03))

# demonstrating linear relation / significant correlation
summary(lm(pars[,1] ~ pars[,3]))

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.


No puedo replicar esto. Para mí: 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 el rhpois()paquete from countregen 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 dada piy 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.
Achim Zeileis

Datos proceso de generación: 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)y cor(cf). La comprobación colMeans(cf)también muestra que la estimación ha funcionado razonablemente bien.
Achim Zeileis

@AchimZeileis en este momento no tengo posibilidades de analizar tu error y comentarlo. Pero de todos modos, la correlación no es más que muy pequeña en la imagen que mostré. El punto era más filosófico / teórico. En la práctica, es muy probable que tenga pequeños problemas cuando trate el modelo como dos pasos separados, no integrados.
Sextus Empiricus
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.