WIP for an inference visualization package.
Small example:
using Turing
using Turkie
using GLMakie # You could also use CairoMakie or another backend
@model function demo(x) # Some random Turing model
m0 ~ Normal(0, 2)
s ~ InverseGamma(2, 3)
m ~ Normal(m0, √s)
for i in eachindex(x)
x[i] ~ Normal(m, √s)
end
end
xs = randn(100) .+ 1 # Create some random data
m = demo(xs) # Create the model
cb = TurkieCallback(m) # Create a callback function to be given to the sample
chain = sample(m, NUTS(0.65), 300; callback = cb) # Sample and plot at the same time
If you want to show only some variables you can give a Dict
to TurkieCallback
:
cb = TurkieCallback(
(m0 = [:trace, :mean], s = [:autocov, :var])
)
You can also directly pass OnlineStats
object:
using OnlineStats
cb = TurkieCallback(
(v = [Mean(), AutoCov(20)],)
)
If you want to record the video do
using Makie
record(cb.figure, joinpath(@__DIR__, "video.webm")) do io
addIO!(cb, io)
sample(m, NUTS(0.65), 300; callback = cb)
end