0

我正在尝试使用包中的fdwm()函数来拟合动态混合模型(主体为 Weibull,尾部为 Pareto) evmix

library(repmis)
library(evmix)
data=source_data("https://www.dropbox.com/s/r7i0ctl1czy481d/test.csv?dl=0")[,1]
test=fdwm(data,c(0.9150062,75.4699181,quantile(data,0.98),11.21,87.41,0.05))

我遇到了一个奇怪的行为:函数首先返回一个错误......:

Error in integrate(rx, wshape, wscale, cmu = cmu, ctau = ctau, sigmau = sigmau, : non-finite function value

...但继续运行并最终返回一些值:

test$mle
[1] 1.212213e+00 5.877943e+01 5.160288e+02 8.364144e-04 1.206929e+02 8.952331e-02

更远,

xeval=seq(min(data),max(data)+sd(data),length=length(data))
test.distr=ddwm(xeval,test$mle[1],test$mle[2],test$mle[3],test$mle[4],test$mle[5],test$mle[6])
hist(data,probability=TRUE)
lines(xeval,test.distr,col="red")

给出:

在此处输入图像描述

因此,似乎估计的参数是有效的。 因此,我应该忽略fdwm()函数返回的错误吗?我可以使用估计的参数值吗?

关于我的 R 会话的一些信息:

R version 3.1.2 (2014-10-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)

我使用的是 2.5 版evmix

4

1 回答 1

3

此错误消息完全符合预期。当您运行此程序时,它会提供后续警告消息:

“数值积分失败,忽略以前的消息,优化将重试”

这意味着您可以简单地从“集成”功能中忽略此错误。

为什么这是正常的?那么这个解释需要一些关于这个模型的背景知识。DWM 包括一个重整化常数,以确保适当的密度函数(使其集成为一个)。未归一化密度的积分没有封闭形式的解。因此,数值积分用于近似该积分(使用积分函数)。

在大多数情况下,集成函数对 DWM 效果很好,因为密度通常是平滑的。然而,当最大化可能性时,优化算法偶尔会尝试愚蠢的参数值集(使用 optim 函数),这可能导致密度的奇怪行为(例如不连续性),因此数值积分可能会失败。这会导致您收到原始错误消息。给出以下警告消息以表明您可以忽略来自集成功能的错误消息。

如果优化算法真的很难摆脱愚蠢的参数集空间,那么您将多次收到这些错误和警告消息。在这种情况下,您应该彻底检查结果拟合(在任何情况下您都应该这样做,例如使用 evmix.diag 函数。

于 2015-05-28T10:41:59.647 回答