主要内容

符合自定义分布

这个例子展示了如何使用自定义分布来适应单变量数据大中型企业函数。

你可以使用大中型企业函数来计算最大似然参数估计,并估算其内置分布和自定义分布的精度。要适合自定义分发,您需要定义文件中自定义分发的功能,也需要使用匿名函数。在最简单的情况下,您可以编写代码以计算要适合的分发的PDF的概率密度函数(PDF)或对数,然后致电大中型企业适合分配。此示例使用PDF的PDF或对数介绍以下情况:

  • 拟合截断数据的分布

  • 拟合两种分布的混合

  • 拟合加权分布

  • 利用参数变换寻找小样本的参数估计的精确置信区间

注意,你可以使用截断截断名称-值参数大中型企业用于截断的数据,而不是定义自定义函数。另外,对于两个正态分布的混合,可以使用fitgmdist函数。本示例使用大中型企业函数和自定义函数。

拟合零截断泊松分布

计数数据通常使用泊松分布建模,您可以使用poissfitFitdist.函数来拟合泊松分布。然而,在某些情况下,数据中没有记录为零的计数,因此,由于缺少零,拟合泊松分布并不简单。在这种情况下,拟合一个泊松分布到零截断数据大中型企业功能和自定义分发功能。

首先,生成一些随机泊松数据。

rng (18,'twister'的)%的再现性λ= 1.75;n = 75;x1 = poissrnd(λ,n, 1);

接下来,从数据中删除所有零以模拟截断。

>: = cross (>);

核对样品的数量x1截断后。

长度(x1)
ans = 65

绘制模拟数据的直方图。

直方图(x1, 0:1:马克斯(x1) + 1)

数据看起来像泊松分布,除了它不包含零。你可以使用一个自定义分布,它与正整数上的泊松分布相同,但在零处没有概率。通过使用自定义分布,可以估计泊松参数λ虽然会计缺少零。

你需要定义零截断泊松分布的概率质量函数(pmf)。创建一个匿名函数来计算每个点的概率x1,给出了泊松分布的均值参数的值λ.零截断泊松分布的pmf是泊松pmf的归一化,使其和为1。在零截断的情况下,标准化是1-Probability (x1 < 0)

pf_truncpoiss = @(x1,lambda)poisspdf(x1,lambda)./(1-poisscdf(0,lambda));

为了简单起见,假设所有的x1给这个函数的值是正整数,没有检查。对于错误检查或使用不止一行代码的更复杂的发行版,必须在单独的文件中定义函数。

为参数找到一个合理的粗略猜测λ.在这种情况下,使用样本意味着。

start =均值(x1)
开始= 2.2154

提供大中型企业用该数据,自定义PMF函数、初始参数值和参数下界。因为泊松分布的平均参数必须是正的,你还需要指定一个下界λ.这大中型企业函数返回的最大似然估计λ,以及参数的近似95%置信区间。

[lambdaHat, lambdaCI] =大中型企业(x1,'pdf',pf_truncpoiss,'开始'开始,...下界的, 0)
lambdaHat = 1.8760
lambdaCI =2×11.4990 - 2.2530

参数估计值小于样本均值。最大似然估计解释了数据中不存在的零。

或者,您可以使用截断界限指定截断界限截断截断名称-值参数。

[lambdaHat2, lambdaCI2] =大中型企业(x1,“分布”“泊松”...“TruncationBounds”,[0 inf])
lambdaHat2 = 1.8760
lambdaCI2 =2×11.4990 - 2.2530

你也可以计算一个标准误差估计λ通过使用大样本方差近似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 (“概率”)传说(样本数据的的安装及“位置”“最佳”)举行

拟合上截断正态分布

连续的数据有时会被截断。例如,由于数据收集的限制,大于某个固定值的观测值可能不会被记录。

在这种情况下,模拟截断的正态分布的数据。首先,生成一些随机的正态数据。

n = 500;μ= 1;σ= 3;rng (“默认”的)%的再现性x2 = normrnd(μ、σ,n, 1);

接下来,删除掉落超出截断点的任何观察结果xTrunc.假使,假设xTrunc是一个您不需要估计的已知值。

xTrunc = 4;x2 = x2(x2 < xTrunc);

核对样品的数量x2截断后。

长度(x2)
ans = 430

创建模拟数据的直方图。

直方图(x2)

用与正态分布相同的自定义分布拟合模拟数据x2 < xTrunc,但上面有零概率xTrunc.通过使用自定义分布,您可以估计正态参数μ西格玛而这条尾巴却不见了。

通过pdf定义截断的正态分布。创建一个匿名函数来计算x中每个点的概率密度值,给定参数值μ西格玛.截断点固定且已知,截断正态分布的pdf就是截断后的pdf,然后归一化,这样它就集成为一。标准化是cdf的值xTrunc.为简单起见,假设全部x2值小于xTrunc,没有检查。

pdf_truncnorm = @ (x2,μ、σ)...normpdf (x2,μ、σ)。/ normcdf (xTrunc、μ、σ);

因为你不需要估计截断点xTrunc,它不包含在自定义PDF函数的输入分布参数中。xTrunc也不是数据向量输入参数的一部分。匿名函数可以访问工作区中的变量,因此您不必传递xTrunc作为附加参数添加到匿名函数中。

为参数估计提供一个粗略的初始猜测。在这种情况下,由于截断不是极端的,所以使用样本均值和标准偏差。

开始= [(x2),性病(x2)]
开始=1×20.1585 - 2.4125

提供大中型企业使用数据、自定义PDF函数、初始参数值和参数下界。因为西格玛必须是正的,还需要指定参数的下界。大中型企业的最大似然估计μ西格玛作为一个单一的向量,以及两个参数的近似95%置信区间的矩阵。

[paramEsts, paramCIs] =大中型企业(x2,'pdf',pdf_truncnorm,'开始'开始,...下界的(从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'“位置”“最佳”)举行

拟合两个正态分布的混合物

一些数据集显示双模态,甚至多模态,用标准分布来拟合这些数据通常是不合适的。然而,简单的单峰分布的混合通常可以很好地模拟这样的数据。

在这种情况下,对模拟数据拟合两种正态分布的混合物。用下列构造定义来考虑模拟数据:

  • 首先,抛一枚有偏差的硬币。

  • 如果硬币落在头上,从正常分布随机挑选一个值 μ 1 和标准偏差 σ 1

  • 如果硬币落在尾巴上,则从正常分布随意挑选价值 μ 2 和标准偏差 σ 2

从学生的混合数据生成一个数据集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).²)
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,'开始'开始,...下界的磅,'上行'乌兰巴托)
警告:最大似然估计不收敛。迭代超过限制。
paramEsts =1×50.3273 0.2263 2.9914 0.9067 1.2059

警告消息表明该函数不收敛于默认迭代设置。显示默认选项。

statset (“mlecustom”的)
ANS =.结构体字段:Display: 'off' MaxFunEvals: 400 MaxIter: 200 TolBnd: 1.0000e-06 TolFun: 1.0000e-06 TolTypeFun: [] TolX: 1.0000e-06 TolTypeX: [] GradObj: 'off' Jacobian:[]衍生步骤:6.0555e-06 FunValCheck: 'on' Robust: []

自定义分发的默认最大迭代次数为200.使用使用的选项结构覆盖默认值以增加迭代次数statset函数。同时,增加最大函数值。

选择= statset (“麦克斯特”, 300,“MaxFunEvals”, 600);paramEsts =大中型企业(x3,'pdf',pdf_normmixture,'开始'开始,...下界的磅,'上行'乌兰巴托,“选项”选项)
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 paramEsts (1) (2), paramEsts (3), paramEsts (4), paramEsts (5));情节(xgrid pdfgrid,' - ')举行包含(“x3”) ylabel (的概率密度)传说(样本数据的'适合PDF'“位置”“最佳”的)

或者,对于混合的正态分布,您可以使用fitgmdist函数。由于迭代算法的初始估计和设置,估计值可能是不同的。

Mdl = fitgmdist (x3 ', 2)
Mdl = 1维2分量高斯混合分布。成分1:混合比例:0.329180 Mean: -0.2200成分2:混合比例:0.670820 Mean: 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. /米;

在此模型中,您可以通过其PDF定义分发。但是,使用PDF的对数更合适,因为正常的PDF具有表单

C. * EXP(-0.5。* Z. ^ 2),

大中型企业获取PDF的日志以计算Loglikelihie。所以,相反,创建一个函数,可直接计算PDF的对数。

pdf函数的对数必须计算每个点的概率密度的对数X,给定正常分布参数μ西格玛.它还需要考虑不同的方差权重。定义一个名为helper_logpdf_wn1在一个单独的文件中helper_logpdf_wn1.m

函数呆呆的= helper_logpdf_wn1 (x, m,μ、σ)%Helper_logpdf_wn1 PDF的对数进行重量正态分布%这个函数只支持Fit Cust万博1manbetxom 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,μ、σ),...'开始'开始,下界的(从0))
paramEsts1 =1×20.6244 - 2.8823
paramCIs1 =2×2-0.2802 1.6191 1.5290 4.1456

的估计μ小于样本均值估计的三分之二。估计值受到最可靠的数据点的影响,即基于最大量原始观测的数据点。在这个数据集中,这些点倾向于从未加权样本均值拉下估计。

使用参数变换适应正态分布

大中型企业功能计算使用大样本正常近似的参数的置信区间,以便如果不可用,则估算器的分布。对于小样本尺寸,您可以通过转换一个或多个参数来改善正常近似。在这种情况下,将正态分布的比例参数转换为其对数。

首先,定义一个新的日志pdf函数helper_logpdf_wn2的转换参数西格玛

函数呆呆的= helper_logpdf_wn2 (x, m,μ,logsigma)%HELPER_LOGPDF_WN2为权重正态分布的pdf的对数%日志(σ)参数化%这个函数只支持Fit Cust万博1manbetxom 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] =大中型企业(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)

也可以看看

|

相关的话题