NMNK nie jest jednolitą metodą. W Gretlu stosowany jest algorytm Levenberga–Marquardt. Algorytm ten jest kombinacją dwóch znanych metod numerycznych: metody gradientu prostego oraz algorytmu Gaussa-Newtona. W metodzie gradientu prostego suma kwadratów błędów jest korygowana w kierunku spadku nachylenia funkcji (gradientu), bo tam znajduje się minimum. W metodzie Gaussa-Newtona wykorzystuje się z kolei przybliżenie funkcji za pomocą wzoru Taylora; kwadraty różnic pomiędzy prawdziwą funkcją a funkcją Taylora powinny być jak najmniejsze [5].
Na chwilę zostawmy to. Wcześniej (tu oraz tu) pokazałem, jak poprawnie retransformować model trendu, aby uzyskać warunkową oczekiwaną stopę zwrotu. Mamy następujący model trendu:
(1)
Powinniśmy zdefiniować składnik losowy. Powiedzmy, że jest on stacjonarny, posiada wartość oczekiwaną = 0 oraz stałą wariancję. Jeżeli zmienna losowa P(T) ma rozkład log-normalny, to jej wartość oczekiwana wynosi:
(2)
Dzięki NMNK możemy oszacować parametry bezpośrednio z modelu (1), a więc bez potrzeby transformacji logarytmicznej. Przykładowo, biorąc te same dane dla mbanku co w wymienionych na początku artykułach (rocznie 1994-2015; 22 obserwacje), możemy stworzyć w Gretlu model (1). Po zaimportowaniu danych, trzeba kliknąć: Model -> Nieliniowa Metoda Najmniejszych Kwadratów. Pojawi się okno i tam wpisujemy:
.................
scalar a = 1
scalar b = 1
Zamkniecie = exp(a+b*time)
deriv a = exp(a+b*time)
deriv b = exp(a+b*time)*time
.................
gdzie:
Zamkniecie - to szereg czasowy, w naszym przypadku kurs mbanku (zmienna P(T));
time - zmienna czasowa (wygenerowana w opcji Dodawanie zmiennych -> time - zmienna czasowa.
a, b - współczynniki regresji, które trzeba od początku zadeklarować. Są to skalary w naszej funkcji, które przyjmą jakąś początkową wartość, np. 1. Standardowo deklarujemy więc scalar a = 1, scalar b = 1. Mogą być one dowolne, ale może się zdarzyć, że nie wystarczy iteracji, aby zbiegły do prawdziwej wartości wg algorytmu. Jeśli tak się stanie, zmieniamy metodą prób błędów.
deriv - pochodna funkcji po danym współczynniku. Np. pochodna d(Zamkniecie)/d(a) = exp(a+b*time), dlatego jest zapis:
deriv a = exp(a+b*time).
I tak samo dla b: pochodna d(Zamkniecie)/d(b) = exp(a+b*time)*time. Dlatego jest zapis:
deriv b = exp(a+b*time)*time.
Mimo że a i b są to skalary modelu, to są one w funkcji szacowane, czyli pierwotnie są zmiennymi.
Niezbyt przyjemne. Można się obyć bez pochodnej, ale w helpie Gretl rekomenduje jej obliczanie.
Przed kliknięciem OK, możemy zaznaczyć jeszcze opcję "Odporne błędy standardowe". Wtedy OK.
Jak widać na tablicy zbieżność nastąpiła po 27 iteracjach. Gdybyśmy wpisali scalar a = 10, scalar b = 10, zbieżność nastąpiłaby dopiero po 240 iteracjach.
Uzyskany parametr b = 0,0996, natomiast wolny parametr a możemy zignorować, bo interesują nas stopy zmian. W porównaniu do logarytmicznego modelu, gdzie uzyskaliśmy logarytmiczną stopę ponad 11%, może się wydać dziwne, że teraz jest niższa wartość. Przecież otrzymaliśmy od razu stopę, która powinna być właśnie wyższa od tej z modelu logarytmicznego MNK. Co jest tego przyczyną? Stało się tak, bo nasz model jest niepełny. Założyliśmy błędnie, że wygląda jak na poniższym rysunku:
W tym modelu składnik losowy jest stacjonarny, może więc to być zmienna losowa o rozkładzie normalnym. Ta zmienna po prostu jest argumentem funkcji wykładniczej. Ale w rzeczywistości powinna być funkcją czasu. Gdy za tę zmienną losową wstawimy proces Browna, czyli skumulowaną zmienną losową o rozkładzie normalnym, to otrzymamy geometryczny proces ruchu Browna. Wtedy nasz model wygląda mniej więcej tak:
Ogólnie geometryczny proces ruchu Browna ma postać (zob. np. [6]):
(3)
Proces (3) w danym punkcie czasu może przyjąć różne wartości zgodnie z pewnym rozkładem prawdopodobieństwa. Przestaje być więc rozumiany jako proces, a staje się "ruchem" - zmienną stacjonarną. Ten ruch posiada zawsze rozkład log-normalny. Oznacza to, że możemy wyprowadzić analogicznie do (1) wartość oczekiwaną tej zmiennej.
Zauważamy, że składnik losowy w modelu (1) to jest to samo co (odchylenie standardowe razy proces ruchu Browna) w modelu (3), co oznacza, że musi się tak samo przekształcać jak w modelu (2), gdzie występuje wartość oczekiwana procesu. I stąd podstawiając do (3) powyższe wyprowadzenie wariancji, dostaniemy wartość oczekiwaną geometrycznego (procesu) ruchu Browna:
(4)
Wstawiamy pierwszą cenę zamknięcia P(0) = 30,68. Możemy wtedy powtórzyć całą procedurę w Gretlu, używając modelu (4):
.................
scalar b = 1
Zamkniecie = 30.68*exp(b*time)
deriv b = 30.68*exp(b*time)*time
.................
Uzyskane parametry to:
Dostaniemy wykres trendu:
Zatem u = 12,5, czyli efektywna oczekiwana stopa exp(12,5) - 1 = 13,3%.
Mimo iż obliczyliśmy parametr u, to taki estymator jest niezgodny w tym sensie, że nie będzie dążył do prawdziwej wartości parametru u. Żeby była zgodność, składnik losowy musi być stacjonarny (zob. twierdzenia w [4]). Najprawdopodobniej potrzeba użyć uogólnionej nieliniowej metody najmniejszych kwadratów, która pozwoliłaby uwzględnić rosnącą wariancję i autokorelację składnika losowego.
Ostatecznie można ten problem rozwiązać. Łatwo zauważyć, że tylko w punkcie dla T = 1 geometryczny proces ruchu Browna będzie tożsamy z modelem (1), dla którego składnik losowy jest stacjonarny. W tym punkcie obydwie krzywe się przetną. Czyli w tym punkcie model (2) równa się modelowi (4):
Wyrazy wolne możemy do siebie dostosować, aby zachować identyczną interpretację punktu startu. Dlatego przyjmiemy lnP(0) = a. Stąd:
(5)
u = b + 0,5var
u = 0,0996 + 0,5*0,346^2 = 0,1596
Aby uzyskać oczekiwaną (efektywną) stopę zwrotu wstawimy exp(0,1596) - 1 = 17,3%. Dla porównania w Transformacja lognormalnego modelu z nieznanym parametrem wyszła wartość zbliżona, bo 18,7%.
Literatura:
[1] Louton, T., The Gauss-Markov Theorem for Nonlinear Models, Dec. 1982,
[2] Kariya, T., A Nonlinear Version of the Gauss-Markov Theorem, Jun. 1985,
[3] Kariya, T., A Maximal Extension of the Gauss–Markov Theorem and Its Nonlinear Version, 2002,
[4] Wu, C-F, Asymptotic Theory of Nonlinear Least Squares Estimation, May 1981,
[5] Marquardt, D. W., An Algorithm for Least-Squares Estimation of Nonlinear Parameters, Jun. 1963.
[6] https://en.wikipedia.org/wiki/Geometric_Brownian_motion