Analyse des modèles haut / bas dans les données de courtes séries chronologiques

8

Je n'ai pas travaillé très fréquemment avec des données de séries chronologiques, alors je cherche des conseils sur la meilleure façon de traiter cette question particulière.

Disons que j'ai les données suivantes - représentées ci-dessous:

entrez la description de l'image ici

Ici, il y a l'année sur l'axe des x. L'axe des y est une mesure de «l'inégalité», par exemple, il pourrait s'agir d'une inégalité de revenu dans un pays.

Pour cette question, je voudrais savoir s'il y a une nature ascendante / descendante dans les données année après année (faute d'une meilleure description). Essentiellement, j'aimerais savoir si si l'inégalité a augmenté l'an dernier par rapport à l'année précédente, est-elle maintenant susceptible de redescendre? La taille des hauts / bas peut également être importante à prendre en compte.

Je pense que quelque chose comme wavelet analysisou Fourier analysispeut aider, même si je ne les ai pas utilisés auparavant et je pense qu'un échantillon comme celui-ci est trop petit.

Serait intéressé par des idées / suggestions pour moi de suivre.

ÉDITER:

Ce sont les données de ce graphique:

#   year     value
#1  1956 0.9570912
#2  1957 1.0303563
#3  1958 0.9568302
#4  1959 1.1449074
#5  1960 0.8962963
#6  1961 1.0431552
#7  1962 0.8050077
#8  1963 0.8533181
#9  1964 0.9971713
#10 1965 1.0453083
#11 1966 0.8221328
#12 1967 1.0594876
#13 1968 1.1244195
#14 1969 1.0705498
#15 1970 0.8669457
#16 1971 0.8757319
#17 1972 1.0815189
#18 1973 1.1458959
#19 1974 1.2782848
#20 1975 1.0729718
#21 1976 1.1569416
#22 1977 1.2063673
#23 1978 1.1509700
#24 1979 1.1172020
#25 1980 1.0691429
#26 1981 1.0907407
#27 1982 1.1753854
#28 1983 0.9440187
#29 1984 1.1214175
#30 1985 1.2777778
#31 1986 1.2141739
#32 1987 0.9481722
#33 1988 1.1484652
#34 1989 0.7968458
#35 1990 1.1721074
#36 1991 1.1569523
#37 1992 0.8160300
#38 1993 0.9483291
#39 1994 1.0898612
#40 1995 0.8196819
#41 1996 1.0297017
#42 1997 1.0207769
#43 1998 0.9720285
#44 1999 0.8685848
#45 2000 0.9228595
#46 2001 0.9171540
#47 2002 1.0470085
#48 2003 0.9313437
#49 2004 1.0943982
#50 2005 1.0248419
#51 2006 0.9392917
#52 2007 0.9666248
#53 2008 1.1243693
#54 2009 0.8829184
#55 2010 0.9619517
#56 2011 1.0030864
#57 2012 1.1576998
#58 2013 0.9944945

Les voici au Rformat:

structure(list(year = structure(1:58, .Label = c("1956", "1957", 
"1958", "1959", "1960", "1961", "1962", "1963", "1964", "1965", 
"1966", "1967", "1968", "1969", "1970", "1971", "1972", "1973", 
"1974", "1975", "1976", "1977", "1978", "1979", "1980", "1981", 
"1982", "1983", "1984", "1985", "1986", "1987", "1988", "1989", 
"1990", "1991", "1992", "1993", "1994", "1995", "1996", "1997", 
"1998", "1999", "2000", "2001", "2002", "2003", "2004", "2005", 
"2006", "2007", "2008", "2009", "2010", "2011", "2012", "2013"
), class = "factor"), value = c(0.957091237579043, 1.03035630567276, 
0.956830206830207, 1.14490740740741, 0.896296296296296, 1.04315524964493, 
0.805007684426229, 0.853318117977528, 0.997171336206897, 1.04530832219251, 
0.822132760780104, 1.05948756976154, 1.1244195265602, 1.07054981337927, 
0.866945712836124, 0.875731948296804, 1.081518931763, 1.1458958958959, 
1.27828479729065, 1.07297178130511, 1.15694159981794, 1.20636732623034, 
1.15097001763668, 1.11720201026986, 1.06914289768696, 1.09074074074074, 
1.17538544689082, 0.944018731375053, 1.12141754850088, 1.27777777777778, 
1.21417390277039, 0.948172198172198, 1.14846524606799, 0.796845829569407, 
1.17210737869653, 1.15695226716732, 0.816029959161985, 0.94832907620264, 
1.08986124767836, 0.819681861348528, 1.02970169141241, 1.02077687443541, 
0.972028455959697, 0.868584838281808, 0.922859547859548, 0.917153996101365, 
1.04700854700855, 0.931343718539713, 1.09439821062628, 1.02484191508582, 
0.939291692822766, 0.966624816907303, 1.12436929683306, 0.882918437563246, 
0.961951667980037, 1.00308641975309, 1.15769980506823, 0.994494494494494
)), row.names = c(NA, -58L), class = "data.frame", .Names = c("year", 
"value"))
jalapic
la source
Une idée très simple: que diriez-vous de prendre la série chronologique des différences et de regarder les coefficients de corrélation automatique?
psarka
Les données sont maintenant révélées comme une inégalité mesurée à l'aide de l'asymétrie de Lorenz. Voir le commentaire de OP sous la réponse de @IrishStat. Mais quelle est la nature de la courbe plus lisse? Être timide à propos de ce que vous montrez rend généralement la question plus cryptique, pas utilement plus générale.
Nick Cox
L'analyse de Fourier @jalapic sur un échantillon d'observation court est presque toujours inutile. Vous pouvez choisir un cycle à 25 ans de longueur d'onde, mais ça va être très faible. Vous avez à peine un cycle complet au mieux. Fourier a été conçu pour les données physiques où vous avez des séries répétables ou au moins longues.
Aksakal
Vous vous rendez compte que la nature ascendante que vous décrivez correspond bien à l'idée de régression vers la moyenne. C'est-à-dire que vous aurez ce comportement ascendant même si votre série n'a pas de mémoire au sens arima.
Korone

Réponses:

6

Si la série n'est pas corrélée, prendre des différences inutilement injecte une auto-corrélation. Même si la série est autocorrélée, une différenciation injustifiée est inappropriée. Des idées et des approches simples ont souvent des effets secondaires indésirables. Le processus d'identification du modèle (ARIMA) commence par la série d'origine et peut entraîner une différenciation MAIS il ne devrait jamais commencer par une différenciation injustifiée, sauf s'il existe une justification théorique. Si vous le souhaitez, vous pouvez publier votre courte série chronologique et je vais l'utiliser pour vous expliquer comment identifier un modèle pour cette série.

Après réception des données:

L'ACF de vos données n'indique pas initialement (ou finalement) aucun processus ARIMA ici À LA FOIS ACF et PACF
image
et ici seulement ACF:
imageCependant, il semble y avoir deux changements de niveau dans vos données ... l'un en 1972 et l'autre en 1992 .. ils semblent presque annuler les changements de niveau. Un modèle utile pourrait également inclure l'incorporation de trois valeurs inhabituelles aux périodes 1989, 1959 et 1983. L'équation est alors image
et ici
image
avec les statistiques du modèle ici:
image
Le réel / ajustement et les prévisions sont ici imageavec le tracé résiduel suggérant ici la suffisance du modèle image. Ceci est confirmé par l'acf des résidus image. Enfin, l'ajustement et les prévisions résument les résultats image.
En résumé, la série (probablement un rapport) est dépourvue de mémoire auto-régressive significative mais présente une structure déterministe évidente (statistiquement significative). Tous les modèles sont faux mais certains sont utiles (GEP Box).

Après quelques discussions. Si l'on modélisait les différences, on obtiendrait le modèle suivant ... entrez la description de l'image iciavec ACTUAL / FIT et FORECAST entrez la description de l'image ici. Les prévisions sont étrangement similaires ... le coefficient MA annule efficacement l'opérateur de différenciation.

IrishStat
la source
Merci beaucoup pour les suggestions. Je serais très intéressé à en savoir plus - j'ai ajouté les données brutes à la question.
jalapic
2
@IrishStat a suggéré un modèle avec 6 paramètres. L'ensemble des données comprend 58 observations. Cela fait 10 observations par paramètre. Même s'il ne s'agissait pas de données économiques, je dirais qu'un échantillon est trop petit pour prendre en charge un modèle à 6 paramètres. Puisqu'il s'agit d'un modèle économique, je dirai que le modèle de séries chronologiques ne fonctionnera pas. Vous avez besoin de variables exogènes (PIB?) Ou d'une sorte de modèle structurel.
Aksakal
2
Le modèle pourrait être facilement simplifié pour ignorer les trois points aberrants (impulsions). Cela réduirait à 3 coefficients .. une constante et deux indicateurs de décalage de niveau ... ne pourrait pas être plus simple! et fournirait toujours une représentation raisonnable ... deux changements de niveau. Je suis d'accord qu'un pur modèle de série chronologique ne fonctionnera pas. Le modèle que j'ai présenté est simplement un modèle de régression ordinaire avec deux indicateurs de décalage de niveau ... il n'y a pas de mémoire donc ce n'est pas classiquement un modèle de série chronologique car il n'y a pas de structure ARIMA dans le modèle car il est injustifié.
IrishStat
On ne peut pas pleurer "J'ai besoin de plus de variables", bien que mon expérience me dise que c'est le cas. Ce problème est ce qu'il est! Résoudre !
IrishStat
@aksakal, ce que montre le modèle irishstat, c'est qu'il a 5 variables, si la parcimonie est préoccupante, vous pouvez simplement désactiver les impulsions et simplement garder les changements de niveau qui répondraient à la question op. Je ne connais aucune autre méthédologie que la boîte automatique qui effectue efficacement ce type de détection de décalage de niveau avant de sélectionner un modèle de série chronologique
prévisionniste
3

Vous pouvez regarder les hauts et les bas comme une séquence aléatoire, qui est générée par un processus aléatoire. Par exemple, supposons que vous ayez affaire à une série stationnaire , où est une distribution de probabilité telle que gaussienne, Poisson ou autre. Ceci est une série stationnaire. Maintenant, vous pouvez créer une nouvelle variable telle que et , ce sont vos hauts et vos bas. Cette nouvelle séquence formera sa propre séquence aléatoire avec des propriétés intéressantes, voir par exemple V Khil, Elena. "Propriétés de Markov des écarts entre les maxima locaux dans une séquence de variables aléatoires indépendantes." (2013).x1,x2,x3,...,xnf(x)f(x)ytyt=1:xt<xt+1yt=0:xtxt+1

Par exemple, regardez ACF et PACF de votre série. Il n'y a rien ici. Cela ne ressemble pas au modèle ARIMA. Cela ressemble à une séquence non corrélée de . xtentrez la description de l'image ici

Cela signifie que nous pourrions essayer d'appliquer des résultats connus pour , par exemple, il est connu que la distance moyenne entre deux paires (de haut en bas) (ou demi-tours comme certains les appellent) est de 3. Dans votre jeu de données, le premier pic (en haut) vers le bas) est 1957 et le dernier est 2012, avec 16 pics au total. Ainsi, la distance moyenne entre les pics est de 15/55 = 3,67. Nous savons que le , et avec 15 observations . La distance moyenne entre les pics est donc à moins de de la moyenne théorique.ytσ=1.108σ15=σ/15=0.291.2σn

MISE À JOUR: sur les cycles

Le graphique de la question d'OP semble suggérer qu'il existe une sorte de cycle de longue durée. Il y a plusieurs problèmes avec cela.

  1. Si vous générez une séquence aléatoire, quelque chose comme un cycle peut parfois apparaître de manière aléatoire. Ainsi, avec 58 points de données qui sont purement des données d'observation, il est impossible de déclarer un cycle sans une sorte de théorie économique derrière. Personne ne va le prendre au sérieux sans le raisonnement économique. Pour cela, vous avez certainement besoin de variables exogènes, je le crains.
  2. Consultez ce merveilleux article: La sommation des causes aléatoires comme source de processus cycliques , Eugen Slutzky, Econometrica, Vol. 5, n ° 2 (avril 1937), p. 105-146. Fondamentalement, parfois les cycles sont causés par une sorte de processus d'AMM.
  3. Cela pourrait être une illusion. J'utilise cette astuce assez souvent dans les présentations. Je montre les données réelles, puis dessine des lignes, des cercles ou des flèches pour jouer avec le cerveau de mon public :) Les lignes supplémentaires incitent le cerveau à voir des tendances qui peuvent ne pas être là du tout, ou à les rendre beaucoup plus fortes qu'elles ne le sont réellement.
Aksakal
la source
En 45 mois sur ce forum, j'ai rarement commenté une réponse MAIS dans ce cas, votre réponse me laisse avec un front plissé et sans voix. Pouvez-vous expliquer votre modèle, vos tests de signification, les tests concernant vos hypothèses, une prévision avec des intervalles de confiance et une conclusion logique.
IrishStat
1
Ce n'est pas mon modèle. L'idée est simple: si vous avez une séquence non corrélée de , vous pouvez en créer une autre, telle que , qui aura 1 si a augmenté par rapport à la valeur précédente et 0 si elle a baissé. Dans ce cas, [1,0] paire en indiquera un maximum local (pic) en , comme pour les années 1957 et 1959. Le reste est simple, vous pouvez trouver toutes sortes de statistiques pour la séquence . J'y ai pensé parce que OP a "haut / bas" dans le titre de la question. La séquence possède de nombreuses caractéristiques markoviennes intéressantes. xtytxtytxtytyt
Aksakal
À mon humble avis, sa montée / descente n'était pas de période en période mais sur un horizon plus long. Merci pour votre explication. Rien dans ses données ne suggère une séquence ascendante / descendante prévisible.
IrishStat
Ils ne sont pas prévisibles dans ce modèle. Ils sont aléatoires mais corrélés
Aksakal
Je suis fermement en désaccord, ils ne sont pas corrélés ... dans chacun des trois régimes: 1956-1972 .... 1973-1991 ... 1992-2013 ... étant donné que vous ajustez / modifiez les trois points / lectures inhabituels.
IrishStat
2

Mis à part 1: Une chose que nous voyons est l'apparition d'une longue tendance cyclique dans les données. Cela ne devrait pas beaucoup affecter l'analyse d'une année sur l'autre * - donc pour cette analyse très basique, je l'ignorerai et traiterai les données comme si elles étaient homogènes en dehors de l'effet qui vous intéresse.

* (cela aura tendance à réduire le nombre de mouvements de sens opposés par rapport à ce que vous attendez avec homogénéité - donc cela aura tendance à diminuer quelque peu la puissance de ce test. Nous pourrions essayer de quantifier cet impact, mais je ne pense pas il y a un fort besoin à moins qu'il ne semble susceptible d'être assez grand pour faire une différence - s'il est déjà significatif, l'ajustement pour quelque chose qui rendrait la valeur p un peu plus petite serait une perte d'effort.)

Mis à part 2: Comme indiqué, votre question semble impliquer une alternative unilatérale. Je vais travailler sur la base que c'est ce que vous voulez.

Commençons par une analyse simple dirigée directement vers votre question de base, qui semble aller dans le sens de "une augmentation est-elle plus susceptible d'être suivie d'une diminution?"

Cependant, ce n'est pas aussi simple qu'il y paraît. Dans une série stable, avec des données purement aléatoires, une augmentation est plus susceptible d'être suivie d'une diminution. Notez que l'hypothèse que nous considérons implique trois observations, qui peuvent être ordonnées de six manières possibles:

entrez la description de l'image ici

De ces six façons, 4 impliquent un changement de direction. Ainsi, une série purement aléatoire (quelle que soit la distribution) devrait voir un flip dans la direction 2/3 du temps.

[Ceci est étroitement lié à un test de montée et de descente, où vous souhaitez savoir s'il y a trop de courses pour qu'il soit aléatoire. Vous pouvez utiliser ce test à la place.]

Je suppose que votre intérêt réel est de savoir s'il est supérieur aux 2/3 aléatoires plutôt que s'il est supérieur à 1/2, comme vous semblez le demander.

H0: la série est "aléatoire"

H1:un changement vers le haut ou vers le bas est plus susceptible d'être suivi d'un changement dans la direction opposée que vous ne le verriez avec une série aléatoire

Statistique de test: proportion de décalages suivis de décalages dans la direction opposée.

Parce que nos triplets se chevauchent, je crois que nous avons une certaine dépendance entre les triplets, donc nous ne pouvons pas traiter cela comme binôme (nous pourrions si nous divisions les données en triplets sans chevauchement; cela fonctionnerait bien).

En gardant cette dépendance à l'esprit, nous pourrions toujours calculer la distribution de la statistique de test, mais nous n'avons pas besoin de le faire dans ce cas, car la proportion observée de triplets inversés est juste en dessous du nombre attendu de 2/3 pour une série aléatoire , et nous ne sommes intéressés que par plus de renversements que cela.

Nous n'avons donc pas besoin de calculer davantage - il n'y a aucune preuve d'une tendance à inverser (de haut en bas ou de haut en bas) plus que ce que vous obtiendriez avec une série aléatoire.

[Je doute vraiment que le cycle doux négligé aura suffisamment d'impact pour déplacer la proportion attendue vers le bas suffisamment près pour que cela fasse une différence substantielle.]

Glen_b -Reinstate Monica
la source
merci -très intéressant. Une petite question concernant le test des runs. Faites-vous référence au test de fonctionnement typique pour tester le caractère aléatoire? À partir des données ci-dessus, je peux produire la séquence suivante: 1 0 1 0 1 0 1 1 1 0 1 1 0 0 1 1 1 1 0 1 1 0 0 0 1 1 0 1 1 0 0 1 0 1 0 0 1 1 0 1 0 0 0 1 0 1 0 1 0 0 1 1 0 1 1 1 0avec un 1 indiquant la série qui monte et un 0 qui descend. En utilisant runs.testle tseriespackage R, cela donne une statistique de test de 1,81 et un ap de 0,07. Bien que je ne sois pas trop inquiet à propos de ces exemples de données, je me demande si c'est le genre d'analyse dont vous parliez?
jalapic
Non, je pense que ce sont des courses uniques (comme pour l'agglutination de panneaux, par exemple), pas des montées et des descentes. Elle conviendrait à une hypothèse quelque peu différente de celle-ci.
Glen_b -Reinstate Monica
@Glen_b, les six façons possibles de monter et descendre et des trucs comme ça sont couverts dans la littérature qui peut être retracée à partir du papier que j'ai posté dans ma réponse. En particulier, à partir de votre image, vous pouvez facilement voir qu'il existe deux façons d'avoir une séquence ascendante sur six combinaisons. Cela signifie que P = 1/3 pour rencontrer un pic local n'importe où dans la séquence, c'est-à-dire que la distance moyenne entre les pics est exactement de 3.
Aksakal
@Aksakal Le fait qu'ils soient connectés n'est pas une surprise, car ils envisagent des choses étroitement liées (je ne peux voter pour votre réponse qu'une seule fois, désolé). J'ai simplement décidé d'essayer de répondre à l'interprétation la plus littérale de la question de la manière la plus élémentaire possible, car je pensais que cela pourrait être éclairant de montrer qu'une analyse assez basique nécessitant peu de mathématiques au-delà du comptage pourrait donner des résultats utiles.
Glen_b -Reinstate Monica
jalapic - voir cette page qui traite des montées et descentes et d'une version particulière des courses de type unique. Il donne une approximation normale pratique pour les montées et les descentes et devrait également aider à clarifier la distinction.
Glen_b -Reinstate Monica
1

Vous pouvez utiliser un package appelé changement structurel qui vérifie les ruptures ou les changements de niveau dans les données. J'ai réussi à détecter automatiquement les changements de niveau pour les séries chronologiques non saisonnières.

J'ai converti votre "valeur" en données de séries chronologiques. et utilisé le code suivant pour vérifier les changements de niveau ou les points de changement ou les points d'arrêt. Le paquet a également de belles fonctionnalités telles que le test de chow pour faire un test de chow pour tester les ruptures structurelles:

require(strucchange)
value.ts <- ts(data[,2],frequency = 1, start = (1956))
bp.value <- breakpoints(value.ts ~ 1)
summary(bp.value)

Voici le résumé de la fonction breakpont:

Breakpoints at observation number:

m = 1           36      
m = 2     16    31      
m = 3     16    36    46
m = 4     16 24 36    46
m = 5   8 16 24 36    46
m = 6   8 16 24 33 41 49

Corresponding to breakdates:

m = 1                  1991          
m = 2        1971      1986          
m = 3        1971      1991      2001
m = 4        1971 1979 1991      2001
m = 5   1963 1971 1979 1991      2001
m = 6   1963 1971 1979 1988 1996 2004

Fit:

m   0           1           2           3           4           5           6          
RSS   0.8599316   0.7865981   0.5843395   0.5742085   0.5578739   0.5559645   0.5772778
BIC -71.5402819 -68.5892480 -77.7080112 -70.6015129 -64.1544916 -56.2324540 -45.9296608

Comme vous pouvez le voir, la fonction a identifié les ruptures possibles dans vos données et sélectionné deux ruptures structurelles en 1971 et 1986, comme indiqué dans le graphique ci-dessous en fonction du critère BIC. La fonction a également fourni d'autres points d'arrêt alternatifs, comme indiqué dans la sortie ci-dessus.

entrez la description de l'image ici

J'espère que cela vous sera utile

prévisionniste
la source
Le problème avec l'approche que vous utilisez est qu'elle ne suppose tacitement aucune impulsion et (probablement) aucune structure ARIMA. Mes pauses sont "sur ou autour de la base" 1972 et 1992 ... les vôtres sont 1971 et 1986, en ignorant l'anomalie de 1989. En résumé, les analyses ne sont pas si différentes, la mienne étant robuste à des anomalies ponctuelles.
IrishStat
@IrishStat vous avez raison. Autobox identifie en effet les corrects pour les impulsions puis identifie correctement pour le décalage de niveau. Un problème que j'ai eu avec le package de changement structurel dans R est qu'il fonctionne assez bien pour les séries chronologiques non saisonnières, qu'il a une utilisation très limitée ou inutile dans les séries chronologiques saisonnières, ce que je suis sûr qu'Autobox gère très bien.
prévisionniste