# Multinomial accepts wrong parameters

**URL:** <https://discourse.julialang.org/t/multinomial-accepts-wrong-parameters/30917>\
**Category:** Statistics\
**Created:** [November 10, 2019, 2:13pm UTC](https://discourse.julialang.org/t/multinomial-accepts-wrong-parameters/30917 "2019-11-10T14:13:52Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![sylvaticus](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sylvaticus/32/203883_2.png) [@sylvaticus](https://discourse.julialang.org/u/sylvaticus)\
**Post date:** [November 10, 2019, 2:13pm UTC](https://discourse.julialang.org/t/multinomial-accepts-wrong-parameters/30917/1 "2019-11-10T14:13:52Z")

</div>

`Distributions.Multinomial` seems to accept a vector of probabilities that doesn’t sum to one, even if in the [code reported in the documentation](https://github.com/JuliaStats/Distributions.jl/blob/423c3fb49cd0c9cec936714e9a737b4f0ac8e014/src/multivariate/multinomial.jl#L1-L21) it should have `ckeck_args` true by default. Why is that ?

```julia
using Distributions #0.21.6

julia> p_v = [0.1,0.4,0.3,0.8]
4-element Array{Float64,1}:
 0.1
 0.4
 0.3
 0.8
julia> a = Multinomial(10000, p_v)
Multinomial{Float64,Array{Float64,1}}(n=10000, p=[0.1, 0.4, 0.3, 0.8])
julia> b = rand(a)
4-element Array{Int64,1}:
 1010
 3980
 2977
 2033
julia> c = sum(b,dims=2) ./ 10000
4-element Array{Float64,1}:
 0.101 
 0.398 
 0.2977
 0.2033
julia> sum(c)
1.0
julia> isprobvec([0.1,0.4,0.3,0.8])
false

```

---

<div class="post-metadata">

**Author:** ![jkbest2](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jkbest2/32/7350_2.png) [@jkbest2](https://discourse.julialang.org/u/jkbest2)\
**Post date:** [November 10, 2019, 6:55pm UTC](https://discourse.julialang.org/t/multinomial-accepts-wrong-parameters/30917/2 "2019-11-10T18:55:06Z")

</div>

Looks like it changed in the the latest release (v0.21.6), at [this commit](https://github.com/JuliaStats/Distributions.jl/commit/f0cf26385ae47ab411a6e99d34cf49f2c651e440#diff-d78ea20d16c6afd13854cff5ac472fab). I’m not sure why the default for `check_args` isn’t being used here, but it does throw the expected error for `check_args = true`:

```julia
julia> using Distributions

julia> p_v = [0.1,0.4,0.3,0.8]
4-element Array{Float64,1}:
 0.1
 0.4
 0.3
 0.8

julia> isprobvec(p_v)
false

julia> Multinomial(10, p_v)
Multinomial{Float64,Array{Float64,1}}(n=10, p=[0.1, 0.4, 0.3, 0.8])

julia> Multinomial(10, p_v; check_args = true)
ERROR: ArgumentError: p = [0.1, 0.4, 0.3, 0.8] is not a probability vector.
Stacktrace:
 [1] #Multinomial#114(::Bool, ::Type{Multinomial}, ::Int64, ::Array{Float64,1}) at /home/jkbest/.julia/packages/Distributions/ehx56/src/multivariate/multinomial.jl:32
 [2] (::getfield(Core, Symbol("#kw#Type")))(::NamedTuple{(:check_args,),Tuple{Bool}}, ::Type{Multinomial}, ::Int64, ::Array{Float64,1}) at ./none:0
 [3] top-level scope at REPL[25]:1

```

Probably worth filing an issue.

---

<div class="post-metadata">

**Author:** ![nalimilan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nalimilan/32/147_2.png) [@nalimilan](https://discourse.julialang.org/u/nalimilan)\
**Post date:** [November 10, 2019, 7:12pm UTC](https://discourse.julialang.org/t/multinomial-accepts-wrong-parameters/30917/3 "2019-11-10T19:12:28Z")

</div>

Cc: @mbesancon

---

<div class="post-metadata">

**Author:** ![mbesancon](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mbesancon/32/6528_2.png) [@mbesancon](https://discourse.julialang.org/u/mbesancon)\
**Post date:** [November 10, 2019, 8:00pm UTC](https://discourse.julialang.org/t/multinomial-accepts-wrong-parameters/30917/4 "2019-11-10T20:00:35Z")

</div>

Thanks for reporting this, this is due to the default constructors in parameterized structures, it has already bitten me off in Distributions. I’m running the test and pushing a patch now.  
[https://github.com/JuliaStats/Distributions.jl/pull/1012](https://github.com/JuliaStats/Distributions.jl/pull/1012)

**EDIT** the patch is merged, waiting for the new release:  
[https://github.com/JuliaRegistries/General/pull/5265](https://github.com/JuliaRegistries/General/pull/5265)
