Skip to content

Instantly share code, notes, and snippets.

@trappmartin
Last active May 29, 2020 18:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save trappmartin/00c6fa3a02570a4dd2f7dd994fdc85be to your computer and use it in GitHub Desktop.
Save trappmartin/00c6fa3a02570a4dd2f7dd994fdc85be to your computer and use it in GitHub Desktop.
using Turing
# This is a crappy implementation of Isabel's model.
# For simplicity, I assume all data to be positiv-real valued.
# Isabel's paper: http://proceedings.mlr.press/v70/valera17a/valera17a.pdf
@model function adst(y, ::Type{TV}=Vector{Float64}) where {TV}
N,D = size(y)
π ~ Dirichlet(3, 0.1)
z ~ filldist(Categorical(π), D)
μ = TV(undef, D)
β = TV(undef, D)
λ = TV(undef, D)
for d in 1:D
if z[d] == 1
μ[d] ~ Normal(0.0, 1.0)
for i in 1:N
y[i] ~ Normal(μ[d], 1.0)
end
elseif z[d] == 2
β[d] ~ Gamma(1.0, 1.0)
for i in 1:N
y[i] ~ Gamma(1.0, β[d])
end
else
λ[d] ~ Gamma(1.0, 1.0)
for i in 1:N
y[i] ~ Exponential(λ[d])
end
end
end
end
x = abs.(rand(100, 3) + randn(100,3) .* randn(3)')
model = adst(x)
@time sample(model, Gibbs(PG(10,:z), HMC(0.01, 5, :π, :μ, :β, :λ)), 100, chain_type=Any, specialize_after=0)
@time sample(model, Gibbs(PG(10,:z), HMC(0.01, 5, :π, :μ, :β, :λ)), 100, chain_type=Any, specialize_after=1)
@time sample(model, Gibbs(PG(10,:z), HMC(0.01, 5, :π, :μ, :β, :λ)), 100, chain_type=Any, specialize_after=2)
@trappmartin
Copy link
Author

Error message

ERROR: type NamedTuple has no field β
Stacktrace:
 [1] getmetadata(::DynamicPPL.VarInfo{NamedTuple{(:π, :z, :μ, :x),Tuple{DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:π,Tuple{}},Int64},Array{Dirichlet{Float64
},1},Array{DynamicPPL.VarName{:π,Tuple{}},1},Array{Float64,1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}},DynamicPPL.Metadata{Dict{DynamicPPL.VarName{
:z,Tuple{}},Int64},Array{Product{Discrete,DiscreteNonParametric{Int64,Float64,Base.OneTo{Int64},Array{Float64,1}},FillArrays.Fill{DiscreteNonParametric{Int64,
Float64,Base.OneTo{Int64},Array{Float64,1}},1,Tuple{Base.OneTo{Int64}}}},1},Array{DynamicPPL.VarName{:z,Tuple{}},1},Array{Int64,1},Array{Int64,1},Array{Set{Dy
namicPPL.Selector},1}},DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:μ,Tuple{Tuple{Int64}}},Int64},Array{Normal{Float64},1},Array{DynamicPPL.VarName{:μ,Tuple{T
uple{Int64}}},1},Array{Float64,1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}},DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:x,Tuple{Tuple{Int64}}},Int6
4},Array{Normal{Float64},1},Array{DynamicPPL.VarName{:x,Tuple{Tuple{Int64}}},1},Array{Float64,1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}}}},Float64
,DynamicPPL.InitLinkMode}, ::DynamicPPL.VarName{:β,Tuple{Tuple{Int64}}}) at /clusterFS/home/user/martint/julia_depo_2/packages/DynamicPPL/0cxy3/src/varinfo/ut
ils.jl:93
 [2] setgid!(::DynamicPPL.VarInfo{NamedTuple{(:π, :z, :μ, :x),Tuple{DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:π,Tuple{}},Int64},Array{Dirichlet{Float64},1}
,Array{DynamicPPL.VarName{:π,Tuple{}},1},Array{Float64,1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}},DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:z,T
uple{}},Int64},Array{Product{Discrete,DiscreteNonParametric{Int64,Float64,Base.OneTo{Int64},Array{Float64,1}},FillArrays.Fill{DiscreteNonParametric{Int64,Floa
t64,Base.OneTo{Int64},Array{Float64,1}},1,Tuple{Base.OneTo{Int64}}}},1},Array{DynamicPPL.VarName{:z,Tuple{}},1},Array{Int64,1},Array{Int64,1},Array{Set{Dynami
cPPL.Selector},1}},DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:μ,Tuple{Tuple{Int64}}},Int64},Array{Normal{Float64},1},Array{DynamicPPL.VarName{:μ,Tuple{Tuple
{Int64}}},1},Array{Float64,1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}},DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:x,Tuple{Tuple{Int64}}},Int64},A
rray{Normal{Float64},1},Array{DynamicPPL.VarName{:x,Tuple{Tuple{Int64}}},1},Array{Float64,1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}}}},Float64,Dyn
amicPPL.InitLinkMode}, ::DynamicPPL.Selector, ::DynamicPPL.VarName{:β,Tuple{Tuple{Int64}}}; overwrite::Bool) at /clusterFS/home/user/martint/julia_depo_2/pack
ages/DynamicPPL/0cxy3/src/varinfo/utils.jl:265
 [3] #updategid!#66 at /clusterFS/home/user/martint/julia_depo_2/packages/DynamicPPL/0cxy3/src/varinfo/utils.jl:517 [inlined]
 [4] updategid! at /clusterFS/home/user/martint/julia_depo_2/packages/DynamicPPL/0cxy3/src/varinfo/utils.jl:516 [inlined]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment