Jak zmierzyć gładkość szeregu czasowego w R?


25

Czy istnieje dobry sposób pomiaru gładkości szeregu czasowego w R? Na przykład,

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

jest znacznie gładszy niż

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

chociaż mają takie same średnie i standardowe odchylenie. Byłoby fajnie, gdyby istniała funkcja zapewniająca mi płynny wynik w szeregu czasowym.


4
Gładkość ma dobrze zdefiniowane znaczenie w teorii procesów stochastycznych. („Wariogram to statystyczny, ilościowy opis chropowatości powierzchni”: goldensoftware.com/variogramTutorial.pdf , s. 16.) Gładkość jest związana z ekstrapolacją wariogramu na zerową odległość. (SD kolejnych różnic i autokorelacja lag-one to szybkie i brudne wersje tego). Istotna informacja zawarta jest we współczynnikach szeregu Taylora przy 0. Np. Stała niezerowa jest rzeczywiście szorstka; zero rzędu wysokiego przy 0 oznacza bardzo gładką serię.
whuber

Słyszałem też o najgorszych wykładnikach.
Taylor

Jak zabawne, zastanawiałem się nad tym samym. Dzięki za opublikowanie!
Chris Beeley,

@ whuber: to odpowiedź, a nie komentarz.
naught101

@ naught101 Pokornie błagam, by się różnić: mój komentarz jest sytuacją pokrewną i odnosi się tylko do teoretycznego procesu stosowanego do modelowania danych przestrzennych, a nie do tego, jak można właściwie oszacować tę gładkość. Istnieje szacunek do tej oceny, który znam w wielu wymiarach, ale nie w jednym, który jest wyjątkowy (ze względu na kierunek strzałki czasu), więc waham się twierdzić, że zastosowanie procedur wielowymiarowych do szeregów czasowych jest w ogóle konwencjonalne lub nawet dobre podejście.
whuber

Odpowiedzi:


22

Odchylenie standardowe różnic da przybliżoną przybliżoną gładkość:

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

Aktualizacja: jak wskazuje Cyan, daje to miarę zależną od skali. Podobny miernik niezależny od skali wykorzystałby współczynnik zmienności zamiast odchylenia standardowego:

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

W obu przypadkach małe wartości odpowiadają płynniejszej serii.


1
Ten wynik nie jest niezmienny w skali, co może, ale nie musi mieć sensu, w zależności od zastosowania. (A moja własna sugestia jest niezmienna w skali, więc dotyczy to tej samej troski). Warto również zauważyć, że dla powyższego wyniku mniejsze wartości wskazują na gładsze szeregi czasowe.
Cyan

1
Dzięki @Cyan. Dodałem teraz również wersję niezależną od skali.
Rob Hyndman

2
Czy naprawdę zamierzasz uwzględnić diffw mianownikach? Wartości zmniejszyłyby się algebraicznie, do (x[n]-x[1])/(n-1)których jest (prymitywna) miara trendu, i w wielu przypadkach powinny być bardzo bliskie zeru, co prowadzi do niestabilnej i niezbyt znaczącej statystyki. Zastanawia mnie to, ale może przeoczam coś oczywistego ...
whuber

1
Kiedyś diffunikałem założenia stacjonarności. Gdyby było zdefiniowane mianownikiem, abs(mean(x))skalowanie działałoby tylko wtedy, gdy xbyło nieruchome. Biorąc diffs oznacza to, że zadziała również dla procesów stacjonarnych różnic. Oczywiście różnice mogą się nie xzatrzymywać, a wtedy nadal występują problemy. Z tego powodu skalowanie szeregów czasowych jest trudne. Ale uważam, że chodzi o stabilność. Myślę, że zrobienie czegoś lepszego wymagałoby czegoś znacznie bardziej zaawansowanego - na przykład przy użyciu nieparametrycznej wygładzarki.
Rob Hyndman,

1
Myślałem, że stały trend powinien być idealnie gładki, więc odpowiedź powinna wynosić 0.
Rob Hyndman

13

Opóźnienie jeden autokorelacji posłuży jako wynik i ma stosunkowo prostą interpretację statystyczną też.

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

Interpretacja wyników:

  • wyniki w pobliżu 1 oznaczają płynnie zmieniającą się serię
  • wyniki w pobliżu 0 oznaczają, że nie ma ogólnej zależności liniowej między punktem danych a następną (tj. wykres (x [-długość (x)], x [-1]) nie da wykresu rozrzutu z żadną pozorną liniowością)
  • wyniki w pobliżu -1 sugerują, że szereg jest postrzępiony w szczególny sposób: jeśli jeden punkt jest powyżej średniej, następny prawdopodobnie będzie poniżej średniej o mniej więcej taką samą wartość i odwrotnie.

0

Możesz po prostu sprawdzić korelację z numerem taktowania. Byłoby to równoważne z wzięciem R 2 prostej regresji liniowej na szeregi czasowe. Zauważ jednak, że są to dwa bardzo różne szeregi czasowe, więc nie wiem, jak dobrze to działa w porównaniu.


4
Byłoby to miarą liniowości w czasie, ale nie gładkości.
Rob Hyndman
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.