Stima dello stesso modello su più serie temporali


26

Ho un background da principiante in serie temporali (alcune stime / previsioni ARIMA) e sto affrontando un problema che non capisco perfettamente. Qualsiasi aiuto sarebbe molto apprezzato.

Sto analizzando più serie temporali, tutte nello stesso intervallo di tempo e tutte della stessa frequenza, descrivendo tutti un tipo simile di dati. Ogni serie è solo una variabile, non ci sono altri predittori corrispondenti che sto guardando.

Mi è stato chiesto di stimare un singolo modello che descriva TUTTE le serie - ad esempio, immagino di poter trovare un ARIMA (p, d, q) con gli stessi ordini, coefficienti, ecc. Che possa adattarsi a tutte le serie. Il mio supervisore non vuole che io valuti separatamente ciascuna serie, né vuole che io faccia una sorta di modello VAR con dipendenze tra le serie.

La mia domanda è: come definirei un tale modello e come potrei fare per stimarlo / prevederlo? Se per te è più semplice usare esempi di codice, parlo sia SAS che R.

Risposte:


8

Puoi fare una ricerca in griglia: inizia con ARIMA (1,0,0) e prova tutte le possibilità fino ad ARIMA (5,2,5) o qualcosa del genere. Adatta il modello a ciascuna serie e stima una misura di errore indipendente dalla scala come MAPE o MASE (probabilmente MASE sarebbe migliore). Scegli il modello ARIMA con il MASE medio più basso tra tutti i tuoi modelli.

È possibile migliorare questa procedura convalidando in modo incrociato la misurazione dell'errore per ciascuna serie e confrontando i risultati con una previsione ingenua .

Potrebbe essere una buona idea chiederti perché stai cercando un singolo modello per descrivere tutte le serie. A meno che non siano generati dallo stesso processo, questa non sembra una buona idea.


2
Grazie - ci proverò. Sono d'accordo che questa non sembra la migliore idea. L'argomento che ho avuto è stato che ogni serie non ha abbastanza osservazioni (~ 28) per una buona stima e che sarebbe più robusto stimare su tutte le serie. Non sono sicuro di essere d'accordo con tale argomento.
sparc_spread,

22

Un modo per farlo è quello di costruire una lunga serie temporale con tutti i tuoi dati e con sequenze di valori mancanti tra le serie per separarli. Ad esempio, in R, se hai tre serie ( x, yez ) ciascuno di lunghezza 100 e frequenza 12, è possibile unirli come segue

combined <- ts(c(x,rep(NA,56),y,rep(NA,56),z,rep(NA,56)),frequency=12)

Si noti che viene scelto il numero di valori mancanti per garantire il mantenimento del periodo stagionale. Ho completato l'ultimo anno con 8 valori mancanti e poi ho aggiunto quattro anni mancanti (48 valori) prima della serie successiva. Ciò dovrebbe essere sufficiente per garantire che eventuali correlazioni seriali vengano eliminate tra le serie.

Quindi è possibile utilizzare auto.arima()per trovare il modello migliore:

library(forecast)
fit <- auto.arima(combined)

Infine, è possibile applicare il modello combinato a ciascuna serie separatamente per ottenere previsioni:

fit.x <- Arima(x,model=fit)
fit.y <- Arima(y,model=fit)
fit.z <- Arima(z,model=fit)

5
+1, trucco accurato. A giudicare dal commento del PO ad un'altra risposta, stavo per suggerire una sorta di modello di dati del pannello, ma questo è molto meglio.
mpiktas,

Questo è di grande aiuto, molto apprezzato. Puoi spiegarci di più riguardo a: il numero di valori mancanti è stato scelto per garantire che il periodo stagionale sia mantenuto ? Mi dispiace non aver seguito fino in fondo, grazie.
sparc_spread,

1
Se c'è una stagionalità nei dati (come spesso accade con le osservazioni mensili), si desidera che le lunghe serie dispongano ancora dei multipli di 12 a gennaio, dei febbraio di un multiplo di 12 e così via. Quindi, quando viene scelto il modello, la stagionalità può essere modellata in modo appropriato.
Rob Hyndman,

3
Per aggiungere a questo trucco, è possibile aggiungere regressori esterni (xreg) che indicano l'appartenenza alla categoria. Ciò spiegherebbe mezzi separati per le diverse serie, pur mantenendo in comune altri coefficienti.
Jameson Quinn,

6

La stima di un singolo modello per più serie temporali è il regno dell'econometria dei dati dei panel . Tuttavia nel tuo caso senza una variabile esplicativa la risposta di @Rob Hyndman è probabilmente la soluzione migliore. Tuttavia, se si scopre che i mezzi delle serie temporali sono diversi (provalo, poiché in questo caso il metodo di @Rob Hyndman dovrebbe fallire!), Ma la struttura di ARMA è la stessa, dovrai usare Arellano-Bond (scusa se Wikipedia ha nessuna pagina su di esso, quindi cercalo su google) digita lo stimatore. Il modello in tal caso sarebbe:

yit=αi+ρ1yi,t1+...+ρpyi,tp+εit

iεiti


1
Apprezzo molto la tua soluzione e anche gli altri. Lo dici: Tuttavia, se si scopre che i mezzi delle serie temporali sono diversi (provalo, poiché in questo caso il metodo di @Rob Hyndman dovrebbe fallire!) Puoi spiegare di più sul perché questo è? Grazie.
sparc_spread,

2
@sparc_spread, supponiamo che siano solo due serie. Uno è centrato a circa 0 con la varianza 1 e l'altro è centrato su 1000 con la varianza 1. Quindi se entrambe le serie sono adattate usando gli stessi coefficienti, ciò significa che stiamo vincolando alpha_1 = alpha_2, quindi le previsioni per entrambe le serie sarebbero intorno 500, orribilmente spento. Fondamentalmente, trattare tutte le serie come appartenenti allo stesso modello può richiedere un po 'di recente / normalizzazione prima di montare il modello comune.
zkurtz,

4

Un'alternativa all'approccio di Rob Hyndman, per creare una singola serie di dati, è unire i dati. Questo potrebbe essere appropriato se le tue serie temporali multiple rappresentano letture rumorose da un set di macchine che registrano lo stesso evento. (Se ogni serie temporale è su una scala diversa, è necessario prima normalizzare i dati.)

NOTA: si ottengono ancora solo 28 letture, solo meno rumore, quindi potrebbe non essere appropriato per la propria situazione.

t1=xts(jitter(sin(1:28/10),amount=0.2),as.Date("2012-01-01")+1:28)
t2=xts(jitter(sin(1:28/10),amount=0.2),as.Date("2012-01-01")+1:28)
t3=(t1+t2)/2

inserisci qui la descrizione dell'immagine


Funzionerà solo se tutti i segnali di natura simile (ad esempio periodici) sono tutti in fase - nel tuo esempio se due onde sinusoidali fossero sfasate di 180 gradi, si annullerebbero completamente!
TCD

3
Sì, la media dei tuoi dati è appropriata solo quando ogni serie di date dovrebbe rappresentare gli stessi dati e (sei felice di supporre che) differiscano solo per il fatto che ognuno ha un rumore diverso.
Darren Cook,

1

Guarderei i modelli nascosti di Markov e le dinamiche reti bayesiane. Modellano i dati delle serie temporali. Inoltre, vengono addestrati utilizzando più istanze di serie temporali, ad esempio più serie temporali di pressione sanguigna di vari individui. Dovresti trovare i pacchetti in Python e R per crearli. Potrebbe essere necessario definire la struttura per questi modelli.


0

Sto provando a fare la stessa cosa. Apparentemente, esiste qualcosa chiamato modello "AutoRegressive multivariato". Ho trovato riferimento ad esso, ma non come usarlo. Sulla base del documento collegato, presumo che sia stato implementato in R.

http://journal.r-project.org/archive/2012-1/RJournal_2012-1_Holmes~et~al.pdf


L'approccio standard è autoregressione vettoriale e c'è un pacchetto R chiamato var .
Xi'an,

Un'autoregessione vettoriale è diversa dall'autoregressione sui dati del pannello? O è una questione di campi diversi, nomi diversi? Il pacchetto plm è stato suggerito per i dati del pannello. cran.r-project.org/web/packages/plm/vignettes/plm.pdf clidyn.ethz.ch/papers/arfit.pdf
Mox
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.