Considérons un modèle d'obstacles prédisant les données y
de comptage à partir d'un prédicteur 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
Dans ce cas, j'ai des données de comptage avec 69 zéros et 31 comptages positifs. Peu importe pour le moment qu'il s'agit, par définition de la procédure de génération de données, d'un processus de Poisson, car ma question concerne les modèles d'obstacles.
Disons que je veux gérer ces zéros en excès par un modèle d'obstacle. D'après mes lectures à leur sujet, il semblait que les modèles d'obstacles ne sont pas de véritables modèles en soi - ils ne font que deux analyses différentes séquentiellement. Premièrement, une régression logistique prédisant si la valeur est positive ou non par rapport à zéro. Deuxièmement, une régression de Poisson tronquée à zéro n'incluant que les cas non nuls. Cette deuxième étape me semblait mal parce qu'elle (a) jette des données parfaitement bonnes, ce qui (b) pourrait entraîner des problèmes d'alimentation car la plupart des données sont des zéros, et (c) fondamentalement pas un "modèle" en soi , mais exécutant simplement en séquence deux modèles différents.
J'ai donc essayé un «modèle d'obstacle» plutôt que d'exécuter séparément la régression de Poisson logistique et zéro tronquée. Ils m'ont donné des réponses identiques (j'abrège la sortie, par souci de concision):
> # 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 ***
---
Cela me semble faux car de nombreuses représentations mathématiques différentes du modèle incluent la probabilité qu'une observation soit non nulle dans l'estimation des cas de comptage positifs, mais les modèles que j'ai exécutés ci-dessus s'ignorent complètement. Par exemple, cela provient du chapitre 5, page 128 des modèles linéaires généralisés de Smithson & Merkle pour les variables dépendantes catégoriques et continues limitées :
... Deuxièmement, la probabilité que assume une valeur (zéro et les entiers positifs) doit être égale à un. Cela n'est pas garanti dans l'équation (5.33). Pour résoudre ce problème, nous multiplions la probabilité de Poisson par la probabilité de succès de Bernoulli . Ces problèmes nous obligent à exprimer le modèle d'obstacle ci-dessus comme où , ,π P ( Y = y | x , z , β , γ
...λ=exp(xπ = l o g i t - 1 ( z γ ) x z β γsont les covariables pour le modèle de Poisson, sont les covariables pour le modèle de régression logistique et et sont les coefficients de régression respectifs ... .
En faisant les deux modèles complètement séparés l'un de l'autre - ce qui semble être ce que font les modèles d'obstacles - je ne vois pas comment est incorporé dans la prédiction des cas de comptage positifs. Mais d'après la façon dont j'ai pu répliquer la fonction en exécutant simplement deux modèles différents, je ne vois pas comment joue un rôle dans le Poisson tronqué régression du tout. logit-1(z γ )hurdle
Suis-je en train de comprendre correctement les modèles d'obstacles? Ils semblent deux exécuter simplement deux modèles séquentiels: premièrement, une logistique; Deuxièmement, un Poisson, ignorant complètement les cas où . J'apprécierais si quelqu'un pouvait éclaircir ma confusion avec l'entreprise .π
Si j'ai raison de dire que c'est ce que sont les modèles d'obstacles, quelle est la définition d'un modèle «d'obstacles», plus généralement? Imaginez deux scénarios différents:
Imaginez modéliser la compétitivité des courses électorales en examinant les scores de compétitivité (1 - (proportion de votes des gagnants - proportion de votes des finalistes)). C'est [0, 1), car il n'y a pas de liens (par exemple, 1). Un modèle d'obstacle est logique ici, car il y a un processus (a) l'élection était-elle incontestée? et b) si ce n'était pas le cas, quelle était la compétitivité prévue? Nous faisons donc d'abord une régression logistique pour analyser 0 vs (0, 1). Ensuite, nous faisons une régression bêta pour analyser les (0, 1) cas.
Imaginez une étude psychologique typique. Les réponses sont [1, 7], comme une échelle de Likert traditionnelle, avec un énorme effet de plafond à 7. On pourrait faire un modèle d'obstacle qui est une régression logistique de [1, 7) vs 7, puis une régression Tobit pour tous les cas où les réponses observées sont <7.
Serait-il prudent d'appeler ces deux situations des modèles «d'obstacles» , même si je les estime avec deux modèles séquentiels (logistique puis bêta dans le premier cas, logistique puis Tobit dans le second)?
la source
pscl::hurdle
, mais il a la même apparence dans l'équation 5 ici: cran.r-project.org/web/packages/pscl/vignettes/countreg.pdf Ou peut-être que je me manque encore quelque chose de basique qui le ferait cliquer pour moi?hurdle()
. Dans notre paire / vignette, nous essayons de souligner les blocs de construction plus généraux.Réponses:
Séparer la log-vraisemblance
Il est vrai que la plupart des modèles d'obstacles peuvent être estimés séparément (je dirais plutôt que de manière séquentielle ). La raison en est que la log-vraisemblance peut être décomposée en deux parties qui peuvent être maximisées séparément. C'est parce que est juste un facteur d'échelle dans (5.34) qui devient un terme additif dans la log-vraisemblance.π^
Dans la notation de Smithson & Merkle: où est la densité de la distribution de Poisson (non tronquée) et est le facteur de la troncature zéro.
Il devient alors évident que (modèle logit binaire) et (modèle de Poisson tronqué) peuvent être maximisés séparément, conduisant aux mêmes estimations de paramètres, covariances, etc. comme dans le cas où ils sont maximisés conjointement.ℓ1( γ) ℓ2( β)
La même logique fonctionne également si la probabilité d'obstacle zéro n'est pas paramétrée via un modèle logit mais tout autre modèle de régression binaire, par exemple, une distribution de comptage censurée à droite à 1. Et, bien sûr, pourrait également être une autre distribution de comptage, par exemple, binôme négatif. La séparation entière ne se décompose que s'il existe des paramètres partagés entre l'obstacle zéro et la partie de comptage tronquée.π F( ⋅ )
Un exemple frappant serait l'utilisation de distributions binomiales négatives avec des paramètres séparés mais communs dans les deux composantes du modèle. (Ceci est disponible dans le package de R-Forge, le successeur de l' implémentation.)μ θ
hurdle(..., separate = FALSE, dist = "negbin", zero.dist = "negbin")
countreg
pscl
Des questions concrètes
(a) Jeter des données parfaitement bonnes: Dans votre cas, oui, en général non. Vous disposez de données provenant d'un seul modèle de Poisson sans excès de zéros (bien que plusieurs zéros ). Par conséquent, il n'est pas nécessaire d'estimer des modèles distincts pour les zéros et les non-zéros. Cependant, si les deux parties sont réellement motivées par des paramètres différents, il faut en tenir compte.
(b) Peut entraîner des problèmes d'alimentation car la plupart des données sont des zéros: pas nécessairement. Ici, vous avez un tiers des observations qui sont des "succès" (franchissement d'obstacles). Cela ne serait pas considéré comme très extrême dans un modèle de régression binaire. (Bien sûr, s'il n'est pas nécessaire d'estimer des modèles séparés, vous gagneriez en puissance.)
(c) Fondamentalement, pas un «modèle» en soi, mais simplement l'exécution séquentielle de deux modèles différents: c'est plus philosophique et je n'essaierai pas de donner «une» réponse. Au lieu de cela, je soulignerai des points de vue pragmatiques. Pour l' estimation du modèle , il peut être pratique de souligner que les modèles sont séparés car - comme vous le montrez - vous n'avez peut-être pas besoin d'une fonction dédiée pour l'estimation. Pour l' application du modèle , par exemple, pour les prévisions ou les résidus, etc., il peut être plus pratique de voir cela comme un modèle unique.
(d) Serait-il prudent d'appeler ces deux situations des modèles «d'obstacles»: en principe oui. Cependant, le jargon peut varier d'une communauté à l'autre. Par exemple, la régression bêta zéro obstacle est plus communément (et de manière très confuse) appelée régression bêta gonflée zéro. Personnellement, je trouve ce dernier très trompeur car la distribution bêta n'a pas de zéros qui pourraient être gonflés - mais c'est quand même le terme standard dans la littérature. De plus, le modèle tobit est un modèle censuré et donc pas un modèle obstacle. Il pourrait cependant être étendu par un modèle probit (ou logit) plus un modèle normal tronqué . Dans la littérature économétrique, il s'agit du modèle en deux parties de Cragg.
Commentaires sur le logiciel
Le
countreg
package sur R-Forge à https://R-Forge.R-project.org/R/?group_id=522 est l'implémentation successive dehurdle()
/zeroinfl()
verspscl
. La principale raison pour laquelle il n'est (toujours) pas sur CRAN est que nous voulons réviser l'predict()
interface, peut-être d'une manière qui n'est pas entièrement rétrocompatible. Sinon, l'implémentation est assez stable. Par rapport àpscl
cela, il est livré avec quelques fonctionnalités intéressantes, par exemple:Une
zerotrunc()
fonction qui utilise exactement le même code quehurdle()
pour la partie tronquée à zéro du modèle. Ainsi, il offre une alternative àVGAM
.De plus, il fonctionne en tant que d / p / q / r pour les distributions de comptage tronquées, hachées et gonflées à zéro. Cela facilite de les considérer comme «un» modèle plutôt que comme des modèles séparés.
Pour évaluer la qualité de l'ajustement, des affichages graphiques comme des rootogrammes et des tracés résiduels quantiles randomisés sont disponibles. (Voir Kleiber & Zeileis, 2016, The American Statistician , 70 (3), 296–303. Doi: 10.1080 / 00031305.2016.1173590 .)
Données simulées
Vos données simulées proviennent d'un seul processus de Poisson. Si
e
est traité comme un régresseur connu, ce serait un GLM de Poisson standard. S'ile
s'agit d'une composante de bruit inconnue, il y a une hétérogénéité non observée provoquant un peu de surdispersion qui pourrait être capturée par un modèle binomial négatif ou un autre type de mélange continu ou d'effet aléatoire, etc. Cependant, comme l'effet dee
est plutôt faible ici , rien de tout cela ne fait une grande différence. Ci-dessous, je traitee
comme un régresseur (c'est-à-dire avec un vrai coefficient de 1) mais vous pouvez également l'omettre et utiliser des modèles binomiaux ou de Poisson négatifs. Qualitativement, tous ces éléments conduisent à des idées similaires.Cela montre que les trois modèles peuvent toujours estimer les vrais paramètres. L'examen des erreurs standard correspondantes montre que dans ce scénario (sans avoir besoin d'une pièce de haie), le GLM de Poisson est plus efficace:
Les critères d'information standard sélectionneraient le véritable Poisson GLM comme meilleur modèle:
Et un test de Wald permettrait de détecter correctement que les deux composantes du modèle d'obstacle ne sont pas significativement différentes:
Enfin, les deux
rootogram(p)
etqqrplot(p)
montrent que le GLM de Poisson correspond très bien aux données et qu'il n'y a pas de zéros en excès ou d'indices sur d'autres erreurs de spécification.la source
Je suis d'accord que la différence entre les modèles zéro gonflé et les obstacles est difficile à comprendre. Les deux sont une sorte de modèle de mélange. D'après ce que je peux dire, la différence importante est que, dans un modèle gonflé à zéro, vous mélangez une masse à zéro avec une distribution \ textit {qui peut également prendre la valeur zéro}. Pour un modèle d'obstacle, vous mélangez une masse à zéro avec une distribution qui ne prend que des valeurs supérieures à 0. Ainsi, dans le modèle gonflé à zéro, vous pouvez distinguer les «zéros structurels» (correspondant à la masse à zéro) et les «zéros d'échantillonnage» 'correspondant à l'occurrence fortuite de 0 du modèle dans lequel vous mixez. Bien sûr, cette identification dépend fortement du bon choix de distribution! Mais, si vous avez un Poisson gonflé à zéro, par exemple, vous pouvez distinguer les zéros provenant de la composante de Poisson (échantillonnage des zéros) et les zéros provenant de la masse à zéro (zéros structurels). Si vous avez un modèle gonflé à zéro et que la distribution dans laquelle vous mixez n'a pas de masse à zéro, cela pourrait être interprété comme un modèle à obstacle.
la source
En ce qui concerne l'aspect philosophique, "quand devrions-nous considérer quelque chose comme un modèle unique et quand deux modèles distincts" , il peut être intéressant de noter que les estimations d'échantillon des paramètres du modèle sont corrélées.
Dans le graphique ci-dessous avec une simulation, vous voyez principalement la corrélation entre la pente et l'ordonnée à l'origine de la partie des comptes. Mais il existe également une légère relation entre la partie comptes et la partie obstacle. Si vous modifiez les paramètres, par exemple, réduisez le lambda dans la distribution de Poisson ou la taille de l'échantillon, la corrélation devient plus forte.
Je dirais donc que vous ne devriez pas le considérer comme deux modèles distincts . Ou du moins, il existe une certaine relation, même si dans la pratique, vous pouvez calculer les deux estimations indépendamment l'une de l'autre.
Cela n'a pas beaucoup de sens qu'il y ait une corrélation entre les deux parties. Mais cela pourrait probablement être dû à des niveaux discrets d'estimations pour les paramètres du modèle de Poisson et à leur lien avec le nombre de zéro.
la source
truncdist::rtrunc(n = 100, spec = 'pois', a = 0, b = Inf, lambda = exp(-1.5 + rnorm(100)))
obtient une erreur ( en utilisant la version 1.0.2):Error in if (G.a == G.b) { : the condition has length > 1
. Dans tous les cas, l'utilisationrhpois()
de packagecountreg
sur R-Forge est plus facile à simuler à partir d'un modèle de Poisson obstacle avec une probabilité de franchissement d'obstacle donnéepi
et une attente de Poisson sous-jacente (non tronquée)lambda
. Si j'utilise ceux-ci, je n'obtiens que de très petites corrélations empiriques entre le zéro obstacle et les parties de compte tronquées.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) }
Simulation:set.seed(1); cf <- t(replicate(3000, coef(hurdle(y ~ x, data = dgp()))))
. Évaluation:pairs(cf)
etcor(cf)
. La vérificationcolMeans(cf)
montre également que l'estimation a fonctionné assez bien.