Séries chronologiques pour les données de dénombrement, avec dénombrements <20

23

J'ai récemment commencé à travailler pour une clinique antituberculeuse. Nous nous réunissons périodiquement pour discuter du nombre de cas de tuberculose que nous traitons actuellement, du nombre de tests administrés, etc. J'aimerais commencer à modéliser ces chiffres afin de ne pas simplement deviner si quelque chose est inhabituel ou non. Malheureusement, j'ai eu très peu de formation sur les séries chronologiques, et la majeure partie de mon exposition a porté sur des modèles pour des données très continues (cours des actions) ou un très grand nombre de dénombrements (grippe). Mais nous traitons 0-18 cas par mois (moyenne 6,68, médiane 7, var 12,3), qui sont répartis comme ceci:

[image perdue dans la nuit des temps]

[image mangée par une grue]

J'ai trouvé quelques articles qui traitent de modèles comme celui-ci, mais j'apprécierais grandement entendre vos suggestions - à la fois pour les approches et pour les packages R que je pourrais utiliser pour implémenter ces approches.

MODIFIER: La réponse de mbq m'a obligé à réfléchir plus attentivement à ce que je demande ici; Je me suis trop accroché aux chiffres mensuels et j'ai perdu le sens de la question. J'aimerais savoir: la baisse (assez visible) à partir de 2008, par exemple, reflète-t-elle une tendance à la baisse du nombre total de cas? Il me semble que le nombre de cas par mois de 2001-2007 reflète un processus stable; peut-être une certaine saisonnalité, mais globalement stable. De 2008 à aujourd'hui, il semble que ce processus soit en train de changer: le nombre total de cas diminue, même si les chiffres mensuels peuvent osciller en raison de l'aléatoire et de la saisonnalité. Comment puis-je tester s'il y a un vrai changement dans le processus? Et si je peux identifier un déclin,

Matt Parker
la source
2
Les liens sont morts. Si vous êtes en mesure de vous procurer les images (ou de les régénérer), veuillez utiliser le nouveau système qui les stocke à l'imgur.
Glen_b -Reinstate Monica
Malheureusement, ces parcelles provenaient de quelques emplois auparavant. Mes excuses!
Matt Parker
1
Étant donné que ce message (# 173) remonte à l'époque où le site était en version bêta, ce n'est pas une surprise - peu de gens pouvaient refaire un complot à partir de messages aussi loin à ce stade. Merci quand même.
Glen_b -Reinstate Monica

Réponses:

15

Pour évaluer la tendance historique, j'utiliserais un gam avec des composantes de tendance et saisonnières. Par exemple

require(mgcv)
require(forecast)
x <- ts(rpois(100,1+sin(seq(0,3*pi,l=100))),f=12)
tt <- 1:100
season <- seasonaldummy(x)
fit <- gam(x ~ s(tt,k=5) + season, family="poisson")
plot(fit)

Ensuite summary(fit), vous donnera un test de signification du changement de tendance et le graphique vous donnera quelques intervalles de confiance. Les hypothèses ici sont que les observations sont indépendantes et la distribution conditionnelle est de Poisson. Étant donné que la moyenne peut évoluer en douceur dans le temps, ce ne sont pas des hypothèses particulièrement solides.

Il est plus difficile de prévoir car il faut projeter la tendance dans le futur. Si vous êtes prêt à accepter une extrapolation linéaire de la tendance à la fin des données (ce qui est certainement douteux mais probablement correct pendant quelques mois), alors utilisez

fcast <- predict(fit,se.fit=TRUE,
               newdata=list(tt=101:112,season=seasonaldummyf(x,h=12)))

Pour voir les prévisions sur le même graphique:

plot(x,xlim=c(0,10.5))
lines(ts(exp(fcast$fit),f=12,s=112/12),col=2)
lines(ts(exp(fcast$fit-2*fcast$se),f=12,s=112/12),col=2,lty=2)
lines(ts(exp(fcast$fit+2*fcast$se),f=12,s=112/12),col=2,lty=2)

Vous pouvez repérer les mois inhabituels en recherchant des valeurs aberrantes dans les résidus (de déviance) de l'ajustement.

Rob Hyndman
la source
8

Vous voudrez peut-être jeter un œil à strucchange :

Tester, surveiller et dater les changements structurels dans les modèles de régression (linéaire). strucchange propose des tests / méthodes du cadre de test de fluctuation généralisée ainsi que du cadre de test F (test de Chow). Cela comprend des méthodes pour ajuster, tracer et tester les processus de fluctuation (par exemple, CUSUM, MOSUM, estimations récursives / mobiles) et les statistiques F, respectivement. Il est possible de surveiller les données entrantes en ligne en utilisant des processus de fluctuation. Enfin, les points d'arrêt dans les modèles de régression avec changements structurels peuvent être estimés avec les intervalles de confiance. L'accent est toujours mis sur les méthodes de visualisation des données. "

PS. Jolis graphismes;)

hadley
la source
Je devrai le lire plus en détail plus tard, mais oui, ce paquet résout certainement les types de problèmes auxquels je suis confronté ici. Merci! Et aussi, merci pour les aimables paroles sur les parcelles; p
Matt Parker
6

A-t-il vraiment besoin d'un modèle avancé? D'après ce que je sais de la tuberculose, s'il n'y a pas d'épidémie, les infections sont des actes stochastiques et donc le décompte du mois N ne devrait pas être corrélé avec le décompte du mois N-1. (Vous pouvez vérifier cette hypothèse avec l'autocorrélation). Si tel est le cas, l'analyse de la distribution des dénombrements mensuels peut suffire pour décider si un dénombrement est significativement plus élevé que la normale.
D'un autre côté, vous pouvez rechercher des corrélations avec d'autres variables, comme la saison, le trafic de voyage ou tout ce que vous pouvez imaginer pouvant être corrélé. Si vous trouviez quelque chose comme ça, il pourrait alors être utilisé pour une normalisation des données.


la source
1
Votre point sur le compte du mois N qui n'est pas nécessairement corrélé avec N-1 est bien pris. Avec une maladie à croissance lente comme la tuberculose, c'est quelque chose que je devrais examiner attentivement, mais je suis presque sûr que je pourrais identifier le décalage entre le moment où nous signalons un cas source et le moment où nous signalons un cas secondaire cas.
Matt Parker
1
Cependant, c'est votre point sur l'analyse de la distribution des comptes mensuels qui est au cœur de ma question. Il y a une nette baisse de la tuberculose, tant au niveau national aux États-Unis que dans mon district. Par exemple, lorsque je compare 2009 aux années précédentes, il y a décidément moins de cas. 2010 est en passe d'en avoir encore moins. Ce que j'essaie d'identifier (ce que j'ai mal expliqué dans la question) est de savoir si ces baisses font partie d'une tendance à la baisse continue, ou simplement d'une oscillation à la baisse. Merci - vous m'avez amené à réfléchir beaucoup plus attentivement au problème.
Matt Parker
5

Souvent, des données sur les maladies comme celle-ci sont effectuées avec un modèle linéaire généralisé, car ce n'est pas nécessairement une excellente application de l'analyse des séries chronologiques - les mois ne sont souvent pas tous en corrélation les uns avec les autres.

Si on me donnait ces données, voici ce que je ferais (et en fait, j'aurais fait avec des données similaires):

Créez une variable «temps» qui est plus précisément décrite comme «mois depuis le 1/1/2000» si je regarde correctement vos données. Ensuite, je lancerais un modèle linéaire général dans R en utilisant la distribution de Poisson (ou binomiale négative) et un lien log avec à peu près la forme suivante:

log(Counts) = b0 + b1*t + b2*(t^2) + b3*cos(2pi*w*t) + b4*sin(2pi*w*t)

Où t est le temps décrit ci-dessus et w est 1/365 pour une maladie annuelle comme la grippe. Généralement, son 1 / n, où n est la longueur du cycle de votre maladie. Je ne sais pas ce que c'est pour la tuberculose.

Les deux tendances temporelles vous montreront - en dehors de la variation saisonnière normale - si vous avez une variation significative dans le temps.

Fomite
la source
4

Vous pourriez envisager d'appliquer un graphique de contrôle Tukey aux données.

babelproofreader
la source
Heh - c'était en fait l'un des complots que j'ai fait qui n'a pas été publié dans le post. Le problème que j'ai eu est de décider comment calculer les bornes - ma première tentative a été avec des bornes de Poisson, avec lambda réglé sur la moyenne de mes données, mais la variance est trop élevée pour être un Poisson correct (suffisamment élevée pour avoir de l'importance dans la pratique? 't sais).
Matt Parker
Un autre problème est que le centre de la distribution peut changer avec le temps - par exemple, il ne serait pas logique de fixer ces limites en utilisant des données du début des années 1900, lorsque le Colorado était un paradis pour les patients tuberculeux. Alors, quel est un moyen approprié pour maintenir les lignes à jour avec les changements à long terme dans le processus, tout en étant en mesure d'identifier les écarts?
Matt Parker
4

Vous pouvez essayer de modéliser vos données à l'aide d'un modèle linéaire généralisé dynamique (DGLM). Dans R, vous pouvez adapter ce type de modèles en utilisant les packages sspir et KFAS. En un sens, cela est similaire à l'approche gam suggérée par Rob, sauf qu'au lieu de supposer que la moyenne logarithmique des observations de Poisson est une fonction lisse du temps, elle suppose qu'elle suit une dynamique stochastique.


la source
Cool - je ne connaissais pas le paquet KFAS. Il y a aussi le dlm et le dse pour les approches de l'espace de l'état, et un aperçu général pour les utilisateurs de R ici: cran.r-project.org/web/views/TimeSeries.html
conjugateprior
2
Je recommanderais FORTEMENT le dlmpaquet. Les DLM ne sont pas aussi faciles à utiliser que les autres solutions, mais le dlmrendent aussi simple que possible et ont une belle vignette qui vous guide tout au long du processus.
Wayne
2

Je vais laisser la question principale tranquille, car je pense que je vais me tromper (même si j'analyse moi aussi les données pour un professionnel de la santé, et pour être honnête, si j'avais ces données, je les analyserais simplement en utilisant des techniques standard et espérons pour le mieux, ils me semblent assez bien).

En ce qui concerne les packages R, j'ai trouvé la bibliothèque TSA et son livre d' accompagnement très utiles. La armasubsetscommande, en particulier, je pense est un grand gain de temps.

Chris Beeley
la source
2

Échappez aux statistiques énumératives traditionnelles comme le suggère Deming et aventurez-vous dans les statistiques analytiques traditionnelles - dans ce cas, les cartes de contrôle. Voir tous les livres de Donald Wheeler PhD, en particulier ses "Advanced Topics in SPC" pour plus d'informations.

GTB
la source
Quelqu'un vient de poser une question sur les graphiques SPC (aka QC) dans R dans stats.stackexchange.com/questions/15809/… où je donne quelques conseils sur les packages. Je ne suis pas sûr de SPC / QC moi-même: je me demande s'il était plus utile à l'ère pré-informatique et pour les travailleurs de l'atelier, mais cela vaut la peine d'être considéré.
Wayne
En fait, cette réponse est-elle redondante avec @ babelproofreader?
Wayne
2

En réponse à votre question directe "Comment puis-je tester s'il y a un réel changement dans le processus? Et si je peux identifier un déclin, comment pourrais-je utiliser cette tendance et quelle que soit la saisonnalité qu'il pourrait y avoir pour estimer le nombre de cas que nous pourrions voir dans les prochains mois? " Développer un modèle de fonction de transfert (ARMAX) qui explique facilement la dépendance de période en période, y compris la structure ARIMA saisonnière. Intégrez tous les changements de niveau identifiables, les impulsions saisonnières, les tendances de l'heure locale et les PUlses qui pourraient avoir été suggérés par des méthodes empiriques / analytiques comme la détection des interventions. SI CE MODÈLE ROBUSTE COMPREND UN FACTEUR / SÉRIE correspondant à des «déclins» Alors vos prières ont été exaucées. Dans l'alternative, il suffit d'ajouter une structure hypothétique, par exemple pour tester un changement de tendance temporelle au point T1, construire deux variables muettes X1 = 1,1,2,3 ,,,,,, T et X2 = 0,0,0,0,0,0,0,0,1,2,3,4,5, .... O END SE TERMINENT LES ZÉROS À LA PÉRIODE T1-1. Le test de l'hypothèse d'un changement de tendance significatif à la période T1 sera évalué à l'aide de la "valeur t" pour X2.

Édité 22/09/11

Souvent, des données sur les maladies comme celle-ci ont des effets mensuels, car la météo / température est souvent une cause non spécifiée. En omettant la vraie série caudsale, les modèles ARIMA utilisent la mémoire ou des mannequins saisonniers comme substitut. De plus, des séries comme celle-ci peuvent avoir des changements de niveau et / ou des tendances temporelles locales reflétant un changement structurel au fil du temps. Exploiter la structure autorégressive dans les données plutôt que d'imposer divers artefacts comme le temps et le carré du temps et le temps cubique, etc. s'est avéré très utile et moins présomptif et ad hoc. Il faut également prendre soin d'identifier les «valeurs inhabituelles» car elles peuvent souvent être utiles pour suggérer des variables de cause supplémentaires et conduire au minimum à des estimations robustes des autres paramètres du modèle. Enfin, nous avons constaté que la variabilité / les paramètres peuvent varier au fil du temps, donc ces améliorations de modèle peuvent être en ordre.

IrishStat
la source
Comment ajuste-t-on la valeur de p pour tenir compte de l'identification T1 post hoc ( c'est -à- dire la remarquer après avoir examiné les données)?
whuber
toutes les améliorations, c'est-à-dire la vérification diagnostique conduisant à une augmentation, sont traitées de la même manière que la structure suggérée lorsque les données étaient dans le tiroir. L'ajout d'un retard à une variable de prédiction basée sur une vérification diagnostique ajoute simplement une autre hypothèse nulle à la liste. Cela ne diffère pas de la suppression d'un coefficient non significatif.
IrishStat
@Irish je ne suis pas ça. T1 ne semble pas être un décalage: il stipule un point de changement. N'est-il pas facile de trouver des changements "importants" si vous êtes d'abord autorisé à inspecter les données pour choisir où se trouve le point de changement?
whuber
@whuber Oui, vous avez raison. Mais pensez à un processus pas à pas dans la régression où vous examinez les variables alternatives (omises) pour «l'incorporation potentielle». Ce n'est pas différent en ce sens que vous décidez quelle "tendance omise" doit être ajoutée au modèle afin de rendre le processus d'erreur résultant gaussien.
IrishStat
@Irish C'est une analogie éclairante. Si je comprends bien, vous envisagez en fait d'avoir une variable potentielle pour chaque période (désignant un changement possible à cette période) et vous invoquez un processus systématique pour déterminer lesquelles devraient être incluses dans le modèle. Cela donne à penser que certaines procédures standard d'ajustement du niveau p, comme le Bonferroni, pourraient raisonnablement être appliquées. Serait-ce valable?
whuber