主要内容

在拟合自定义分布时避免数值问题

的高级技术大中型企业函数在拟合自定义分布时避免数值问题。具体来说,你要学习如何:

  • 指定足够的初始参数值。

  • 指定logpdf(概率密度函数的对数)和logsf(生存函数对数)。

  • 指定nloglf(负对数似然函数),并向优化函数提供负对数似然的梯度向量fmincon(需要优化工具箱™)。

在本例中,您将为右截尾数据拟合一个极值分布。极值分布常用于模拟机械零件的失效时间。这类实验通常只进行固定长度的时间。如果不是所有的实验单元在这段时间内发生故障,那么数据值将被右截尾,这意味着一些故障时间值是未知的,但已知大于某个值。

这两个evfit功能和大中型企业函数拟合数据的极值分布,包括带有截尾的数据。但是,在本例中,使用大中型企业并使用极值分布自定义分布来拟合模型以截尾数据。

指定适当的初始参数值

由于截尾数据的值是未知的,极大似然估计需要更多的信息。特别是,计算对数似然需要概率密度函数(pdf)、累积分布函数(cdf)和足够的初始参数值。您可以使用evpdf而且evcdf函数指定PDF和cdf。

首先,生成一些未经审查的极值数据。

rng (0,“旋风”);N = 50;Mu = 5;Sigma = 2.5;X = evrnd(mu,sigma,n,1);

接下来,通过用截止值替换那些值来审查任何大于预定截止值的值。这种类型的审查被称为第二类审查。

C = (x > 7);X (c) = 7;

检查删减观察的百分比。

和(c) / (c)长度
Ans = 0.1200

原始数据的12%被右删减,截止点为7。

绘制数据的直方图,包括一个堆叠条来表示经过删减的观察结果。

[uncensCnts,Edges] = histcounts(x(~c),10);censCnts = histcounts(x(c),Edges);栏((1:end-1) + diff边缘(边缘)/ 2,[uncensCnts ' censCnts '],“堆叠”)传说(“充分观察到的数据”审查数据的“位置”“西北”

图中包含一个axes对象。坐标轴对象包含两个bar类型的对象。这些对象代表完全观察到的数据,经过删减的数据。

虽然数据中包含了删失观测,但删失观测的比例相对较小。因此,矩量法可以为参数估计提供合理的起点。的初始参数值μ而且σ对应于未截尾数据的观测均值和标准差。

Sigma0 =√(6)*std(x(~c))./
Sigma0 = 2.3495
Mu0 = mean(x(~c))-psi(1).*sigma0
Mu0 = 3.5629

求两个极值分布参数的最大似然估计,以及近似的95%置信区间。指定截尾向量、pdf、cdf和初始参数值。因为σ(scale参数)必须为正,还需要指定较低的参数边界。

[paramsts, paramci] = mle(x,“审查”c...“pdf”@evpdf,“提供”@evcdf,...“开始”, (mu0 sigma0),下界的(从0))
paramEsts =1×24.5530 - 3.0215
paramCIs =2×23.6455 2.2937 5.4605 3.7494

指定logpdf而且logsf

拟合一个自定义分布需要对参数进行初始猜测,而确定一个初始点是先验的好还是坏是很困难的。如果指定的起点距离最大似然估计较远,则一些观察结果可能位于与起点对应的极值分布的较远尾部。在这种情况下,可能会发生以下情况之一:

  • 在双精度算法中,其中一个pdf值变得非常小,以至于下流为零。

  • 其中一个cdf值非常接近于1,以致于舍入精度加倍。

cdf值也可能变得非常小,以致于流量不足,但这种情况不会造成问题。

这两种情况都会导致问题大中型企业计算对数似然,因为每个都指向的对数似然值,其中优化算法大中型企业不能处理。

从一个不同的起点来看会发生什么。

Start = [1 1];试一试[paramsts, paramci] = mle(x,“审查”c...“pdf”@evpdf,“提供”@evcdf,...“开始”开始,下界的(从0))我disp (ME.message)结束
自定义累积分布函数返回值大于等于1。

在这种情况下,会出现第二个问题条件。有些cdf值在初始参数猜测时正好是1,所以对数似然是无穷大的。你可以试着设置FunValCheck控制参数为通过使用选项名称-值参数。的选项禁用对非有限似然值的检查。然而,解决这个数字问题的最好方法是在它的根源上。

极值cdf有这样的形式

P = 1 -exp(-exp((x-mu)./))

截短观察对对数似然的贡献是其生存函数(SF)值的对数,或日志(1-cdf).对于极值分布,SF的对数为exp ((xμ)。/σ).如果你直接用log SF来计算对数可能性,而不是计算日志(1 - (1-exp (logSF))),您可以避免cdf的舍入问题。cdf值无法与之区分的观测值1具有对数SF值,很容易表示为非零值。例如,的cdf值(1-1e-20)轮,1在双重精度,因为双重精度每股收益是关于2 e-16

SFval = 1e-20;cdfval = 1 - SFval
Cdfval = 1

该软件可以方便地表示相应SF值的对数。

日志(SFval)
Ans = -46.0517

日志pdf也是同样的情况;未经审查的观察结果对对数似然的贡献是其PDF值的对数。您可以直接使用日志pdf,而不是计算日志(exp (logpdf)),以避免下溢问题,即PDF在双精度下无法与零区分。该软件可以很容易地将日志pdf表示为一个有限的负数。例如,pdf值为1 e - 400底流在双精度,因为双精度最小正浮点数是关于2 e - 308

Logpdfval = -921;Pdfval = exp(logpdfval)
Pdfval = 0

使用大中型企业函数,您可以使用日志pdf和日志SF(而不是pdf和cdf)指定一个自定义分布logpdf而且logsf名称-值参数。与pdf和cdf函数不同,log pdf和log SF没有内置函数。因此,您需要创建计算这些值的匿名函数。

Evlogpdf = @(x,mu,sigma) ((x-mu)。/∑- exp((x-mu)./∑)- log(∑);Evlogsf = @(x,mu,sigma) -exp((x-mu)./sigma);

使用相同的起点,极值分布的交替日志pdf和日志SF规范使问题可以解决。

Start = [1 1];[paramsts, paramci] = mle(x,“审查”c...“logpdf”evlogpdf,“logsf”evlogsf,...“开始”开始,下界的(从0))
paramEsts =1×24.5530 - 3.0215
paramCIs =2×23.6455 2.2937 5.4605 3.7494

这个过程并不总是解决起点不好的问题,因此建议仔细选择起点。

供给梯度优化函数fmincon

默认情况下,大中型企业使用函数fminsearch为自定义分布寻找对数似然最大化的参数值。fminsearch使用无导数的优化算法,这是解决这类问题的一个很好的选择。然而,对于某些问题,选择一个使用对数似然函数的导数的优化算法可以决定是否收敛到最大似然估计,特别是当起点远离最终答案时。提供导数也可以加快收敛速度。

您可以指定OptimFun中的名称-值参数大中型企业作为fmincon要使用fmincon函数(需要优化工具箱)。的fmincon函数包括可以使用导数信息的优化算法。利用算法的优势fmincon,使用对数似然函数指定一个自定义分布,该函数不仅返回对数似然,还返回其梯度。对数似然函数的梯度是它对参数的偏导数的向量。

这种策略需要编写额外的代码来计算对数似然性及其梯度。定义一个名为helper_evnegloglike在一个单独的文件中。

函数[nll,ngrad] = helper_evnegloglike(params,x,cens,freq)极值的负对数可能性%分布。此函数只支持示例“当避免数值问题金宝app”%拟合自定义分布(customdist2demo.mlx),并可能在%未来版本。如果元素个数(params) ~ = 2错误消息(“统计数据:probdists: WrongParameterLength”2));结束Mu = params(1);Sigma = params(2);Nunc = sum(1-cens);Z = (x -) ./;Expz = exp(z);NLL = sum(expz) - sum(z(~cens)) + nunc.*log(sigma);如果Nargout > 1 ngrad = [-sum(expz).]/∑+ nunc./∑,...总和(z。* expz)。/sigma + sum(z(~cens))。/sigma + nunc./sigma];结束

这个函数helper_evnegloglike返回对数似然值和梯度值的负值,因为大中型企业最小化负对数似然。

若要使用基于梯度的优化算法计算最大似然估计,请指定nloglfOptimFun,选项名称-值参数。nloglf指定计算负对数似然的自定义函数,OptimFun指定fmincon作为优化函数,和选项指定fmincon使用自定义函数的第二个输出用于渐变。

Start = [1 1];[paramsts, paramci] = mle(x,“审查”c“nloglf”@helper_evnegloglike,...“开始”开始,下界的(负无穷,0),...“OptimFun”“fmincon”“选项”statset (“GradObj”“上”))
paramEsts =1×24.5530 - 3.0215
paramCIs =2×23.6455 2.2937 5.4605 3.7493

另请参阅

|

相关的话题