# Turing model fail due to extreme outliers sampled in Exponential distribution?

**URL:** <https://discourse.julialang.org/t/turing-model-fail-due-to-extreme-outliers-sampled-in-exponential-distribution/72174>\
**Category:** General Usage\
**Created:** [November 27, 2021, 5:56pm UTC](https://discourse.julialang.org/t/turing-model-fail-due-to-extreme-outliers-sampled-in-exponential-distribution/72174 "2021-11-27T17:56:47Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![amit1](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/amit1/32/25318_2.png) [@amit1](https://discourse.julialang.org/u/amit1)\
**Post date:** [November 27, 2021, 5:56pm UTC](https://discourse.julialang.org/t/turing-model-fail-due-to-extreme-outliers-sampled-in-exponential-distribution/72174/1 "2021-11-27T17:56:47Z")

</div>

I am modelling some textbook models (minimal example given below)

```julia
using Turing

# Data ===================
contact = [1, 1, 1, 2, 2, 2, 2, 1, 2, 1]
total_tools = [13 ,22 ,24 ,43 ,33 ,19 ,40 ,28 ,55 ,71]
population = [1100, 1500, 3600, 4791, 7400, 8000, 9200, 13000, 17500, 275000]
population = (population .- mean(population))./std(population) # normalize
population = population .+ abs(minimum(population)) .+ 0.1 # shift to positive values

# model =============================
@model function m12_2(tools, population, cid)
	ϕ ~ Exponential(1.0)
	g ~ Exponential(1.0)
	a = Vector{Real}(undef,2)
	b = Vector{Real}(undef,2)
	a .~ Normal(1.0, 1.0)
	b .~ Exponential(1.0)
	for i = 1 : length(cid)
		λ = (exp(a[cid[i]]) * population[i]^ b[cid[i]])/g
		tools[i] ~ NegativeBinomial(λ/(ϕ + 0.000001), 1.0 / (1.0 + ϕ))
	end
end
describe(sample(m12_2(total_tools, population, contact), NUTS(),1000))

```

Problem is that above model fails randomly 2 out 3 times with error message:

```julia
ArgumentError: NegativeBinomial: the condition r > zero(r) is not satisfied.

    macro expansion@utils.jl:6[inlined]
    #NegativeBinomial#46@negativebinomial.jl:42[inlined]
    NegativeBinomial@negativebinomial.jl:41[inlined]
    #1@Other: 10[inlined]
    (::Main.workspace#160.var"#1#2")(::DynamicPPL.Model{Main.workspace#160.var"#1#2", (:tools, :population, :cid), (), (), Tuple{Vector{Int64}, Vector{Float64}, Vector{Int64}}, Tuple{}}, ::DynamicPPL.ThreadSafeVarInfo{DynamicPPL.TypedVarInfo{NamedTuple{(:ϕ, :g, :a, :b), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{ForwardDiff.Dual{ForwardDiff.Tag{Turing.Core.var"#f#3"{DynamicPPL.TypedVarInfo{NamedTuple{(:ϕ, :g, :a, :b), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:g, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:g, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, ...
...
    Model@model.jl:91[inlined]
    Model@model.jl:104[inlined]
    f@ad.jl:111[inlined]
    vector_mode_dual_eval@apiutils.jl:37[inlined]
    vector_mode_gradient!(::Vector{Float64}, ::Turing.Core.var"#f#3"{DynamicPPL.TypedVarInfo{NamedTuple{(:ϕ, :g, :a, :b), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:g, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:g, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Normal{Float64}}, Vector{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}}, Float64}, DynamicPPL.Model{Main.workspace#160.var"#1#2", (:tools, :population, :cid), (), (), Tuple{Vector{Int64}, Vector{Float64}, Vector{Int64}}, Tuple{}}, DynamicPPL.Sampler{Turing.Inference.NUTS{Turing.Core.ForwardDiffAD{40}, (), AdvancedHMC.DiagEuclideanMetric}}, DynamicPPL.DefaultContext}, ::Vector{Float64}, ::ForwardDiff.GradientConfig{ForwardDiff.Tag{Turing.Core.var"#f#3"{DynamicPPL.TypedVarInfo{NamedTuple{(:ϕ, :g, :a, :b), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:g, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:g, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Normal{Float64}}, Vector{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}}, Float64}, DynamicPPL.Model{Main.workspace#160.var"#1#2", (:tools, :population, :cid), (), (), Tuple{Vector{Int64}, Vector{Float64}, Vector{Int64}}, Tuple{}}, DynamicPPL.Sampler{Turing.Inference.NUTS{Turing.Core.ForwardDiffAD{40}, (), AdvancedHMC.DiagEuclideanMetric}}, DynamicPPL.DefaultContext}, Float64}, Float64, 6, Vector{ForwardDiff.Dual{ForwardDiff.Tag{Turing.Core.var"#f#3"{DynamicPPL.TypedVarInfo{NamedTuple{(:ϕ, :g, :a, :b), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:g, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:g, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Normal{Float64}}, Vector{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}}, Float64}, DynamicPPL.Model{Main.workspace#160.var"#1#2", (:tools, :population, :cid), (), (), Tuple{Vector{Int64}, Vector{Float64}, Vector{Int64}}, Tuple{}}, DynamicPPL.Sampler{Turing.Inference.NUTS{Turing.Core.ForwardDiffAD{40}, (), AdvancedHMC.DiagEuclideanMetric}}, DynamicPPL.DefaultContext}, Float64}, Float64, 6}}})@gradient.jl:113
    gradient!@gradient.jl:37[inlined]
    gradient!(::Vector{Float64}, ::Turing.Core.var"#f#3"{DynamicPPL.TypedVarInfo{NamedTuple{(:ϕ, :g, :a, :b), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:g, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:g, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Normal{Float64}}, Vector{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}}, Float64}, DynamicPPL.Model{Main.workspace#160.var"#1#2", (:tools, :population, :cid), (), (), Tuple{Vector{Int64}, Vector{Float64}, Vector{Int64}}, Tuple{}}, DynamicPPL.Sampler{Turing.Inference.NUTS{Turing.Core.ForwardDiffAD{40}, (), AdvancedHMC.DiagEuclideanMetric}}, DynamicPPL.DefaultContext}, ::Vector{Float64}, ::ForwardDiff.GradientConfig{ForwardDiff.Tag{Turing.Core.var"#f#3"{DynamicPPL.TypedVarInfo{NamedTuple{(:ϕ, :g, :a, :b), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:g, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:g, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Normal{Float64}}, Vector{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}}, Float64}, DynamicPPL.Model{Main.workspace#160.var"#1#2", (:tools, :population, :cid), (), (), Tuple{Vector{Int64}, Vector{Float64}, Vector{Int64}}, Tuple{}}, DynamicPPL.Sampler{Turing.Inference.NUTS{Turing.Core.ForwardDiffAD{40}, (), AdvancedHMC.DiagEuclideanMetric}}, DynamicPPL.DefaultContext}, Float64}, Float64, 6, Vector{ForwardDiff.Dual{ForwardDiff.Tag{Turing.Core.var"#f#3"{DynamicPPL.TypedVarInfo{NamedTuple{(:ϕ, :g, :a, :b), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:g, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:g, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Normal{Float64}}, Vector{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}}, Float64}, DynamicPPL.Model{Main.workspace#160.var"#1#2", (:tools, :population, :cid), (), (), Tuple{Vector{Int64}, Vector{Float64}, Vector{Int64}}, Tuple{}}, DynamicPPL.Sampler{Turing.Inference.NUTS{Turing.Core.ForwardDiffAD{40}, (), AdvancedHMC.DiagEuclideanMetric}}, DynamicPPL.DefaultContext}, Float64}, Float64, 6}}})@gradient.jl:35
    gradient_logp(::Turing.Core.ForwardDiffAD{40}, ::Vector{Float64}, ::DynamicPPL.TypedVarInfo{NamedTuple{(:ϕ, :g, :a, :b), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:g, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:g, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Normal{Float64}}, Vector{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}}, Float64}, ::DynamicPPL.Model{Main.workspace#160.var"#1#2", (:tools, :population, :cid), (), (), Tuple{Vector{Int64}, Vector{Float64}, Vector{Int64}}, Tuple{}}, ::DynamicPPL.Sampler{Turing.Inference.NUTS{Turing.Core.ForwardDiffAD{40}, (), AdvancedHMC.DiagEuclideanMetric}}, ::DynamicPPL.DefaultContext)@ad.jl:121
    gradient_logp@ad.jl:83[inlined]
    ∂logπ∂θ@hmc.jl:433[inlined]
    ∂H∂θ@hamiltonian.jl:31[inlined]
    macro expansion@UnPack.jl:100[inlined]
    var"#step#9"(::Bool, ::Val{false}, ::typeof(AdvancedHMC.step), ::AdvancedHMC.Leapfrog{Float64}, ::AdvancedHMC.Hamiltonian{AdvancedHMC.DiagEuclideanMetric{Float64, Vector{Float64}}, Turing.Inference.var"#logπ#52"{DynamicPPL.TypedVarInfo{NamedTuple{(:ϕ, :g, :a, :b), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:g, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:g, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Normal{Float64}}, Vector{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}}, Float64}, DynamicPPL.Sampler{Turing.Inference.NUTS{Turing.Core.ForwardDiffAD{40}, (), AdvancedHMC.DiagEuclideanMetric}}, DynamicPPL.Model{Main.workspace#160.var"#1#2", (:tools, :population, :cid), (), (), Tuple{Vector{Int64}, Vector{Float64}, Vector{Int64}}, Tuple{}}}, Turing.Inference.var"#∂logπ∂θ#51"{DynamicPPL.TypedVarInfo{NamedTuple{(:ϕ, :g, :a, :b), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:g, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:g, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Normal{Float64}}, Vector{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}}, Float64}, DynamicPPL.Sampler{Turing.Inference.NUTS{Turing.Core.ForwardDiffAD{40}, (), AdvancedHMC.DiagEuclideanMetric}}, DynamicPPL.Model{Main.workspace#160.var"#1#2", (:tools, :population, :cid), (), (), Tuple{Vector{Int64}, Vector{Float64}, Vector{Int64}}, Tuple{}}}}, ::AdvancedHMC.PhasePoint{Vector{Float64}, AdvancedHMC.DualValue{Float64, Vector{Float64}}}, ::Int64)@integrator.jl:88
    step@integrator.jl:66[inlined]
    build_tree(::Random._GLOBAL_RNG, ::AdvancedHMC.Trajectory{AdvancedHMC.MultinomialTS, AdvancedHMC.Leapfrog{Float64}, AdvancedHMC.GeneralisedNoUTurn{Float64}}, ::AdvancedHMC.Hamiltonian{AdvancedHMC.DiagEuclideanMetric{Float64, Vector{Float64}}, Turing.Inference.var"#logπ#52"{DynamicPPL.TypedVarInfo{NamedTuple{(:ϕ, :g, :a, :b), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:g, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:g, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Normal{Float64}}, Vector{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}}, Float64}, DynamicPPL.Sampler{Turing.Inference.NUTS{Turing.Core.ForwardDiffAD{40}, (), AdvancedHMC.DiagEuclideanMetric}}, DynamicPPL.Model{Main.workspace#160.var"#1#2", (:tools, :population, :cid), (), (), Tuple{Vector{Int64}, Vector{Float64}, Vector{Int64}}, Tuple{}}}, Turing.Inference.var"#∂logπ∂θ#51"{DynamicPPL.TypedVarInfo{NamedTuple{(:ϕ, :g, :a, :b), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:g, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:g, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Normal{Float64}}, Vector{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}}, Float64}, DynamicPPL.Sampler{Turing.Inference.NUTS{Turing.Core.ForwardDiffAD{40}, (), AdvancedHMC.DiagEuclideanMetric}}, DynamicPPL.Model{Main.workspace#160.var"#1#2", (:tools, :population, :cid), (), (), Tuple{Vector{Int64}, Vector{Float64}, Vector{Int64}}, Tuple{}}}}, ::AdvancedHMC.PhasePoint{Vector{Float64}, AdvancedHMC.DualValue{Float64, Vector{Float64}}}, ::AdvancedHMC.MultinomialTS{Float64}, ::Int64, ::Int64, ::Float64)@trajectory.jl:595
    transition(::Random._GLOBAL_RNG, ::AdvancedHMC.Trajectory{AdvancedHMC.MultinomialTS, AdvancedHMC.Leapfrog{Float64}, AdvancedHMC.GeneralisedNoUTurn{Float64}}, ::AdvancedHMC.Hamiltonian{AdvancedHMC.DiagEuclideanMetric{Float64, Vector{Float64}}, Turing.Inference.var"#logπ#52"{DynamicPPL.TypedVarInfo{NamedTuple{(:ϕ, :g, :a, :b), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:g, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:g, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Normal{Float64}}, Vector{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}}, Float64}, DynamicPPL.Sampler{Turing.Inference.NUTS{Turing.Core.ForwardDiffAD{40}, (), AdvancedHMC.DiagEuclideanMetric}}, DynamicPPL.Model{Main.workspace#160.var"#1#2", (:tools, :population, :cid), (), (), Tuple{Vector{Int64}, Vector{Float64}, Vector{Int64}}, Tuple{}}}, Turing.Inference.var"#∂logπ∂θ#51"{DynamicPPL.TypedVarInfo{NamedTuple{(:ϕ, :g, :a, :b), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:g, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:g, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Normal{Float64}}, Vector{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}}, Float64}, DynamicPPL.Sampler{Turing.Inference.NUTS{Turing.Core.ForwardDiffAD{40}, (), AdvancedHMC.DiagEuclideanMetric}}, DynamicPPL.Model{Main.workspace#160.var"#1#2", (:tools, :population, :cid), (), (), Tuple{Vector{Int64}, Vector{Float64}, Vector{Int64}}, Tuple{}}}}, ::AdvancedHMC.PhasePoint{Vector{Float64}, AdvancedHMC.DualValue{Float64, Vector{Float64}}})@trajectory.jl:641
    transition@sampler.jl:57[inlined]
    var"#step#42"(::Int64, ::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, ::typeof(AbstractMCMC.step), ::Random._GLOBAL_RNG, ::DynamicPPL.Model{Main.workspace#160.var"#1#2", (:tools, :population, :cid), (), (), Tuple{Vector{Int64}, Vector{Float64}, Vector{Int64}}, Tuple{}}, ::DynamicPPL.Sampler{Turing.Inference.NUTS{Turing.Core.ForwardDiffAD{40}, (), AdvancedHMC.DiagEuclideanMetric}}, ::Turing.Inference.HMCState{DynamicPPL.TypedVarInfo{NamedTuple{(:ϕ, :g, :a, :b), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:g, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:g, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Normal{Float64}}, Vector{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}}, Float64}, AdvancedHMC.HMCKernel{AdvancedHMC.FullMomentumRefreshment, AdvancedHMC.Trajectory{AdvancedHMC.MultinomialTS, AdvancedHMC.Leapfrog{Float64}, AdvancedHMC.GeneralisedNoUTurn{Float64}}}, AdvancedHMC.Hamiltonian{AdvancedHMC.DiagEuclideanMetric{Float64, Vector{Float64}}, Turing.Inference.var"#logπ#52"{DynamicPPL.TypedVarInfo{NamedTuple{(:ϕ, :g, :a, :b), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:g, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:g, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Normal{Float64}}, Vector{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}}, Float64}, DynamicPPL.Sampler{Turing.Inference.NUTS{Turing.Core.ForwardDiffAD{40}, (), AdvancedHMC.DiagEuclideanMetric}}, DynamicPPL.Model{Main.workspace#160.var"#1#2", (:tools, :population, :cid), (), (), Tuple{Vector{Int64}, Vector{Float64}, Vector{Int64}}, Tuple{}}}, Turing.Inference.var"#∂logπ∂θ#51"{DynamicPPL.TypedVarInfo{NamedTuple{(:ϕ, :g, :a, :b), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:g, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:g, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Normal{Float64}}, Vector{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}}, Float64}, DynamicPPL.Sampler{Turing.Inference.NUTS{Turing.Core.ForwardDiffAD{40}, (), AdvancedHMC.DiagEuclideanMetric}}, DynamicPPL.Model{Main.workspace#160.var"#1#2", (:tools, :population, :cid), (), (), Tuple{Vector{Int64}, Vector{Float64}, Vector{Int64}}, Tuple{}}}}, AdvancedHMC.PhasePoint{Vector{Float64}, AdvancedHMC.DualValue{Float64, Vector{Float64}}}, AdvancedHMC.Adaptation.StanHMCAdaptor{AdvancedHMC.Adaptation.WelfordVar{Float64, Vector{Float64}}, AdvancedHMC.Adaptation.NesterovDualAveraging{Float64}}})@hmc.jl:237
    macro expansion@sample.jl:134[inlined]
    macro expansion@ProgressLogging.jl:328[inlined]
    macro expansion@logging.jl:8[inlined]
    var"#mcmcsample#20"(::Bool, ::String, ::Nothing, ::Int64, ::Int64, ::Type, ::Base.Iterators.Pairs{Symbol, Int64, Tuple{Symbol}, NamedTuple{(:nadapts,), Tuple{Int64}}}, ::typeof(AbstractMCMC.mcmcsample), ::Random._GLOBAL_RNG, ::DynamicPPL.Model{Main.workspace#160.var"#1#2", (:tools, :population, :cid), (), (), Tuple{Vector{Int64}, Vector{Float64}, Vector{Int64}}, Tuple{}}, ::DynamicPPL.Sampler{Turing.Inference.NUTS{Turing.Core.ForwardDiffAD{40}, (), AdvancedHMC.DiagEuclideanMetric}}, ::Int64)@sample.jl:114
    var"#sample#40"(::Type, ::Nothing, ::Bool, ::Int64, ::Bool, ::Int64, ::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, ::typeof(StatsBase.sample), ::Random._GLOBAL_RNG, ::DynamicPPL.Model{Main.workspace#160.var"#1#2", (:tools, :population, :cid), (), (), Tuple{Vector{Int64}, Vector{Float64}, Vector{Int64}}, Tuple{}}, ::DynamicPPL.Sampler{Turing.Inference.NUTS{Turing.Core.ForwardDiffAD{40}, (), AdvancedHMC.DiagEuclideanMetric}}, ::Int64)@hmc.jl:133
    sample@hmc.jl:116[inlined]
    #sample#2@Inference.jl:142[inlined]
    sample@Inference.jl:142[inlined]
    #sample#1@Inference.jl:132[inlined]
    sample(::DynamicPPL.Model{Main.workspace#160.var"#1#2", (:tools, :population, :cid), (), (), Tuple{Vector{Int64}, Vector{Float64}, Vector{Int64}}, Tuple{}}, ::Turing.Inference.NUTS{Turing.Core.ForwardDiffAD{40}, (), AdvancedHMC.DiagEuclideanMetric}, ::Int64)@Inference.jl:132
    top-level scope@Local: 1[inlined]

```

To figure out the bug I used `try ... catch ` blocks inside my model as

```julia
@model function m12_2(tools, population, cid)
	ϕ ~ Exponential(1.0)
	g ~ Exponential(1.0)
	a = Vector{Real}(undef,2)
	b = Vector{Real}(undef,2)
	a .~ Normal(1.0, 1.0)
	b .~ Exponential(1.0)
	for i = 1 : length(cid)
		λ = (exp(a[cid[i]]) * population[i]^ b[cid[i]])/g
		try
			tools[i] ~ NegativeBinomial(λ/(ϕ + 0.000001), 1.0 / (1.0 + ϕ))
		catch
			println(i)
			println(population[i], " ",b[cid[i]])
			return -1
		end
	end
end

```

It looks like the random variable `b`, drawn from `Exponential(1.0)` sample extremely large values for some reason (like `2.0947637423773094e13` ?), resulting in `population[i]^b[cid]` becoming numerically zero.  
Given below is the output of above model.

```julia

      From worker 3:	1
      From worker 3:	0.1 Dual{ForwardDiff.Tag{Turing.Core.var"#f#3"{DynamicPPL.TypedVarInfo{NamedTuple{(:ϕ, :g, :a, :b), Tuple{DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:ϕ, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:ϕ, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:g, Tuple{}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:g, Tuple{}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Normal{Float64}}, Vector{AbstractPPL.VarName{:a, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}, DynamicPPL.Metadata{Dict{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}, Int64}, Vector{Distributions.Exponential{Float64}}, Vector{AbstractPPL.VarName{:b, Tuple{Tuple{Int64}}}}, Vector{Float64}, Vector{Set{DynamicPPL.Selector}}}}}, Float64}, DynamicPPL.Model{Main.workspace#173.var"#1#2", (:tools, :population, :cid), (), (), Tuple{Vector{Int64}, Vector{Float64}, Vector{Int64}}, Tuple{}}, DynamicPPL.Sampler{Turing.Inference.NUTS{Turing.Core.ForwardDiffAD{40}, (), AdvancedHMC.DiagEuclideanMetric}}, DynamicPPL.DefaultContext}, Float64}}(2.0947637423773094e13,0.0,0.0,0.0,0.0,2.0947637423773094e13,0.0)

```

1. Is it some bug or something wrong in my model?
2. Is there some sort of Turing debugger to assist in such matter?

---

<div class="post-metadata">

**Author:** ![dlakelan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlakelan/32/8491_2.png) [@dlakelan](https://discourse.julialang.org/u/dlakelan)\
**Post date:** [November 28, 2021, 3:45pm UTC](https://discourse.julialang.org/t/turing-model-fail-due-to-extreme-outliers-sampled-in-exponential-distribution/72174/2 "2021-11-28T15:45:45Z")

</div>

Although there are plans to remove it eventually for now I think you should use filldist or arraydist to declare a and b. See the Turing docs

---

<div class="post-metadata">

**Author:** ![amit1](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/amit1/32/25318_2.png) [@amit1](https://discourse.julialang.org/u/amit1)\
**Post date:** [November 28, 2021, 5:33pm UTC](https://discourse.julialang.org/t/turing-model-fail-due-to-extreme-outliers-sampled-in-exponential-distribution/72174/3 "2021-11-28T17:33:19Z")

</div>

Is expected outcome of `filldist` different from `.~` ? I tried it but the problem persist. Currently my only workaround is to use `truncated(Exponential(1.0), 1, 10)` .

---

<div class="post-metadata">

**Author:** ![dlakelan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlakelan/32/8491_2.png) [@dlakelan](https://discourse.julialang.org/u/dlakelan)\
**Post date:** [November 28, 2021, 5:56pm UTC](https://discourse.julialang.org/t/turing-model-fail-due-to-extreme-outliers-sampled-in-exponential-distribution/72174/4 "2021-11-28T17:56:18Z")

</div>

Which sampling algorithm are you using?

---

<div class="post-metadata">

**Author:** ![amit1](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/amit1/32/25318_2.png) [@amit1](https://discourse.julialang.org/u/amit1)\
**Post date:** [November 28, 2021, 6:21pm UTC](https://discourse.julialang.org/t/turing-model-fail-due-to-extreme-outliers-sampled-in-exponential-distribution/72174/5 "2021-11-28T18:21:38Z")

</div>

NUTS. Though I tried SMC, and HMC as well. But the same error persisted.

---

<div class="post-metadata">

**Author:** ![dlakelan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlakelan/32/8491_2.png) [@dlakelan](https://discourse.julialang.org/u/dlakelan)\
**Post date:** [November 28, 2021, 6:26pm UTC](https://discourse.julialang.org/t/turing-model-fail-due-to-extreme-outliers-sampled-in-exponential-distribution/72174/6 "2021-11-28T18:26:21Z")

</div>

So this is sampling as a parameter, if it’s heading off to infinity it might be because some other parameter collapses and you get divergent transitions. try NUTS(1000,0.99) to make it do a very careful solution to the HMC differential equations, this might help?

---

<div class="post-metadata">

**Author:** ![dlakelan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlakelan/32/8491_2.png) [@dlakelan](https://discourse.julialang.org/u/dlakelan)\
**Post date:** [November 28, 2021, 6:28pm UTC](https://discourse.julialang.org/t/turing-model-fail-due-to-extreme-outliers-sampled-in-exponential-distribution/72174/7 "2021-11-28T18:28:00Z")

</div>

> [@amit1](#):
>
> `λ/(ϕ + 0.000001)`

you might also try making this fudge factor larger, like phi + 0.001

---

<div class="post-metadata">

**Author:** ![amit1](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/amit1/32/25318_2.png) [@amit1](https://discourse.julialang.org/u/amit1)\
**Post date:** [November 28, 2021, 11:24pm UTC](https://discourse.julialang.org/t/turing-model-fail-due-to-extreme-outliers-sampled-in-exponential-distribution/72174/8 "2021-11-28T23:24:09Z")

</div>

I made fudge factor = 0.001 and sampled using `NUTS(1000,0.99)` but the problem still persists.

---

<div class="post-metadata">

**Author:** ![dlakelan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlakelan/32/8491_2.png) [@dlakelan](https://discourse.julialang.org/u/dlakelan)\
**Post date:** [November 28, 2021, 11:32pm UTC](https://discourse.julialang.org/t/turing-model-fail-due-to-extreme-outliers-sampled-in-exponential-distribution/72174/9 "2021-11-28T23:32:12Z")

</div>

weird. does this occur during the NUTS warmup or after?

---

<div class="post-metadata">

**Author:** ![amit1](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/amit1/32/25318_2.png) [@amit1](https://discourse.julialang.org/u/amit1)\
**Post date:** [November 29, 2021, 2:05am UTC](https://discourse.julialang.org/t/turing-model-fail-due-to-extreme-outliers-sampled-in-exponential-distribution/72174/10 "2021-11-29T02:05:59Z")

</div>

I would assume its after warmup, as it only gives the error if i draw samples \> 500 or so. At lower samples it rarely crashes if at all.

---

<div class="post-metadata">

**Author:** ![dlakelan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlakelan/32/8491_2.png) [@dlakelan](https://discourse.julialang.org/u/dlakelan)\
**Post date:** [November 29, 2021, 2:59am UTC](https://discourse.julialang.org/t/turing-model-fail-due-to-extreme-outliers-sampled-in-exponential-distribution/72174/11 "2021-11-29T02:59:59Z")

</div>

I suspect if phi goes to zero then lambda needs to go to zero to maintain a reasonable ratio. Try making the fudge factor something like 0.2 just to see if it fixes the issue.

---

<div class="post-metadata">

**Author:** ![amit1](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/amit1/32/25318_2.png) [@amit1](https://discourse.julialang.org/u/amit1)\
**Post date:** [November 29, 2021, 4:32am UTC](https://discourse.julialang.org/t/turing-model-fail-due-to-extreme-outliers-sampled-in-exponential-distribution/72174/12 "2021-11-29T04:32:18Z")

</div>

No. Still the same with fudge factor of 0.2.  
Only `truncated(Exponential())` works as of now.

---

<div class="post-metadata">

**Author:** ![dlakelan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlakelan/32/8491_2.png) [@dlakelan](https://discourse.julialang.org/u/dlakelan)\
**Post date:** [November 29, 2021, 2:43pm UTC](https://discourse.julialang.org/t/turing-model-fail-due-to-extreme-outliers-sampled-in-exponential-distribution/72174/13 "2021-11-29T14:43:57Z")

</div>

Does it do the same thing with RWMH algorithm?

Ok, so just to make sure there isn’t a basic problem with sampling I ran this:

```julia
using Turing, StatsPlots, MCMCChains

@model function f()
    x ~ Exponential(1.0)
end

ch = sample(f(),NUTS(1000,.8),2000)

```

And it sampled normally with 97.5%tile of 3.8621 under latest version of Turing

Then I copy pasta your original code and get the error

```julia
ERROR: LoadError: ArgumentError: NegativeBinomial: the condition r > zero(r) is not satisfied.
Stacktrace:

```

The fact that this is an intermittent bug suggests to me that the model itself is somehow unstable.

If I modify the code as follows:

```julia
		λ = (exp(a[cid[i]]) * (.00001 + population[i]^ b[cid[i]]))/g

```

The model samples just fine and doesn’t give strange values for b. I think this is a modeling issue rather than a sampling issue

---

<div class="post-metadata">

**Author:** ![amit1](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/amit1/32/25318_2.png) [@amit1](https://discourse.julialang.org/u/amit1)\
**Post date:** [November 29, 2021, 7:56pm UTC](https://discourse.julialang.org/t/turing-model-fail-due-to-extreme-outliers-sampled-in-exponential-distribution/72174/14 "2021-11-29T19:56:30Z")

</div>

When you would modify it as `(.00001 + population[i]^ b[cid[i]]))` issue will be mitigated as \lambda will no longer go to zero. Problem is that `population[i]^ b[cid[i]]` goes to zero if `b` goes higher. With addition of 0.0001, values of b will no longer reduce \lambda to zero.

To replicate it in simpler model i tried the following:

```julia
@model function f()
           x ~ Exponential(1.0)
           y = 0.1^x
           z ~ NegativeBinomial(1/y,0.1)
           end

```

But doing so does not reproduce the original error. I do get warnings though.

```julia
┌ Warning: The current proposal will be rejected due to numerical error(s).
│ isfinite.((θ, r, ℓπ, ℓκ)) = (true, true, false, true)
└ @ AdvancedHMC ~/.julia/packages/AdvancedHMC/HQHnm/src/hamiltonian.jl:47

```

So I think you are right this might be model issue. Will try looking in model more carefully and update in future if I notice something more.  
Thank you

---

<div class="post-metadata">

**Author:** ![dlakelan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlakelan/32/8491_2.png) [@dlakelan](https://discourse.julialang.org/u/dlakelan)\
**Post date:** [November 29, 2021, 11:16pm UTC](https://discourse.julialang.org/t/turing-model-fail-due-to-extreme-outliers-sampled-in-exponential-distribution/72174/15 "2021-11-29T23:16:31Z")

</div>

> [@amit1](#):
>
> With addition of 0.0001, values of b will no longer reduce \lambda λ\lambda to zero.

Yes but also in the samples that I did values of B never went particularly high the whole phenomenon disappeared. I think you’re right to look more carefully at the model and you will find the answer somehow in modifications to the model
