主要内容

适合自定义分布

方法将自定义分布拟合到单变量数据大中型企业函数。

您可以使用大中型企业函数用于计算最大似然参数估计,并估计其内置分布和自定义分布的精度。为了适应自定义分布,您需要在文件中或使用匿名函数为自定义分布定义一个函数。在最简单的情况下,您可以编写代码来计算您想要拟合的分布的概率密度函数(pdf)或pdf的对数,然后调用大中型企业来拟合分布。这个例子涵盖了以下使用pdf或pdf对数的情况:

  • 拟合截断数据的分布

  • 拟合两个分布的混合

  • 拟合加权分布

  • 利用参数变换,求小样本参数估计的准确置信区间

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

拟合零截断泊松分布

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

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

rng (18,“旋风”%用于再现性λ = 1.75;N = 75;X1 = poissrnd(lambda,n,1);

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

X1 = X1 (X1 > 0);

检查进样数量x1后截断。

长度(x1)
Ans = 65

绘制模拟数据的直方图。

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

图中包含一个轴对象。坐标轴对象包含一个直方图类型的对象。

数据看起来像一个泊松分布,只是它不包含零。您可以使用与正整数上的泊松分布相同的自定义分布,但在零处的概率不为零。通过使用自定义分布,您可以估计泊松参数λ同时解释缺失的0。

您需要通过其概率质量函数(pmf)定义零截断泊松分布。创建一个匿名函数来计算中每个点的概率x1,给定泊松分布的均值参数λ.零截断泊松分布的pmf是规范化的泊松pmf,使其和为1。对于零截断,归一化是1-Probability (x1 < 0)

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

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

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

起始=均值(x1)
Start = 2.2154

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

[lambdaHat,lambdaCI] = mle(x1,“pdf”pf_truncpoiss,“开始”开始,...下界的, 0)
lambdaHat = 1.8760
lambdaCI =2×11.4990 - 2.2530

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

方法指定截断边界TruncationBounds名称-值参数。

[lambdaHat2,lambdaCI2] = mle(x1,“分布”“泊松”...“TruncationBounds”[0正])
lambdaHat2 = 1.8760
lambdaCI2 =2×11.4990 - 2.2530

您还可以计算的标准误差估计λ通过使用返回的大样本方差近似mlecov

avar = mlecov(lambdaHat,x1,“pdf”, pf_truncpoiss);Stderr = sqrt(avar)
Stderr = 0.1923

为了直观地检查拟合,将拟合pmf与原始数据的标准化直方图绘制

直方图(x1,“归一化”“pdf”) xgrid = min(x1):max(x1);pmfgrid = pf_truncpoiss(xgrid,lambdaHat);持有情节(xgrid pmfgrid,“- - -”)包含(x1的) ylabel (“概率”)传说(样本数据的的安装及“位置”“最佳”)举行

图中包含一个轴对象。axis对象包含2个直方图类型的对象,line。这些对象表示样本数据,拟合pmf。

拟合上截断正态分布

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

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

N = 500;Mu = 1;σ = 3;rng (“默认”%用于再现性X2 = normrnd(mu,sigma,n,1);

接下来,删除任何超出截断点的观测值xTrunc.假设xTrunc是您不需要估计的已知值。

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

检查进样数量x2后截断。

长度(x2)
Ans = 430

创建模拟数据的直方图。

直方图(x2)

图中包含一个轴对象。坐标轴对象包含一个直方图类型的对象。

用与正态分布相同的自定义分布拟合模拟数据x2 < xTrunc,但以上概率为零xTrunc.通过使用自定义分布,您可以估计正态参数μ而且σ同时解释掉尾巴的原因。

用pdf定义截断的正态分布。创建一个匿名函数来计算x中每个点的概率密度值,给定参数值μ而且σ.在截断点固定且已知的情况下,截断正态分布的pdf是截断后再归一化的pdf,以便它积分为1。归一化是cdf的值xTrunc.为简单起见,假设所有x2值小于xTrunc,没有检查。

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

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

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

Start = [mean(x2),std(x2)]
开始=1×20.1585 - 2.4125

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

[参数,paramCIs] = mle(x2,“pdf”pdf_truncnorm,“开始”开始,...下界的(从0))
paramEsts =1×21.1298 - 3.0884
paramCIs =2×20.5713 2.7160 1.6882 3.4607

的估计μ而且σ大于样本均值和标准差。模型拟合解释了分布中缺失的上尾。

方法指定截断边界TruncationBounds名称-值参数。

[paramest2,paramCIs2] = mle(x2,“分布”“正常”...“TruncationBounds”(负无穷xTrunc))
paramEsts2 =1×21.1297 - 3.0884
paramCIs2 =2×20.5713 2.7160 1.6882 3.4607

你可以计算一个近似的协方差矩阵的参数估计使用mlecov.这种近似通常适用于大样本,您可以通过对角线元素的平方根来近似标准误差。

acov = mlecov(参数sts,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, parametersts (1), parametersts (2));持有情节(xgrid pdfgrid,“- - -”)包含(“x2”) ylabel (的概率密度)传说(样本数据的“安装pdf”“位置”“最佳”)举行

图中包含一个轴对象。axis对象包含2个直方图类型的对象,line。这些对象代表样本数据,拟合pdf。

拟合两个正态分布的混合

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

在这种情况下,拟合两个正态分布的混合模拟数据。使用以下建设性定义考虑模拟数据:

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

  • 如果硬币正面朝上,则从具有均值的正态分布中随机选取一个值 μ 1 还有标准差 σ 1

  • 如果硬币背面朝上,则从具有均值的正态分布中随机选取一个值 μ 2 还有标准差 σ 2

从Student的混合数据中生成一个数据集t分布,而不是使用相同的模型,你拟合。通过使用不同的分布,类似于蒙特卡罗模拟中使用的技术,您可以测试拟合方法对偏离拟合模型假设的鲁棒性。

rng (10)%用于再现性X3 = [trnd(20,1,50) trnd(4,1,100)+3];直方图(x3)

图中包含一个轴对象。坐标轴对象包含一个直方图类型的对象。

通过创建一个计算概率密度的匿名函数来定义拟合模型。两个正态分布的混合的pdf是两个正态分布的pdf的加权和,由混合概率加权。匿名函数需要六个输入:一个用于评估pdf的数据向量和五个分布参数。每个组成部分都有其平均值和标准偏差的参数。

pdf_normmix = @(x3,p,mu1,mu2,sigma1,sigma2)...P *normpdf(x3,mu1,sigma1) + (1-p)*normpdf(x3,mu2,sigma2);

您还需要对参数进行初步猜测。随着模型参数数量的增加,定义起点变得更加重要。这里,从等量的混合物开始(p= 0.5)的正态分布,以数据的两个四分位数为中心,具有相等的标准偏差。标准差的起始值来自于用每个成分的均值和方差表示的混合方差的公式。

pStart = .5;muStart =分位数(x3,[.]25。)
muStart =1×20.3351 - 3.3046
sigmaStart =√(var(x3) - .25*diff(muStart).^2)
sigmaStart = 1.1602
start = [pStart muStart sigmaStart sigmaStart];

为混合概率指定0和1的边界,为标准偏差指定0的下界。将边界向量的其余元素设为+正,表示没有限制。

lb = [0 -Inf -Inf 0 0];ub = [1 Inf Inf Inf Inf];参数= mle(x3,“pdf”pdf_normmixture,“开始”开始,...下界的磅,“UpperBound”乌兰巴托)
警告:最大似然估计不收敛。超出迭代限制。
paramEsts =1×50.3273 -0.2263 2.9914 0.9067 1.2059

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

statset (“mlecustom”
ans =带字段的结构:显示:'off' MaxFunEvals: 400 MaxIter: 200 TolBnd: 1.0000 -06 TolFun: 1.0000 -06 TolTypeFun: [] TolX: 1.0000 -06 TolTypeX: [] GradObj: 'off' Jacobian:[]衍生步骤:6.0555e-06 FunValCheck: 'on' Robust: [] RobustWgtFun: [] WgtFun: [] Tune: [] UseParallel: [] UseSubstreams: [] Streams: {} OutputFcn: []

自定义发行版的默认最大迭代次数是200。属性创建的选项结构,覆盖默认值以增加迭代次数statset函数。另外,增加最大函数求值。

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

图中包含一个轴对象。axis对象包含2个直方图类型的对象,line。这些对象代表样本数据,拟合pdf。

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

Mdl = fitgmdist(x3',2)
Mdl =一维2组分的高斯混合分布组件1:混合比例:0.329180均值:-0.2200组件2:混合比例:0.670820均值:2.9975
Mdl。σ
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.²),

而且大中型企业获取PDF的日志以计算loglikelihood。因此,创建一个函数,直接计算pdf的对数。

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

函数Logy = helper_logpdf_wn1(x,m,mu,sigma)权重正态分布pdf的对数此函数仅支持示例适配自定义分发金宝app% (customdist1demo.mlx),并可能在将来的版本中更改。V = sigma。^2 ./ m;Logy = -(x-mu)^2 ./ (2.*v) - .5.*log(2.*pi.*v);结束

为参数估计提供一个粗略的初步猜测。在这种情况下,使用未加权样本均值和标准偏差。

Start = [mean(x4),std(x4)]
开始=1×21.0280 - 1.5490

因为σ必须为正数,则需要指定较低的参数边界。

[paramest1,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

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

用参数变换拟合正态分布

大中型企业函数计算参数的置信区间,如果没有精确的方法,则使用大样本正态逼近估计量的分布。对于小样本容量,您可以通过转换一个或多个参数来改进正态近似。在这种情况下,将正态分布的比例参数转换为对数。

首先,定义一个名为helper_logpdf_wn2它使用一个转换后的参数σ

函数Logy = helper_logpdf_wn2(x,m,mu,logsigma)的权值正态分布的对数% log(sigma)参数化此函数仅支持示例适配自定义分发金宝app% (customdist1demo.mlx),并可能在将来的版本中更改。V = exp(logsigma)^2 ./ m;Logy = -(x-mu)^2 ./ (2.*v) - .5.*log(2.*pi.*v);结束

使用转换为的新参数化的相同起始点σ,即样本标准差的对数。

Start = [mean(x4),log(std(x4))]
开始=1×21.0280 - 0.4376

因为σ可以是任何正值,日志(σ)是无界的,您不需要指定下界或上界。

[paramest2,paramCIs2] = mle(x4,“logpdf”...@ (x,μ、σ)helper_logpdf_wn2 (x, m,μ、σ),...“开始”,开始)
paramEsts2 =1×20.6244 - 1.0586
paramCIs2 =2×2-0.2802 0.6203 1.5290 1.4969

因为参数化使用日志(σ),您必须转换回原始尺度,以获得的估计值和置信区间σ

= exp(paramest2 (2))
sigmaHat = 2.8823
sigmaCI = exp(paramCIs2(:))
sigmaCI =2×11.8596 - 4.4677

两者的估计μ而且σ与第一次拟合相同,因为最大似然估计对参数化是不变的。的置信区间σ有点不同paramCIs1 (: 2)

另请参阅

|

相关的话题