Skip to content

Commit e1041f5

Browse files
torfjeldecpfiffer
andauthored
Allow show to function properly even if some statistic computations fail (#412)
* allow show to function properly even if some statistic computations fail * added patch version * fixed ordering of stats in case some are missing * added missing ) --------- Co-authored-by: Cameron Pfiffer <[email protected]>
1 parent 738ba9f commit e1041f5

File tree

1 file changed

+36
-17
lines changed

1 file changed

+36
-17
lines changed

src/stats.jl

Lines changed: 36 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -299,23 +299,42 @@ function summarystats(
299299
_chains = Chains(chains, _clean_sections(chains, sections))
300300

301301
# Calculate MCSE and ESS/R-hat separately.
302-
mcse_df = MCMCDiagnosticTools.mcse(
303-
_chains; sections = nothing, autocov_method = autocov_method, maxlag = maxlag,
304-
)
305-
ess_rhat_rank_df = MCMCDiagnosticTools.ess_rhat(
306-
_chains; sections = nothing, autocov_method = autocov_method, maxlag = maxlag, kind=:rank
307-
)
308-
ess_tail_df = MCMCDiagnosticTools.ess(
309-
_chains; sections = nothing, autocov_method = autocov_method, maxlag = maxlag, kind=:tail
310-
)
311-
nt_additional = (
312-
mcse=mcse_df.nt.mcse,
313-
ess_bulk=ess_rhat_rank_df.nt.ess,
314-
ess_tail=ess_tail_df.nt.ess,
315-
rhat=ess_rhat_rank_df.nt.rhat,
316-
ess_per_sec=ess_rhat_rank_df.nt.ess_per_sec,
317-
)
318-
additional_df = ChainDataFrame("Additional", nt_additional)
302+
nt_additional = NamedTuple()
303+
try
304+
mcse_df = MCMCDiagnosticTools.mcse(
305+
_chains; sections = nothing, autocov_method = autocov_method, maxlag = maxlag,
306+
)
307+
nt_additional = merge(nt_additional, (; mcse=mcse_df.nt.mcse))
308+
catch e
309+
@warn "MCSE calculation failed: $e"
310+
end
311+
312+
try
313+
ess_tail_df = MCMCDiagnosticTools.ess(
314+
_chains; sections = nothing, autocov_method = autocov_method, maxlag = maxlag, kind=:tail
315+
)
316+
nt_additional = merge(nt_additional, (ess_tail=ess_tail_df.nt.ess,))
317+
catch e
318+
@warn "Tail ESS calculation failed: $e"
319+
end
320+
321+
try
322+
ess_rhat_rank_df = MCMCDiagnosticTools.ess_rhat(
323+
_chains; sections = nothing, autocov_method = autocov_method, maxlag = maxlag, kind=:rank
324+
)
325+
nt_ess_rhat_rank = (
326+
ess_bulk=ess_rhat_rank_df.nt.ess,
327+
rhat=ess_rhat_rank_df.nt.rhat,
328+
ess_per_sec=ess_rhat_rank_df.nt.ess_per_sec
329+
)
330+
nt_additional = merge(nt_additional, nt_ess_rhat_rank)
331+
catch e
332+
@warn "Bulk ESS/R-hat calculation failed: $e"
333+
end
334+
335+
# Possibly re-order the columns to stay backwards-compatible.
336+
additional_keys = (:mcse, :ess_bulk, :ess_tail, :rhat, :ess_per_sec)
337+
additional_df = ChainDataFrame("Additional", (; ((k, nt_additional[k]) for k in additional_keys if k keys(nt_additional))...))
319338

320339
# Summarize.
321340
summary_df = summarize(

0 commit comments

Comments
 (0)