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);

》mynormpdf=@(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

 

 

你可能感兴趣的:(MATLAB)