Hello again
I would like to fit a set of values to a Weibull distribution but the fitting is still not implemented in the Distributions.jl package for this type of Distribution Distribution Fitting · Distributions.jl.
Any suggestions?
Hello again
I would like to fit a set of values to a Weibull distribution but the fitting is still not implemented in the Distributions.jl package for this type of Distribution Distribution Fitting · Distributions.jl.
Any suggestions?
Here’s what I hacked together when I needed it a couple weeks ago. Feel free to use it under CC0:
using Distributions, Roots
function implicit_k_estimator(x, k::Number)
xᵏ = x.^k
lnx = log.(x)
sum(xᵏ .* lnx) / sum(xᵏ) - inv(k) - sum(lnx) / length(x)
end#function
explicit_λ_estimator(k::Number, x) = (sum(x.^k) / length(x))^(1/k)
function Distributions.fit_mle(::Type{Weibull}, x::AbstractArray)
f = k -> implicit_k_estimator(x, k)
k = find_zero(f, oneunit(eltype(x)), Order2())
λ = explicit_λ_estimator(k, x)
Weibull(k, λ)
end#function
No guarantees about correctness of course; I followed the section on
estimators from the Weibull Wikipedia article, and it worked for my
purposes. After defining the above functions, the fit
function
should work for Weibull
distribution.
Thanks, I´ll give it a try.