Come misurare la fluidità di una serie temporale in R?


25

C'è un buon modo per misurare la fluidità di una serie temporale in R? Per esempio,

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

è molto più fluido di

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

sebbene abbiano la stessa media e deviazione standard. Sarebbe bello se ci fosse una funzione che mi dia un punteggio uniforme su una serie temporale.


4
La scorrevolezza ha un significato ben definito nella teoria dei processi stocastici. ("Un variogramma è una descrizione quantitativa, statisticamente, della rugosità di una superficie": goldensoftware.com/variogramTutorial.pdf , p. 16.) La levigatezza è correlata all'estrapolazione del variogramma a distanza zero. (La SD delle differenze successive e l'autocorrelazione lag-one sono versioni veloci e sporche di questo). Le informazioni essenziali sono contenute nei coefficienti della serie di Taylor a 0. Ad esempio, una costante diversa da zero è effettivamente approssimativa; uno zero di ordine superiore a 0 indica una serie molto regolare.
— whuber

Ho sentito parlare anche di esponenti di Hurst .
— Taylor,

Che strano, mi sono chiesto questa stessa identica cosa. Grazie per la pubblicazione!
— Chris Beeley,

@whuber: questa è una risposta, non un commento.
— naught101

@ naught101 Mi permetto umilmente di dissentire: il mio commento è a proposito di una situazione correlata e si riferisce solo al processo teorico utilizzato per modellare i dati spaziali, non a come si potrebbe effettivamente stimare quella scorrevolezza. C'è un'arte in quella stima con cui ho familiarità in più dimensioni, ma non in una, che è speciale (a causa della direzione della freccia del tempo), quindi esito a sostenere che applicare le procedure multidimensionali alle serie temporali è affatto approccio convenzionale o addirittura buono.
— whuber

Risposte:


22

La deviazione standard delle differenze fornirà una stima approssimativa della scorrevolezza:

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))

Aggiornamento: come sottolinea Cyan, questo ti dà una misura dipendente dalla scala. Una misura simile indipendente dalla scala userebbe il coefficiente di variazione anziché la deviazione standard:

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

In entrambi i casi, piccoli valori corrispondono a serie più fluide.


1
Tale punteggio non è invariante per la scala, il che può o meno avere un senso a seconda dell'applicazione. (E il mio suggerimento è invariante per scala, quindi la stessa preoccupazione si applica ad esso.) Inoltre, vale la pena sottolineare che per il punteggio sopra, valori più piccoli indicano serie temporali più fluide.
— Ciano

1
Grazie @Cyan. Ora ho aggiunto anche una versione indipendente dalla scala.
— Rob Hyndman,

2
Intendi davvero includere diffnei denominatori? I valori si ridurrebbero algebricamente a(x[n]-x[1])/(n-1) quale è una misura (grezza) di tendenza e dovrebbero, in molti casi, essere estremamente vicini allo zero, risultando in una statistica instabile e non terribilmente significativa. Ne sono perplesso, ma forse sto trascurando qualcosa di ovvio ...
— whuber

1
ero solito diff per evitare un'assunzione di stazionarietà. Se è stato definito con il denominatore, abs(mean(x))il ridimensionamento funzionerebbe solo quando xera fermo. Prendere diff significa che funzionerà anche per diversi processi stazionari. Naturalmente, le differenze potrebbero non rendere xstazionarie e quindi ci sono ancora problemi. Il ridimensionamento delle serie temporali è complicato per questo motivo. Ma prendo in considerazione la tua stabilità. Penso che fare qualcosa di meglio richiederebbe qualcosa di sostanzialmente più sofisticato, usando ad esempio un dispositivo non parametrico.
— Rob Hyndman,

1
Avrei pensato che una tendenza costante dovesse essere perfettamente regolare, quindi la risposta dovrebbe essere 0.
— Rob Hyndman,

13

L' autocorrelazione lag-one fungerà da punteggio e avrà anche un'interpretazione statistica ragionevolmente semplice.

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

Interpretazione del punteggio:

  • i punteggi vicini a 1 implicano una serie uniformemente variabile
  • i punteggi vicini a 0 implicano che non esiste una relazione lineare complessiva tra un punto dati e quello successivo (ovvero, trama (x [-length (x)], x [-1]) non darà un diagramma a dispersione con alcuna apparente linearità)
  • i punteggi vicini a -1 suggeriscono che la serie è frastagliata in un modo particolare: se un punto è al di sopra della media, è probabile che il prossimo sia al di sotto della media di circa lo stesso importo e viceversa.

0

Potresti semplicemente controllare la correlazione con il numero del timestep. Ciò equivarrebbe a prendere l'R² di una semplice regressione lineare sulla serie temporale. Si noti, tuttavia, che si tratta di due periodi molto diversi, quindi non so quanto funzioni bene come confronto.


4
Sarebbe una misura della linearità con il tempo, ma non della scorrevolezza.
— Rob Hyndman,
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.