比较 Weibull 分布的 MLE 估计方法

机器算法验证 最大似然 配件 威布尔分布
2022-04-07 20:02:21

我需要将 Weibull 分布参数化为一些数据。因此,我使用 R 中 fitdistrplus 包中的最大似然估计 (MLE)。但是,我想了解包中做了什么,所以除了使用包之外,我还尝试了两种手动解决方案来检查由健身区。

总结一下,我的方法是:

(i) 使用 fitdist 函数和方法“MLE”

(ii) 求解似然函数的偏导数

(iii) 使用 optim 函数最小化负似然

首先,模拟一些数据:

n <- 1e4    
set.seed(1) 
dat <- rweibull(n, shape=0.8, scale=1.2)

方法 1:应用 fitdistrplus 包:

library(fitdistrplus)
A1 <- fitdist(dat, "weibull", method="mle")$estimate
A1
    shape     scale 
0.7914886 1.2032989 

方法二:

具有威布尔密度

,

偏导数是:

搜索上述偏导数的根:

weib1 <- function(c) { 1/c - sum(dat^c*log(dat))/sum(dat^c) + 1/n*sum(log(dat)) }
shape <- uniroot(weib1, c(0,10), tol=1e-12)$root  
scale <- (1/n*sum(dat^shape))^(1/shape)
A2    <- c(shape, scale)
A2
[1] 0.7914318 1.2033179

方法 3:搜索最小化负对数似然的参数:

fobj <- function(params){
  -sum(log(dweibull(dat, params[1], params[2])))
}
A3 <- optim(c(0.5, 1), fobj)$par
A3
[1] 0.7913756 1.2032748

比较这些方法,参数估计(A1,A2,A3)在小数点后第四位不同。考虑到 fitdist 文档,我预计 A1 和 A3 会产生相同的估计,因为两者都使用 optim。

因此我的问题是:

fitdist 使用的目标函数是什么?如何更改方法 3 以产生与 fitdist 完全相同的估计值?一般来说,什么是首选方法,我认为解决偏导数是最干净的方法?

1个回答

Weibull 参数估计通常使用梯度下降相关算法完成。据我所知,大多数包通过进行位置比例转换然后在生成的 Gumbel-log-likelihood 上运行该过程来实现这一点。

检查相关