Initializing HMC with Pathfinder
The MCMC warm-up phase
When using MCMC to draw samples from some target distribution, there is often a lengthy warm-up phase with 2 phases:
- converge to the typical set (the region of the target distribution where the bulk of the probability mass is located)
- adapt any tunable parameters of the MCMC sampler (optional)
While (1) often happens fairly quickly, (2) usually requires a lengthy exploration of the typical set to iteratively adapt parameters suitable for further exploration. An example is the widely used windowed adaptation scheme of Hamiltonian Monte Carlo (HMC) in Stan, where a step size and positive definite metric (aka mass matrix) are adapted.[1] For posteriors with complex geometry, the adaptation phase can require many evaluations of the gradient of the log density function of the target distribution.
Pathfinder can be used to initialize MCMC, and in particular HMC, in 3 ways:
- Initialize MCMC from one of Pathfinder's draws (replace phase 1 of the warm-up).
- Initialize an HMC metric adaptation from the inverse of the covariance of the multivariate normal approximation (replace the first window of phase 2 of the warm-up).
- Use the inverse of the covariance as the metric without further adaptation (replace phase 2 of the warm-up).
This tutorial demonstrates all three approaches with DynamicHMC.jl and AdvancedHMC.jl. Both of these packages have standalone implementations of adaptive HMC (aka NUTS) and can be used independently of any probabilistic programming language (PPL). Both the Turing and Soss PPLs have some DynamicHMC integration, while Turing also integrates with AdvancedHMC.
For demonstration purposes, we'll use the following dummy data:
using LinearAlgebra, Pathfinder, Random, StatsFuns, StatsPlots
Random.seed!(91)
x = 0:0.01:1
y = @. sin(10x) + randn() * 0.2 + x
scatter(x, y; xlabel="x", ylabel="y", legend=false, msw=0, ms=2)
We'll fit this using a simple polynomial regression model:
\[\begin{aligned} \sigma &\sim \text{Half-Normal}(\mu=0, \sigma=1)\\ \alpha, \beta_j &\sim \mathrm{Normal}(\mu=0, \sigma=1)\\ \hat{y}_i &= \alpha + \sum_{j=1}^J x_i^j \beta_j\\ y_i &\sim \mathrm{Normal}(\mu=\hat{y}_i, \sigma=\sigma) \end{aligned}\]
We just need to implement the log-density function of the resulting posterior.
struct RegressionProblem{X,Z,Y}
x::X
J::Int
z::Z
y::Y
end
function RegressionProblem(x, J, y)
z = x .* (1:J)'
return RegressionProblem(x, J, z, y)
end
function (prob::RegressionProblem)(θ)
σ = θ.σ
α = θ.α
β = θ.β
z = prob.z
y = prob.y
lp = normlogpdf(σ) + logtwo
lp += normlogpdf(α)
lp += sum(normlogpdf, β)
y_hat = muladd(z, β, α)
lp += sum(eachindex(y_hat, y)) do i
return normlogpdf(y_hat[i], σ, y[i])
end
return lp
end
J = 3
dim = J + 2
model = RegressionProblem(x, J, y)
ndraws = 1_000;
DynamicHMC.jl
To use DynamicHMC, we first need to transform our model to an unconstrained space using TransformVariables.jl and wrap it in a type that implements the LogDensityProblems.jl interface:
using DynamicHMC, ForwardDiff, LogDensityProblems, LogDensityProblemsAD, TransformVariables
using TransformedLogDensities: TransformedLogDensity
transform = as((σ=asℝ₊, α=asℝ, β=as(Array, J)))
P = TransformedLogDensity(transform, model)
∇P = ADgradient(:ForwardDiff, P)
ForwardDiff AD wrapper for TransformedLogDensity of dimension 5, w/ chunk size 5
Pathfinder can take any object that implements this interface.
result_pf = pathfinder(∇P)
Single-path Pathfinder result
tries: 1
draws: 5
fit iteration: 17 (total: 18)
fit ELBO: -117.48 ± 0.26
fit distribution: Distributions.MvNormal{Float64, Pathfinder.WoodburyPDMat{Float64, LinearAlgebra.Diagonal{Float64, Vector{Float64}}, Matrix{Float64}, Matrix{Float64}, Pathfinder.WoodburyPDFactorization{Float64, LinearAlgebra.Diagonal{Float64, Vector{Float64}}, LinearAlgebra.QRCompactWYQ{Float64, Matrix{Float64}, Matrix{Float64}}, LinearAlgebra.UpperTriangular{Float64, Matrix{Float64}}}}, Vector{Float64}}(
dim: 5
μ: [-0.3519374273204352, 0.24690059981721146, 0.05827588220627803, 0.11655176441277385, 0.17482764661876085]
Σ: [0.0049591224099863095 -3.311398423331392e-5 … -0.00010842041610912824 8.502868810829432e-5; -3.311398423331392e-5 0.018881672968748812 … -0.003976761689243613 -0.006062662647727625; … ; -0.00010842041610912824 -0.003976761689243613 … 0.7170576790755043 -0.427267718387669; 8.502868810829432e-5 -0.006062662647727625 … -0.427267718387669 0.2601283251145933]
)
init_params = result_pf.draws[:, 1]
5-element Vector{Float64}:
-0.2224935031067182
0.46141802142532895
-0.27508471907321225
1.1420276998152994
-0.5639123902280768
inv_metric = result_pf.fit_distribution.Σ
5×5 Pathfinder.WoodburyPDMat{Float64, LinearAlgebra.Diagonal{Float64, Vector{Float64}}, Matrix{Float64}, Matrix{Float64}, Pathfinder.WoodburyPDFactorization{Float64, LinearAlgebra.Diagonal{Float64, Vector{Float64}}, LinearAlgebra.QRCompactWYQ{Float64, Matrix{Float64}, Matrix{Float64}}, LinearAlgebra.UpperTriangular{Float64, Matrix{Float64}}}}:
0.00495912 -3.3114e-5 -4.65522e-6 -0.00010842 8.50287e-5
-3.3114e-5 0.0188817 -0.0020078 -0.00397676 -0.00606266
-4.65522e-6 -0.0020078 0.0336821 -0.144189 0.0862468
-0.00010842 -0.00397676 -0.144189 0.717058 -0.427268
8.50287e-5 -0.00606266 0.0862468 -0.427268 0.260128
Initializing from Pathfinder's draws
Here we just need to pass one of the draws as the initial point q
:
result_dhmc1 = mcmc_with_warmup(
Random.GLOBAL_RNG,
∇P,
ndraws;
initialization=(; q=init_params),
reporter=NoProgressReport(),
)
(posterior_matrix = [-0.3412405459909631 -0.4170851197347787 … -0.46041371698459743 -0.4011603493166512; 0.3045707128956131 0.36467453355341306 … 0.27952068416732595 0.2597608612778835; … ; -0.35806509302276385 -0.20611394131828942 … 1.07417718022727 1.016601764789458; 0.5394336857197687 0.5075169542357757 … 0.0009875550506012881 -0.01788564159116815], tree_statistics = DynamicHMC.TreeStatisticsNUTS[DynamicHMC.TreeStatisticsNUTS(-114.14525485484648, 4, turning at positions -16:-19, 0.9862205522569161, 27, DynamicHMC.Directions(0x032d8048)), DynamicHMC.TreeStatisticsNUTS(-113.98301761792177, 5, turning at positions -29:2, 0.9902777158948429, 31, DynamicHMC.Directions(0x507be662)), DynamicHMC.TreeStatisticsNUTS(-114.9064794028293, 6, turning at positions 18:81, 0.9408375430433219, 127, DynamicHMC.Directions(0xb54ba851)), DynamicHMC.TreeStatisticsNUTS(-115.3701379324056, 6, turning at positions -23:40, 0.9366001318045118, 63, DynamicHMC.Directions(0x3af727e8)), DynamicHMC.TreeStatisticsNUTS(-116.47766910004954, 6, turning at positions -35:28, 0.9987757268875384, 63, DynamicHMC.Directions(0x1ef96a9c)), DynamicHMC.TreeStatisticsNUTS(-120.00663262510562, 6, turning at positions -8:55, 0.8214885731987472, 63, DynamicHMC.Directions(0xf3f0c2b7)), DynamicHMC.TreeStatisticsNUTS(-118.78528855026464, 6, turning at positions -12:51, 0.9958768965872059, 63, DynamicHMC.Directions(0xc7c37e33)), DynamicHMC.TreeStatisticsNUTS(-120.3946461338778, 6, turning at positions -10:53, 0.9616190649524977, 63, DynamicHMC.Directions(0xf575db75)), DynamicHMC.TreeStatisticsNUTS(-120.62246024896044, 7, turning at positions -59:68, 0.8876876877314692, 127, DynamicHMC.Directions(0x7ddeb744)), DynamicHMC.TreeStatisticsNUTS(-120.15340931713118, 6, turning at positions -30:33, 0.993592252282268, 63, DynamicHMC.Directions(0x19444161)) … DynamicHMC.TreeStatisticsNUTS(-116.37213543775337, 6, turning at positions 23:86, 0.9872096116370161, 127, DynamicHMC.Directions(0x0d9fa3d6)), DynamicHMC.TreeStatisticsNUTS(-116.38780902668951, 6, turning at positions -33:-96, 0.9389447184220459, 127, DynamicHMC.Directions(0xf5a7e51f)), DynamicHMC.TreeStatisticsNUTS(-116.826727700531, 5, turning at positions -5:-8, 0.925867203764391, 39, DynamicHMC.Directions(0xef142b9f)), DynamicHMC.TreeStatisticsNUTS(-115.27750954459073, 5, turning at positions 4:35, 0.9997076891004354, 63, DynamicHMC.Directions(0xaf2c0a23)), DynamicHMC.TreeStatisticsNUTS(-114.29236957854708, 5, turning at positions 20:51, 0.9999990706338214, 63, DynamicHMC.Directions(0x96460573)), DynamicHMC.TreeStatisticsNUTS(-115.51443346002517, 6, turning at positions -4:59, 0.9752253373512486, 63, DynamicHMC.Directions(0x1a916bfb)), DynamicHMC.TreeStatisticsNUTS(-116.32457686707203, 6, turning at positions 26:89, 0.9843814603584213, 127, DynamicHMC.Directions(0x14ae2ad9)), DynamicHMC.TreeStatisticsNUTS(-116.29531740983084, 6, turning at positions -7:56, 0.8137934186971354, 63, DynamicHMC.Directions(0x32ed6978)), DynamicHMC.TreeStatisticsNUTS(-117.93208810050099, 6, turning at positions 6:69, 0.9903359426498987, 127, DynamicHMC.Directions(0x0778b045)), DynamicHMC.TreeStatisticsNUTS(-116.44924878001504, 5, turning at positions -20:11, 0.9941095761857561, 31, DynamicHMC.Directions(0xa9d9c6ab))], κ = Gaussian kinetic energy (Diagonal), √diag(M⁻¹): [0.08869613477055453, 0.15331203647369712, 0.9256337201223703, 0.6942164457062617, 0.506147220916694], ϵ = 0.048324753132567275)
Initializing metric adaptation from Pathfinder's estimate
To start with Pathfinder's inverse metric estimate, we just need to initialize a GaussianKineticEnergy
object with it as input:
result_dhmc2 = mcmc_with_warmup(
Random.GLOBAL_RNG,
∇P,
ndraws;
initialization=(; q=init_params, κ=GaussianKineticEnergy(inv_metric)),
warmup_stages=default_warmup_stages(; M=Symmetric),
reporter=NoProgressReport(),
)
(posterior_matrix = [-0.1464167434183906 -0.23740723925620355 … -0.3351353518429406 -0.28704156943900294; -0.08067001815646768 0.08500685843703569 … 0.3732852604726868 0.3841596608668608; … ; 0.0324889529666727 -0.2523908457162586 … -0.21915116107353083 -0.5653718644348034; 0.3417969177362027 0.502065444031663 … 0.3880851429871406 0.8600960067612551], tree_statistics = DynamicHMC.TreeStatisticsNUTS[DynamicHMC.TreeStatisticsNUTS(-119.64891443426312, 3, turning at positions -4:3, 0.9380712947483321, 7, DynamicHMC.Directions(0xa0fead5b)), DynamicHMC.TreeStatisticsNUTS(-118.222837343832, 2, turning at positions -1:2, 0.9999999999999999, 3, DynamicHMC.Directions(0x74ddaf76)), DynamicHMC.TreeStatisticsNUTS(-115.55937643627719, 2, turning at positions -4:-7, 0.9814516140813867, 7, DynamicHMC.Directions(0x5c61dab0)), DynamicHMC.TreeStatisticsNUTS(-116.04988034983377, 3, turning at positions -7:0, 0.9262471037059253, 7, DynamicHMC.Directions(0x043eb2e0)), DynamicHMC.TreeStatisticsNUTS(-116.56449955185056, 2, turning at positions 4:7, 0.987139370253514, 7, DynamicHMC.Directions(0xcdcf9a57)), DynamicHMC.TreeStatisticsNUTS(-113.67757497115986, 2, turning at positions 3:6, 0.9122202444847967, 7, DynamicHMC.Directions(0xf039004e)), DynamicHMC.TreeStatisticsNUTS(-113.19273005736329, 2, turning at positions 4:7, 0.9636691847201068, 7, DynamicHMC.Directions(0x66cc4c9f)), DynamicHMC.TreeStatisticsNUTS(-115.9008642457226, 2, turning at positions -4:-7, 0.9424516316594742, 7, DynamicHMC.Directions(0x172fca18)), DynamicHMC.TreeStatisticsNUTS(-116.38183534681743, 3, turning at positions -1:6, 0.9779182160926867, 7, DynamicHMC.Directions(0x2ff0f6de)), DynamicHMC.TreeStatisticsNUTS(-116.28412900273405, 3, turning at positions -6:1, 0.9973269906037345, 7, DynamicHMC.Directions(0x20f66c51)) … DynamicHMC.TreeStatisticsNUTS(-116.98332250594667, 2, turning at positions -3:0, 0.8602700801701157, 3, DynamicHMC.Directions(0x9a108760)), DynamicHMC.TreeStatisticsNUTS(-117.98628134893605, 3, turning at positions -3:4, 0.8146138177453305, 7, DynamicHMC.Directions(0x5c3f1344)), DynamicHMC.TreeStatisticsNUTS(-116.74470277885952, 3, turning at positions -2:5, 0.9906430061807275, 7, DynamicHMC.Directions(0xf72ee0b5)), DynamicHMC.TreeStatisticsNUTS(-116.05924173657883, 4, turning at positions 0:15, 0.9309646748791001, 15, DynamicHMC.Directions(0x07bcc6bf)), DynamicHMC.TreeStatisticsNUTS(-116.29740465846075, 3, turning at positions 0:7, 0.9593313129489935, 7, DynamicHMC.Directions(0xeb13203f)), DynamicHMC.TreeStatisticsNUTS(-116.9043299886622, 4, turning at positions -12:3, 0.8133203451142353, 15, DynamicHMC.Directions(0xd878bab3)), DynamicHMC.TreeStatisticsNUTS(-118.13878193113096, 3, turning at positions -4:3, 0.8477175939039514, 7, DynamicHMC.Directions(0xa6df8483)), DynamicHMC.TreeStatisticsNUTS(-119.70512907888455, 3, turning at positions -6:1, 0.8658549122207525, 7, DynamicHMC.Directions(0x8c2d9b91)), DynamicHMC.TreeStatisticsNUTS(-115.744066906302, 3, turning at positions -5:2, 0.9959352832772886, 7, DynamicHMC.Directions(0xb87c34f2)), DynamicHMC.TreeStatisticsNUTS(-119.23912758175422, 2, turning at positions 2:5, 0.8224669082102981, 7, DynamicHMC.Directions(0xe855fe75))], κ = Gaussian kinetic energy (Symmetric), √diag(M⁻¹): [0.09575203714009892, 0.1520647913847786, 0.927698905842215, 0.8287654393030375, 0.6092104837297332], ϵ = 0.3721212012523526)
We also specified that DynamicHMC should tune a dense Symmetric
matrix. However, we could also have requested a Diagonal
metric.
Use Pathfinder's metric estimate for sampling
To turn off metric adaptation entirely and use Pathfinder's estimate, we just set the number and size of the metric adaptation windows to 0.
result_dhmc3 = mcmc_with_warmup(
Random.GLOBAL_RNG,
∇P,
ndraws;
initialization=(; q=init_params, κ=GaussianKineticEnergy(inv_metric)),
warmup_stages=default_warmup_stages(; middle_steps=0, doubling_stages=0),
reporter=NoProgressReport(),
)
(posterior_matrix = [-0.3733623148804505 -0.3088164337303296 … -0.3490030876902151 -0.3511791351769841; 0.4816048837578013 0.40065880794985653 … 0.2173310752238738 0.3100568316702414; … ; -0.9434305466904477 0.8835683383294203 … 0.1403091361619621 -0.2572552738074885; 0.02467482906953959 -1.051802368053576 … -0.07808417493458011 0.10100719485582432], tree_statistics = DynamicHMC.TreeStatisticsNUTS[DynamicHMC.TreeStatisticsNUTS(-120.72090525592459, 5, turning at positions 30:37, 0.9933204519447291, 55, DynamicHMC.Directions(0x15ddb56d)), DynamicHMC.TreeStatisticsNUTS(-120.73841887409964, 2, turning at positions -4:-7, 0.7856742633950509, 7, DynamicHMC.Directions(0x8524aea8)), DynamicHMC.TreeStatisticsNUTS(-117.21279402483178, 2, turning at positions -3:-6, 0.9399668540837695, 7, DynamicHMC.Directions(0xebffa421)), DynamicHMC.TreeStatisticsNUTS(-115.4870889249574, 2, turning at positions -3:0, 0.924567209878597, 3, DynamicHMC.Directions(0x6ff453b8)), DynamicHMC.TreeStatisticsNUTS(-123.39669084149129, 2, turning at positions -2:-5, 0.6402710154549979, 7, DynamicHMC.Directions(0xa0d091a2)), DynamicHMC.TreeStatisticsNUTS(-122.85270572431705, 3, turning at positions -5:2, 0.9472753268262505, 7, DynamicHMC.Directions(0xa0f3035a)), DynamicHMC.TreeStatisticsNUTS(-120.2420390306208, 3, turning at positions -3:4, 0.9999999999999999, 7, DynamicHMC.Directions(0x073a432c)), DynamicHMC.TreeStatisticsNUTS(-119.21783535088174, 3, turning at positions -6:1, 0.9978432450862196, 7, DynamicHMC.Directions(0xf4daeb19)), DynamicHMC.TreeStatisticsNUTS(-121.08066383387015, 3, turning at positions -2:5, 0.9147077117928849, 7, DynamicHMC.Directions(0x661fbe9d)), DynamicHMC.TreeStatisticsNUTS(-117.51130415622677, 3, turning at positions -4:3, 0.9999999999999999, 7, DynamicHMC.Directions(0x0333dbfb)) … DynamicHMC.TreeStatisticsNUTS(-115.89258640288939, 2, turning at positions 0:3, 0.978182998718744, 3, DynamicHMC.Directions(0xbeb91efb)), DynamicHMC.TreeStatisticsNUTS(-116.95523460669148, 4, turning at positions -17:-24, 0.932309888430465, 31, DynamicHMC.Directions(0xb4369587)), DynamicHMC.TreeStatisticsNUTS(-117.66347417099315, 3, turning at positions -3:4, 0.7904817683408186, 7, DynamicHMC.Directions(0xace3ca44)), DynamicHMC.TreeStatisticsNUTS(-116.169814997754, 2, turning at positions -2:1, 0.8701010914934723, 3, DynamicHMC.Directions(0x664b2e35)), DynamicHMC.TreeStatisticsNUTS(-118.871665139584, 2, turning at positions -2:1, 0.9313975313462236, 3, DynamicHMC.Directions(0x4e419c59)), DynamicHMC.TreeStatisticsNUTS(-122.95561593529484, 3, turning at positions 6:13, 0.953714830331071, 15, DynamicHMC.Directions(0x4c5bddfd)), DynamicHMC.TreeStatisticsNUTS(-124.59722585574245, 3, turning at positions -4:3, 0.6607424920989999, 7, DynamicHMC.Directions(0xcdc40f4b)), DynamicHMC.TreeStatisticsNUTS(-119.31675872567227, 5, turning at positions 17:20, 0.9682091290203075, 43, DynamicHMC.Directions(0xfc951028)), DynamicHMC.TreeStatisticsNUTS(-113.31589650941636, 3, turning at positions -2:5, 0.9880403071343108, 7, DynamicHMC.Directions(0x2e798fbd)), DynamicHMC.TreeStatisticsNUTS(-113.67688178649166, 3, turning at positions -2:-9, 0.992606865288171, 15, DynamicHMC.Directions(0xf9c27dd6))], κ = Gaussian kinetic energy (WoodburyPDMat), √diag(M⁻¹): [0.07042103670059328, 0.13741059991408527, 0.1835267592270858, 0.846792583266708, 0.5100277689641941], ϵ = 0.7077940031437842)
AdvancedHMC.jl
Similar to Pathfinder and DynamicHMC, AdvancedHMC can also work with a LogDensityProblem:
using AdvancedHMC
nadapts = 500;
Initializing from Pathfinder's draws
metric = DiagEuclideanMetric(dim)
hamiltonian = Hamiltonian(metric, ∇P)
ϵ = find_good_stepsize(hamiltonian, init_params)
integrator = Leapfrog(ϵ)
kernel = HMCKernel(Trajectory{MultinomialTS}(integrator, GeneralisedNoUTurn()))
adaptor = StepSizeAdaptor(0.8, integrator)
samples_ahmc1, stats_ahmc1 = sample(
hamiltonian,
kernel,
init_params,
ndraws + nadapts,
adaptor,
nadapts;
drop_warmup=true,
progress=false,
)
([[-0.365596740125783, 0.17059650569800316, 1.7106733614219014, 1.9226687888044092, -1.5793105571462596], [-0.2567731040071911, 0.267162092071601, 2.102592812479207, -0.03350435470066741, -0.33490013820872944], [-0.43009377324013187, 0.24318630747641287, -1.9706991914007892, 0.4525896652309068, 0.5838541773972088], [-0.48069518613521445, 0.13174728770968158, -1.284608862736512, -0.676186172202712, 1.2581093748114065], [-0.2880978603620167, 0.09140046154712576, -1.4050781339771286, -0.616055115710048, 1.252775036600405], [-0.4105966189337662, 0.042488253953525484, -1.5531189912206003, -0.7916538214549118, 1.396327120926058], [-0.2537942959563149, 0.2121270451106063, -1.7133630891120257, -0.8012198032549152, 1.3141851931671786], [-0.23297957239423478, 0.28361290884865953, -0.8222504169111231, -0.116924062730113, 0.6361048498608369], [-0.29466851237770153, 0.2933170361325806, -0.6065737016705158, 0.5835275511005248, 0.03629669056245648], [-0.4138456402760152, 0.13438713708628688, -0.6006194488384454, 0.8407387642807409, -0.0012389372425721107] … [-0.27088686061471734, 0.05789447728553368, -0.05578881891851032, 0.8566712240926333, -0.13216913835268657], [-0.2941284508872779, 0.4201992644107405, -0.6470402660562693, 0.4099623389697281, 0.17086495215277775], [-0.22719916891702777, 0.35017856629552996, 0.6636700523914725, 0.3887691191766755, -0.37406898535102784], [-0.3612378546022489, 0.2215456449672544, 0.8169426300363867, 0.3769694102170507, -0.39179618808566863], [-0.40271199176192646, 0.31442398409710703, 0.8415628383325356, 0.42557843188245903, -0.27842804993124076], [-0.20212202918160604, 0.23326939702286098, 0.025583574099054138, 0.12923073903248025, 0.22920330235002767], [-0.3687469942299848, 0.41525479737216914, 0.04127782330858672, -0.10852760124932706, 0.12049000853541937], [-0.3736177024244123, 0.1675616051913491, -0.19959248484852693, 1.5270643984992638, -0.6233122531374252], [-0.4061824559055249, 0.14773653962388797, 0.6441818160511852, 0.19456975247386127, -0.03652492373470852], [-0.4540085467116301, 0.09158263593798986, 0.658241354591661, 0.2940589997704758, -0.02951682986598845]], NamedTuple[(n_steps = 39, is_accept = true, acceptance_rate = 0.9989845571860547, log_density = -117.21997628727328, hamiltonian_energy = 118.4741128892763, hamiltonian_energy_error = -0.031511632073602414, max_hamiltonian_energy_error = -0.2209719714144427, tree_depth = 5, numerical_error = false, step_size = 0.04005901000802962, nom_step_size = 0.04005901000802962, is_adapt = false), (n_steps = 127, is_accept = true, acceptance_rate = 0.7057230057766004, log_density = -116.87282385272438, hamiltonian_energy = 123.28430742704134, hamiltonian_energy_error = 0.599077704337418, max_hamiltonian_energy_error = 1.1047343198018211, tree_depth = 6, numerical_error = false, step_size = 0.04005901000802962, nom_step_size = 0.04005901000802962, is_adapt = false), (n_steps = 127, is_accept = true, acceptance_rate = 0.9766451534044202, log_density = -115.65254033125211, hamiltonian_energy = 118.58879295082508, hamiltonian_energy_error = -0.5668212333949612, max_hamiltonian_energy_error = -0.9780395004346332, tree_depth = 7, numerical_error = false, step_size = 0.04005901000802962, nom_step_size = 0.04005901000802962, is_adapt = false), (n_steps = 63, is_accept = true, acceptance_rate = 0.987879452936739, log_density = -117.14269878419624, hamiltonian_energy = 120.65241096415772, hamiltonian_energy_error = 0.2197558296968225, max_hamiltonian_energy_error = -0.396196238874964, tree_depth = 6, numerical_error = false, step_size = 0.04005901000802962, nom_step_size = 0.04005901000802962, is_adapt = false), (n_steps = 7, is_accept = true, acceptance_rate = 0.9435515946692828, log_density = -115.10644796643132, hamiltonian_energy = 119.32562826402524, hamiltonian_energy_error = -0.4570341956466706, max_hamiltonian_energy_error = -0.5538392866526323, tree_depth = 3, numerical_error = false, step_size = 0.04005901000802962, nom_step_size = 0.04005901000802962, is_adapt = false), (n_steps = 47, is_accept = true, acceptance_rate = 0.9200222810743852, log_density = -116.31008167808628, hamiltonian_energy = 122.61482083989141, hamiltonian_energy_error = 0.05374508955716806, max_hamiltonian_energy_error = 0.3035919494219286, tree_depth = 5, numerical_error = false, step_size = 0.04005901000802962, nom_step_size = 0.04005901000802962, is_adapt = false), (n_steps = 15, is_accept = true, acceptance_rate = 0.638767027783684, log_density = -117.27714465973006, hamiltonian_energy = 118.62028059875679, hamiltonian_energy_error = 0.763767727747279, max_hamiltonian_energy_error = 0.9252199267461805, tree_depth = 3, numerical_error = false, step_size = 0.04005901000802962, nom_step_size = 0.04005901000802962, is_adapt = false), (n_steps = 35, is_accept = true, acceptance_rate = 0.956520470958761, log_density = -114.16866198475039, hamiltonian_energy = 117.72563074979317, hamiltonian_energy_error = -0.4836370328169579, max_hamiltonian_energy_error = -0.9337622409236559, tree_depth = 5, numerical_error = false, step_size = 0.04005901000802962, nom_step_size = 0.04005901000802962, is_adapt = false), (n_steps = 127, is_accept = true, acceptance_rate = 0.8916545320464725, log_density = -112.9611921225575, hamiltonian_energy = 115.48634003453132, hamiltonian_energy_error = -0.0957307689057103, max_hamiltonian_energy_error = 0.5445157687399131, tree_depth = 6, numerical_error = false, step_size = 0.04005901000802962, nom_step_size = 0.04005901000802962, is_adapt = false), (n_steps = 63, is_accept = true, acceptance_rate = 0.9847561037191847, log_density = -113.68410513078796, hamiltonian_energy = 114.26916118055362, hamiltonian_energy_error = 0.0674622775509306, max_hamiltonian_energy_error = -0.10146463426612229, tree_depth = 6, numerical_error = false, step_size = 0.04005901000802962, nom_step_size = 0.04005901000802962, is_adapt = false) … (n_steps = 31, is_accept = true, acceptance_rate = 0.9882462513384364, log_density = -114.6014860865269, hamiltonian_energy = 116.10141538872219, hamiltonian_energy_error = -0.09068637653221856, max_hamiltonian_energy_error = -0.46061276017796615, tree_depth = 4, numerical_error = false, step_size = 0.04005901000802962, nom_step_size = 0.04005901000802962, is_adapt = false), (n_steps = 63, is_accept = true, acceptance_rate = 0.8042143056914448, log_density = -113.89941255023511, hamiltonian_energy = 117.24796632560897, hamiltonian_energy_error = -0.07428818886717181, max_hamiltonian_energy_error = 0.6863531516107031, tree_depth = 5, numerical_error = false, step_size = 0.04005901000802962, nom_step_size = 0.04005901000802962, is_adapt = false), (n_steps = 71, is_accept = true, acceptance_rate = 0.5762232184266781, log_density = -117.24004814421869, hamiltonian_energy = 118.88785849762338, hamiltonian_energy_error = 0.9328476617493493, max_hamiltonian_energy_error = 2.3204003828717674, tree_depth = 6, numerical_error = false, step_size = 0.04005901000802962, nom_step_size = 0.04005901000802962, is_adapt = false), (n_steps = 15, is_accept = true, acceptance_rate = 0.7001063780151207, log_density = -119.89378492113195, hamiltonian_energy = 121.34309924838409, hamiltonian_energy_error = 1.5525410863216251, max_hamiltonian_energy_error = 1.8470537494762027, tree_depth = 3, numerical_error = false, step_size = 0.04005901000802962, nom_step_size = 0.04005901000802962, is_adapt = false), (n_steps = 7, is_accept = true, acceptance_rate = 0.9413240326694675, log_density = -113.69415723578166, hamiltonian_energy = 118.61728367227171, hamiltonian_energy_error = -3.5126942219948916, max_hamiltonian_energy_error = -3.5126942219948916, tree_depth = 2, numerical_error = false, step_size = 0.04005901000802962, nom_step_size = 0.04005901000802962, is_adapt = false), (n_steps = 55, is_accept = true, acceptance_rate = 0.9184814224340566, log_density = -114.60023036378188, hamiltonian_energy = 118.47592921770486, hamiltonian_energy_error = 0.020524682261680027, max_hamiltonian_energy_error = 0.7350231545286903, tree_depth = 5, numerical_error = false, step_size = 0.04005901000802962, nom_step_size = 0.04005901000802962, is_adapt = false), (n_steps = 7, is_accept = true, acceptance_rate = 0.5876020077890851, log_density = -117.97625869446203, hamiltonian_energy = 120.0099429542013, hamiltonian_energy_error = 1.3059739387069413, max_hamiltonian_energy_error = 1.4463357793961222, tree_depth = 3, numerical_error = false, step_size = 0.04005901000802962, nom_step_size = 0.04005901000802962, is_adapt = false), (n_steps = 47, is_accept = true, acceptance_rate = 0.9991364627461081, log_density = -113.72849784710539, hamiltonian_energy = 117.53657682011209, hamiltonian_energy_error = -2.2845344209433875, max_hamiltonian_energy_error = -2.4005653694473637, tree_depth = 5, numerical_error = false, step_size = 0.04005901000802962, nom_step_size = 0.04005901000802962, is_adapt = false), (n_steps = 47, is_accept = true, acceptance_rate = 0.8651644346138977, log_density = -112.92690956654481, hamiltonian_energy = 117.67599094472962, hamiltonian_energy_error = 0.01755193476179784, max_hamiltonian_energy_error = 0.32386516025353274, tree_depth = 5, numerical_error = false, step_size = 0.04005901000802962, nom_step_size = 0.04005901000802962, is_adapt = false), (n_steps = 31, is_accept = true, acceptance_rate = 0.5029308680783446, log_density = -114.70434456938442, hamiltonian_energy = 116.62672368898207, hamiltonian_energy_error = 0.1979985784284679, max_hamiltonian_energy_error = 1.5163667551879882, tree_depth = 4, numerical_error = false, step_size = 0.04005901000802962, nom_step_size = 0.04005901000802962, is_adapt = false)])
Initializing metric adaptation from Pathfinder's estimate
We can't start with Pathfinder's inverse metric estimate directly. Instead we need to first extract its diagonal for a DiagonalEuclideanMetric
or make it dense for a DenseEuclideanMetric
:
metric = DenseEuclideanMetric(Matrix(inv_metric))
hamiltonian = Hamiltonian(metric, ∇P)
ϵ = find_good_stepsize(hamiltonian, init_params)
integrator = Leapfrog(ϵ)
kernel = HMCKernel(Trajectory{MultinomialTS}(integrator, GeneralisedNoUTurn()))
adaptor = StepSizeAdaptor(0.8, integrator)
samples_ahmc2, stats_ahmc2 = sample(
hamiltonian,
kernel,
init_params,
ndraws + nadapts,
adaptor,
nadapts;
drop_warmup=true,
progress=false,
)
([[-0.4559121662384009, 0.15766355997621723, -0.9658125108846081, -0.03069706294135288, 0.6664275393034331], [-0.43702949898258553, 0.29256250165564723, 0.8287853346629266, 0.32587124398871087, -0.25073582842504755], [-0.24948611122642694, 0.20037905669101247, -0.3522965713103882, -0.07416339444381159, 0.46699284284526016], [-0.209609780629109, 0.32249702955365983, -0.28851938507944636, -0.804941848684209, 0.8359810158682269], [-0.34132329953290286, 0.3194543784283229, -0.5551859203536835, 0.2762706860432318, 0.2384236849141479], [-0.3041119542740221, 0.1758318688206451, -0.4027663938717147, -0.44088493653508576, 0.7437218159583027], [-0.26627955425003247, 0.16432117470915603, -0.4964985460716248, 0.4592254861774757, 0.23318935683175407], [-0.2240216379642597, 0.23290395633187383, -0.5814357188271356, 0.9994503179651125, -0.167257173572815], [-0.4678100070650148, 0.40104191264597916, 0.13078323475033649, -2.3857472204544226, 1.7650797186614013], [-0.2676244845066477, 0.09136862813687932, -0.4162802531592627, 1.2919367584106909, -0.3824915161521878] … [-0.29340710175103096, 0.24495269720447077, 1.7435571700077803, -0.4693089615677203, 0.014962497904641131], [-0.4074062764996815, 0.2502748792219075, 0.6800989050037656, 0.6974918432543723, -0.43142536369058065], [-0.2549277468672565, 0.24982610260917712, 1.1586893864875043, -0.46094573484193624, 0.21727872268996712], [-0.33842088960968536, 0.25687181453316316, -1.320118131331318, 1.3216595555767467, -0.17894111315912814], [-0.21134769732181027, -0.036978811005675, -0.7457530795093287, -1.3263683559610193, 1.5960732543133347], [-0.4463334646011564, 0.5383570611775498, -1.8020697369244032, 1.5520827546116014, -0.3535690347092658], [-0.49169725556489213, 0.34795001091383837, -1.6172679599471407, 0.9710041402527736, 0.0904930724565225], [-0.2815370217462947, 0.18895046499448215, -1.4512884558184147, -0.20087281331502393, 0.902254259056551], [-0.31020573790808537, 0.38277319778850505, -1.7197721771600367, 0.5935815749711434, 0.4240932649451334], [-0.36974671082096433, 0.08005777497258869, -1.7400730480395727, -0.3552832634287279, 1.1358383440970676]], NamedTuple[(n_steps = 23, is_accept = true, acceptance_rate = 0.9295208420992196, log_density = -114.17962032283224, hamiltonian_energy = 116.10228024208809, hamiltonian_energy_error = 0.03844347646708002, max_hamiltonian_energy_error = 0.13819208792556026, tree_depth = 4, numerical_error = false, step_size = 0.997232746014232, nom_step_size = 0.997232746014232, is_adapt = false), (n_steps = 43, is_accept = true, acceptance_rate = 0.9998450848566077, log_density = -113.3321135715965, hamiltonian_energy = 117.56728288051924, hamiltonian_energy_error = -0.17804018463637306, max_hamiltonian_energy_error = -0.3043139015911436, tree_depth = 5, numerical_error = false, step_size = 0.997232746014232, nom_step_size = 0.997232746014232, is_adapt = false), (n_steps = 43, is_accept = true, acceptance_rate = 0.8418083716475444, log_density = -113.25840600335731, hamiltonian_energy = 115.60373254817927, hamiltonian_energy_error = 0.07664917051768327, max_hamiltonian_energy_error = 0.3885774995962805, tree_depth = 5, numerical_error = false, step_size = 0.997232746014232, nom_step_size = 0.997232746014232, is_adapt = false), (n_steps = 3, is_accept = true, acceptance_rate = 0.706798229236611, log_density = -114.98014257527933, hamiltonian_energy = 116.9347694903667, hamiltonian_energy_error = 0.3769413644553481, max_hamiltonian_energy_error = 0.759849651085517, tree_depth = 2, numerical_error = false, step_size = 0.997232746014232, nom_step_size = 0.997232746014232, is_adapt = false), (n_steps = 3, is_accept = true, acceptance_rate = 0.9751255596642991, log_density = -112.42098398665782, hamiltonian_energy = 115.73950122600492, hamiltonian_energy_error = -0.6282403939471237, max_hamiltonian_energy_error = -0.6282403939471237, tree_depth = 2, numerical_error = false, step_size = 0.997232746014232, nom_step_size = 0.997232746014232, is_adapt = false), (n_steps = 3, is_accept = true, acceptance_rate = 0.8172958594103449, log_density = -112.85632027356262, hamiltonian_energy = 113.38811668923329, hamiltonian_energy_error = 0.11873814654690307, max_hamiltonian_energy_error = 0.25596122470726357, tree_depth = 2, numerical_error = false, step_size = 0.997232746014232, nom_step_size = 0.997232746014232, is_adapt = false), (n_steps = 3, is_accept = true, acceptance_rate = 0.8047168658796209, log_density = -114.0952247659964, hamiltonian_energy = 115.06702640815313, hamiltonian_energy_error = 0.27138164151857325, max_hamiltonian_energy_error = 0.34814615171542584, tree_depth = 2, numerical_error = false, step_size = 0.997232746014232, nom_step_size = 0.997232746014232, is_adapt = false), (n_steps = 7, is_accept = true, acceptance_rate = 0.954674151363614, log_density = -114.41344027493683, hamiltonian_energy = 115.47135091615473, hamiltonian_energy_error = 0.13121320245744528, max_hamiltonian_energy_error = -0.21922442522345875, tree_depth = 2, numerical_error = false, step_size = 0.997232746014232, nom_step_size = 0.997232746014232, is_adapt = false), (n_steps = 3, is_accept = true, acceptance_rate = 0.5142899103821224, log_density = -118.91738082295211, hamiltonian_energy = 120.00320968654324, hamiltonian_energy_error = 1.1493611412580975, max_hamiltonian_energy_error = 1.1493611412580975, tree_depth = 2, numerical_error = false, step_size = 0.997232746014232, nom_step_size = 0.997232746014232, is_adapt = false), (n_steps = 3, is_accept = true, acceptance_rate = 1.0, log_density = -114.26758458450998, hamiltonian_energy = 118.63962236068298, hamiltonian_energy_error = -1.1689037803630953, max_hamiltonian_energy_error = -1.423382095008833, tree_depth = 2, numerical_error = false, step_size = 0.997232746014232, nom_step_size = 0.997232746014232, is_adapt = false) … (n_steps = 11, is_accept = true, acceptance_rate = 0.9981115249764969, log_density = -114.03657901541717, hamiltonian_energy = 114.8385483026474, hamiltonian_energy_error = -0.06032208815545914, max_hamiltonian_energy_error = -0.12052008497299482, tree_depth = 3, numerical_error = false, step_size = 0.997232746014232, nom_step_size = 0.997232746014232, is_adapt = false), (n_steps = 47, is_accept = true, acceptance_rate = 0.9779448575398846, log_density = -112.97270110440927, hamiltonian_energy = 114.86277209494187, hamiltonian_energy_error = -0.0009899172661107514, max_hamiltonian_energy_error = -0.12723495791374262, tree_depth = 5, numerical_error = false, step_size = 0.997232746014232, nom_step_size = 0.997232746014232, is_adapt = false), (n_steps = 15, is_accept = true, acceptance_rate = 0.6204298036844106, log_density = -113.90369825404132, hamiltonian_energy = 116.89447410385718, hamiltonian_energy_error = 0.33675975242518064, max_hamiltonian_energy_error = 0.936977478005474, tree_depth = 3, numerical_error = false, step_size = 0.997232746014232, nom_step_size = 0.997232746014232, is_adapt = false), (n_steps = 35, is_accept = true, acceptance_rate = 0.9768336963569602, log_density = -113.83617659785563, hamiltonian_energy = 115.30575386191818, hamiltonian_energy_error = -0.06046231520390677, max_hamiltonian_energy_error = 0.08006257439068065, tree_depth = 5, numerical_error = false, step_size = 0.997232746014232, nom_step_size = 0.997232746014232, is_adapt = false), (n_steps = 3, is_accept = true, acceptance_rate = 0.5650609808528294, log_density = -118.4563389525626, hamiltonian_energy = 118.80443498548779, hamiltonian_energy_error = 1.0331936118984828, max_hamiltonian_energy_error = 1.0331936118984828, tree_depth = 2, numerical_error = false, step_size = 0.997232746014232, nom_step_size = 0.997232746014232, is_adapt = false), (n_steps = 15, is_accept = true, acceptance_rate = 0.9585872536320833, log_density = -119.42417475221, hamiltonian_energy = 122.40323236500605, hamiltonian_energy_error = 0.45068563055687605, max_hamiltonian_energy_error = -1.0189097031186947, tree_depth = 3, numerical_error = false, step_size = 0.997232746014232, nom_step_size = 0.997232746014232, is_adapt = false), (n_steps = 3, is_accept = true, acceptance_rate = 1.0, log_density = -116.57524013472403, hamiltonian_energy = 119.89378104086842, hamiltonian_energy_error = -0.9726815678619971, max_hamiltonian_energy_error = -1.1486845166405715, tree_depth = 2, numerical_error = false, step_size = 0.997232746014232, nom_step_size = 0.997232746014232, is_adapt = false), (n_steps = 3, is_accept = true, acceptance_rate = 1.0, log_density = -114.14782566220791, hamiltonian_energy = 116.93236321967764, hamiltonian_energy_error = -0.6020682670559552, max_hamiltonian_energy_error = -0.6020682670559552, tree_depth = 2, numerical_error = false, step_size = 0.997232746014232, nom_step_size = 0.997232746014232, is_adapt = false), (n_steps = 7, is_accept = true, acceptance_rate = 0.9237047681102045, log_density = -114.92197003197542, hamiltonian_energy = 115.68580140589276, hamiltonian_energy_error = 0.13182677282927102, max_hamiltonian_energy_error = 0.13326313478786744, tree_depth = 2, numerical_error = false, step_size = 0.997232746014232, nom_step_size = 0.997232746014232, is_adapt = false), (n_steps = 19, is_accept = true, acceptance_rate = 0.9801038871119595, log_density = -115.46777262348627, hamiltonian_energy = 116.83939632731057, hamiltonian_energy_error = 0.05290718317456822, max_hamiltonian_energy_error = -0.09339129755473152, tree_depth = 4, numerical_error = false, step_size = 0.997232746014232, nom_step_size = 0.997232746014232, is_adapt = false)])
Use Pathfinder's metric estimate for sampling
To use Pathfinder's metric with no metric adaptation, we need to use Pathfinder's own RankUpdateEuclideanMetric
type, which just wraps our inverse metric estimate for use with AdvancedHMC:
nadapts = 75
metric = Pathfinder.RankUpdateEuclideanMetric(inv_metric)
hamiltonian = Hamiltonian(metric, ∇P)
ϵ = find_good_stepsize(hamiltonian, init_params)
integrator = Leapfrog(ϵ)
kernel = HMCKernel(Trajectory{MultinomialTS}(integrator, GeneralisedNoUTurn()))
adaptor = StepSizeAdaptor(0.8, integrator)
samples_ahmc3, stats_ahmc3 = sample(
hamiltonian,
kernel,
init_params,
ndraws + nadapts,
adaptor,
nadapts;
drop_warmup=true,
progress=false,
)
([[-0.2527388088852728, 0.17208012699750494, 0.2952584936465345, 0.022320068103348634, 0.15733575613528494], [-0.4291377134539547, 0.32920513736825285, 0.4393892488007558, -0.0013200027011879278, 0.12258003572248383], [-0.26001217742047933, 0.15318182286726076, 0.09201227904075221, 1.6526601688816887, -0.7518870811979403], [-0.3155436513687605, -0.07998549561625119, 0.6051193124268837, -0.5513730052747756, 0.6328849786592662], [-0.2661332913313262, -0.13712984516614357, 0.5149913494112253, -0.3012780402723181, 0.5497272872853781], [-0.22215648646250585, 0.14331381776470486, 0.3672360499575149, 0.09222757546176336, 0.17784971126504545], [-0.2915732506855215, 0.13630978100186972, 0.7166718756613559, -1.5679400391247573, 1.2013957899252157], [-0.37987489735390434, 0.09441089965302114, -0.005856445119694742, -1.7669976761242954, 1.5021189630490048], [-0.36848708101523586, 0.11024118611250996, 0.20064485677944982, 1.4980326696396744, -0.7893281756963201], [-0.493791079519271, 0.38354181140226445, 0.5781455885728157, -0.1908567677105213, 0.13789219645054585] … [-0.17490736182536634, 0.12978027511029805, 1.7563948998902064, -0.6258320715159139, 0.2545713096188753], [-0.22008437130092529, 0.06035052678847744, 2.3213092144480676, -0.9865270787613014, 0.33159670390632734], [-0.32531258068535274, 0.03470187710029662, 0.7424389257389611, 0.2005961339483665, -0.03076543093762596], [-0.3060455151009557, 0.35466336316635066, 0.456007030648103, 1.3776087300218438, -0.7938605613689966], [-0.3963760453216015, 0.14904832572424143, 0.881242775769902, -1.0458455740128305, 0.6677602549323026], [-0.26298562354650795, 0.2987678107909115, 0.1489465799270607, -0.49949266397200365, 0.5776019009846981], [-0.4364036232907639, 0.24159281172976876, -1.0758712438719928, 0.5684848433644487, 0.27242714627248477], [-0.3507538932954303, 0.1193680086172931, -1.033366394540409, 0.3184873648953528, 0.44861709632980806], [-0.5004509888714077, 0.44079917750099606, -0.9223444311776047, -0.3205539046575383, 0.7067786708158721], [-0.14769846606332743, 0.05859371997690402, -1.2941895126042766, 1.1066668181469903, 0.04985178354923539]], NamedTuple[(n_steps = 7, is_accept = true, acceptance_rate = 0.8760332522622697, log_density = -113.52733133342548, hamiltonian_energy = 115.85739868389065, hamiltonian_energy_error = -0.06182447511865519, max_hamiltonian_energy_error = 0.26543666254804066, tree_depth = 2, numerical_error = false, step_size = 0.9357093479683786, nom_step_size = 0.9357093479683786, is_adapt = false), (n_steps = 27, is_accept = true, acceptance_rate = 0.9858019138894797, log_density = -113.48500877948257, hamiltonian_energy = 114.5703562976834, hamiltonian_energy_error = 0.017863263965594456, max_hamiltonian_energy_error = -0.16204274869353696, tree_depth = 4, numerical_error = false, step_size = 0.9357093479683786, nom_step_size = 0.9357093479683786, is_adapt = false), (n_steps = 7, is_accept = true, acceptance_rate = 0.4724630505109441, log_density = -115.65995231186191, hamiltonian_energy = 119.46668216430464, hamiltonian_energy_error = 0.614371741812306, max_hamiltonian_energy_error = 1.2561289467941776, tree_depth = 2, numerical_error = false, step_size = 0.9357093479683786, nom_step_size = 0.9357093479683786, is_adapt = false), (n_steps = 31, is_accept = true, acceptance_rate = 0.996561839426301, log_density = -115.60223605427826, hamiltonian_energy = 117.88016018368306, hamiltonian_energy_error = -0.03397291414280801, max_hamiltonian_energy_error = -0.3202962841468775, tree_depth = 4, numerical_error = false, step_size = 0.9357093479683786, nom_step_size = 0.9357093479683786, is_adapt = false), (n_steps = 3, is_accept = true, acceptance_rate = 0.947636115057466, log_density = -117.17589956576387, hamiltonian_energy = 118.12572720710554, hamiltonian_energy_error = 0.17089705147913037, max_hamiltonian_energy_error = -0.8237253260316777, tree_depth = 2, numerical_error = false, step_size = 0.9357093479683786, nom_step_size = 0.9357093479683786, is_adapt = false), (n_steps = 3, is_accept = true, acceptance_rate = 0.9723237920918238, log_density = -114.24688410273087, hamiltonian_energy = 117.88183561301392, hamiltonian_energy_error = -0.400823278166456, max_hamiltonian_energy_error = -0.5519515652853215, tree_depth = 2, numerical_error = false, step_size = 0.9357093479683786, nom_step_size = 0.9357093479683786, is_adapt = false), (n_steps = 3, is_accept = true, acceptance_rate = 0.7182668669710662, log_density = -116.13402003886873, hamiltonian_energy = 117.73014161656154, hamiltonian_energy_error = 0.4150879491173072, max_hamiltonian_energy_error = 0.4150879491173072, tree_depth = 2, numerical_error = false, step_size = 0.9357093479683786, nom_step_size = 0.9357093479683786, is_adapt = false), (n_steps = 27, is_accept = true, acceptance_rate = 0.9963872327824952, log_density = -115.6709924532715, hamiltonian_energy = 118.77036353271669, hamiltonian_energy_error = -0.2167908457387142, max_hamiltonian_energy_error = -0.4312459887147213, tree_depth = 4, numerical_error = false, step_size = 0.9357093479683786, nom_step_size = 0.9357093479683786, is_adapt = false), (n_steps = 39, is_accept = true, acceptance_rate = 0.928918428585088, log_density = -115.32821256554415, hamiltonian_energy = 119.79091199125762, hamiltonian_energy_error = -0.065616000936501, max_hamiltonian_energy_error = 0.28057853294632196, tree_depth = 5, numerical_error = false, step_size = 0.9357093479683786, nom_step_size = 0.9357093479683786, is_adapt = false), (n_steps = 31, is_accept = true, acceptance_rate = 0.9531250659445826, log_density = -115.1341003614533, hamiltonian_energy = 117.97502728480856, hamiltonian_energy_error = -0.09197827052622642, max_hamiltonian_energy_error = 0.13546838454789167, tree_depth = 5, numerical_error = false, step_size = 0.9357093479683786, nom_step_size = 0.9357093479683786, is_adapt = false) … (n_steps = 3, is_accept = true, acceptance_rate = 0.7458022550322915, log_density = -118.72354235333272, hamiltonian_energy = 121.26500194465272, hamiltonian_energy_error = 0.33027560593130545, max_hamiltonian_energy_error = 0.6564659506890251, tree_depth = 2, numerical_error = false, step_size = 0.9357093479683786, nom_step_size = 0.9357093479683786, is_adapt = false), (n_steps = 15, is_accept = true, acceptance_rate = 0.994363299329306, log_density = -119.19540623223247, hamiltonian_energy = 122.41313663497087, hamiltonian_energy_error = -0.043231690232758524, max_hamiltonian_energy_error = -0.5308886451997523, tree_depth = 3, numerical_error = false, step_size = 0.9357093479683786, nom_step_size = 0.9357093479683786, is_adapt = false), (n_steps = 43, is_accept = true, acceptance_rate = 0.9866384032472298, log_density = -113.73899223343896, hamiltonian_energy = 119.88450884422788, hamiltonian_energy_error = -0.6825097915696574, max_hamiltonian_energy_error = -0.7362172408297312, tree_depth = 5, numerical_error = false, step_size = 0.9357093479683786, nom_step_size = 0.9357093479683786, is_adapt = false), (n_steps = 3, is_accept = true, acceptance_rate = 0.8552913971515622, log_density = -114.8533306625371, hamiltonian_energy = 115.85155095370388, hamiltonian_energy_error = 0.2533504997957863, max_hamiltonian_energy_error = 0.2533504997957863, tree_depth = 2, numerical_error = false, step_size = 0.9357093479683786, nom_step_size = 0.9357093479683786, is_adapt = false), (n_steps = 7, is_accept = true, acceptance_rate = 0.9970629526698467, log_density = -114.75743755648226, hamiltonian_energy = 115.25064120563096, hamiltonian_energy_error = 0.020773616490942004, max_hamiltonian_energy_error = -0.429409959493654, tree_depth = 2, numerical_error = false, step_size = 0.9357093479683786, nom_step_size = 0.9357093479683786, is_adapt = false), (n_steps = 43, is_accept = true, acceptance_rate = 0.8476040522972915, log_density = -113.75729018165242, hamiltonian_energy = 120.6941341365927, hamiltonian_energy_error = -0.20165815065332993, max_hamiltonian_energy_error = 0.5448746223740955, tree_depth = 5, numerical_error = false, step_size = 0.9357093479683786, nom_step_size = 0.9357093479683786, is_adapt = false), (n_steps = 39, is_accept = true, acceptance_rate = 0.987812934971051, log_density = -113.70314936044402, hamiltonian_energy = 115.22660485421288, hamiltonian_energy_error = -0.14718026758713165, max_hamiltonian_energy_error = -0.1891450656758309, tree_depth = 5, numerical_error = false, step_size = 0.9357093479683786, nom_step_size = 0.9357093479683786, is_adapt = false), (n_steps = 3, is_accept = true, acceptance_rate = 0.8994347705037488, log_density = -113.26163153307867, hamiltonian_energy = 114.67505222756724, hamiltonian_energy_error = -0.03603071070953945, max_hamiltonian_energy_error = 0.1741619501261482, tree_depth = 2, numerical_error = false, step_size = 0.9357093479683786, nom_step_size = 0.9357093479683786, is_adapt = false), (n_steps = 3, is_accept = true, acceptance_rate = 0.5864229086241388, log_density = -116.61130583106993, hamiltonian_energy = 117.58384196707065, hamiltonian_energy_error = 0.7262788052466504, max_hamiltonian_energy_error = 0.7262788052466504, tree_depth = 2, numerical_error = false, step_size = 0.9357093479683786, nom_step_size = 0.9357093479683786, is_adapt = false), (n_steps = 3, is_accept = true, acceptance_rate = 0.7920594933971575, log_density = -117.81654728806015, hamiltonian_energy = 119.7676456911751, hamiltonian_energy_error = 0.36010150070316627, max_hamiltonian_energy_error = -0.5722561419494951, tree_depth = 2, numerical_error = false, step_size = 0.9357093479683786, nom_step_size = 0.9357093479683786, is_adapt = false)])
- 1https://mc-stan.org/docs/reference-manual/hmc-algorithm-parameters.html