Summarize

Extract summary values

mean(chn) and summarystats(chn) return a ChainDataFrame with parameter names in the parameters column:

using MCMCChains
chn = Chains(reshape(1:120, 20, 3, 2), [:a, :b, :c])
summary = mean(chn)
Mean

  parameters      mean 
      Symbol   Float64 

           a   40.5000
           b   60.5000
           c   80.5000

Index by parameter and statistic to get a value or vector:

summary[:a, :mean]
40.5
summary[[:a, :c], :mean]
2-element Vector{Float64}:
 40.5
 80.5

Use : to keep all columns in a smaller table:

summary[[:a, :c], :]
Mean

  parameters      mean 
      Symbol   Float64 

           a   40.5000
           c   80.5000

Use Tables.jl to extract named columns, or convert to a DataFrame:

using Tables
Tables.columntable(summary).mean
3-element Vector{Float64}:
 40.5
 60.5
 80.5
using DataFrames
DataFrame(summary)
3×2 DataFrame
Rowparametersmean
SymbolFloat64
1a40.5
2b60.5
3c80.5

Array(summary) returns a vector for one statistic or a matrix for several statistics. Matrix rows follow summary[:, :parameters], and columns follow names(summary)[2:end].

convert(Array, summary) keeps the two-dimensional table layout even for one statistic.

The vector follows the parameter order in the chain. Sort the grouped chain first if you need natural index order:

grouped_chn = Chains(reshape(1:120, 20, 3, 2), ["x[2]", "x[1]", "y"])
grouped_mean = mean(sort(group(grouped_chn, :x)))
Array(grouped_mean)
2-element Vector{Float64}:
 60.5
 40.5

The conversion interface preserves the statistic dimension:

size(convert(Array, grouped_mean))
(2, 1)

API

The methods listed below are defined in src/summarize.jl.

MCMCChains.ChainDataFrame — Type
ChainDataFrame

A table returned by summary functions such as mean and summarystats. Index rows by parameter name and columns by statistic name, as in summary[:a, :mean]. One parameter and one statistic return a scalar. Multiple parameters and one statistic return a vector. The table also supports the Tables.jl interface.

source
MCMCChains.summarize — Method
summarize(chains, funs...[; sections, func_names = [], name = "", append_chains = true])

Summarize chains in a ChainsDataFrame.

Examples

  • summarize(chns) : Complete chain summary
  • summarize(chns[[:parm1, :parm2]]) : Chain summary of selected parameters
  • summarize(chns; sections=[:parameters]) : Chain summary of :parameters section
  • summarize(chns; sections=[:parameters, :internals]) : Chain summary for multiple sections
source