sobota, 30 marca 2019

Filtr Butterwortha + ARMA, czyli w górę albo w dół

Od kilku lat jestem negatywnie nastawiony do wzrostów na giełdzie, chociaż ostatnio w związku z zastosowaniem filtru Butterwortha (FB), pisałem, że WIG jest coraz bliżej dołka. Koniec FB sugeruje dołek na indeksie - tym razem wziąłem pod lupę WIG20 (kwartalne stopy od stycznia 2002 do marca 2019 r.):


Parametry: x_c = 27, n = 2. FB możemy teraz prognozować już klasyczną ekonometrią - tj. ARMA. Starujemy od wyrównanego szeregu FB:


Pierwsze różnice FB można uznać za stacjonarne (ADF i KPSS przemawiają za nią). Dodatek armax w gretlu wskazał optymalne parametry ARMA(4, 2) dla BIC i HQC jednocześnie. Możemy teraz użyć wskazanych pierwszych różnic FB do ARMA(4, 2) albo od razu zastosować oryginalny FB do ARIMA(4, 1, 2). Ta ostatnia pozwala graficznie ocenić kierunek FB. I tak otrzymałem prognozę na 4 kolejne kwartały:


Same przyrosty FB, czyli ARMA(4, 2), daje podobnie pozytywny sygnał:



Z powyższego wynikałoby, że mój negatywny sentyment do rynku jest błędny, a giełda chce się wzbijać. Jednakże problem z takimi modelami jak ARIMA jest tego typu, że prognoza silnie zależy od zakresu obserwacji. Pytanie brzmi czy zostałaby ona zachowana, gdyby obserwacje zacząć wcześniej, np. od stycznia 2000 r.? Okazuje się, że wtedy się zmienia. Optymalny model będzie to ARIMA(2, 1, 9), a prognoza:

 

Gdyby zrobić analizę na zmianach FB, czyli ARMA(2, 9), to jeszcze bardziej uwidacznia się ryzyko spadków:


A co, gdyby wziąć jeszcze wcześniejszy okres, np. od stycznia 1995? Wtedy optimum staje się ARIMA(2, 1, 6), a prognoza przedstawia się następująco:


Czyli znowu prognoza trendu rosnącego. Różnica jednak między pierwszą a ostatnią jest taka, że ta ostatnia jest mniej pewna wzrostów: sugeruje bardzo słaby zwyżkowy trend liniowy FB. W takim razie porównajmy to jeszcze z prognozą zmian, tj. użyjmy ARMA(2, 6):

  

Potwierdzona zostaje "prognoza niepewności i wątpliwości". Pamiętać trzeba tylko, że FB wykonywany był na stopach zwrotu, a więc ARMA na zmianach FB wskazuje kierunek zmian stóp zwrotu, a nie indeksu.

czwartek, 14 lutego 2019

Dwie uwagi na temat filtru Butterwortha

Używając filtru Butterwortha (FB) powinniśmy mieć na uwadze dwa aspekty.

1) Kierunek, nie wartość. 
Chociaż w pracy Gómeza [1] czytamy, że FB może zostać przedstawiony jako najlepszy liniowy estymator z punktu widzenia średniokwadratowego błędu odchyleń, to jednak nie będzie tak w każdym przypadku. Sprawdziłem jak się zachowa FB dla funkcji sinus z nałożonym błądzeniem przypadkowym (300 danych). Analiza spektralna jednoznacznie wskazuje jedną powtarzającą się częstotliwość (o maksymalnym spektrum), która w stopniach wyniosła 12:



Po wstawieniu częstości odcięcia, x_c = 12, dostałem dość spodziewany efekt w postaci regularnej sinusoidy:


Jednak, jak się przyjrzeć dokładniej, nie jest to filtr, który minimalizuje błędy odchyleń. Np. jeśli wstawimy x_c = 20, otrzymamy lepsze dopasowanie:


Czyli FB (w powiązaniu z analizą spektralną) służy głównie do prognozowania kierunku, a mniej samej wartości.


2) Częstość odcięcia stopniowo tłumi wyższe od niej częstości.
Dlaczego gdy x_c = 20, nie pojawiają się jeszcze szumy na powyższym rysunku, skoro max spektrum zostaje osiągnięte dla x_c = 12?
Wiadomo, że przy dużo wyższych wartościach x_c, szumy się uwydatniają. Wstawmy x_c = 70:


A teraz x_c = 6. Tym razem filtr staje się płaski:


Zauważmy, że dla tego ostatniego częstości cyklu nie zostały usunięte, a przecież z periodogramu wynikałoby, że powinny. Ale okazuje się, że to już jest granica, bo dla x_c = 5, dostaniemy:


Dla x_c = 4, będzie to już prawie linia płaska.

Przeanalizujmy jeszcze przykład z nakładającymi się funkcjami sinus o różnej częstości i zmianami losowymi:


Spektrum:

3 piki o x_c = 2, 17 i 172 stopni.
Dla x_c = 2:


Dla x_c = 17:


Dla x_c = 172:


Łatwo się domyślić co będzie dla wartości pomiędzy 2 a 17, np. 9:


Tak więc - po raz kolejny - nie dostajemy filtru wynikającego z prostej sumy częstości od zera do x_c. Dlaczego? FB to przykład tzw. filtra dolnoprzepustowego (low-pass filter). Częstość odcięcia w tym przypadku wskazuje, najprościej mówiąc, na graniczną częstotliwość, powyżej której uważamy, że zaczynają pojawiać się szumy psujące sygnał. Tak więc x_c nie sprawia, że FB usuwa wszystkie częstości poza x_c (jak by mogło się wydawać  skoro ustawiamy wartość na podstawie spektrum), ale tłumi te powyżej tej wartości. Dla zobrazowania tej kwestii spójrzmy na poniższy rysunek:

Źródło: Pollock, D. S. G. [3]

Oś pozioma to częstości x. Oś pionowa - wartości tzw. wzmocnienia filtru (gain of filter; filter gain). Rysunek przedstawia funkcję wzmocnienia filtra Butterwortha, G(x). Z matematycznego punktu widzenia wzmocnienie to po prostu współczynnik regresji, której zmienną niezależną jest np. sinus + szum, a zmienną zależną sam sinus, tj. filtr. Ten współczynnik nie jest jednak stałą, ale funkcją zależną od częstości x. Podobnie zmienna niezależna jest funkcją częstości x. Możemy w skrócie zapisać:
sygnał wyjściowy(x) = G(x) * sygnał wejściowy(x).

FB charakteryzuje się tym, że dla częstości x_c wzmocnienie zawsze wyniesie 0,5. Pokazano to na rysunku, gdzie za x_c podstawiono (pi/2 + pi/4) / 2. Czyli dla tej wartości G(x) = 0,5 czy po prostu G(x_c) = 0,5. Możemy więc w skrócie napisać:
FB(x_c) = 0,5 * sygnał wejściowy(x_c).

Czyli FB nie ucina natychmiast wszystkich częstości powyżej x_c, ale je stopniowo tłumi. Patrząc na rysunek widać, że x_c wyznacza środek procesu tego tłumienia (wyżej opisane G(x) = 0,5), jednakże nie wpływa na samą szybkość tłumienia. O tej szybkości decyduje drugi parametr FB, n. W zależności od jego ustawienia wykres G(x) staje się mniej lub bardziej nachylony i to właśnie wokół x_c (czyli ogólnie wzmocnienie zależy od dwóch parametrów i można byłoby zapisać G(x, n)). To dlatego jeden wykres jest zakreskowany i bardziej nachylony, a drugi (ciągły) bardziej prosty. Im bardziej prosty, tym częstości powyżej x_c zostaną szybciej stłumione. 

Ten drugi parametr, o którym mowa, ustawialiśmy zawsze na poziomie n=2, aby uzyskać wersję filtru Hodricka-Prescotta. Co się stanie, gdy dla ostatniego przykładu podniesiemy go do 8, a x_c zachowamy na poziomie 9? Oto wynik:

  
A więc rzeczywiście częstości powyżej x_c = 9, zostały natychmiast stłumione, tak że te częstości drugiego rzędu zniknęły. Żeby się pojawiły, musielibyśmy zwiększyć x_c do 15.

Czyli żeby tłumienie zostało maksymalnie przyspieszone, musielibyśmy zmaksymalizować parametr n, tj. odejść od filtru Hodricka Prescotta. Jednak z punktu widzenia prognostyka jest to nie tylko niepotrzebne, ale i błędne rozwiązanie. Stopniowe tłumienie jest całkowicie wystarczające, a podwyższanie n prowadzi często do nieprawidłowych estymacji w przypadku rzeczywistych danych statystycznych.


Dodatek matematyczny:

Mamy sygnał wejściowy o losowym charakterze:
gdzie:
A - stała,
x - losowa częstość z przedziału (0, 2*pi),
t - czas.

Filtr jako odpowiedź na sygnał będzie funkcją:





gdzie:
G(x) - wzmocnienie albo tłumienie filtra,
P(x) - przesunięcie fazy.

Przesunięcie fazy, P(x), nie ma dla nas praktycznego znaczenia, bo dotyczy ono opisu fizycznych zjawisk, jak np. echo, które stanowi opóźnioną odpowiedź na sygnał wejściowy. Wobec tego dla nas P(x) = 0:

Tak więc wzmocnienie, o którym była mowa w artykule, stanowi współczynnik regresji.
Można pokazać [2], że:

gdzie:
g_F - gęstość spektralna dla F (funkcja gęstości spektralnej dla F),
g_S - gęstość spektralna dla S (funkcja gęstości spektralnej dla S).

Gęstość spektralna ma zbliżoną interpretację do prawdopodobieństwa występowania sygnału o danej częstotliwości, jednak bierze bardziej pod uwagę autokorelację pomiędzy obserwacjami o tej samej częstotliwości niż dokładnie powtarzającą się wartość.

Ogólnie wzór na gęstość spektralną jest postaci:

gdzie ACF_k oznacza autokorelację pomiędzy kolejnymi k-tymi (tj. w kolejnych k-tych jednostkach czasu) sygnałami o częstości x.

Dla wybranych częstotliwości (x) gęstości spektralne S i F będą się oczywiście nakładać. W tych miejscach g_F(x) = g_S(x), a wtedy:

Dla tych punktów G(x)^2 to po prostu współczynnik determinacji, a więc G(x) okazuje się także współczynnikiem korelacji między sygnałem wejściowym a filtrem.



Literatura:
[1] Gómez, V., The Use of Butterworth Filters for Trend and Cycle Estimation in Economic Time Series, Jul., 2001;
[2] Jenkins, G. M., General Considerations in the Analysis of Spectra, May, 1961;
[3] Pollock, D. S. G., Statistical Signal Extraction and Filtering: A partial survey, Aug. 2009.