R:fdwm() 函数的意外行为(evmix 包)
R: unexpected behavior of the fdwm() function (evmix package)
我正在尝试使用 fdwm()
function from the evmix
包来拟合动态混合模型(Weibull 用于散装,Pareto 用于尾部):
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))
我遇到了一个奇怪的行为:函数首先 returns 一个错误...:[=21=]
Error in integrate(rx, wshape, wscale, cmu = cmu, ctau = ctau, sigmau = sigmau, : non-finite function value
...但继续运行,最后 returns 一些值:
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)
我使用的是evmix
的2.5版本。
此错误消息完全符合预期。当您 运行 此程序时,它会提供后续警告消息:
"numerical integration failed, ignore previous messages, optimisation will try again"
这意味着您可以简单地从 "integrate" 函数中忽略此错误。
为什么这是正常的?那么这个解释需要一些关于这个模型的背景知识。 DWM 包括重归一化常数,以确保适当的密度函数(使其集成为一个)。非归一化密度的积分没有封闭形式的解决方案。因此,数值积分用于近似此积分(使用 integrate 函数)。
在大多数情况下,集成函数对 DWM 效果很好,因为密度通常是平滑的。然而,当最大化可能性时,优化算法偶尔会尝试愚蠢的参数值集(使用 optim 函数),这可能导致密度出现奇怪的行为(例如不连续性),因此数值积分可能会失败。这会导致您收到原始错误消息。以下警告消息是为了传达您可以忽略来自集成功能的错误消息。
如果优化算法真的很难摆脱愚蠢的参数集 space,那么您会多次收到这些错误和警告消息。在这种情况下,您应该彻底检查结果拟合(在任何情况下您都应该始终这样做,例如使用 evmix.diag 函数。
我正在尝试使用 fdwm()
function from the evmix
包来拟合动态混合模型(Weibull 用于散装,Pareto 用于尾部):
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))
我遇到了一个奇怪的行为:函数首先 returns 一个错误...:[=21=]
Error in integrate(rx, wshape, wscale, cmu = cmu, ctau = ctau, sigmau = sigmau, : non-finite function value
...但继续运行,最后 returns 一些值:
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)
我使用的是evmix
的2.5版本。
此错误消息完全符合预期。当您 运行 此程序时,它会提供后续警告消息:
"numerical integration failed, ignore previous messages, optimisation will try again"
这意味着您可以简单地从 "integrate" 函数中忽略此错误。
为什么这是正常的?那么这个解释需要一些关于这个模型的背景知识。 DWM 包括重归一化常数,以确保适当的密度函数(使其集成为一个)。非归一化密度的积分没有封闭形式的解决方案。因此,数值积分用于近似此积分(使用 integrate 函数)。
在大多数情况下,集成函数对 DWM 效果很好,因为密度通常是平滑的。然而,当最大化可能性时,优化算法偶尔会尝试愚蠢的参数值集(使用 optim 函数),这可能导致密度出现奇怪的行为(例如不连续性),因此数值积分可能会失败。这会导致您收到原始错误消息。以下警告消息是为了传达您可以忽略来自集成功能的错误消息。
如果优化算法真的很难摆脱愚蠢的参数集 space,那么您会多次收到这些错误和警告消息。在这种情况下,您应该彻底检查结果拟合(在任何情况下您都应该始终这样做,例如使用 evmix.diag 函数。