2.3 Modele nieliniowe Do tej pory zajmowaliśmy się modelami liniowymi lub o liniowej formie funkcyjnej i musieliśmy akceptować ich ograniczenia. Metoda Największej Wiarogodności pozwala również na efektywną estymację modeli nieliniowych. Załóżmy, iż chcemy oszacować następujący model y j = β 1 x 1j + β 2 x 2j + β 3 x β 4 3j + β 5 + ε gdzie składnik losowy ma rozkład N(0, σ 2 ). Zauważmy, że współczynnik przy zmiennej x 3j nie jest liniowy. Powyższy model jest traktowany przez pakiet Stata jako: y j = ln Φ((y j θ 1j θ 2j x θ 3j 3j )/θ 4j) ln θ 4j θ 1j = β 1 x 1j + β 2 x 2j + β 5 θ 2j = β 3 θ 3j = β 4 θ 4j = σ 2 Pakiet traktuje parametr przy zmiennych liniowych jako jedną zmienną (θ 1 ), kolejne dwa równania opisują parametr przy zmiennej x 3 oraz jej wykładnik, ostatnie jest równaniem odchylenia standardowego. Jest to układ czterech równań liniowych pomimo tego, że tak naprawdę szukamy rozwiązania jednego równania. Taka zamiana jest efektem tego, że algorytmy numeryczne są w stanie jedynie rozwiązywać układy równań linowych. Program szacujący ten model metodą lf dla powyższej funkcji wiarogodności wygląda następująco: program define nonlin version 8 args lnf theta1 theta2 theta3 theta4 quietly replace lnf = /* */ln(normden(($ml_y1- theta1 - theta2 *X3^ theta3 )/ theta4 ))/* */-ln( theta4 ) end Zwróćmy uwagę, że nazwa zmiennej odnosząca się do x 3 została na stałe wpisana do programu obliczającego funkcję wiarogodności. W kodzie użyliśmy nazwy X3, ale szacując model będziemy musieli ją zastąpić nazwą odpowiadającą zmiennej w naszym zbiorze danych. Załóżmy, że chcemy wyestymować model postaci bp = β 1 age + β 2 sex + β 3 bp0 β 4 + ε wówczas odpowiedni program dla funkcji wiarogodności będzie wyglądał następująco: 30
program define nonlin version 8 args lnf theta1 theta2 theta3 theta4 quietly replace lnf = /* */ln(normden(($ml_y1- theta1 - theta2 *bp0^ theta3 )/ theta4 ))/* */- theta4 end i otrzymamy oszacowania modelu pisząc.ml model lf nonlin (bp=age sex) /beta3 /beta4 /sigma.ml maximize Jak widzimy nieliniowość modelu może zostać w prosty sposób przekształcona w równanie zawierające stałą. Czasami logarytm funkcji wiarogodności jest poprawnie zdefiniowany tylko dla niektórych wartości jednego lub kilku parametrów. Na przykład wiemy, że wariacja składnika losowego powinna być większa od zera, więc θ 4 = σ > 0. Komenda ml jest tak zaprojektowana by działać zarówno na zbiorze wszystkich możliwych wartości, jak również na zbiorach ograniczonych. Domyślnie Stata przeszukuje wszystkie możliwe wartości parametrów i powinniśmy brać ten fakt pod uwagę programując własne funkcje. Gdy o tym zapomnimy mogą wyniknąć problemy związane z konwergencją funkcji logarytmu wiarogodności. Nawet jeśli ich nie ma, komenda ml musi wykonać więcej obliczeń, wskutek czego będzie działała dłużej. Lepiej jest model tak przeparametryzować, by przedział (, ) był prawidłowym przedziałem wartości dla każdego parametru theta. Lepszym sposobem na zapis liniowej, bądź nieliniowej funkcji wiarogodności jest y j = ln Φ((y j θ 1j θ 2j x θ 3j 3j )/θ 4j) ln θ 4j θ 1j = β 1 x 1j + β 2 x 2j + β 5 θ 2j = β 3 θ 3j = β 4 θ 4j = ln(σ 2 ) Taki sposób parametryzacji modelu prowadzi do programu program define nonlin version 8 args lnf theta1 theta2 theta3 theta4 quietly replace lnf = /* */ln(normden(($ml_y1- theta1 - theta2 *X3^ theta3 )/exp( theta4 )))/* */-ln( theta4 ) end 31
2.4 Testowanie modeli Ograniczenia narzucane na modele regresji liniowej badaliśmy za pomocą testu F. Jeśli szacujemy model metodą największej wiarogodności to nie zawsze możemy ją obliczyć. Przykład Oszacujmy następujący model regresji price = β 0 + β 1 mpg + β 2 weight + β 3 rep78 + β 4 headroom + β 5 trunk + ε Rozpocznijmy pracę od załadowania zbioru danych do pakietu Stata.sysuse auto Następnie definiujemy model, którą chcemy estymować program define mojaregresja version 8 args lnf theta1 theta2 qui replace /* */ lnf =ln(normden(($ml_y1- theta1 )/ theta2 ))-ln( theta2 ) end Następnie definiujemy funkcję, którą chcemy maksymalizować.ml model lf mojaregresja (price=mpg weight rep78 headroom trunk) /sigma Po czym wykonujemy maksymalizację. ml maximize initial: log likelihood = -<inf> (could not be evaluated) feasible: log likelihood = -1038.3292 rescale: log likelihood = -656.79978 rescale eq: log likelihood = -656.79978 Iteration 0: log likelihood = -656.79978 Iteration 1: log likelihood = -639.03564 Iteration 2: log likelihood = -630.17089 Iteration 3: log likelihood = -630.1544 Iteration 4: log likelihood = -630.15438 Number of obs = 69 Wald chi2(5) = 46.07 Log likelihood = -630.15438 Prob > chi2 = 0.0000 price Coef. Std. Err. z P> z [95% Conf. Interval] 32
eq1 mpg -58.84686 79.57392-0.74 0.460-214.8089 97.11516 weight 2.503966.6508869 3.85 0.000 1.228252 3.779681 rep78 863.6475 307.7983 2.81 0.005 260.3739 1466.921 headroom -707.5098 425.4231-1.66 0.096-1541.324 126.3041 trunk -12.42289 100.5323-0.12 0.902-209.4625 184.6168 _cons -839.0727 3458.854-0.24 0.808-7618.301 5940.156 sigma _cons 2238.885 190.5864 11.75 0.000 1865.342 2612.427 Jeśli ten sam model oszacujemy metodą MNK, dostaniemy identyczne wartości dla parametrów wektora β, jednak oszacowania wariancji będą się różnić. reg price mpg weight rep78 headroom trunk Source SS df MS Number of obs = 69 -------------+------------------------------ F( 5, 63) = 8.41 Model 230926876 5 46185375.2 Prob > F = 0.0000 Residual 345870083 63 5490001.31 R-squared = 0.4004 -------------+------------------------------ Adj R-squared = 0.3528 Total 576796959 68 8482308.22 Root MSE = 2343.1 price Coef. Std. Err. t P> t [95% Conf. Interval] mpg -58.84684 83.27703-0.71 0.482-225.2627 107.569 weight 2.503966.681177 3.68 0.000 1.142742 3.865189 rep78 863.6472 322.1222 2.68 0.009 219.9373 1507.357 headroom -707.5096 445.2208-1.59 0.117-1597.212 182.1933 trunk -12.42288 105.2107-0.12 0.906-222.6697 197.824 _cons -839.071 3619.817-0.23 0.817-8072.698 6394.556 Powodem różnych wyników jest różna wielkość estymatora wariancji. W modelu oszacowanym MNW estymator odchylenia standardowego jest równy ˆσ = 2239, a w modelu oszacowanym metodą najmniejszych kwadratów ˆσ = 2343. Różnica jest powodowana przez małą ilość obserwacji w próbie. W wyrażeniu na estymator wariancji MNW w mianowniku jest N zamiast N k, co powoduje niedoszacowanie wariancji. 2.4.1 Test Walda Obliczenie statystyki Walda (W) jest skomplikowane i czasochłonne w przypadku rozbudowanych ograniczeń na parametry modelu. Statystykę testową 33
konstruujemy na podstawie macierzy obserwacji. W = m var[m X]m = (Rb q) [σ 2 R(X X) 1 R ](Rb q) χ 2 (J) (1) Przy prawdziwej hipotezie zerowej statystyka Walda ma rozkład χ 2 z liczbą stopni swobody równą ilości nakładanych oraniczeń na wektor parametrów. Jest to rozkład małopróbkowy i jeśli J > 100 to asymptotycznym rozkładem statystyki testowej nie jest rozkład χ 2. Jeśli zamiast prawdziwej wariancji σ 2 używany jest estymator S 2 to statystyka Walda ma rozkład F (J, n k) stopniami swobody. Wróćmy do przykładu. Widzimy, że w odróżnieniu od metody najmniejszych kwadratów, przy metodzie największej wiarogodności wyświetlana jest statystyka Walda. Iteration 4: log likelihood = -630.15438 Number of obs = 69 Wald chi2(5) = 46.07 Log likelihood = -630.15438 Prob > chi2 = 0.0000 Test Walda badający hipotezę H 0 : β = 0 przeciwko alternatywie H 1 : β 0 dla pojedynczej zmiennej wywołujemy poleceniem. test mpg ( 1) [eq1]mpg = 0 chi2( 1) = 0.55 Prob > chi2 = 0.4596 W podobny sposób przeprowadzamy sprawdzanie hipotez łącznych dotyczących kombinacji liniowych parametrów. test mpg rep78 weight headroom trunk ( 1) [eq1]mpg = 0 ( 2) [eq1]rep78 = 0 ( 3) [eq1]weight = 0 ( 4) [eq1]headroom = 0 ( 5) [eq1]trunk = 0 chi2( 5) = 46.07 Prob > chi2 = 0.0000 Hipotezy nieliniowe testujemy poleceniem testnl. Na przykład sprawdźmy hipotezę H 0 : β mpg β weight = 1 H 1 : β mpg β weight 1 Test wygląda następująco: 34
. testnl _b[mpg]*_b[weight]=1 (1) _b[mpg]*_b[weight] = 1 chi2(1) = 0.70 Prob > chi2 = 0.4033 2.4.2 Test ilorazu wiarogodności Testem równoważnym do testu Walda jest test ilorazu wiarogodności (LR). Jego przeprowadzenie wymaga obliczenia dwóch modeli regresji. Na początku liczymy model bez ograniczeń i to co nas interesuje to logarytm ilorazu wiarogodności. Nałożenie ograniczeń na parametry wektora β powoduje że trudniej jest dopasować taki model do danych empirycznych. Z tego powodu wartość logarytmu funkcji wiarogodności dla modelu z ograniczeniami będzie zazwyczaj mniejsza. Test ilorazu wiarogodności polega na sprawdzeniu czy podwojona różnica wartości logarytmu funkcji wiarogodności obu modeli jest statystycznie istotna. Test przeprowadzamy za pomocą statystyki LR: LR = 2(L 0 L R ) (2) gdzie L 0 jest logarytmem funkcji wiarogodności dla modelu bez ograniczeń, a L R logarytmem funkcji wiarogodności dla modelu z ograniczeniami. Przy prawdziwej hipotezie zerowej, która oznacza prawdziwość narzuconych ograniczeń na parametry modelu, statystyka testowa ma rozkład χ 2 (k), z ilością stopni swobody k równą liczbą narzuconych ograniczeń. Wróćmy do przykładu. Sprawdzimy za pomocą testu ilorazu wiarogodności czy zmienne headroom i trunk można usunąć z modelu. W tym celu przywołajmy ponownie ostatnio oszacowany model.ml display następnie zapamiętajmy wyniki estymacji.estimates store full Teraz dokonamy oszacowania modelu z nałożonymi ograniczeniami. Definiujemy model do estymacji.ml model lf mojaregresja (price=mpg weight rep78 )() i szacujemy. ml maximize initial: log likelihood = -<inf> (could not be evaluated) 35
feasible: log likelihood = -691.95771 rescale: log likelihood = -671.16082 rescale eq: log likelihood = -648.96801 Iteration 0: log likelihood = -648.96801 Iteration 1: log likelihood = -641.96926 Iteration 2: log likelihood = -632.18815 Iteration 3: log likelihood = -632.1482 Iteration 4: log likelihood = -632.14809 Iteration 5: log likelihood = -632.14809 Number of obs = 69 Wald chi2(3) = 39.61 Log likelihood = -632.14809 Prob > chi2 = 0.0000 price Coef. Std. Err. z P> z [95% Conf. Interval] eq1 mpg -52.21724 81.2761-0.64 0.521-211.5155 107.081 weight 2.111488.6007981 3.51 0.000.9339449 3.28903 rep78 820.8123 311.4584 2.64 0.008 210.365 1431.26 _cons -1939.871 3515.789-0.55 0.581-8830.69 4950.949 eq2 _cons 2304.521 196.1739 11.75 0.000 1920.027 2689.015 Zapamiętujemy wyniki estymacji.estimates store restrict I porównujemy modele testem ilorazu wiarogodności. lrtest full restrict, stats (log-likelihoods of null models cannot be compared) likelihood-ratio test LR chi2(2) = 3.99 (Assumption: restrict nested in full) Prob > chi2 = 0.1362 Model nobs ll(null) ll(model) df AIC BIC restrict 69. -632.1481 5 1274.296 1285.467 full 69. -630.1544 7 1274.309 1289.948 Jak widzimy pakiet Stata zwraca nam uwagę, że nie może porównać wartości zerowej iteracji obu modeli. jest to zrozumiałe bowiem wartość funkcji logarytmu ilorazu wiarogodności w zerowej iteracji dla obu modeli wynosiła. 36
Jak widzimy różnica między modelami nie jest statystycznie istotna, jedynie na podstawie kryterium Schwarza-Bayesa (BIC) możemy powiedzieć, że lepiej dopasowany jest model z ograniczeniami. 2.4.3 Test mnożników Lagrangea Trzecim sposobem sprawdzenia istotności ograniczeń nałożonych na parametry modelu jest przeprowadzenie testu mnożników Lagrange a (LM). Bazuje on na wynikach powstałych przy estymacji regresji z narzuconymi ograniczeniami. W literaturze anglojęzycznej jest on również nazywany score test, ponieważ bazuje na wektorze score. Jest to po prostu pierwsza pochodna funkcji logarytmu wiarogodności dla modelu z ograniczeniami. Statystyka testu mnożników Lagrange a dana jest wzorem: LM = ( ln(θ R ) θ R ) [I(θR )] 1( ln(θ R ) θ R ) Jeśli ograniczenia są prawdziwe to ich narzucenie nie spowoduje znaczącej różnicy w wartości maksymalnej logarytmu funkcji wiarogodności. Wariancją wektora pierwszych pochodnych jest macierz informacyjna. Oznaczmy przez i kolumnę jedynek, a przez G R macierz gradientów. Wtedy statystykę LM możemy zapisać jako: LM = i G R [G RG R ] 1 G Ri Czyli statystyka LM jest to współczynnik regresji wektora gradientów na stałej przemnożony przez sumę gradientów. Wobec tego jeżeli policzymy scory, pomnożymy przez zmienne objaśniające a potem wykonamy regresję zmiennych i scorów na stałej to otrzymamy statystykę mnożników Lagrenge a Ẇracamy do przykładu. Statystykę mnożników Lagrange a obliczamy na postawie modelu z nałożonymi restrykcjami, wobec tego programujemy regresję ceny (price) na zużyciu paliwa (mpg), wadze (weight) i liczbie napraw (rep78 )..ml display.ml model lf mojaregresja (price=mpg weight rep78 )() potrzebna będzie nam wartość wektora gradientów wobec tego przy komendzie maksymalizacji dodajemy dwie opcje iterate(0) powoduje, że program wylicza tylko początkową iterację, a score(sc*) powoduje, że zostaną utworzone scory dla kolejnych zmiennych. Jednak by komenda zadziałała musimy zadeklarować wartości początkowe. Wyliczamy je wykorzystując metodę MNK..qui reg price mpg weight rep78 37
Następnie zapamiętujemy jej współczynniki, które użyjemy jako wartości startowe. Nie możemy zapomnieć o estymatorze wariancji..local a0e= _b[_cons].local a1e= _b[mpg].local a2e= _b[weight].local a3e= _b[rep78].local b0e= e(rmse) Następnie deklarujemy te wartości jako początkowe dla maksymalizacji..ml model lf mojaregresja (price=mpg weight rep78 )().ml init eq1:_cons= a0e.ml init eq1:mpg= a1e.ml init eq1:weight= a2e.ml init eq1:rep78= a3e.ml init eq2:_cons= b0e Maksymalizujemy zadeklarowaną funkcję wiarogodności.ml maximize, search(off) iter(0) score(sc*) i obliczamy scory. Dla każdej zmiennej zostaje utworzony jeden wektor scorów czyli wartości gradientu. Opcja score użyta przy komendzie (ml maximize) tworzy wartości wektora gradientów dla kolejnych zmiennych i zapisuje je pod nazwami scx, gdzie x oznacza kolejny numer równania. Przed obliczeniem wartości statystyki testowej musimy wygenerować zmienne pomocnicze mnożąc kolejne zmienne przez odpowiadające im wartości gradientów (scory)..gen sc1_mpg = sc1*mpg.gen sc1_weight= sc1*weight.gen sc1_rep78 = sc1*rep78 Następnie przeprowadzamy regresję stałej na scory oraz zmienne pomocnicze (scory przemnożnożone przez zmienne).reg const sc1 sc1_mpg sc1_weight sc1_rep78 sc2, nocons.predict sc.quietly summarize sc.display r(sum) Suma wartości dopasowanych z regresji pomocniczej jest szukaną wielkością statystyki mnożników Lagrange a. Literatura [1] Gould William, Sribney William Maximum Likelihood Estimation with Stata, Stata Press. 38