首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mle未能用错误代码7估计参数。

mle未能用错误代码7估计参数。
EN

Stack Overflow用户
提问于 2018-10-09 13:08:32
回答 1查看 1.6K关注 0票数 3

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

函数mle无法估计参数,错误代码为7

我做什么好?

威布尔-伽玛分布

密度函数

代码语言:javascript
复制
dWeibullGamma <- function(x, alpha, beta, lambda) 
{
  ((alpha*beta)/(lambda))*(x^(alpha-1))*(1+(1/lambda)*x^(alpha))^(-(beta+1))
}

累积分布函数

代码语言:javascript
复制
   pWeibullGamma <- function(x, alpha, beta, lambda) 
{
  1-(1+(1/lambda)*x^(alpha))^(-(beta))
}

危害函数

代码语言:javascript
复制
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)) 
}

生存函数

代码语言:javascript
复制
sWeibullGamma <- function(x,alpha,beta,lambda)
{
  (1+(1/lambda)*x^(alpha))^(-(beta))
}

估计值

代码语言:javascript
复制
paramWG = fitdist(data = dadosp, distr = 'WeibullGamma', start = c(alpha=1.5,beta=1,lambda=1.5), lower= c(0, 0))
summary(paramWG) 

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-10 09:32:49

对于您的示例,该算法在估计ML时不收敛。将威布尔-伽玛分布拟合到这些数据需要极高的lambda值。您可以通过估计log10(lambda)而不是lambda来解决这个问题。

您可以在您的4个函数中添加lambda <- 10^lambda

代码语言:javascript
复制
dWeibullGamma <- function(x, alpha, beta, lambda) 
{
  lambda <- 10^lambda
  ((alpha*beta)/(lambda))*(x^(alpha-1))*(1+(1/lambda)*x^(alpha))^(-(beta+1))
}

然后,该算法似乎收敛:

代码语言:javascript
复制
library(fitdistrplus)
paramWG = fitdist(data = data, distr = 'WeibullGamma',
                  start = list(alpha=1, beta=1, lambda=1), lower = c(0, 0, 0))
summary(paramWG)$estimate

输出:

代码语言:javascript
复制
     alpha       beta     lambda 
  2.432939 799.631852   8.680802 

我们发现lambda的估计是10^8.68的,因此在不取日志的情况下出现了收敛问题。

您还可以从以下几个方面查看合适的内容:

代码语言:javascript
复制
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)

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52721871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档