Hi,
I would love to make a Maxwell Fit to my data in Julia, unfortunately I’m lost here… I’ve seen a fit in Python with scipy, but I’ve no idea how to use PyCall…
Best,
Hannes
Hi,
I would love to make a Maxwell Fit to my data in Julia, unfortunately I’m lost here… I’ve seen a fit in Python with scipy, but I’ve no idea how to use PyCall…
Best,
Hannes
a Maxwell distribution is a scaled Chi(3)
. Simplest thing you can do is moment-matching:
julia> d = LocationScale(0.0,1.4,Chi(3))
LocationScale{Float64,Chi{Float64}}(
μ: 0.0
σ: 1.4
ρ: Chi{Float64}(ν=3.0)
)
julia> data = rand(d,20);
julia> mean(data)/mean(Chi(3))
1.2660333885151915
Otherwise, you could do something like write the logpdf,
f(s) = sum(logpdf.(LocationScale(0.0,s,Chi(3)), data))
And then use something like Optim.jl to find the top
Hi, thanks for the answer! After thinking a bit I am going for a Lsq fit and type the function in by hand + a hist plot. I think that’s the easiest and best solution here.
Hi Romero, @cscherrer had some great suggestions for you. Following on his suggestions, you might want to take a look at the relevant section in Distribution.jl’s docs for distribution-fitting: Distribution Fitting · Distributions.jl.
This would be nice, but I don’t think it works for this case. His distribution is
Maxwell(s) = LocationScale(0.0, s, Chi(3))
LocationScale
is not supported by the API. And even if it were, there’s no way to freeze the location to 0.0.
Ah, good point. I missed that.
Just for completeness, so that the OP can see how straightforward it would be to use Optim to find the MLE here:
using Distributions, Optim
d = LocationScale(0.0,1.4,Chi(3));
data = rand(d, 5000);
function make_likelihood(data)
function likelihood(s)
-sum(logpdf.(LocationScale(0.0, s, Chi(3)), data))
end
end
optimize(make_likelihood(data), eps(), 100)