CmdStanPHP

Posterior summaries

Verification

Scope

Default summaries, summaries with measures, every named posterior measure, custom quantile probabilities, and per-chain sampler diagnostics. Identical draws in both implementations.

References

Reference
posterior 1.7.1 summarise_draws() on the same draws, and cmdstanr 0.99.0 (commit 0a54123) diagnostic_summary() on the same CSV files
Versions
PHP 8.5.10, CmdStan 2.40.0, R 4.6.1, cmdstanr 0.99.0 (commit 0a54123), posterior 1.7.1

Data

shoe_latent model
tests/fixtures/latent.stan, 60 observations in 12 groups, 4 chains of 1,000 warmup and 1,000 sampling iterations, seed 20260831. R reads CmdStanPHP's draws as binary doubles.
Fixed draws
Six variables (autoregressive, heavy-tailed, tied, constant, skewed, and shifted between chains), 4 chains × 101 draws, generated with seed 20240607.

Method

CmdStanPHP's draws are passed to R as binary doubles, so posterior summarizes the same values. Sampler diagnostics are compared with CmdStanR's diagnostic_summary() on the same CSV files.

Check
Comparison with a reference implementation
Recorded
2026-11-02, PHP 8.5.10, macOS 27.0.1 (arm64), commit 4ec6712

Tolerances

|x − r| ≤ 1e-13 × max(|r|, 1)

Applies to: Draws passed to R

|x − r| ≤ 1e-12

Applies to: Sampler diagnostics

|x − r| ≤ 1e-8 × max(|r|, 1)

Applies to: Summary measures

R's NA must be NaN

exact equality

Applies to: Variable and column names

x: package value; r: reference value. Absolute error: |x − r|. Relative error: |x − r| / max(|r|, 1). Max errors are over the values a row compares.

Results

69 comparisons in 4 cases: 69 pass, 0 fail, 0 skipped.

By case

Results by case
Case Comparisons Largest abs. error Largest rel. error Status
shoe_latent model, 4 chains × 1,000 draws 29 8.0e-11 7.3e-14 pass
Fixed draws, default measures 9 1.4e-12 6.3e-15 pass
Fixed draws, every named measure 22 1.4e-12 6.3e-15 pass
Fixed draws, probabilities 0.025, 0.5, and 0.975 9 1.2e-12 1.0e-14 pass
All 69 comparisons
Every comparison
Case Quantity Criterion Values Max abs. error Max rel. error Status
shoe_latent model, 4 chains × 1,000 draws variable names exact equality 14 pass
draws passed to R |x − r| ≤ 1e-13 × max(|r|, 1) 56,000 5.1e-15 5.0e-15 pass
mean, with measures |x − r| ≤ 1e-8 × max(|r|, 1) 14 5.0e-16 5.0e-16 pass
mean, default summary |x − r| ≤ 1e-8 × max(|r|, 1) 14 2.3e-15 2.3e-15 pass
median, with measures |x − r| ≤ 1e-8 × max(|r|, 1) 14 4.4e-16 4.4e-16 pass
median, default summary |x − r| ≤ 1e-8 × max(|r|, 1) 14 4.4e-16 4.4e-16 pass
sd, with measures |x − r| ≤ 1e-8 × max(|r|, 1) 14 4.7e-16 4.7e-16 pass
sd, default summary |x − r| ≤ 1e-8 × max(|r|, 1) 14 5.3e-16 5.3e-16 pass
mad, with measures |x − r| ≤ 1e-8 × max(|r|, 1) 14 4.4e-16 4.4e-16 pass
mad, default summary |x − r| ≤ 1e-8 × max(|r|, 1) 14 4.4e-16 4.4e-16 pass
rhat, with measures |x − r| ≤ 1e-8 × max(|r|, 1) 14 4.9e-15 4.9e-15 pass
rhat, default summary |x − r| ≤ 1e-8 × max(|r|, 1) 14 4.9e-15 4.9e-15 pass
ess_bulk, with measures |x − r| ≤ 1e-8 × max(|r|, 1) 14 1.1e-11 2.6e-15 pass
ess_bulk, default summary |x − r| ≤ 1e-8 × max(|r|, 1) 14 7.7e-12 3.2e-15 pass
ess_tail, with measures |x − r| ≤ 1e-8 × max(|r|, 1) 14 5.8e-11 7.3e-14 pass
ess_tail, default summary |x − r| ≤ 1e-8 × max(|r|, 1) 14 8.0e-11 3.1e-14 pass
q5, with measures |x − r| ≤ 1e-8 × max(|r|, 1) 14 4.4e-16 4.4e-16 pass
q5, default summary |x − r| ≤ 1e-8 × max(|r|, 1) 14 4.4e-16 4.4e-16 pass
q25, with measures |x − r| ≤ 1e-8 × max(|r|, 1) 14 5.0e-16 5.0e-16 pass
q25, default summary |x − r| ≤ 1e-8 × max(|r|, 1) 14 5.0e-16 5.0e-16 pass
q50, with measures |x − r| ≤ 1e-8 × max(|r|, 1) 14 4.4e-16 4.4e-16 pass
q50, default summary |x − r| ≤ 1e-8 × max(|r|, 1) 14 4.4e-16 4.4e-16 pass
q75, with measures |x − r| ≤ 1e-8 × max(|r|, 1) 14 4.4e-16 4.4e-16 pass
q75, default summary |x − r| ≤ 1e-8 × max(|r|, 1) 14 4.4e-16 4.4e-16 pass
q95, with measures |x − r| ≤ 1e-8 × max(|r|, 1) 14 4.9e-15 4.5e-15 pass
q95, default summary |x − r| ≤ 1e-8 × max(|r|, 1) 14 4.9e-15 4.5e-15 pass
num_divergent per chain, against diagnostic_summary() |x − r| ≤ 1e-12 4 0 0 pass
num_max_treedepth per chain, against diagnostic_summary() |x − r| ≤ 1e-12 4 0 0 pass
ebfmi per chain, against diagnostic_summary() |x − r| ≤ 1e-12 4 5.6e-16 5.6e-16 pass
Fixed draws, default measures mean |x − r| ≤ 1e-8 × max(|r|, 1) 6 6.7e-16 4.4e-16 pass
median |x − r| ≤ 1e-8 × max(|r|, 1) 6 2.0e-15 1.8e-15 pass
sd |x − r| ≤ 1e-8 × max(|r|, 1) 6 4.4e-15 2.1e-15 pass
mad |x − r| ≤ 1e-8 × max(|r|, 1) 6 4.0e-15 3.4e-15 pass
q5 |x − r| ≤ 1e-8 × max(|r|, 1) 6 4.9e-15 1.8e-15 pass
q95 |x − r| ≤ 1e-8 × max(|r|, 1) 6 3.6e-15 1.7e-15 pass
rhat |x − r| ≤ 1e-8 × max(|r|, 1) 6 3.8e-15 3.8e-15 pass
ess_bulk |x − r| ≤ 1e-8 × max(|r|, 1) 6 2.8e-13 1.3e-15 pass
ess_tail |x − r| ≤ 1e-8 × max(|r|, 1) 6 1.4e-12 6.3e-15 pass
Fixed draws, every named measure mean |x − r| ≤ 1e-8 × max(|r|, 1) 6 6.7e-16 4.4e-16 pass
median |x − r| ≤ 1e-8 × max(|r|, 1) 6 2.0e-15 1.8e-15 pass
sd |x − r| ≤ 1e-8 × max(|r|, 1) 6 4.4e-15 2.1e-15 pass
mad |x − r| ≤ 1e-8 × max(|r|, 1) 6 4.0e-15 3.4e-15 pass
q5 |x − r| ≤ 1e-8 × max(|r|, 1) 6 4.9e-15 1.8e-15 pass
q95 |x − r| ≤ 1e-8 × max(|r|, 1) 6 3.6e-15 1.7e-15 pass
rhat |x − r| ≤ 1e-8 × max(|r|, 1) 6 3.8e-15 3.8e-15 pass
ess_bulk |x − r| ≤ 1e-8 × max(|r|, 1) 6 2.8e-13 1.3e-15 pass
ess_tail |x − r| ≤ 1e-8 × max(|r|, 1) 6 1.4e-12 6.3e-15 pass
mcse_mean |x − r| ≤ 1e-8 × max(|r|, 1) 6 5.0e-16 5.0e-16 pass
mcse_median |x − r| ≤ 1e-8 × max(|r|, 1) 6 1.1e-16 1.1e-16 pass
mcse_sd |x − r| ≤ 1e-8 × max(|r|, 1) 6 4.4e-16 4.4e-16 pass
mcse_q5 |x − r| ≤ 1e-8 × max(|r|, 1) 6 4.2e-16 4.2e-16 pass
mcse_q95 |x − r| ≤ 1e-8 × max(|r|, 1) 6 3.3e-16 3.3e-16 pass
rhat_basic |x − r| ≤ 1e-8 × max(|r|, 1) 6 3.6e-15 3.4e-15 pass
ess_basic |x − r| ≤ 1e-8 × max(|r|, 1) 6 3.4e-13 1.8e-15 pass
ess_mean |x − r| ≤ 1e-8 × max(|r|, 1) 6 3.4e-13 1.8e-15 pass
ess_sd |x − r| ≤ 1e-8 × max(|r|, 1) 6 4.5e-13 2.5e-15 pass
ess_median |x − r| ≤ 1e-8 × max(|r|, 1) 6 5.7e-13 1.9e-15 pass
ess_q5 |x − r| ≤ 1e-8 × max(|r|, 1) 6 1.4e-12 6.3e-15 pass
ess_q95 |x − r| ≤ 1e-8 × max(|r|, 1) 6 5.1e-13 1.1e-15 pass
column names and order exact equality 22 pass
Fixed draws, probabilities 0.025, 0.5, and 0.975 q2.5 |x − r| ≤ 1e-8 × max(|r|, 1) 6 4.9e-15 1.6e-15 pass
q50 |x − r| ≤ 1e-8 × max(|r|, 1) 6 2.0e-15 1.8e-15 pass
q97.5 |x − r| ≤ 1e-8 × max(|r|, 1) 6 3.6e-15 1.4e-15 pass
mcse_q2.5 |x − r| ≤ 1e-8 × max(|r|, 1) 6 4.4e-15 3.2e-15 pass
mcse_q50 |x − r| ≤ 1e-8 × max(|r|, 1) 6 1.1e-16 1.1e-16 pass
mcse_q97.5 |x − r| ≤ 1e-8 × max(|r|, 1) 6 4.9e-15 4.2e-15 pass
ess_q2.5 |x − r| ≤ 1e-8 × max(|r|, 1) 6 1.2e-12 1.0e-14 pass
ess_q50 |x − r| ≤ 1e-8 × max(|r|, 1) 6 5.7e-13 1.9e-15 pass
ess_q97.5 |x − r| ≤ 1e-8 × max(|r|, 1) 6 7.4e-13 2.3e-15 pass

Reproduction

From the repository root
php verification/compatibility/run.php
Raw record
site/verifications/posterior-summaries.json
Full results
verification/compatibility/results.json