本文将涉及到数理统计的最后一个模块——参数估计,后续将更新的模块是多项式计算、数据插值和曲线拟合。
在讲述使用matlab来实现参数估计之前,有必要去了解一些基本原理。
1.离散型随机变量的极大似然估计法:
(1) 似然函数
若X为离散型, 似然函数为
(2) 求似然函数L(θ)的最大值点 θ, 则θ就是未知参数的极大似然估计值.
2.连续型随机变量的极大似然估计法:
(1) 似然函数
若 X 为连续型, 似然函数为
(2) 求似然函数L(θ)的最大值点θ, 则θ就是未知参数 的极大似然估计值.
一、矩估计
设总体X的均值、方差均存在,样本(X1,X2,……,X n),则不管总体服从什么分布,总体均值的矩估计均为样本均值,方差的矩估计均为样本二阶中心矩。
matlab中提供了下列函数来实现总体均值的矩估计值与方差的矩估计值的计算,如下:
mu_ju=mean(X) % 返回样本X的均值
sigma2_ju =moment(X,2) % 返回样本X的2阶中心矩
例:来自某总体X的样本值如下:
232.50, 232.48, 232.15, 232.52, 232.53, 232.30, 232.48, 232.05, 232.45, 232.60, 232.47, 232.30,求X的均值与方差的矩估计。
>> x=[232.50,232.48,232.15,232.52,232.53,232.30,232.48,232.05,232.45,232.60,232.47,232.30]
mu_ju=mean(x)
sigma2_ju= moment(x,2)
x =
232.5000 232.4800 232.1500 232.5200 232.5300 232.3000 232.4800 232.0500 232.4500 232.6000 232.4700 232.3000
mu_ju =
232.4025
sigma2_ju =
0.0255
二、单个总体极大似然估计与区间估计(参数均未知)
命令: [a,b]=namefit (X, ALPHA) % 返回总体参数的极大似然估计a与置信度为100(1- ALPHA)的置信区间 [a,b],若参数为多个,ab也是多个,若省略ALPHA,则置信度为0.95
下表列出了几种常用分布的参数估计函数:
函数名 | 调 用 形 式 | 函 数 说 明 |
---|---|---|
binofit | PHAT= binofit(X, N);[PHAT, PCI] = binofit(X,N);[PHAT, PCI]= binofit (X, N, ALPHA) | 二项分布的概率的最大似然估计置信度为95%的最大似然估计和置信区间返回水平α的参数估计和置信区间 |
poissfit | Lambdahat=poissfit(X);[Lambdahat, Lambdaci] = poissfit(X);[Lambdahat, Lambdaci]= poissfit (X, ALPHA) | 泊松分布的参数的最大似然估计置信度为95%的最大似然估计和置信区间返回水平α的λ参数和置信区间 |
normfit | [muhat,sigmahat,muci,sigmaci] = normfit(X);[muhat,sigmahat,muci,sigmaci] = normfit(X, ALPHA) | 正态分布的最大似然估计,置信度为95%返回水平α的期望、方差值和置信区间 |
betafit | PHAT =betafit (X);[PHAT, PCI]= betafit (X, ALPHA) | 返回β分布参数a和 b的最大似然估计返回最大似然估计值和水平α的置信区间 |
unifit | [ahat,bhat] = unifit(X);[ahat,bhat,ACI,BCI] = unifit(X);[ahat,bhat,ACI,BCI]=unifit(X, ALPHA) | 均匀分布参数的最大似然估计置信度为95%的参数估计和置信区间返回水平α的参数估计和置信区间 |
expfit | muhat =expfit(X);[muhat,muci] = expfit(X);[muhat,muci] = expfit(X,alpha) | 指数分布参数的最大似然估计置信度为95%的参数估计和置信区间返回水平α的参数估计和置信区间 |
gamfit | phat =gamfit(X);[phat,pci] = gamfit(X);[phat,pci] = gamfit(X,alpha) | γ分布参数的最大似然估计置信度为95%的参数估计和置信区间返回最大似然估计值和水平α的置信区间 |
weibfit | phat = weibfit(X);[phat,pci] = weibfit(X);[phat,pci] = weibfit(X,alpha) | 韦伯分布参数的最大似然估计置信度为95%的参数估计和置信区间返回水平α的参数估计及其区间估计 |
Mle | phat = mle(‘dist’,data);[phat,pci] = mle(‘dist’,data);[phat,pci] = mle(‘dist’,data,alpha);[phat,pci] = mle(‘dist’,data,alpha,p1) | 分布函数名为dist的最大似然估计置信度为95%的参数估计和置信区间返回水平α的最大似然估计值和置信区间仅用于二项分布,pl为试验总次数 |
对于上表函数,以均匀分布的参数估计为例说明:
例、产生 100 行1列服从区间(1, 10)上的均匀分布的随机数, 计算区间端点“a”和“b”的极大似然估计值, 求出置信度为0.95的这两个参数的置信区间。
本例结合了上节讲述过的常见分布随机数产生的知识,要用到unifrnd函数产生随机数。
>> r = unifrnd(1, 10, 100, 1);
>> [ahat, bhat, aci, bci] = unifit(r)
ahat =
1.0104
bhat =
9.7178
aci =
0.7456
1.0104
bci =
9.7178
9.9826
结果表明: 区间端点a和b的极大似然估计值分别是1.0104(比“1”略大)和9.7178(比“10”略小), 置信度为0.95的两个参数的置信区间分别是(0.7456, 9.7178)和(1.0104,9.9826).
上面的表中,有一个较为特殊的函数,Mle函数,现对其具体用法有如下说明:
[phat, pci]=mle(’ name ‘, X); % 同时进行区间估计, 默认置信度为95%.
[phat, pci]=mle(’ name ‘, X, alpha); %同时进行区间估计, 置信度由 alpha确定.
[phat, pci]=mle(’ name ', X, alpha, pl); %仅用于二项分布, pl为试验次数.
说明:name为分布函数名,如 beta(β分布)、bino(二项分布)等, X 为数据样本,alpha 为显著水平α, 100(1-α)%为置信度.
例、产生参数为N=100,p=0.35的200个二项分布的随机数, 求出置信度为 0.95的参数p的置信区间.
>> X=binornd(100,0.35,200,1);
>> [p,pci]=mle('bino',X,0.05,100)
p =
0.3511
pci =
0.3445
0.3578
三、单个正态总体参数估计
设X1,X2,……Xn,为来自正态总体N(u,sigma^2)的一个样本,求u,sigma ^2的极大似然估计与区间估计。此处会较多用到数理统计的知识,参见下表。
只需要按照表中所对应的估计函数计算即可。只不过在计算之前,有必要去了解一下matlab中如何去计算某一分布的临界值,见下表。
例、设总体服从正态分布, sigma^2为待估参数。样本的一组观察值为(14.6,15.1,14.9,14.8,15.2,15.1),置信度为95%,求 u=14.5时sigma的置信区间.
>> x=[14.6,15.1,14.9,14.8,15.2,15.1]; %样本数据
>> alpha=0.05; %给定的显著性水平
n=length(x); %计算样本容量
mu=14.5; %给定的样本均值
chi2=sum((x-mu).^2); %计算离差的平方和
lambda1=chi2inv(1-alpha/2,n); %计算卡方分布的临界值
lambda2=chi2inv(alpha/2,n);
sigma=[sqrt(chi2/lambda1),sqrt(chi2/lambda2)] %计算方差的置信区间
sigma =
0.3190 1.0900
分析:先分析题设,sigma^2为待估参数,并且 u=14.5,从表中找到估计函数服从卡方分布。chi2inv函数是计算卡方分布的临界值的函数。
对于两个正态总体区间估计,在这里就不过多重复数理统计的知识,有需要者可以自己温习一下这部分的高数知识,下面就直接通过一个简单的例子进行讲解。
例、从甲乙两个蓄电池厂生产的产品中,分别抽取10个产品,测得它们的电容量(单位:Ah)为:
甲厂:146 141 138 142 140 143 138 137 142 137 乙厂:141 143 139 139 140 141 138 140 142 136 若蓄电池的电容量服从正态分布,求两个工厂生产的蓄电池的电容量方差之比的置信水平为0.90的置信区间。
>> x1=[146 141 138 142 140 143 138 137 142 137];
x2=[141 143 139 139 140 141 138 140 142 136];
s1=var(x1);
s2=var(x2);
f1=finv(0.95,9,9);
f2=finv(0.05,9,9);
d1=s1/s1*(1/f1)
d2=s1/s2*(1/f2)
d1 =
0.3146
d2 =
6.7541
至此,对于matlab在数理统计部分的应用就讲述到这里,难度较大的就是参数估计这一部分,希望大家在了解matlab实现某些统计问题简化运算的同时,还是要回归书本,认真去了解参数估计的数学原理。