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:
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 analysis
ou Fourier analysis
peut 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 R
format:
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"))
la source
Réponses:
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
et ici seulement ACF:
Cependant, 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
et ici
avec les statistiques du modèle ici:
Le réel / ajustement et les prévisions sont ici avec le tracé résiduel suggérant ici la suffisance du modèle . Ceci est confirmé par l'acf des résidus . Enfin, l'ajustement et les prévisions résument les résultats .
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 ... avec ACTUAL / FIT et FORECAST . Les prévisions sont étrangement similaires ... le coefficient MA annule efficacement l'opérateur de différenciation.
la source
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,...,xn∈f(x) f(x) yt yt=1:xt<xt+1 yt=0:xt≥xt+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 .xt
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.29 1.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.
la source
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:
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.
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.]
la source
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 0
avec un 1 indiquant la série qui monte et un 0 qui descend. En utilisantruns.test
letseries
package 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?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:
Voici le résumé de la fonction breakpont:
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.
J'espère que cela vous sera utile
la source