How to extract sampled values from a Turing model

I have implemented a Bayesian model and I am interested in extracting the results. I’d like to first assess convergence of the MCMC chains but also extract the values for the parameters.

chain = sample(model_fun, sampler, MCMCThreads(), 10000, 4; progress=false);
group(chain, :y)

This prints out the following summary:

Chains MCMC chain (10000×41×4 Array{Float64, 3}):

Iterations        = 1:1:10000
Number of chains  = 4
Samples per chain = 10000
Wall duration     = 507.61 seconds
Compute duration  = 2027.93 seconds
parameters        = y[12], y[13], y[14], y[15], y[16], y[17], y[18], y[19], y[20], y[21], y[22], y[23], y[24], y[25], y[26], y[27], y[28], y[29], y[30], y[31], y[32], y[33], y[34], y[35], y[36], y[37], y[38], y[39], y[40], y[41], y[42], y[43], y[44], y[45], y[46], y[47], y[48], y[49], y[50], y[51], y[52]
internals         = 

Summary Statistics
  parameters      mean       std   naive_se      mcse        ess      rhat   ess_per_sec 
      Symbol   Float64   Float64    Float64   Float64    Float64   Float64       Float64 

       y[12]    0.0004    0.0006     0.0000    0.0000   815.1909    1.0082        0.4020
       y[13]    0.0004    0.0007     0.0000    0.0000   684.4333    1.0042        0.3375
       y[14]    0.0005    0.0008     0.0000    0.0000   667.7636    1.0055        0.3293
       y[15]    0.0008    0.0010     0.0000    0.0000   703.1255    1.0026        0.3467
       y[16]    0.0016    0.0015     0.0000    0.0000   611.2506    1.0052        0.3014
       y[17]    0.0028    0.0022     0.0000    0.0001   501.4286    1.0057        0.2473
       y[18]    0.0036    0.0027     0.0000    0.0001   459.1139    1.0063        0.2264
       y[19]    0.0027    0.0022     0.0000    0.0001   488.3284    1.0078        0.2408
       y[20]    0.0067    0.0045     0.0000    0.0002   397.7043    1.0122        0.1961
       y[21]    0.0106    0.0068     0.0000    0.0003   348.9909    1.0176        0.1721
       y[22]    0.0133    0.0082     0.0000    0.0003   340.5442    1.0195        0.1679
       y[23]    0.0130    0.0079     0.0000    0.0003   342.7045    1.0200        0.1690
       y[24]    0.0100    0.0063     0.0000    0.0003   362.7006    1.0188        0.1789
       y[25]    0.0067    0.0045     0.0000    0.0002   400.3231    1.0165        0.1974
       y[26]    0.0054    0.0038     0.0000    0.0001   392.4336    1.0165        0.1935
       y[27]    0.0046    0.0033     0.0000    0.0001   425.4097    1.0128        0.2098
       y[28]    0.0030    0.0024     0.0000    0.0001   446.8808    1.0130        0.2204
      ⋮           ⋮         ⋮         ⋮          ⋮         ⋮          ⋮           ⋮
                                                                           24 rows omitted

Quantiles
  parameters      2.5%     25.0%     50.0%     75.0%     97.5% 
      Symbol   Float64   Float64   Float64   Float64   Float64 

       y[12]    0.0000    0.0000    0.0001    0.0005    0.0021
       y[13]    0.0000    0.0000    0.0001    0.0005    0.0023
       y[14]    0.0000    0.0000    0.0002    0.0007    0.0027
       y[15]    0.0000    0.0001    0.0005    0.0012    0.0035
       y[16]    0.0000    0.0005    0.0012    0.0022    0.0054
       y[17]    0.0000    0.0011    0.0023    0.0038    0.0084
       y[18]    0.0001    0.0016    0.0030    0.0049    0.0105
       y[19]    0.0000    0.0011    0.0022    0.0038    0.0083
       y[20]    0.0001    0.0035    0.0058    0.0088    0.0177
       y[21]    0.0001    0.0061    0.0095    0.0139    0.0271
       y[22]    0.0004    0.0078    0.0120    0.0174    0.0328
       y[23]    0.0004    0.0076    0.0117    0.0169    0.0317
       y[24]    0.0002    0.0057    0.0089    0.0132    0.0250
       y[25]    0.0001    0.0036    0.0060    0.0090    0.0177
       y[26]    0.0000    0.0027    0.0048    0.0073    0.0144
       y[27]    0.0001    0.0022    0.0040    0.0063    0.0127
       y[28]    0.0000    0.0013    0.0025    0.0042    0.0091

I would like to extract the two dataframes: (1) the means of y[i] and (2) the quantiles of y[i]. I could do this manually but converting the chain object to a dataframe by DataFrame(chain) and then take the mean (and quantile) of eachcol but I was wondering if there was a way to just extract this data from the chain object.

And follow up question, how exactly do I check for MCMC convergence? I’d like to extract the data for the associated traceplots.

summaries, quantiles = describe(chain)

There’s a tutorial (shameless self-promotion) here: How to use Turing.

It’s right there: ess and rhat columns.