Estimation du même modèle sur plusieurs séries chronologiques


26

J'ai une formation novice dans les séries chronologiques (certaines estimations / prévisions ARIMA) et je suis confronté à un problème que je ne comprends pas complètement. Toute aide serait grandement appréciée.

J'analyse plusieurs séries chronologiques, toutes sur le même intervalle de temps et toutes de la même fréquence, décrivant toutes un type de données similaire. Chaque série n'est qu'une variable, il n'y a aucun autre prédicteur correspondant que je regarde.

On m'a demandé d'estimer un modèle unique qui décrit TOUTES les séries - par exemple, imaginez que je pourrais trouver un ARIMA (p, d, q) avec les mêmes ordres, coefficients, etc. qui pourrait s'adapter à toutes les séries. Mon superviseur ne veut pas que j'évalue séparément chaque série, ni qu'il fasse une sorte de modèle VAR avec des dépendances entre les séries.

Ma question est: comment pourrais-je même appeler un tel modèle, et comment pourrais-je procéder pour l'estimer / le prévoir? S'il vous est plus facile d'utiliser des exemples de code, je parle à la fois SAS et R.

Réponses:


8

Vous pouvez faire une recherche dans la grille: commencez par ARIMA (1,0,0) et essayez toutes les possibilités jusqu'à ARIMA (5,2,5) ou quelque chose. Ajustez le modèle à chaque série et estimez une mesure d'erreur indépendante de l'échelle comme MAPE ou MASE (MASE serait probablement mieux). Choisissez le modèle ARIMA avec le MASE moyen le plus bas parmi tous vos modèles.

Vous pouvez améliorer cette procédure en validant de manière croisée votre mesure d'erreur pour chaque série, et également en comparant vos résultats à une prévision naïve .

Ce pourrait être une bonne idée de demander pourquoi vous cherchez un seul modèle pour décrire toute la série. À moins qu'ils ne soient générés par le même processus, cela ne semble pas être une bonne idée.


2
Merci - je vais essayer ça. Je suis d'accord que cela ne semble pas être la meilleure idée. L'argument que j'ai reçu est que chaque série ne contient pas suffisamment d'observations (~ 28) pour une bonne estimation et qu'il serait plus robuste d'estimer l'ensemble de la série. Je ne suis pas sûr d'être d'accord avec cet argument.
sparc_spread

22

Une façon de le faire consiste à construire une longue série chronologique avec toutes vos données et avec des séquences de valeurs manquantes entre les séries pour les séparer. Par exemple, dans R, si vous avez trois séries ( x, yet z) chacune de longueur 100 et de fréquence 12, vous pouvez les joindre comme suit

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

Notez que le nombre de valeurs manquantes est choisi pour garantir que la période saisonnière est conservée. J'ai complété la dernière année avec 8 valeurs manquantes, puis ajouté quatre années manquantes (48 valeurs) avant la prochaine série. Cela devrait être suffisant pour garantir que les corrélations en série disparaissent entre les séries.

Ensuite, vous pouvez utiliser auto.arima()pour trouver le meilleur modèle:

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

Enfin, vous pouvez appliquer le modèle combiné à chaque série séparément afin d'obtenir des prévisions:

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

5
+1, astuce soignée. À en juger par le commentaire du PO sur une autre réponse, j'allais suggérer une sorte de modèle de données de panel, mais c'est bien mieux.
mpiktas

C'est une aide énorme, très appréciée. Pouvez-vous expliquer davantage: le nombre de valeurs manquantes est choisi pour garantir la conservation de la période saisonnière ? Désolé, je n'ai pas complètement suivi - merci.
sparc_spread

1
S'il y a une saisonnalité dans les données (comme c'est souvent le cas pour les observations mensuelles), vous voulez que la longue série contienne toujours les multiples de janvier à 12, les février à 12, et ainsi de suite. Ensuite, lorsque le modèle est choisi, la saisonnalité peut être modélisée de manière appropriée.
Rob Hyndman

3
Pour ajouter à cette astuce - vous pouvez ajouter des régresseurs externes (xreg) indiquant l'appartenance à une catégorie. Cela représenterait des moyens distincts pour les différentes séries, tout en gardant en commun d'autres coefficients.
Jameson Quinn

6

L'estimation d'un modèle unique pour plusieurs séries chronologiques est le domaine de l' économétrie des données de panel . Cependant, dans votre cas, sans variable explicative, la réponse @Rob Hyndman est probablement la meilleure solution. Cependant, s'il s'avère que les moyens des séries temporelles sont différents (testez-le, car dans ce cas, la méthode de @Rob Hyndman devrait échouer!), Mais la structure ARMA est la même, alors vous devrez utiliser Arellano-Bond (désolé wikipedia a pas de page dessus, alors recherchez-le sur google). Le modèle dans ce cas serait:

yjet=αje+ρ1yje,t-1+...+ρpyje,t-p+εjet

jeεjetje


1
Appréciez vraiment votre solution et les autres également. Vous mentionnez que: Cependant s'il s'avère que les moyens des séries temporelles sont différents (testez-le, car dans ce cas, la méthode de @Rob Hyndman devrait échouer!) Pouvez-vous expliquer plus en détail pourquoi? Merci.
sparc_spread

2
@sparc_spread, supposons que ce ne soit que deux séries. L'une est centrée à environ 0 avec la variance 1 et l'autre est centrée à 1000 avec la variance 1. Alors si les deux séries sont ajustées en utilisant les mêmes coefficients, cela signifie que nous contraignons alpha_1 = alpha_2, donc les prédictions pour les deux séries seraient autour 500, horriblement éteint. Fondamentalement, le traitement de toutes les séries comme appartenant au même modèle peut nécessiter un recentrage / normalisation avant d'ajuster le modèle de joint.
zkurtz

4

Une alternative à l'approche de Rob Hyndman, pour faire une seule série de données, est de fusionner les données. Cela peut être approprié si vos séries chronologiques multiples représentent des lectures bruyantes d'un ensemble de machines enregistrant le même événement. (Si chaque série chronologique est à une échelle différente, vous devez d'abord normaliser les données.)

REMARQUE: vous ne vous retrouvez toujours qu'avec 28 lectures, juste moins de bruit, donc cela peut ne pas convenir à votre situation.

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

entrez la description de l'image ici


Cela ne fonctionnera que si tous les signaux sont de nature similaire (par exemple périodique) sont tous en phase - dans votre exemple, si deux des ondes sinusoïdales étaient déphasées de 180 degrés, elles s'annuleraient complètement!
tdc

3
Oui, la moyenne de vos données n'est appropriée que lorsque chaque série de dates est censée représenter les mêmes données et (vous êtes heureux de supposer que) elles ne diffèrent que par le fait que chacune a un bruit différent.
Darren Cook

1

J'examinerais les modèles de Markov cachés et les réseaux bayésiens dynamiques. Ils modélisent des données de séries chronologiques. Ils sont également formés en utilisant plusieurs instances de séries chronologiques, par exemple plusieurs séries chronologiques de tension artérielle de divers individus. Vous devriez trouver des packages en Python et R pour les construire. Vous devrez peut-être définir la structure de ces modèles.


0

J'essaye de faire la même chose. Apparemment, il existe quelque chose appelé un modèle «Auto-régressif multivarié». J'y ai trouvé une référence, mais pas comment l'utiliser. Sur la base du document lié, je suppose qu'il a été mis en œuvre dans R.

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


L'approche standard est l' autorégression vectorielle et il existe un package R appelé var .
Xi'an

L'autorégression vectorielle est-elle différente de l'autorégression sur les données du panel? Ou s'agit-il de domaines différents, de noms différents? Le package plm a été suggéré pour les données du panel. cran.r-project.org/web/packages/plm/vignettes/plm.pdf clidyn.ethz.ch/papers/arfit.pdf
Mox
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.