使用 R 中的矩法拟合 Weibull
Posted
技术标签:
【中文标题】使用 R 中的矩法拟合 Weibull【英文标题】:Fitting Weibull using method of moments in R 【发布时间】:2021-06-02 18:08:58 【问题描述】:我正在尝试使用矩量法将 Weibull 分布拟合到我在 RStudio 中的数据。 我不知道适合 Weibull 或 Pareto 等发行版所需的必要命令和包。具体来说,我试图估计形状参数 k 和 尺度λ。
我使用此代码生成我的数据:
a <- rweibull(100, 10, 1)
【问题讨论】:
为什么要使用矩量法?试试MASS::fitdistr(a, "weibull")
。
你用瞬间的方法来做这件事有点重要,兄弟
【参考方案1】:
这是一个用矩量法估计威布尔分布参数的函数。
weibull_mom <- function(x, interval)
mom <- function(shape, x, xbar)
s2 <- var(x, na.rm = TRUE)
lgamma(1 + 2/shape) - 2*lgamma(1 + 1/shape) - log(xbar^2 + s2) + 2*log(xbar)
xbar <- mean(x, na.rm = TRUE)
shape <- uniroot(mom, interval = interval, x = x, xbar = xbar)$root
scale <- xbar/gamma(1 + 1/shape)
list(shape = shape, scale = scale)
set.seed(2021) # Make the results reproducible
a <- rweibull(100, 10, 1)
weibull_mom(a, interval = c(1, 1e6))
#$shape
#[1] 9.006623
#
#$scale
#[1] 0.9818155
最大似然估计是
MASS::fitdistr(a, "weibull")
# shape scale
# 8.89326148 0.98265852
# (0.69944224) (0.01165359)
#Warning messages:
#1: In densfun(x, parm[1], parm[2], ...) : NaNs produced
#2: In densfun(x, parm[1], parm[2], ...) : NaNs produced
【讨论】:
规模估计看起来完全不对 @SeverinPappadeux 你说得对,scale
的计算存在错误,编辑后立即查看。以上是关于使用 R 中的矩法拟合 Weibull的主要内容,如果未能解决你的问题,请参考以下文章
尝试 MLE 拟合 Weibull 分布时 scipy.optimize.minimize 中的 RuntimeWarning