Turing supports the use of DynamicHMC as a sampler through the DynamicNUTS function.
To use the DynamicNUTS function, you must import the DynamicHMC package as well as Turing. Turing does not formally require DynamicHMC but will include additional functionality if both packages are present.
Here is a brief example:
How to apply DynamicNUTS:
# Import Turing and DynamicHMC.usingDynamicHMC, Turing# Model definition.@modelfunctiongdemo(x, y) s² ~InverseGamma(2, 3) m ~Normal(0, sqrt(s²)) x ~Normal(m, sqrt(s²))return y ~Normal(m, sqrt(s²))end# Pull 2,000 samples using DynamicNUTS.dynamic_nuts =externalsampler(DynamicHMC.NUTS())chn =sample(gdemo(1.5, 2.0), dynamic_nuts, 2000, progress=false)
Chains MCMC chain (2000×3×1 Array{Float64, 3}):
Iterations = 1:1:2000
Number of chains = 1
Samples per chain = 2000
Wall duration = 7.09 seconds
Compute duration = 7.09 seconds
parameters = s², m
internals = lp
Summary Statistics
parameters mean std mcse ess_bulk ess_tail rhat e ⋯
Symbol Float64 Float64 Float64 Float64 Float64 Float64 ⋯
s² 2.0223 2.4493 0.0898 920.8235 948.0717 1.0047 ⋯
m 1.1738 0.7838 0.0261 956.6375 752.4804 1.0007 ⋯
1 column omitted
Quantiles
parameters 2.5% 25.0% 50.0% 75.0% 97.5%
Symbol Float64 Float64 Float64 Float64 Float64
s² 0.5394 0.9990 1.4775 2.2613 6.2935
m -0.4125 0.6931 1.1646 1.6492 2.8445