Comment mesurer la fluidité d'une série chronologique en R?

25

Existe-t-il un bon moyen de mesurer la régularité d'une série chronologique dans R? Par exemple,

-1, -0.8, -0.6, -0.4, -0.2, 0, 0.2, 0.4, 0.6, 0.8, 1.0

est beaucoup plus lisse que

-1, 0.8, -0.6, 0.4, -0.2, 0, 0.2, -0.4, 0.6, -0.8, 1.0

bien qu'ils aient la même moyenne et l'écart-type. Ce serait cool s'il y avait une fonction pour me donner un score fluide sur une série chronologique.

agmao
la source
4
La régularité a une signification bien définie dans la théorie des processus stochastiques. ("Un variogramme est une description quantitative et statistique de la rugosité d'une surface": goldensoftware.com/variogramTutorial.pdf , p. 16.) Le lissage est lié à l' extrapolation du variogramme à une distance nulle. (Le SD des différences successives et l'autocorrélation lag-one en sont des versions rapides et sales). Les informations essentielles sont contenues dans les coefficients de la série de Taylor à 0. Par exemple, une constante non nulle est en effet approximative; un zéro d'ordre élevé à 0 indique une série très lisse.
whuber
J'ai aussi entendu parler d' exposants hâtifs .
Taylor
Comme c'est drôle, je me suis demandé exactement la même chose. Merci d'avoir posté!
Chris Beeley
@whuber: c'est une réponse, pas un commentaire.
naught101
@ naught101 Je prie humblement de différer: mon commentaire est à propos d'une situation connexe et il se réfère uniquement au processus théorique utilisé pour modéliser les données spatiales, pas à la façon dont on pourrait réellement estimer cette finesse. Il y a un art dans cette estimation que je connais en plusieurs dimensions, mais pas en une, qui est spécial (en raison de la direction de la flèche du temps), donc j'hésite à affirmer que l'application des procédures multidimensionnelles aux séries temporelles est du tout conventionnelle ou même une bonne approche.
whuber

Réponses:

22

L'écart type des différences vous donnera une estimation approximative du lissage:

x <- c(-1, -0.8, -0.6, -0.4, -0.2, 0, 0.2, 0.4, 0.6, 0.8, 1.0)
y <- c(-1, 0.8, -0.6, 0.4, -0.2, 0, 0.2, -0.4, 0.6, -0.8, 1.0)
sd(diff(x))
sd(diff(y))

Mise à jour: Comme le souligne Cyan, cela vous donne une mesure dépendante de l'échelle. Une mesure similaire indépendante de l'échelle utiliserait le coefficient de variation plutôt que l'écart-type:

sd(diff(x))/abs(mean(diff(x)))
sd(diff(y))/abs(mean(diff(y)))

Dans les deux cas, de petites valeurs correspondent à des séries plus fluides.

Rob Hyndman
la source
1
Ce score n'est pas invariable, ce qui peut ou non avoir du sens selon l'application. (Et ma propre suggestion est invariante d'échelle, donc la même préoccupation s'applique à elle.) En outre, il convient de souligner que pour le score ci-dessus, des valeurs plus petites indiquent des séries temporelles plus fluides.
Cyan
1
Merci @Cyan. J'ai également ajouté une version indépendante de l'échelle.
Rob Hyndman
2
Avez-vous vraiment l'intention d'inclure diffdans les dénominateurs? Les valeurs se réduiraient algébriquement, (x[n]-x[1])/(n-1)ce qui est une mesure (brute) de tendance et devrait, dans de nombreux cas, être extrêmement proche de zéro, ce qui entraînerait une statistique instable et peu significative. Cela me laisse perplexe, mais
j'oublie
1
J'avais l'habitude diffd'éviter une hypothèse de stationnarité. Si elle était définie avec le dénominateur, abs(mean(x))la mise à l'échelle ne fonctionnerait que lorsqu'elle xétait stationnaire. Prendre des différences signifie que cela fonctionnera également pour les processus stationnaires différents. Bien sûr, les différences ne peuvent pas rendre xstationnaire et il y a encore des problèmes. La mise à l'échelle des séries chronologiques est délicate pour cette raison. Mais je prends note de votre stabilité. Je pense que pour faire quelque chose de mieux, il faudrait quelque chose de beaucoup plus sophistiqué --- en utilisant un lisseur non paramétrique par exemple.
Rob Hyndman
1
J'aurais pensé qu'une tendance constante devrait être parfaitement fluide, donc la réponse devrait être 0.
Rob Hyndman
13

L' autocorrélation lag-one servira de score et a également une interprétation statistique raisonnablement simple.

cor(x[-length(x)],x[-1])

Interprétation des partitions:

  • des scores proches de 1 impliquent une série variant en douceur
  • des scores proches de 0 impliquent qu'il n'y a pas de relation linéaire globale entre un point de données et le suivant (c'est-à-dire que plot (x [-length (x)], x [-1]) ne donnera pas un nuage de points avec une quelconque linéarité apparente)
  • des scores proches de -1 suggèrent que la série est irrégulière d'une manière particulière: si un point est au-dessus de la moyenne, le suivant est susceptible d'être inférieur à la moyenne d'environ la même quantité, et vice versa.
Cyan
la source
0

Vous pouvez simplement vérifier la corrélation par rapport au nombre d'horodatage. Cela reviendrait à prendre le R² d'une simple régression linéaire sur la série temporelle. Notez, cependant, que ce sont deux séries temporelles très différentes, donc je ne sais pas si cela fonctionne bien en comparaison.

rien101
la source
4
Ce serait une mesure de la linéarité avec le temps, mais pas de la finesse.
Rob Hyndman