1. 程式人生 > >MATLAB引數估計normfit()函式和mle()函式

MATLAB引數估計normfit()函式和mle()函式

matlab中normfit在正態分佈中的使用技巧如下:         

函式 normfit 格式 [muhat,sigmahat,muci,sigmaci] = normfit(X) ;

[muhat,sigmahat,muci,sigmaci] =normfit(X,alpha)

說明 muhat,sigmahat分別為正態分佈的引數μ和σ的估計值;,muci,sigmaci分別為置信區,其置信度為:alpha

給出顯著水平α,預設時預設為0.05,即置信度為95%.

例4-62 有兩組(每組100個元素)正態隨機資料,其均值為10,均方差為2,求95%的置信區間和引數估計值.

:>>r = normrnd (10,2,100,2); %產生兩列正態隨機資料

>>[mu,sigma,muci,sigmaci] =normfit(r)

則結果為

mu =

10.1455 10.0527 %各列的均值的估計值

sigma =

1.9072 2.1256 %各列的均方差的估計值

muci =

9.7652 9.6288 

10.5258 10.4766

sigmaci =

1.6745 1.8663

2.2155 2.4693

說明:muci,sigmaci中各列分別為原隨機資料各列估計值的置信區間,置信度為95%.

MLE(maximum likelihood estimation,最大似然估計),的基本原理是通過選擇引數使

似然函式最大化。此處,我們只講隨機數分佈估計。假設隨機分佈的PDF為 f(x,theta),

其中x為隨機數,theta是分佈的引數。我們有x1,x2,…,xn共n個取樣觀察值,似然函

L(theta)=f(x1,theta)*f(x2,theta)*…*f(xn,theta)

然後選擇能讓L()最大的theta取值。注意,這個不叫做”極大似然估計”,因為theta可能

是有上限或下限,而能夠讓L()最大的theta值可能恰好是上限或下限,此時的theta就不

是極大值點。

下面我們用隨機生成的資料實地講述mle()函式的用法。

語法一、mle(觀察值, ‘distribution’, ‘分佈名稱’), 下面兩個命令,第一個是生成100萬個服從標準正太分佈的隨機數,第二句是用mle()函式估計這些隨機數服從的正太分佈的引數值。

》 testdata=randn(1e6,1);

》 [paramhat,paramint]=mle(testdata,'distribution','norm')

paramhat =

 -0.000218972940353  0.999431366252859

paramint =

  -0.002177825773582   0.998048679206182

  0.001739879892876  1.000818918426322

可以獲得兩個結果,paramhat和paramint,paramhat中有兩個數值,第一個是正態分

布均值(mu)的點估計,後一個是正態分佈的標準差(sigma)。paramint中第1,2

兩列分佈對應mu和sigma的區間估計。從結果來看,mu和sigma的區間估計都很窄,

而且很接近我們生成隨機數時使用的引數值。

語法二、mle(觀察值, ‘pdf’, 自定義分佈pdf, ‘start’, 猜測的分佈引數值), pdf是分佈的

概率密度函式,格式是f(X,theta),前面是X,後面跟引數值。

也支援cdf等等,詳見幫助。這個語法適合不在上述列表內的隨機分佈。我們先看一個手工

指定正態分佈PDF函式的例子。下面的程式碼、第一句生產10萬個標準正態分佈隨機數,

第二句自定義一個正態分佈PDF函式,第三句用MLE()

》 testdata=randn(1e5,1);

[email protected](x,mu,sigma)(1/sqrt(2*pi*sigma*sigma)*exp(-(x-

mu).^2/2/sigma/sigma));

》[paramhat,paramint]=mle(testdata,'pdf',mynormpdf,'start',[.1,.5])

paramhat =

  0.002066365428022  1.002194631105154

paramint =

 -0.004145187769578  0.997802401528087

  0.008277918625623  1.006586860682221