Risorse per l'analisi delle serie temporali interrotte in R


12

Sono abbastanza nuovo per R. Ho tentato di leggere sull'analisi delle serie storiche e ho già finito

  1. Analisi delle serie storiche di Shumway e Stoffer e sue applicazioni 3a edizione ,
  2. Previsioni eccellenti di Hyndman : principi e pratica
  3. Avril Coghlan utilizza R per l'analisi delle serie storiche
  4. A. Ian McLeod et al. Analisi delle serie storiche con R
  5. Analisi delle serie temporali applicate del Dr. Marcel Dettling

Modifica: non sono sicuro di come gestirlo, ma ho trovato una risorsa utile al di fuori di Cross Validated. Volevo includerlo qui nel caso qualcuno si imbattesse in questa domanda.

Analisi di regressione segmentata di studi di serie temporali interrotte nella ricerca sull'uso di farmaci

Ho una serie temporale univariata del numero di articoli consumati (conteggio dei dati) misurato quotidianamente per 7 anni. Un intervento è stato applicato alla popolazione dello studio all'incirca nel mezzo delle serie storiche. Non si prevede che questo intervento produca un effetto immediato e la tempistica dell'insorgenza dell'effetto è essenzialmente inconoscibile.

Usando il forecastpacchetto di Hyndman ho adattato un modello ARIMA ai dati pre-intervento usando auto.arima(). Ma non sono sicuro di come utilizzare questa soluzione per rispondere se si è verificato un cambiamento statisticamente significativo nella tendenza e quantificare l'importo.

# for simplification I will aggregate to monthly counts
# I can later generalize any teachings the community supplies
count <- c(2464, 2683, 2426, 2258, 1950, 1548, 1108,  991, 1616, 1809, 1688, 2168, 2226, 2379, 2211, 1925, 1998, 1740, 1305,  924, 1487, 1792, 1485, 1701, 1962, 2896, 2862, 2051, 1776, 1358, 1110,  939, 1446, 1550, 1809, 2370, 2401, 2641, 2301, 1902, 2056, 1798, 1198,  994, 1507, 1604, 1761, 2080, 2069, 2279, 2290, 1758, 1850, 1598, 1032,  916, 1428, 1708, 2067, 2626, 2194, 2046, 1905, 1712, 1672, 1473, 1052,  874, 1358, 1694, 1875, 2220, 2141, 2129, 1920, 1595, 1445, 1308, 1039,  828, 1724, 2045, 1715, 1840)
# for explanatory purposes
# month <- rep(month.name, 7)
# year <- 1999:2005
ts <- ts(count, start(1999, 1))
train_month <- window(ts, start=c(1999,1), end = c(2001,1))
require(forecast)
arima_train <- auto.arima(train_month)
fit_month <- Arima(train_month, order = c(2,0,0), seasonal = c(1,1,0), lambda = 0)
plot(forecast(fit_month, 36)); lines(ts, col="red")

Ci sono risorse che si occupano specificamente dell'analisi delle serie temporali interrotta in R? Ho trovato questo che riguarda ITS in SPSS ma non sono stato in grado di tradurlo in R.


Vuoi fare una deduzione sul fatto che l'intervento abbia avuto un effetto statisticamente significativo o vuoi modellare l'intervento per ottenere previsioni migliori ? E potresti eventualmente rendere disponibili i dati?
Stephan Kolassa,

@StephanKolassa Certamente! Il mio obiettivo è fare l'inferenza. Fornirò dati fittizi in una modifica per illustrare meglio il mio punto.
dais.johns,

@StephanKolassa Dati forniti al meglio delle mie capacità.
dais.johns,

Ricerche precedenti suggeriscono che l'effetto dell'intervento sia sulla scala della variazione di +/- 5%.
dais.johns,

@StephanKolassa Fornito dati utilizzabili effettivi
dais.johns

Risposte:


4

Questo è noto come analisi del punto di cambio. Il pacchetto R changepointpuò fare questo per te: vedi la documentazione qui (compresi i riferimenti alla letteratura): http://www.lancs.ac.uk/~killick/Pub/KillickEckley2011.pdf


Grazie. Sto esaminando questo. Per quanto posso dire, ciò calcolerebbe i possibili punti di cambiamento nella serie, ma non analizzerà la differenza di tendenza. Mi scuso se questo assunto non è corretto. Non sono stato in grado di rivedere il pacchetto se non superficialmente.
dais.johns,

Dopo aver identificato il punto di modifica, è possibile dividere i dati in due serie temporali (prima e dopo il punto di modifica) e stimare i parametri delle due serie storiche separatamente. Un altro paio di suggerimenti: poiché i tuoi dati hanno una forte tendenza stagionale, questi dovrebbero essere rimossi prima dell'analisi del punto di cambio; e se si intende utilizzare un modello ARIMA, è necessario eseguire la differenziazione anche prima dell'analisi del punto di cambio (o, in alternativa, è necessario utilizzare una procedura più specializzata).
Brent Kerby,

Grazie per i suggerimenti che cercherò di implementare e contrassegnerò come "risposta" se questo risolve il problema.
dais.johns,

2

Suggerirei un modello gerarchico di misure ripetute. Questo metodo dovrebbe fornire risultati affidabili poiché ogni individuo fungerà da proprio controllo. Prova a controllare questo link dall'UCLA.


0

Per un approccio bayesiano, è possibile utilizzare mcpper adattare un modello di Poisson o Binomiale (poiché si hanno conteggi da periodi a intervallo fisso) con autoregressione applicata ai residui (nello spazio del registro). Quindi confrontare un modello a due segmenti con un modello a un segmento usando la convalida incrociata.

Prima di iniziare, si noti che per questo set di dati, questo modello non si adatta bene e la convalida incrociata sembra instabile. Quindi mi asterrei dall'utilizzare quanto segue in scenari ad alto rischio, ma illustra un approccio generale:

# Fit the change point model
library(mcp)
model_full = list(
  count ~ 1 + ar(1),  # intercept and AR(1)
  ~ 1  # New intercept
)
fit_full = mcp(model_full, data = df, family = poisson(), par_x = "year")


# Fit the null model
model_null = list(
  count ~ 1 + ar(1)  # just a stable AR(1)
)
fit_null = mcp(model_null, data = df, family = poisson(), par_x = "year")

# Compare predictive performance using LOO cross-validation
fit_full$loo = loo(fit_full)
fit_null$loo = loo(fit_null)
loo::loo_compare(fit_full$loo, fit_null$loo)

Per il presente set di dati, questo risulta in

       elpd_diff se_diff
model2    0.0       0.0 
model1 -459.1      64.3 

Vale a dire, un elpd_diff/se_diffrapporto di circa 7 a favore del modello nullo (nessuna modifica). I possibili miglioramenti includono:

  • modellando la tendenza periodica usando sin()o cos().
  • aggiunta di informazioni preliminari sulla probabile posizione della modifica, ad es prior = list(cp_1 = dnorm(1999.8, 0.5).

Ulteriori informazioni sulla modellazione dell'autoregressione, sul confronto dei modelli e sull'impostazione preliminare del mcpsito Web . Divulgazione: sono lo sviluppatore di mcp.

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.