Ebben a bejegyzésben a Maximum likelihood után a második legnépszerűbb paraméterbecslési eljárást fogjuk megvizsgálni: a Momentumok módszerét.
A Method of moments-t 1887-ben Pafnutyij Lvovics Csebisev publikálta, ami mai napig tartó népszerűségét annak köszönheti, hogy nagyon könnyű számolni. Ezt mindjárt be is mutatjuk.
Az alap ötlet lényegében a többismeretlenes egyenletrendszerek megoldásán alapul. Mint tudjuk ezekben az esetekben annyi egyenletre van szükségünk a megoldáshoz amennyi ismeretlenünk van. Csebisev lényegében átültette ezt a gondolatot a paraméterbecslés feladatára. Semmi mást nem kell csinálnunk a paraméter megbecslésére, mint annyi egyenletet előállítanunk amennyi paramétert keresünk. Ehhez pedig egyszerűen elég hatványoznunk az elvárt értéket, ezek lesznek az úgynevezett Momentumok.
Nézzünk egy példát két paraméter becslésére: Legyen X egy normál eloszlás aminek a két paramétere és
.1 Sajnos nem tudjuk közvetlenül megfigyelni ezt a X valószínűségi változót, hanem helyette egy Y változót figyelünk meg. Erre igaz, hogy:
(1)
Mivel a megfigyelt változó az Y, ennek az elvárt értékét fogjuk hatványozni. Mivel csak két paramétert nem ismerünk elég csak két hatvány:
(2)
(3)
Ami, ha elvégezzük az integrálást:
(4)
Most már van két egyenletünk a két paraméter becslésére. Oldjuk meg1 :
Fejezzük ki a (2)-ből a -át. Ez lesz a becslésünk rá:
(5)
Most pedig helyesítsük be ezt (4)-be és fejezzük ki a -t. Ez nem lesz más mint:
(6)
Készen is vagyunk. Ugye milyen egyszerű.
De ha ilyen egyszerű akkor miért használjuk inkább a Maximum likelihood-ot? Azért mert az robusztusabb.
Teszteljük:
mu = 30 sigma2 = 4 n = 10000 y_mm_mu = [] y_mm_sigma2 = [] x_mm_mu = [] x_mm_sigma2 = [] for j in range(5000): # mintavétel x = np.random.normal(mu, sigma2**0.5, n) y = x**2 y_mm_mu.append( np.mean(y) ) y_mm_sigma2.append( np.sum( np.power(y-y_mm_mu[-1],2) )/n ) # method of moment for y=x**2 y2 = np.mean(np.power(y, 2)) x_mm_mu.append( np.power( (3*np.power(y_mm_mu[-1],2)-y2)/2 , 1/4) ) x_mm_sigma2.append( y_mm_mu[-1]-(x_mm_mu[-1]**2) ) # Ábra %matplotlib qt from matplotlib import rc plt.clf() plt.rc('text', usetex=True) plt.rc('font', family='serif') plt.rcParams['text.latex.unicode'] = True plt.subplot(1,2,1) plt.hist(x_mm_mu, label="Becsült $\mu$", density=True) plt.legend() plt.title("Átlag") plt.subplot(1,2,2) plt.hist(x_mm_sigma2, label="Becsült $\sigma^2$", density=True) plt.title("Szórásnégyzet") plt.legend() plt.show()

Mint fentebb is látható, a paraméterbecslésünk megfelelően működik.
Nemsoká következik egy bejegyzés “Két kevert Gaussian eloszlás paraméterbecsléséről”, ott megnézzük a Momentumok módszerének őspéldáját, és a robusztusság kérdését is.
Lábjegyzet
- Persze használhatnánk Gauss-eliminációt is az egyenletrendszer megoldására, de ez tényleg annyira egyszerű, hogy most nem bonyolítom a dolgot.