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