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

2 Likes

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

3 Likes

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: https://juliastats.github.io/Distributions.jl/stable/fit/.

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.

1 Like

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)
```

2 Likes