【问题标题】:mle failed to estimate the parameters with the error code 7mle 估计参数失败,错误代码 7
【发布时间】:2019-03-14 06:45:50
【问题描述】:

我正在尝试估计 Weibull-Gamma 分布参数,但遇到以下错误:

"函数mle估计参数失败,报错 代码 7"

我该怎么办?

Weibull-Gamma 分布

密度函数

dWeibullGamma <- function(x, alpha, beta, lambda) 
{
  ((alpha*beta)/(lambda))*(x^(alpha-1))*(1+(1/lambda)*x^(alpha))^(-(beta+1))
}

累积分布函数

   pWeibullGamma <- function(x, alpha, beta, lambda) 
{
  1-(1+(1/lambda)*x^(alpha))^(-(beta))
}

危害功能

hWeibullGamma <- function(x, alpha, beta, lambda) 
{
((alpha*beta)/(lambda))*(x^(alpha-1))*(1+(1/lambda)*x^(alpha))^(-(beta+1))/(1+(1/lambda)*x^(alpha))^(-(beta)) 
}

生存函数

sWeibullGamma <- function(x,alpha,beta,lambda)
{
  (1+(1/lambda)*x^(alpha))^(-(beta))
}

估计

paramWG = fitdist(data = dadosp, distr = 'WeibullGamma', start = c(alpha=1.5,beta=1,lambda=1.5), lower= c(0, 0))
summary(paramWG) 

Sample: 

dadosp = c(240.3,71.9,271.3, 186.3,241,253,287.4,138.3,206.9,176,270.4,73.3,118.9,203.1,139.7,31,269.6,140.2,205.1,133.2,107,354.6,277,27.6,186,260.9,350.4,242.6,292.5, 112.3,242.8,310.7,309.9,53.1,326.5,145.7,271.5, 117.5,264.7,243.9,182,136.7,103.8,188.3,236,419.8,338.6,357.7)

【问题讨论】:

  • 我无法重现该错误,您能否提供一个您遇到错误的示例?另外,你能确认你使用的是fitdistrplus包中的函数fitdist吗?
  • 非常感谢您的回复。可以,可以,我发给你!!是的,我正在使用 fitdistrplus 包中的 fitdist。我的数据库包含巴西巴拉那州马林加市的每月降雨量。我只是把一月份的所有观察结果发给你。 (240.3 71.9 271.3 186.3 241 253 287.4 138.3 206.9 176 270.4 73.3 118.9 203.1 139.7 31 269.6 140.2 205.1 133.2 107 354.6 277 27.6 186 260.9 350.4 242.6 292.5 112.3 242.8 310.7 309.9 53.1 326.5 145.7 271.5 117.5 264.7 243.9 182 136.7 103.8 188.3 236 419.8 338.6 357.7)
  • Breno,将你的数据读入你的会话,data &lt;- read.csv("some_data, etc),然后dput(data),这会将它全部打印到你的屏幕上,复制structure(...), and class = "data.frame")之间的所有内容,并将其粘贴到上面您的数据的工作示例。
  • 我的数据库有 500 多个观察值,它不适合。
  • 您可以像在评论中那样提供数据的子集。只需编辑您的帖子,以便我们更容易重现您的问题并找到解决方案。例如,在示例开头添加 library(fitdistrplus) dadosp &lt;- c(240.3, 71.9, 271.3, ...) 之类的内容。另见the guidelines to provide a reproducible example

标签: r statistics distribution weibull fitdistrplus


【解决方案1】:

对于您的样本,算法在估计 ML 时不会收敛。将 Weibull-Gamma 分布拟合到该数据将需要极高的 lambda 值。您可以通过估算 log10(lambda) 而不是 lambda 来解决此问题。

您可以在 4 个函数中添加lambda &lt;- 10^lambda,例如

dWeibullGamma <- function(x, alpha, beta, lambda) 
{
  lambda <- 10^lambda
  ((alpha*beta)/(lambda))*(x^(alpha-1))*(1+(1/lambda)*x^(alpha))^(-(beta+1))
}

那么,算法似乎收敛了:

library(fitdistrplus)
paramWG = fitdist(data = data, distr = 'WeibullGamma',
                  start = list(alpha=1, beta=1, lambda=1), lower = c(0, 0, 0))
summary(paramWG)$estimate

输出:

     alpha       beta     lambda 
  2.432939 799.631852   8.680802 

我们看到 lambda 的估计值为10^8.68,因此不取对数时会出现收敛问题。

你也可以看看合身如下:

newx <- 0:500
pars <- summary(paramWG)$estimate
pred <- dWeibullGamma(newx, pars["alpha"], pars["beta"], pars["lambda"])

hist(data, freq = FALSE)
lines(newx, pred, lwd = 2)

注意:也许拟合另一个分布会更有意义?

【讨论】:

  • Alexandre,你能帮我解决这个问题吗? stackoverflow.com/questions/52731375/… 有人帮我解决了密度函数(见问题答案),但现在我的错误代码为 100。我该怎么办?
  • 没关系!我如何开始自己的帮助?关于新问题,我尝试使用您的提示,但没有成功:(
  • 我明白了,我已经验证了3次功能,我不知道错误原因。我将发布您参与的文章的链接:sciencedirect.com/science/article/pii/S0951832012002396
  • 好的,我检查了功能,它们是正确的。由于参数值异常,问题实际上是相同的。另一种肮脏的解决方案是例如以类似的方式在每个函数的开头添加alpha &lt;- alpha/1e5beta &lt;- beta/1e5等。然后我设法估计了你的参数。否则,您将不得不自己实现一种优化算法或使用另一种优化算法。在这些情况下,您还可以考虑转换原始数据。
  • 是的,我使用了paramYuan = fitdist(data = dadosp, distr = 'nmw', start = list(alpha = 0.05, beta = 1, gama = 1.25, theta = 1, lambda = 1), lower = c(0,0,0,0,0))。为了确定起见,我将每个函数中的所有五个参数都除以1e5
猜你喜欢
  • 2022-01-02
  • 2018-12-01
  • 2019-03-14
  • 1970-01-01
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-24
相关资源
最近更新 更多