Hi. How to programing a Zero Inflated Distribution using Turing?
Without implementing a custom distribution, this is currently only possible for discrete distributions. e.g.
julia> using Distributions, StatsPlots
julia> ZeroInflated(dist, pzero) = MixtureModel([Dirac(0), dist], [pzero, 1 - pzero]);
julia> d = ZeroInflated(Poisson(10), 0.1)
MixtureModel{Distribution{Univariate, Discrete}}(K = 2)
components[1] (prior = 0.1000): Dirac{Int64}(value=0)
components[2] (prior = 0.9000): Poisson{Float64}(λ=10.0)
julia> plot(d; components=false, legend=false)
The reason this currently doesn’t work for continuous distributions is that MixtureModel
only supports mixtures of discrete or mixtures of continuous distributions, but not mixtures of both discrete and continuous.
To give concrete suggestions for the continuous case, I would need to know how you are planning to use this zero-inflated distribution in your model.
Thanks!