Serie temporali per i dati di conteggio, con conteggi <20


23

Di recente ho iniziato a lavorare in una clinica per la tubercolosi. Ci incontriamo periodicamente per discutere il numero di casi di tubercolosi che stiamo attualmente trattando, il numero di test somministrati, ecc. Vorrei iniziare a modellare questi conteggi in modo da non indovinare solo se qualcosa di insolito o meno. Sfortunatamente, mi sono allenato molto poco in serie storiche e la maggior parte della mia esposizione è stata rivolta a modelli per dati molto continui (prezzi delle azioni) o un numero molto elevato di conteggi (influenza). Ma ci occupiamo di 0-18 casi al mese (media 6,68, mediana 7, var 12,3), che sono distribuiti in questo modo:

[immagine persa nella notte dei tempi]

[immagine mangiata da una grue]

Ho trovato alcuni articoli che affrontano modelli come questo, ma apprezzerei molto i tuoi suggerimenti, sia per gli approcci che per i pacchetti R che potrei usare per implementare quegli approcci.

MODIFICARE: La risposta di mbq mi ha costretto a riflettere più attentamente su ciò che sto chiedendo qui; Sono stato troppo preso dai conti mensili e ho perso il vero focus della domanda. Quello che vorrei sapere è: il declino (abbastanza visibile) dal 2008 in poi riflette una tendenza al ribasso nel numero complessivo di casi? Mi sembra che il numero di casi mensili dal 2001 al 2007 rifletta un processo stabile; forse un po 'di stagionalità, ma nel complesso stabile. Dal 2008 ad oggi sembra che il processo stia cambiando: il numero complessivo di casi è in calo, anche se i conteggi mensili potrebbero oscillare su e giù a causa della casualità e della stagionalità. Come posso verificare se c'è un vero cambiamento nel processo? E se riesco a identificare un declino,


2
I collegamenti sono morti. Se sei in grado di ottenere le immagini (o rigenerarle), utilizza il nuovo sistema che le memorizza su imgur.
Glen_b

Sfortunatamente, queste trame provenivano da un paio di lavori fa. Scuse!
Matt Parker,

1
Dato che questo post (n. 173) risale a quando il sito era in beta, non è una sorpresa: poche persone potrebbero ripetere una trama dai post così lontani a questo punto. Grazie comunque.
Glen_b

Risposte:


15

Per valutare il trend storico, utilizzerei un gam con trend e componenti stagionali. Per esempio

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)

Quindi summary(fit)ti darà un test di significatività del cambiamento di tendenza e la trama ti darà alcuni intervalli di confidenza. Le ipotesi qui sono che le osservazioni sono indipendenti e la distribuzione condizionale è Poisson. Poiché la media può cambiare senza intoppi nel tempo, questi non sono presupposti particolarmente forti.

La previsione è più difficile in quanto è necessario proiettare la tendenza nel futuro. Se sei disposto ad accettare un'estrapolazione lineare della tendenza alla fine dei dati (che è sicuramente sconcertante ma probabilmente va bene per alcuni mesi), allora usa

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

Per visualizzare le previsioni sullo stesso grafico:

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)

È possibile individuare i mesi insoliti cercando valori anomali nei residui (devianza) dell'adattamento.


8

Potresti dare un'occhiata a strucchange :

Test, monitoraggio e datazione dei cambiamenti strutturali nei modelli di regressione (lineare). strucchange presenta test / metodi dal framework di test di fluttuazione generalizzato e dal framework di test F (Chow test). Ciò include metodi per adattare, tracciare e testare i processi di fluttuazione (ad esempio, CUSUM, MOSUM, stime ricorsive / mobili) e statistiche F, rispettivamente. È possibile monitorare i dati in entrata online utilizzando i processi di fluttuazione. Infine, i punti di interruzione nei modelli di regressione con cambiamenti strutturali possono essere stimati insieme a intervalli di confidenza. L'enfasi è sempre data ai metodi per visualizzare i dati. "

PS. Bella grafica;)


Dovrò leggerlo più approfonditamente in seguito, ma sì, questo pacchetto risolve definitivamente i tipi di problemi che sto affrontando qui. Grazie! E anche, grazie per le belle parole sulle trame; p
Matt Parker,

6

Ha davvero bisogno di qualche modello avanzato? Sulla base di ciò che so della tubercolosi, nel caso in cui non vi sia epidemia, le infezioni sono atti stocastici e quindi il conteggio del mese N non dovrebbe essere correlato al conteggio del mese N-1. (È possibile verificare questo assunto con autocorrelazione). In tal caso, analizzare solo la distribuzione dei conteggi mensili può essere sufficiente per decidere se alcuni conteggi sono significativamente più alti del normale.
D'altra parte puoi cercare correlazioni con alcune altre variabili, come la stagione, il traffico di viaggi o qualsiasi cosa tu possa immaginare che possa essere correlata. Se avessi trovato qualcosa del genere, potrebbe essere utilizzato per la normalizzazione dei dati.


1
Il tuo punto sul conteggio del mese di N non necessariamente correlato con N-1 è ben preso. Con una malattia a crescita lenta come la tubercolosi, è qualcosa che dovrei esaminare attentamente, ma sono abbastanza sicuro di poter identificare quanto tempo c'è tra il momento in cui segnaliamo un caso di origine e il momento in cui segnaliamo qualsiasi secondario casi.
Matt Parker

1
Tuttavia, è il tuo punto sull'analisi della distribuzione dei conteggi mensili che è al centro della mia domanda. C'è un netto declino della tubercolosi, sia a livello nazionale negli Stati Uniti che nel mio distretto. Ad esempio, quando metto a confronto il 2009 con gli anni precedenti, ci sono decisamente meno casi. Il 2010 è sulla buona strada per averne ancora meno. Quello che sto cercando di identificare (cosa che ho fatto male a spiegare nella domanda) è se queste diminuzioni sono o meno parte di una tendenza al ribasso in corso, o semplicemente di una oscillazione al ribasso. Grazie - mi hai fatto riflettere molto più attentamente sul problema.
Matt Parker,

5

Spesso i dati sulle malattie come questo vengono eseguiti con un modello lineare generalizzato, in quanto non è necessariamente una grande applicazione dell'analisi delle serie temporali - i mesi spesso non sono così correlati tra loro.

Se mi venissero dati questi dati, ecco cosa farei (e in effetti avrei fatto con dati simili ad essi):

Crea una variabile "tempo" che sia descritta più accuratamente come "Mesi dal 1/1/2000" se osservo correttamente i tuoi dati. Quindi eseguivo un modello lineare generale in R usando la distribuzione di Poisson (o Binomiale negativo) e un collegamento di registro con approssimativamente la seguente forma:

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

Dove t è il tempo sopra descritto e w è 1/365 per una malattia annuale come l'influenza. Generalmente è 1 / n, dove n è la lunghezza del ciclo della malattia. Non so di cosa si tratta per la TB.

Le due tendenze temporali ti mostreranno - al di fuori della normale variazione stagionale - se hai variazioni significative nel tempo.


4

Potresti considerare di applicare un grafico Tukey Control ai dati.


Heh - questo è stato in realtà uno dei complotti che ho fatto che non è entrato nel post. Il problema che ho avuto è stato decidere come calcolare i limiti: il mio tentativo iniziale era con i limiti di Poisson, con lambda impostato sulla media dei miei dati, ma la varianza è troppo alta per essere un vero Poisson (abbastanza alto da importare nella pratica? non lo so).
Matt Parker,

Un ulteriore problema è che il centro della distribuzione può cambiare nel tempo - ad esempio, non avrebbe senso impostare tali limiti utilizzando i dati dei primi del 1900, quando il Colorado era un paradiso per i pazienti affetti da TB. Quindi qual è un modo appropriato per mantenere le linee aggiornate con i cambiamenti a lungo termine nel processo, pur essendo in grado di identificare le deviazioni?
Matt Parker,

4

Puoi provare a modellare i tuoi dati utilizzando un modello lineare generalizzato dinamico (DGLM). In R, puoi adattare questo tipo di modelli usando i pacchetti sspir e KFAS. In un certo senso, questo è simile all'approccio gam suggerito da Rob, tranne per il fatto che invece di supporre che la media dei log delle osservazioni di Poisson sia una funzione regolare del tempo, presuppone che segua una dinamica stocastica.


Fantastico - non sapevo del pacchetto KFAS. C'è anche il dlm e il dse per gli approcci spaziali dello stato e una panoramica generale per gli utenti R qui: cran.r-project.org/web/views/TimeSeries.html
conjugateprior

2
Consiglio vivamente il dlmpacchetto. I DLM non sono facili da usare come le altre soluzioni, ma dlmlo rendono il più semplice possibile e ha una bella vignetta che ti guida attraverso il processo.
Wayne,

2

Lascerò da solo la domanda principale, perché penso che sbaglierò (anche se analizzo anche i dati per un operatore sanitario e, a dire il vero, se avessi questi dati, li analizzerei semplicemente usando tecniche standard e spero per il meglio, mi sembrano abbastanza bene).

Per quanto riguarda i pacchetti R, ho trovato la libreria TSA ed è davvero utile il libro di accompagnamento . Il armasubsetscomando, in particolare, penso che sia un grande risparmio di tempo.


2

Sfuggire alle statistiche enumerative tradizionali come suggerirebbe Deming e avventurarsi nelle statistiche analitiche tradizionali - in questo caso, carte di controllo. Vedi tutti i libri di Donald Wheeler PhD, in particolare i suoi "Argomenti avanzati in SPC" per maggiori informazioni.


Qualcuno ha appena fatto una domanda sui grafici SPC (aka QC) in R in stats.stackexchange.com/questions/15809/… dove fornisco alcuni suggerimenti sul pacchetto. Io stesso non sono sicuro di SPC / QC: mi chiedo se fosse più utile nell'era pre-computer e per i lavoratori in officina, ma vale la pena considerare.
Wayne,

In realtà, questa risposta è ridondante con @ babelproofreader's?
Wayne,

2

In risposta alla tua domanda diretta "Come posso verificare se c'è un vero cambiamento nel processo? E se posso identificare un declino, come posso usare quella tendenza e qualunque stagionalità ci potrebbe essere per stimare il numero di casi che potremmo vedere in i prossimi mesi? " Sviluppa un modello di funzione di trasferimento (ARMAX) che spieghi prontamente la dipendenza da periodo a periodo, compresa la struttura ARIMA stagionale. Incorporare eventuali spostamenti di livello identificabili, impulsi stagionali, tendenze dell'ora locale e PUl che potrebbero essere stati suggeriti da metodi empirici / analitici come il rilevamento degli interventi. SE QUESTO MODELLO ROBUSTO COMPRENDE UN FATTORE / SERIE corrispondente a "declino", allora le tue preghiere sono state ascoltate. In alternativa è sufficiente aggiungere una struttura ipotizzata, ad esempio per testare un cambiamento di tendenza temporale nel punto T1, costruire due manichini X1 = 1,1,2,3 ,,,,,, T e X2 = 0,0,0,0,0,0,0,1,2,3,4,5, .... DOVE GLI ZERO FINE AL PERIODO T1-1. Il test dell'ipotesi di un significativo cambiamento di tendenza nel periodo di tempo T1 sarà valutato usando il "valore t" per X2.

Modificato il 22/09/11

Spesso i dati sulle malattie come questo hanno effetti mensili poiché il tempo / la temperatura sono spesso causali non specificati. Nell'omissione della vera serie caudsale i modelli ARIMA usano surrogati i manichini di memoria o stagionali. Inoltre, serie come questa possono avere cambiamenti di livello e / o tendenze dell'ora locale che riflettono i cambiamenti strutturali nel tempo. Sfruttare la struttura autoregressiva nei dati piuttosto che imporre vari artefatti come il tempo, il quadrato temporale e il tempo cubico ecc. È stato trovato molto utile, meno presuntivo e ad hoc. Bisogna anche prestare attenzione all'identificazione di "valori insoliti" in quanto spesso possono essere utili nel suggerire variabili di causa aggiuntive e come minimo condurre a stime affidabili degli altri parametri del modello. Infine, abbiamo scoperto che la variabilità / i parametri possono variare nel tempo, quindi questi perfezionamenti del modello possono essere in ordine.


Come si regola il valore p per tenere conto dell'identificazione di T1 post hoc ( ovvero notarlo dopo aver esaminato i dati)?
whuber

tutti i perfezionamenti, ovvero il controllo diagnostico che porta all'aumento, sono trattati come la struttura suggerita mentre i dati erano nel cassetto. L'aggiunta di un ritardo a una variabile predittore basata sul controllo diagnostico aggiunge semplicemente un'altra ipotesi nulla all'elenco. Ciò non differisce dall'eliminazione di un coefficiente non significativo.
IrishStat

@Irish non lo seguo. T1 non sembra essere un ritardo: stabilisce un punto di cambio. Non è facile trovare cambiamenti "significativi" se ti è permesso prima di ispezionare i dati per scegliere dove si trova il punto di cambio?
whuber

@whuber Sì, hai ragione. Ma pensate a un processo graduale in avanti nella regressione in cui esaminate le variabili alternative (omesse) per "potenziale incorporazione". Questo non è diverso in questo senso che stai decidendo quale "tendenza omessa" dovrebbe essere aggiunta al modello per rendere Gaussiana il processo di errore risultante.
IrishStat,

@Irish È un'analogia illuminante. Se ho capito, in effetti contempli di avere una potenziale variabile per ogni periodo (designando un possibile cambiamento in quel periodo) e stai invocando un processo sistematico per determinare quale di questi dovrebbe essere incluso nel modello. Ciò suggerisce che potrebbero ragionevolmente essere applicate alcune procedure standard di regolazione del livello p, come la Bonferroni. Sarebbe valido?
whuber
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.