Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Warning for BetaBinomial model #1701

Closed
ChristianMichelsen opened this issue Sep 6, 2021 · 5 comments
Closed

Warning for BetaBinomial model #1701

ChristianMichelsen opened this issue Sep 6, 2021 · 5 comments

Comments

@ChristianMichelsen
Copy link

I use a BetaBinomial model in some research and sometimes run into a problem where I get a warning related to the BetaBinomial model. I have managed to come up a reproducible example.

I define the data and model and sample it using NUTS and it runs fine:

using Turing
using Turing: Variational

N = [7642688, 7609177, 8992872, 8679915, 8877887, 8669401]
k = [2042914, 745828, 277760, 205701, 97427, 152673]
z = collect(1:length(N))

@model function betabin_model(z, k, N)
    q ~ Beta(2, 3)
    A ~ Beta(2, 3)
    c ~ Beta(1, 9)

    ϕ ~ Exponential(1000)
    θ = ϕ + 2

    for i in eachindex(z)
        μ = clamp(A * (1 - q)^(z[i] - 1) + c, 0, 1)
        α = μ * θ
        β = (1 - μ) * θ
        k[i] ~ BetaBinomial(N[i], α, β)
    end
end

model = betabin_model(z, k, N);
chains = sample(model, NUTS(), 1000);

However, if I try to use vi, it fails:

advi = ADVI(10, 1000)
q = vi(model, advi);
ERROR: LoadError: ArgumentError: BetaBinomial: the condition n >= zero(n) && (α >= zero(α) && β >= zero(β)) is not satisfied.

I can also replicate the error when I try to simply optimize the MAP. This works fine:

using Optim
map_estimate = optimize(model, MAP())

but this fails:

map_estimate = optimize(model, MAP(), [0.1, 0.1, 0.01, 100])
ERROR: LoadError: ArgumentError: BetaBinomial: the condition n >= zero(n) && (α >= zero(α) && β >= zero(β)) is not satisfied.

I asked for help at the Julia Discourse earlier in the summer without any luck and was recommended to try asking for help here.

Thanks!

Cheers,
Christian

@devmotion
Copy link
Member

According to the debugging output that you posted in https://discourse.julialang.org/t/help-with-turing-jl-betabinomial-argumenterror-betabinomial-the-condition-n-zero-n-zero-zero-is-not-satisfied/64929/6, it seems the error results from non-finite values (Inf and NaN) which do not satisfy the conditions of the BetaBinomial distribution.

Since you use ForwardDiff, can you check if the NaN-safe setting fixes it? E.g., you can use the NaN-safe branch (JuliaDiff/ForwardDiff.jl#451) by installing ForwardDiff with ] add ForwardDiff#nansafe in the Julia REPL.

@ChristianMichelsen
Copy link
Author

@devmotion: Thanks for the quick answer!
Now, using the NaN-safe branch of ForwardDiff works with vi:

advi = ADVI(10, 1000)
q = vi(model, advi);

but still not with:

map_estimate = optimize(model, MAP(), [0.1, 0.1, 0.01, 100])

I have added a small debug statement @info i, k[i], N[i], α, β, A, q, c, μ and get:

[ Info: (6, 152673, 8669401, Dual{ForwardDiff.Tag{Turing.Core.var"#f#1"{DynamicPPL.TypedVarInfo{NamedTuple{(:q, :A, :c, :ϕ), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:q, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:q, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:A, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:A, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:c, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:c, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}}, Float64}, DynamicPPL.Model{typeof(betabin_model), (:z, :k, :N, :verbose), (:verbose,), (), Tuple{Vector{Int64}, Vector{Int64}, Vector{Int64}, Bool}, Tuple{Bool}, DynamicPPL.DefaultContext}, DynamicPPL.SampleFromPrior, Turing.OptimizationContext{DynamicPPL.DefaultContext}}, Float64}}(7.162863556540884,-0.3614415363041935,0.07248121590660006,6.945280851663119,7.128041630854146), Dual{ForwardDiff.Tag{Turing.Core.var"#f#1"{DynamicPPL.TypedVarInfo{NamedTuple{(:q, :A, :c, :ϕ), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:q, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:q, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:A, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:A, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:c, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:c, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}}, Float64}, DynamicPPL.Model{typeof(betabin_model), (:z, :k, :N, :verbose), (:verbose,), (), Tuple{Vector{Int64}, Vector{Int64}, Vector{Int64}, Bool}, Tuple{Bool}, DynamicPPL.DefaultContext}, DynamicPPL.SampleFromPrior, Turing.OptimizationContext{DynamicPPL.DefaultContext}}, Float64}}(404.2367598289501,0.3614415363041935,-0.07248121590660006,-6.945280851663119,402.2715817546368), Dual{ForwardDiff.Tag{Turing.Core.var"#f#1"{DynamicPPL.TypedVarInfo{NamedTuple{(:q, :A, :c, :ϕ), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:q, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:q, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:A, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:A, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:c, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:c, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}}, Float64}, DynamicPPL.Model{typeof(betabin_model), (:z, :k, :N, :verbose), (:verbose,), (), Tuple{Vector{Int64}, Vector{Int64}, Vector{Int64}, Bool}, Tuple{Bool}, DynamicPPL.DefaultContext}, DynamicPPL.SampleFromPrior, Turing.OptimizationContext{DynamicPPL.DefaultContext}}, Float64}}(0.24653857831298007,-0.0,0.18575730771639468,-0.0,-0.0), Dual{ForwardDiff.Tag{Turing.Core.var"#f#1"{DynamicPPL.TypedVarInfo{NamedTuple{(:q, :A, :c, :ϕ), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:q, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:q, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:A, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:A, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:c, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:c, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}}, Float64}, DynamicPPL.Model{typeof(betabin_model), (:z, :k, :N, :verbose), (:verbose,), (), Tuple{Vector{Int64}, Vector{Int64}, Vector{Int64}, Bool}, Tuple{Bool}, DynamicPPL.DefaultContext}, DynamicPPL.SampleFromPrior, Turing.OptimizationContext{DynamicPPL.DefaultContext}}, Float64}}(0.7514560852605676,0.1867698371854301,-0.0,-0.0,-0.0), Dual{ForwardDiff.Tag{Turing.Core.var"#f#1"{DynamicPPL.TypedVarInfo{NamedTuple{(:q, :A, :c, :ϕ), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:q, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:q, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:A, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:A, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:c, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:c, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}}, Float64}, DynamicPPL.Model{typeof(betabin_model), (:z, :k, :N, :verbose), (:verbose,), (), Tuple{Vector{Int64}, Vector{Int64}, Vector{Int64}, Bool}, Tuple{Bool}, DynamicPPL.DefaultContext}, DynamicPPL.SampleFromPrior, Turing.OptimizationContext{DynamicPPL.DefaultContext}}, Float64}}(0.017177132665658172,-0.0,-0.0,0.016882078779044553,-0.0), Dual{ForwardDiff.Tag{Turing.Core.var"#f#1"{DynamicPPL.TypedVarInfo{NamedTuple{(:q, :A, :c, :ϕ), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:q, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:q, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:A, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:A, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:c, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:c, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}}, Float64}, DynamicPPL.Model{typeof(betabin_model), (:z, :k, :N, :verbose), (:verbose,), (), Tuple{Vector{Int64}, Vector{Int64}, Vector{Int64}, Bool}, Tuple{Bool}, DynamicPPL.DefaultContext}, DynamicPPL.SampleFromPrior, Turing.OptimizationContext{DynamicPPL.DefaultContext}}, Float64}}(0.017410962843369245,-0.000878565549792724,0.0001761820181315127,0.016882078779044553,0.0))
[ Info: (1, 2042914, 7642688, Dual{ForwardDiff.Tag{Turing.Core.var"#f#1"{DynamicPPL.TypedVarInfo{NamedTuple{(:q, :A, :c, :ϕ), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:q, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:q, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:A, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:A, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:c, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:c, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}}, Float64}, DynamicPPL.Model{typeof(betabin_model), (:z, :k, :N, :verbose), (:verbose,), (), Tuple{Vector{Int64}, Vector{Int64}, Vector{Int64}, Bool}, Tuple{Bool}, DynamicPPL.DefaultContext}, DynamicPPL.SampleFromPrior, Turing.OptimizationContext{DynamicPPL.DefaultContext}}, Float64}}(NaN,NaN,NaN,NaN,NaN), Dual{ForwardDiff.Tag{Turing.Core.var"#f#1"{DynamicPPL.TypedVarInfo{NamedTuple{(:q, :A, :c, :ϕ), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:q, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:q, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:A, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:A, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:c, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:c, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}}, Float64}, DynamicPPL.Model{typeof(betabin_model), (:z, :k, :N, :verbose), (:verbose,), (), Tuple{Vector{Int64}, Vector{Int64}, Vector{Int64}, Bool}, Tuple{Bool}, DynamicPPL.DefaultContext}, DynamicPPL.SampleFromPrior, Turing.OptimizationContext{DynamicPPL.DefaultContext}}, Float64}}(Inf,NaN,NaN,NaN,NaN), Dual{ForwardDiff.Tag{Turing.Core.var"#f#1"{DynamicPPL.TypedVarInfo{NamedTuple{(:q, :A, :c, :ϕ), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:q, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:q, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:A, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:A, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:c, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:c, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}}, Float64}, DynamicPPL.Model{typeof(betabin_model), (:z, :k, :N, :verbose), (:verbose,), (), Tuple{Vector{Int64}, Vector{Int64}, Vector{Int64}, Bool}, Tuple{Bool}, DynamicPPL.DefaultContext}, DynamicPPL.SampleFromPrior, Turing.OptimizationContext{DynamicPPL.DefaultContext}}, Float64}}(0.0,NaN,NaN,NaN,NaN), Dual{ForwardDiff.Tag{Turing.Core.var"#f#1"{DynamicPPL.TypedVarInfo{NamedTuple{(:q, :A, :c, :ϕ), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:q, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:q, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:A, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:A, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:c, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:c, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}}, Float64}, DynamicPPL.Model{typeof(betabin_model), (:z, :k, :N, :verbose), (:verbose,), (), Tuple{Vector{Int64}, Vector{Int64}, Vector{Int64}, Bool}, Tuple{Bool}, DynamicPPL.DefaultContext}, DynamicPPL.SampleFromPrior, Turing.OptimizationContext{DynamicPPL.DefaultContext}}, Float64}}(0.0,NaN,NaN,NaN,NaN), Dual{ForwardDiff.Tag{Turing.Core.var"#f#1"{DynamicPPL.TypedVarInfo{NamedTuple{(:q, :A, :c, :ϕ), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:q, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:q, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:A, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:A, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:c, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:c, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}}, Float64}, DynamicPPL.Model{typeof(betabin_model), (:z, :k, :N, :verbose), (:verbose,), (), Tuple{Vector{Int64}, Vector{Int64}, Vector{Int64}, Bool}, Tuple{Bool}, DynamicPPL.DefaultContext}, DynamicPPL.SampleFromPrior, Turing.OptimizationContext{DynamicPPL.DefaultContext}}, Float64}}(0.0,NaN,NaN,NaN,NaN), Dual{ForwardDiff.Tag{Turing.Core.var"#f#1"{DynamicPPL.TypedVarInfo{NamedTuple{(:q, :A, :c, :ϕ), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:q, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:q, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:A, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:A, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:c, Tuple{}}, Int64}, Vector{Beta{Float64}}, Vector{AbstractPPL.VarName{:c, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}}, Float64}, DynamicPPL.Model{typeof(betabin_model), (:z, :k, :N, :verbose), (:verbose,), (), Tuple{Vector{Int64}, Vector{Int64}, Vector{Int64}, Bool}, Tuple{Bool}, DynamicPPL.DefaultContext}, DynamicPPL.SampleFromPrior, Turing.OptimizationContext{DynamicPPL.DefaultContext}}, Float64}}(0.0,NaN,NaN,NaN,NaN))
ERROR: LoadError: ArgumentError: BetaBinomial: the condition n >= zero(n) &&>= zero(α) && β >= zero(β)) is not satisfied.
Stacktrace:
  [1] macro expansion
    @ ~/.julia/packages/Distributions/t65ji/src/utils.jl:6 [inlined]
  [2] #BetaBinomial#42
    @ ~/.julia/packages/Distributions/t65ji/src/univariate/discrete/betabinomial.jl:30 [inlined]
  [3] BetaBinomial
    @ ~/.julia/packages/Distributions/t65ji/src/univariate/discrete/betabinomial.jl:30 [inlined]
[ ... ]
[ ... ]
[ ... ]
[40] top-level scope
    @ ~/work/julia_turing_error/turing_error.jl:43
in expression starting at /Users/christianmichelsen/work/julia_turing_error/turing_error.jl:43

@ChristianMichelsen
Copy link
Author

Also, now I get the following warning whenever I activate the environment, but I guess this is just a ForwardDiff warning that goes away if I use the newest version of ForwardDiff (as I used to)?

Warning: Error requiring `StaticArrays` from `ArrayInterface`
│   exception =
│    too many parameters for type
│    Stacktrace:
│      [1] top-level scope
│        @ ~/.julia/packages/ArrayInterface/kCLrX/src/ArrayInterface.jl:710
│      [2] eval
│        @ ./boot.jl:360 [inlined]
│      [3] eval
│        @ ~/.julia/packages/ArrayInterface/kCLrX/src/ArrayInterface.jl:1 [inlined]
│      [4] (::ArrayInterface.var"#60#87")()
│        @ ArrayInterface ~/.julia/packages/Requires/7Ncym/src/require.jl:99
│      [5] err(f::Any, listener::Module, modname::String)
│        @ Requires ~/.julia/packages/Requires/7Ncym/src/require.jl:47
│      [6] (::ArrayInterface.var"#59#86")()
│        @ ArrayInterface ~/.julia/packages/Requires/7Ncym/src/require.jl:98
│      [7] withpath(f::Any, path::String)
│        @ Requires ~/.julia/packages/Requires/7Ncym/src/require.jl:37
│      [8] (::ArrayInterface.var"#58#85")()
│        @ ArrayInterface ~/.julia/packages/Requires/7Ncym/src/require.jl:97
│      [9] #invokelatest#2
│        @ ./essentials.jl:708 [inlined]
│     [10] invokelatest
│        @ ./essentials.jl:706 [inlined]
│     [11] foreach(f::typeof(Base.invokelatest), itr::Vector{Function})
│        @ Base ./abstractarray.jl:2141
│     [12] loadpkg(pkg::Base.PkgId)
│        @ Requires ~/.julia/packages/Requires/7Ncym/src/require.jl:27
│     [13] #invokelatest#2
│        @ ./essentials.jl:708 [inlined]
│     [14] invokelatest
│        @ ./essentials.jl:706 [inlined]
│     [15] _tryrequire_from_serialized(modkey::Base.PkgId, build_id::UInt64, modpath::String)
│        @ Base ./loading.jl:715
│     [16] _require_search_from_serialized(pkg::Base.PkgId, sourcepath::String)
│        @ Base ./loading.jl:771
│     [17] _tryrequire_from_serialized(modkey::Base.PkgId, build_id::UInt64, modpath::String)
│        @ Base ./loading.jl:711
│     [18] _require_search_from_serialized(pkg::Base.PkgId, sourcepath::String)
│        @ Base ./loading.jl:771
│     [19] _tryrequire_from_serialized(modkey::Base.PkgId, build_id::UInt64, modpath::String)
│        @ Base ./loading.jl:711
│     [20] _require_search_from_serialized(pkg::Base.PkgId, sourcepath::String)
│        @ Base ./loading.jl:771
│     [21] _require(pkg::Base.PkgId)
│        @ Base ./loading.jl:1020
│     [22] require(uuidkey::Base.PkgId)
│        @ Base ./loading.jl:936
│     [23] require(into::Module, mod::Symbol)
│        @ Base ./loading.jl:923
│     [24] eval
│        @ ./boot.jl:360 [inlined]
│     [25] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)
│        @ Base ./loading.jl:1116
│     [26] include_string(m::Module, txt::String, fname::String)
│        @ Base ./loading.jl:1126
│     [27] invokelatest(::Any, ::Any, ::Vararg{Any, N} where N; kwargs::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
│        @ Base ./essentials.jl:708
│     [28] invokelatest(::Any, ::Any, ::Vararg{Any, N} where N)
│        @ Base ./essentials.jl:706
│     [29] inlineeval(m::Module, code::String, code_line::Int64, code_column::Int64, file::String; softscope::Bool)
│        @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.3.33/scripts/packages/VSCodeServer/src/eval.jl:201
│     [30] (::VSCodeServer.var"#58#62"{Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams})()
│        @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.3.33/scripts/packages/VSCodeServer/src/eval.jl:153
│     [31] withpath(f::VSCodeServer.var"#58#62"{Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams}, path::String)
│        @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.3.33/scripts/packages/VSCodeServer/src/repl.jl:185
│     [32] (::VSCodeServer.var"#57#61"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams})()
│        @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.3.33/scripts/packages/VSCodeServer/src/eval.jl:151
│     [33] hideprompt(f::VSCodeServer.var"#57#61"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams})
│        @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.3.33/scripts/packages/VSCodeServer/src/repl.jl:36
│     [34] (::VSCodeServer.var"#56#60"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams})()
│        @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.3.33/scripts/packages/VSCodeServer/src/eval.jl:122
│     [35] with_logstate(f::Function, logstate::Any)
│        @ Base.CoreLogging ./logging.jl:491
│     [36] with_logger
│        @ ./logging.jl:603 [inlined]
│     [37] (::VSCodeServer.var"#55#59"{VSCodeServer.ReplRunCodeRequestParams})()
│        @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.3.33/scripts/packages/VSCodeServer/src/eval.jl:191
│     [38] #invokelatest#2
│        @ ./essentials.jl:708 [inlined]
│     [39] invokelatest(::Any)
│        @ Base ./essentials.jl:706
│     [40] macro expansion
│        @ ~/.vscode/extensions/julialang.language-julia-1.3.33/scripts/packages/VSCodeServer/src/eval.jl:34 [inlined]
│     [41] (::VSCodeServer.var"#53#54")()
│        @ VSCodeServer ./task.jl:411
└ @ Requires ~/.julia/packages/Requires/7Ncym/src/require.jl:49

@devmotion
Copy link
Member

Regarding the last comment: yeah, there might be an issue with the branch and it might be a bit outdated. Hopefully, this (setting nansafe) will become easier soon without any custom installations, there's a PR to ForwardDiff that uses the Preferences stdlib for this configuration.

@ChristianMichelsen
Copy link
Author

Okay, that sounds good!

Does map_estimate = optimize(model, MAP(), [0.1, 0.1, 0.01, 100]) sample from the prior or is the issue that the parameters need to be constrained in some way?

Also, how to avoid being forced to use the NaN-safe setting for ForwardDiff? Should I clamp more of my parameters in the model?

@yebai yebai closed this as completed Dec 16, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants