WIP for an inference visualization package.
This package is not registered at the moment and will probably be merged with TuringCallbacks at some point. To try it nonetheless run :
] add https://github.com/theogf/Turkie.jl
- Trace of the chains
- Statistics (mean and var)
- Marginals (KDE/Histograms)
- Autocorrelation plots
- Selecting which variables are plotted
- Selecting what plots to show
- Giving a recording option
- Additional fine tuning features like
- Thinning
- Creating a buffer to limit the viewing
- Using a color mapping given some statistics
- Allow to apply transformation before plotting
Small example:
using Turing
using Turkie
using Makie # You could also use CairoMakie or another backend
@model function demo(x) # Some random Turing model
v ~ InverseGamma(3, 2)
s ~ InverseGamma(2, 3)
m ~ Normal(0, √s)
for i in eachindex(x)
x[i] ~ Normal(m, √s)
end
end
xs = randn(100) .+ 1;
m = demo(xs);
cb = TurkieCallback(m) # Create a callback function to be given to sample
chain = sample(m, NUTS(0.65), 300; callback = cb)
If you want to show only some variables you can give a Dict
to TurkieCallback
:
cb = TurkieCallback(Dict(:v => [:trace, :mean],
:s => [:autocov, :var]))
You can also directly pass OnlineStats
object :
using OnlineStats
cb = TurkieCallback(Dict(:v => [Mean(), AutoCov(20)]))
If you want to record the video do
using Makie
record(cb.scene, joinpath(@__DIR__, "video.webm")) do io
addIO!(cb, io)
sample(m, NUTS(0.65), 300; callback = cb)
end