I am bit new to probabilistic programming and following the Statistical Rethinking book. I want to know how to draw samples from posterior parameters distributions? (equivalent to “simulation” in R, as shown in that book). Before chapter 10 it uses quap sampler which comes with the package StatisticalRethinking and it is as simple as
rand(quap_sampled_obj.distr, N)
Example:
using Turing, Plots
# model
begin
@model function linear_reg(x, y)
β ~ Normal(0, 1)
y .~ Normal.(β .* x, 0.1)
end
end
# data
xs_train = collect(0:0.1:10)
ys_train = xs_train*2.0 .+ rand(Normal(0.1),length(xs_train))
# see prior
m_train = linear_reg(xs_train, ys_train);
prior_chain = sample(m_train, Prior(), 200)
# > plot(prior_chain)
# Show prior distribution of beta centered as 0.
# Extracted samples as DataFrame(sample(m_train, Prior(), 200))
posterior_chain = sample(m_train, NUTS(), 200)
# How to draw samples from beta centered at 2 now?
# I tried rand(posterior_chain.name_map.parameters[1],200) and sample(prosterior_chain,10)
# sample method gives error: BoundsError: attempt to access 200×13×1 Array{Float64, 3} at index [[175, 183, 225, 300, 275, 132, 264, 232, 136, 288], 1:13, 1:1]
Also
- Is there any better way sample from priors of model parameters?
- How to get data out of sampled chains? chains.AxisArray object and I cant get it to give sampled values for plotting on my own?
Please not that I am not asking for data prediction using predict
. I understood that part. I want to sample from individual parameters (prior and posterior).
Thank you