Hi, I am trying to use Submodels as described in Submodels – Turing.jl. However I cannot figure out how to get it to work. I posted a deliberately simplified reproducable example below, and the error I was getting below it. Can someone explain how to use submodels? Thanks!
using Turing, Distributions
@model function my_submodel(n)
sigma_rw ~ truncated(Cauchy(0, 1); lower=0)
alpha = zeros(n)
alpha[1] ~ Normal(0, sigma_rw)
for i in 2:n
alpha[i] ~ Normal(alpha[i-1], sigma_rw)
end
return alpha
end
@model function my_model(y)
n = length(y)
sigma_err ~ truncated(Cauchy(0, 1); lower=0)
rw ~ to_submodel(my_submodel(n))
for i in eachindex(y)
y[i] ~ Normal(rw.alpha[i], sigma_err)
end
end
n = 50
sub = my_submodel(50)
rw = sub()
model = my_model(rw)
chain = sample(model, NUTS(), 1_000)
Error when calling sampling:
julia> chain = sample(model, NUTS(), 1_000)
ERROR: type Array has no field alpha
Stacktrace:
[1] getproperty
@ ./Base.jl:49 [inlined]
[2] macro expansion
@ ~/.julia/packages/DynamicPPL/mOOQl/src/compiler.jl:566 [inlined]
[3] my_model
@ ~/Desktop/git/dssi-decsci-clinical-supply/dev/splines/tmp.jl:17 [inlined]
[4] _evaluate!!
@ ~/.julia/packages/DynamicPPL/mOOQl/src/model.jl:974 [inlined]
[5] evaluate_threadunsafe!!(model::DynamicPPL.Model{…}, varinfo::DynamicPPL.VarInfo{…})
@ DynamicPPL ~/.julia/packages/DynamicPPL/mOOQl/src/model.jl:940
[6] check_model_and_trace(model::DynamicPPL.Model{…}, varinfo::DynamicPPL.VarInfo{…}; error_on_failure::Bool)
@ DynamicPPL.DebugUtils ~/.julia/packages/DynamicPPL/mOOQl/src/debug_utils.jl:428
[7] check_model_and_trace
@ ~/.julia/packages/DynamicPPL/mOOQl/src/debug_utils.jl:418 [inlined]
[8] check_model
@ ~/.julia/packages/DynamicPPL/mOOQl/src/debug_utils.jl:451 [inlined]
[9] _check_model
@ ~/.julia/packages/Turing/ObWSF/src/mcmc/abstractmcmc.jl:5 [inlined]
[10] _check_model
@ ~/.julia/packages/Turing/ObWSF/src/mcmc/abstractmcmc.jl:8 [inlined]
[11] sample(rng::Random.TaskLocalRNG, model::DynamicPPL.Model{…}, sampler::NUTS{…}, N::Int64; check_model::Bool, chain_type::Type, initial_params::InitFromUniform{…}, initial_state::Nothing, progress::Bool, nadapts::Int64, discard_adapt::Bool, discard_initial::Int64, kwargs::@Kwargs{})
@ Turing.Inference ~/.julia/packages/Turing/ObWSF/src/mcmc/hmc.jl:101
[12] sample
@ ~/.julia/packages/Turing/ObWSF/src/mcmc/hmc.jl:86 [inlined]
[13] #sample#1
@ ~/.julia/packages/Turing/ObWSF/src/mcmc/abstractmcmc.jl:71 [inlined]
[14] sample(model::DynamicPPL.Model{…}, spl::NUTS{…}, N::Int64)
@ Turing.Inference ~/.julia/packages/Turing/ObWSF/src/mcmc/abstractmcmc.jl:68
[15] top-level scope
@ ~/Desktop/git/dssi-decsci-clinical-supply/dev/splines/tmp.jl:27
Some type information was truncated. Use `show(err)` to see complete types.