这个例子展示了如何使用自定义分布来适应单变量数据m
函数。
你可以使用m
函数来计算最大似然参数估计,并估算其内置分布和自定义分布的精度。要适合自定义分发,您需要定义文件中自定义分发的功能,也需要使用匿名函数。在最简单的情况下,您可以编写代码以计算要适合的分发的PDF的概率密度函数(PDF)或对数,然后致电m
适合分配。此示例使用PDF的PDF或对数介绍以下情况:
拟合截断数据的分发
拟合两种分布的混合
适合加权分布
利用参数变换寻找小样本的参数估计的精确置信区间
注意,你可以使用截断截断名称-值参数m
对于截断的数据而不是定义自定义函数。此外,对于两种正常分布的混合物,您可以使用Fitgmdist.
函数。本示例使用m
函数和自定义函数。
计数数据通常使用泊松分布建模,您可以使用poissfit
或Fitdist.
函数来拟合泊松分布。然而,在某些情况下,数据中没有记录为零的计数,因此,由于缺少零,拟合泊松分布并不简单。在这种情况下,拟合一个泊松分布到零截断数据m
功能和自定义分发功能。
首先,生成一些随机泊松数据。
RNG(18,'twister'的)%的再现性λ= 1.75;n = 75;x1 = poissrnd(λ,n, 1);
接下来,从数据中删除所有零以模拟截断。
>: = cross (>);
核对样品的数量X1
截断后。
长度(x1)
ans = 65.
绘制模拟数据的直方图。
直方图(x1, 0:1:马克斯(x1) + 1)
数据看起来像泊松分布,除了它不包含零。你可以使用一个自定义分布,它与正整数上的泊松分布相同,但在零处没有概率。通过使用自定义分布,可以估计泊松参数lambda.
虽然会计缺少零。
您需要通过概率质量功能(PMF)来定义零截断的泊松分布。创建一个匿名函数来计算每个点的概率X1
,给出了泊松分布的均值参数的值lambda.
.零截断泊松分布的pmf是泊松pmf的归一化,使其和为1。在零截断的情况下,标准化是1-Probability (x1 < 0)
.
pf_truncpoiss = @(x1,lambda)poisspdf(x1,lambda)./(1-poisscdf(0,lambda));
为简单起见,假设所有的X1
给这个函数的值是正整数,没有检查。对于错误检查或使用不止一行代码的更复杂的发行版,必须在单独的文件中定义函数。
为参数找到一个合理的粗略猜测lambda.
.在这种情况下,使用样本意味着。
start =均值(x1)
开始= 2.2154
提供m
使用数据,自定义PMF功能,初始参数值和参数的下限。因为泊松分布的平均参数必须是正的,所以您还需要指定下限lambda.
.这m
函数返回的最大似然估计lambda.
,以及参数的近似95%置信区间。
[lambdahat,lambdaci] = mle(x1,'pdf',pf_truncpoiss,'开始'开始,......'indowbound', 0)
lambdaHat = 1.8760
lambdaCI =2×11.4990 - 2.2530
参数估计小于样本均值。最大似然估计帐户不存在于数据中的零。
或者,您可以使用截断界限指定截断界限截断截断名称-值参数。
[lambdahat2,lambdaci2] = mle(x1,'分配'那“泊松”那......“TruncationBounds”,[0 inf])
Lambdahat2 = 1.8760.
lambdaci2 =2×11.4990 - 2.2530
您还可以计算标准错误估计lambda.
通过使用返回的大样本方差近似MLECOV.
.
阿瓦尔人= mlecov (lambdaHat x1,'pdf', pf_truncpoiss);stderr =√阿瓦尔人
stderr = 0.1923
要视觉检查拟合,请将拟合PMF绘制原始数据的标准化直方图
直方图(x1,'正常化'那'pdf') xgrid = min(x1):max(x1);pmfgrid = pf_truncpoiss (xgrid lambdaHat);持有在绘图(Xgrid,PMFGrid,' - ')包含('x1') ylabel (“概率”) 传奇(样本数据的那'PMF'那“位置”那'最好的事物')举行从
连续数据有时可以b截断。例如,由于数据收集中的限制,可能无法记录大于某些固定值的观察。
在这种情况下,模拟截断的正态分布的数据。首先,生成一些随机的正态数据。
n = 500;mu = 1;Sigma = 3;RNG(“默认”的)%的再现性x2 = normrnd(μ、σ,n, 1);
接下来,删除掉落超出截断点的任何观察结果xTrunc
.假使,假设xTrunc
是您不需要估计的已知价值。
xTrunc = 4;x2 = x2(x2 < xTrunc);
核对样品的数量X2.
截断后。
长度(x2)
ANS = 430.
创建模拟数据的直方图。
直方图(x2)
用与正态分布相同的自定义分布拟合模拟数据x2
xTrunc
.通过使用自定义分布,您可以估计正态参数μ
和西格玛
同时考虑缺少尾巴。
通过pdf定义截断的正态分布。创建一个匿名函数来计算x中每个点的概率密度值,给定参数值μ
和西格玛
.截断点固定且已知,截断正态分布的pdf就是截断后的pdf,然后归一化,这样它就集成为一。标准化是cdf的值xTrunc
.为简单起见,假设全部X2.
值小于xTrunc
,没有检查。
pdf_truncnorm = @ (x2,μ、σ)......normpdf (x2,μ、σ)。/ normcdf (xTrunc、μ、σ);
因为你不需要估计截断点xTrunc
,它不包含在自定义PDF函数的输入分布参数中。xTrunc
也不是数据矢量输入参数的一部分。匿名函数可以访问工作区中的变量,因此您不必通过xTrunc
匿名函数作为额外的参数。
为参数估计提供一个粗略的初始猜测。在这种情况下,由于截断不是极端的,所以使用样本均值和标准偏差。
start = [均值(x2),std(x2)]
开始=1×20.1585 2.4125
提供m
使用数据、自定义PDF函数、初始参数值和参数下界。因为西格玛
必须是正的,还需要指定参数的下界。m
的最大似然估计μ
和西格玛
作为单个矢量,以及两个参数的近似95%置信区间的矩阵。
[paramests,paramcis] = mle(x2,'pdf',pdf_truncnorm,'开始'开始,......'indowbound',[ - INF 0])
paramEsts =1×21.1298 3.0884.
paramcis =2×20.5713 2.7160 1.6882 3.4607
的估计μ
和西格玛
大于样本均值和标准差。模型拟合解释了分布缺失的上尾。
或者,您可以使用截断界限指定截断界限截断截断名称-值参数。
[paramests2,paramcis2] = mle(x2,'分配'那'普通的'那......“TruncationBounds”(负无穷xTrunc))
paramEsts2 =1×21.1297 - 3.0884
paramCIs2 =2×20.5713 2.7160 1.6882 3.4607
您可以使用参数估计计算近似协方差矩阵MLECOV.
.这种近似通常适用于大样本,你可以通过对角线元素的平方根来近似标准误差。
acov = mlecov (paramEsts x2,'pdf',pdf_truncnorm)
Acov =2×20.0812 0.0402 0.0402 0.0361
stderr = sqrt(diag(acov))
stderr =2×10.2849 - 0.1900
在目视检查拟合,请将拟合的PDF绘制原始数据的标准化直方图。
直方图(X2,'正常化'那'pdf') xgrid = linspace(min(x2),max(x2));pdfgrid = pdf_truncnorm (xgrid paramEsts (1) paramEsts (2));持有在情节(xgrid pdfgrid,' - ')包含(“x2”) ylabel (的概率密度) 传奇(样本数据的那'适合PDF'那“位置”那'最好的事物')举行从
一些数据集显示双模态,甚至多模态,用标准分布来拟合这些数据通常是不合适的。然而,简单的单峰分布的混合通常可以很好地模拟这样的数据。
在这种情况下,将两个正常分布的混合符合模拟数据。考虑使用以下建设性定义的模拟数据:
首先,翻转偏置硬币。
如果硬币落在头上,从正常分布随机挑选一个值 和标准偏差 .
如果硬币落在尾巴上,则从正常分布随意挑选价值 和标准偏差 .
生成从学生的混合中设置的数据T.而不是使用你拟合的相同模型。通过使用不同的分布(类似于在蒙特卡罗模拟中使用的技术),您可以测试拟合方法对偏离拟合模型假设的稳健程度。
RNG(10)%的再现性X3 = [trnd(20,1,50) trnd(4,1,100)+3];直方图(x3)
通过创建一个匿名函数来计算概率密度,定义适合的模型。两个正态分布的混合pdf是两个正态分量的pdf的加权和,由混合概率加权。匿名函数接受6个输入:一个用于评估pdf的数据向量和5个分布参数。每个分量都有其均值和标准差的参数。
pdf_normmixture = @(x3,p,mu1,mu2,sigma1,sigma2)......p * normpdf (x3, mu1 sigma1) + (1 - p) * normpdf (x3, mu2 sigma2);
您还需要对参数进行初步猜测。随着模型参数数量的增加,定义起点变得更加重要。在这里,从等量的混合物(P.
= 0.5)正常分布,以数据的两个四分位数为中心,具有相同的标准偏差。标准偏差的起始值来自于每个组分的平均值和方差的混合物方差的公式。
pstart = .5;MustArt = Smianile(X3,[。25 .75])
MustArt =.1×20.3351 3.3046
sigmastart = sqrt(var(x3) - .25 * diff(mustart)。^ 2)
sigmaStart = 1.1602
start = [pstart mustart sigmastart sigmastart];
为混合概率指定0和1的界限,为标准偏差指定0的下界。将边界向量的剩余元素设为+正
或-inf.
,表示没有限制。
lb = [0 -Inf -Inf 0 0];ub = [1 Inf Inf Inf Inf];paramEsts =大中型企业(x3,'pdf',pdf_normmixture,'开始'开始,......'indowbound'磅,'上行'乌兰巴托)
警告:最大似然估计不收敛。迭代超过限制。
paramEsts =1×50.3273 0.2263 2.9914 0.9067 1.2059
警告消息表明该函数不收敛于默认迭代设置。显示默认选项。
statset('mlecustom'的)
ANS =.结构体字段:显示:'OFF'MAXFUNEVALS:400 MAXITER:200 TOLBND:1.0000E-06 TOLFUN:1.0000E-06 TOLTYPEFUN:[] TOLX:1.0000E-06 TOLTYPEX:[] GRAVOBJ:'OFF'jacobian:[]德国:6.0555e-06 funvalcheck:'on'robust:[] robustwgtfun:[] wgtfun:[] tune:[]使用adplelial:[]使用substubs:[] streams:{} outputfcn:[]
自定义分发的默认最大迭代次数为200.使用使用的选项结构覆盖默认值以增加迭代次数statset
函数。此外,增加最大函数评估。
选择= statset (“麦克斯特”, 300,“MaxFunEvals”, 600);paramEsts =大中型企业(x3,'pdf',pdf_normmixture,'开始'开始,......'indowbound'磅,'上行'乌兰巴托,'选项',选项)
paramEsts =1×50.3273 0.2263 2.9914 0.9067 1.2059
最终的收敛迭代只在结果的最后几位有意义。然而,最佳实践是始终确保达到收敛。
为了直观地检查拟合情况,将拟合密度绘制到原始数据的概率直方图上。
直方图(x3,'正常化'那'pdf')举行在XGrid = Linspace(1.1 * min(x3),1.1 * max(x3),200);pdfgrid = pdf_normmixture(XGrid,......Paramests(1),Paramests(2),Paramests(3),Paramests(4),Paramests(5));情节(xgrid pdfgrid,' - ')举行从包含(“x3”) ylabel (的概率密度) 传奇(样本数据的那'适合PDF'那“位置”那'最好的事物'的)
或者,对于混合的正态分布,您可以使用Fitgmdist.
函数。由于迭代算法的初始估计和设置,估计值可能是不同的。
Mdl = fitgmdist (x3 ', 2)
MDL =高斯混合物分布在1尺寸成分1:混合比例:0.329180平均值:-0.2200组分2:混合比例:0.670820平均值:2.9975
mdl.sigma.
ANS = ANS(:,:,1)= 0.8274 ANS(:,:,2)= 1.4437
假设你有10个数据点,每个数据点实际上是1到8个观测值的平均值。原始的观测数据是不存在的,但是每个数据点的观测数据的数量是已知的。每个点的精度取决于其相应的观测数。你需要估计原始数据的均值和标准差。
X4 = [0.25 -1.24 1.38 1.39 -1.43 2.79 3.52 0.92 1.44 1.26]'m = [8 2 1 3 8 4 2 5 2 4]';
每个数据点的方差与其相应的观察数成反比,因此使用1 / m
在最大似然拟合中对每个数据点的方差加权。
w = 1./m;
在此模型中,您可以通过其PDF定义分发。但是,使用PDF的对数更合适,因为正常的PDF具有表单
C. * EXP(-0.5。* Z. ^ 2),
和m
获取PDF的日志以计算Loglikelihie。所以,相反,创建一个函数,可直接计算PDF的对数。
PDF函数的对数必须计算每个点的概率密度的对数X
,给定正常分布参数μ
和西格玛
.它还需要考虑不同的方差权重。定义一个名为Helper_logpdf_wn1.
在一个单独的文件中Helper_logpdf_wn1.M.
.
函数logy = helper_logpdf_wn1(x,m,mu,sigma)%Helper_logpdf_wn1 PDF的对数进行重量正态分布%这个函数只支持Fit Cust金宝appom Distributions示例%(customdist1demo.mlx),可能会在将来的释放中发生变化。v = sigma。^ 2 ./ m;logy = - (x-mu)。^ 2 ./(2. * v) - .5。* log(2. * pi。* v);结尾
为参数估计提供一个粗略的初步猜测。在这种情况下,使用未加权样本均值和标准偏差。
开始= [(x4),性病(x4)]
开始=1×21.0280 - 1.5490
因为西格玛
必须是正面的,您需要指定较低的参数界限。
[paramests1,paramcis1] = mle(x4,'logpdf'那......@ (x,μ、σ)helper_logpdf_wn1 (x, m,μ、σ),......'开始'开始,'indowbound'(从0))
paramEsts1 =1×20.6244 2.8823
paramCIs1 =2×2-0.2802 1.6191 1.5290 4.1456
的估计μ
小于样本均值估计的三分之二。估计值受到最可靠的数据点的影响,即基于最大量原始观测的数据点。在这个数据集中,这些点倾向于从未加权样本均值拉下估计。
这m
功能计算使用大样本正常近似的参数的置信区间,以便如果不可用,则估算器的分布。对于小样本尺寸,您可以通过转换一个或多个参数来改善正常近似。在这种情况下,将正态分布的比例参数转换为其对数。
首先,定义命名的新日志PDF函数Helper_logpdf_wn2.
使用变换参数西格玛
.
函数呆呆的= helper_logpdf_wn2 (x, m,μ,logsigma)%HELPER_LOGPDF_WN2为权重正态分布的pdf的对数%日志(σ)参数化%这个函数只支持Fit Cust金宝appom Distributions示例%(customdist1demo.mlx),可能会在将来的释放中发生变化。v = exp(logsigma)。^ 2 ./ m;logy = - (x-mu)。^ 2 ./(2. * v) - .5。* log(2. * pi。* v);结尾
使用相同的起始点转换为新参数化西格玛
,也就是说,样本标准偏差的日志。
开始= [(x4),日志(std (x4)))
开始=1×21.0280 0.4376
因为西格玛
可以是任何正价值,日志(σ)
无限制,您无需指定较低或上限。
[paramests2,paramcis2] = mle(x4,'logpdf'那......@(x,mu,sigma)helper_logpdf_wn2(x,m,mu,sigma),......'开始',开始)
paramEsts2 =1×20.6244 1.0586
paramCIs2 =2×2-0.2802 0.6203 1.5290 1.4969
因为参数化使用日志(σ)
,你必须转换回原来的规模,以得到一个估计和置信区间西格玛
.
sigmahat = exp(paramests2(2))
Sigmahat = 2.8823
sigmaci = exp(paramcis2(:,2))
sigmaci =2×11.8596 - 4.4677
两者的估计μ
和西格玛
与第一次适合相同,因为最大可能性估计是参数化的不变性。置信区间西格玛
稍微不同于paramcis1(:,2)
.