@@ -29,7 +29,7 @@ export EmulatorPosteriorModel,
2929 infMALASampling,
3030 infHMCSampling,
3131 infmMALASampling,
32- infmHMCSampling,
32+ infmHMCSampling,
3333 MCMCWrapper,
3434 accept_ratio,
3535 optimize_stepsize,
@@ -166,7 +166,8 @@ AdvancedMH.logratio_proposal_density(
166166 candidate,
167167) = AdvancedMH. logratio_proposal_density(sampler. proposal, transition_prev. params, candidate)
168168
169- MetropolisHastingsSampler(:: MALASampling , prior:: ParameterDistribution ) = MetropolisAdjustedLangevin(_get_proposal(prior))
169+ MetropolisHastingsSampler(:: MALASampling , prior:: ParameterDistribution ) =
170+ MetropolisAdjustedLangevin(_get_proposal(prior))
170171"""
171172$(DocStringExtensions. TYPEDEF)
172173
@@ -185,7 +186,8 @@ AdvancedMH.logratio_proposal_density(
185186 candidate,
186187) = AdvancedMH. logratio_proposal_density(sampler. proposal, transition_prev. params, candidate)
187188
188- MetropolisHastingsSampler(:: BarkerSampling , prior:: ParameterDistribution ) = BarkerMetropolisHastings(_get_proposal(prior))
189+ MetropolisHastingsSampler(:: BarkerSampling , prior:: ParameterDistribution ) =
190+ BarkerMetropolisHastings(_get_proposal(prior))
189191"""
190192$(DocStringExtensions. TYPEDEF)
191193
@@ -223,7 +225,8 @@ AdvancedMH.logratio_proposal_density(
223225 candidate,
224226) = AdvancedMH. logratio_proposal_density(sampler. proposal, transition_prev. params, candidate)
225227
226- MetropolisHastingsSampler(:: infMALASampling , prior:: ParameterDistribution ) = infMALAMetropolisHastings(_get_proposal(prior))
228+ MetropolisHastingsSampler(:: infMALASampling , prior:: ParameterDistribution ) =
229+ infMALAMetropolisHastings(_get_proposal(prior))
227230"""
228231$(DocStringExtensions. TYPEDEF)
229232
@@ -242,7 +245,8 @@ AdvancedMH.logratio_proposal_density(
242245 candidate,
243246) = AdvancedMH. logratio_proposal_density(sampler. proposal, transition_prev. params, candidate)
244247
245- MetropolisHastingsSampler(:: infHMCSampling , prior:: ParameterDistribution ) = infHMCMetropolisHastings(_get_proposal(prior))
248+ MetropolisHastingsSampler(:: infHMCSampling , prior:: ParameterDistribution ) =
249+ infHMCMetropolisHastings(_get_proposal(prior))
246250"""
247251$(DocStringExtensions. TYPEDEF)
248252
@@ -261,7 +265,8 @@ AdvancedMH.logratio_proposal_density(
261265 candidate,
262266) = AdvancedMH. logratio_proposal_density(sampler. proposal, transition_prev. params, candidate)
263267
264- MetropolisHastingsSampler(:: infmMALASampling , prior:: ParameterDistribution ) = infmMALAMetropolisHastings(_get_proposal(prior))
268+ MetropolisHastingsSampler(:: infmMALASampling , prior:: ParameterDistribution ) =
269+ infmMALAMetropolisHastings(_get_proposal(prior))
265270"""
266271$(DocStringExtensions. TYPEDEF)
267272
@@ -280,7 +285,8 @@ AdvancedMH.logratio_proposal_density(
280285 candidate,
281286) = AdvancedMH. logratio_proposal_density(sampler. proposal, transition_prev. params, candidate)
282287
283- MetropolisHastingsSampler(:: infmHMCSampling , prior:: ParameterDistribution ) = infmHMCMetropolisHastings(_get_proposal(prior))
288+ MetropolisHastingsSampler(:: infmHMCSampling , prior:: ParameterDistribution ) =
289+ infmHMCMetropolisHastings(_get_proposal(prior))
284290
285291# ------------------------------------------------------------------------------------------
286292# Use emulated model in sampler
@@ -396,10 +402,10 @@ function AdvancedMH.propose(
396402 current_state:: MCMCState ;
397403 stepsize:: FT = 1.0 ,
398404) where {FT <: AbstractFloat }
399- # Compute the gradient of the log-density at the current state
400- log_gradient = ForwardDiff. gradient(x -> AdvancedMH. logdensity(model, x), current_state. params)
401- proposed_state = current_state. params .+ (stepsize^ 2 / 2 ) .* log_gradient .+ stepsize * rand(rng, sampler. proposal)
402- return proposed_state
405+ # Compute the gradient of the log-density at the current state
406+ log_gradient = ForwardDiff. gradient(x -> AdvancedMH. logdensity(model, x), current_state. params)
407+ proposed_state = current_state. params .+ (stepsize^ 2 / 2 ) .* log_gradient .+ stepsize * rand(rng, sampler. proposal)
408+ return proposed_state
403409end
404410
405411# method extending AdvancedMH.propose() for the Barker proposal
@@ -410,13 +416,13 @@ function AdvancedMH.propose(
410416 current_state:: MCMCState ;
411417 stepsize:: FT = 1.0 ,
412418) where {FT <: AbstractFloat }
413- # Livingstone and Zanella (2022)
419+ # Livingstone and Zanella (2022)
414420 # Compute the gradient of the log-density at the current state
415421 log_gradient = ForwardDiff. gradient(x -> AdvancedMH. logdensity(model, x), current_state. params)
416422 n = length(current_state. params)
417423 u = rand(rng, n)
418424 xi = rand(rng, sampler. proposal)
419- b = u .< 1 ./ (1 .+ exp.(- log_gradient .* xi))
425+ b = u .< 1 ./ (1 .+ exp.(- log_gradient .* xi))
420426 return current_state. params .+ b .* xi
421427end
422428
@@ -441,9 +447,16 @@ function AdvancedMH.propose(
441447 log_gradient = log_grad_proposed_state
442448 proposed_state .+ = sqrt(stepsize) .* proposed_aux - (stepsize / 2 ) .* log_grad_proposed_state
443449 log_grad_proposed_state = ForwardDiff. gradient(x -> AdvancedMH. logdensity(model, x), proposed_state)
444- proposed_aux .+ = - (sqrt(stepsize) / 2 ) .* log_gradient .- (sqrt(stepsize) / 2 ) .* log_grad_proposed_state
450+ proposed_aux .+ = - (sqrt(stepsize) / 2 ) .* log_gradient .- (sqrt(stepsize) / 2 ) .* log_grad_proposed_state
445451 end
446- println(" L: " , L, " stepsize: " , round(stepsize, digits = 6 ), " proposed_state: " , round.(proposed_state, digits = 5 ))
452+ println(
453+ " L: " ,
454+ L,
455+ " stepsize: " ,
456+ round(stepsize, digits = 6 ),
457+ " proposed_state: " ,
458+ round.(proposed_state, digits = 5 ),
459+ )
447460 return proposed_state
448461end
449462
@@ -455,11 +468,13 @@ function AdvancedMH.propose(
455468 current_state:: MCMCState ;
456469 stepsize:: FT = 1.0 ,
457470) where {FT <: AbstractFloat }
458- # Compute the gradient of the log-density at the current state
459- ρ = (1 - stepsize / 4 ) / (1 + stepsize / 4 )
460- log_gradient = ForwardDiff. gradient(x -> AdvancedMH. logdensity(model, x), current_state. params)
461- proposed_state = ρ * current_state. params .- sqrt(1 - ρ^ 2 ) * (sqrt(stepsize) / 2 ) .* log_gradient .+ sqrt(1 - ρ^ 2 ) * rand(rng, sampler. proposal)
462- return proposed_state
471+ # Compute the gradient of the log-density at the current state
472+ ρ = (1 - stepsize / 4 ) / (1 + stepsize / 4 )
473+ log_gradient = ForwardDiff. gradient(x -> AdvancedMH. logdensity(model, x), current_state. params)
474+ proposed_state =
475+ ρ * current_state. params .- sqrt(1 - ρ^ 2 ) * (sqrt(stepsize) / 2 ) .* log_gradient .+
476+ sqrt(1 - ρ^ 2 ) * rand(rng, sampler. proposal)
477+ return proposed_state
463478end
464479
465480# method extending AdvancedMH.propose() for the ∞-HMC proposal
@@ -483,9 +498,16 @@ function AdvancedMH.propose(
483498 log_gradient = log_grad_proposed_state
484499 proposed_state .+ = sqrt(stepsize) .* proposed_aux - (stepsize / 2 ) .* log_grad_proposed_state
485500 log_grad_proposed_state = ForwardDiff. gradient(x -> AdvancedMH. logdensity(model, x), proposed_state)
486- proposed_aux .+ = - (sqrt(stepsize) / 2 ) .* log_gradient .- (sqrt(stepsize) / 2 ) .* log_grad_proposed_state
501+ proposed_aux .+ = - (sqrt(stepsize) / 2 ) .* log_gradient .- (sqrt(stepsize) / 2 ) .* log_grad_proposed_state
487502 end
488- println(" L: " , L, " stepsize: " , round(stepsize, digits = 8 ), " proposed_state: " , round.(proposed_state, digits = 5 ))
503+ println(
504+ " L: " ,
505+ L,
506+ " stepsize: " ,
507+ round(stepsize, digits = 8 ),
508+ " proposed_state: " ,
509+ round.(proposed_state, digits = 5 ),
510+ )
489511 return proposed_state
490512end
491513
@@ -497,16 +519,16 @@ function AdvancedMH.propose(
497519 current_state:: MCMCState ;
498520 stepsize:: FT = 1.0 ,
499521) where {FT <: AbstractFloat }
500- # Compute the gradient of the log-density at the current state
501- ρ = (1 - stepsize / 4 ) / (1 + stepsize / 4 )
502- log_gradient = ForwardDiff. gradient(x -> AdvancedMH. logdensity(model, x), current_state. params)
503- hessian = Symmetric(ForwardDiff. hessian(x -> AdvancedMH. logdensity(model, x), current_state. params))
504- K = Symmetric(inv(- hessian))
505- C_inv = I(size(K, 1 ))
506- xi = cholesky(K, check= false ). L * randn(size(K, 1 ))
507- # xi = rand(rng, MvNormal(zeros(size(K, 1)), K))# or cholesky(K_u).L * randn(size(K_u, 1))
508- nu = xi .- (stepsize / 2 ) .* K * ((C_inv + hessian) * current_state. params .+ log_gradient)
509- return ρ * current_state. params .+ sqrt(1 - ρ^ 2 ) * nu
522+ # Compute the gradient of the log-density at the current state
523+ ρ = (1 - stepsize / 4 ) / (1 + stepsize / 4 )
524+ log_gradient = ForwardDiff. gradient(x -> AdvancedMH. logdensity(model, x), current_state. params)
525+ hessian = Symmetric(ForwardDiff. hessian(x -> AdvancedMH. logdensity(model, x), current_state. params))
526+ K = Symmetric(inv(- hessian))
527+ C_inv = I(size(K, 1 ))
528+ xi = cholesky(K, check = false ). L * randn(size(K, 1 ))
529+ # xi = rand(rng, MvNormal(zeros(size(K, 1)), K))# or cholesky(K_u).L * randn(size(K_u, 1))
530+ nu = xi .- (stepsize / 2 ) .* K * ((C_inv + hessian) * current_state. params .+ log_gradient)
531+ return ρ * current_state. params .+ sqrt(1 - ρ^ 2 ) * nu
510532end
511533
512534# method extending AdvancedMH.propose() for the ∞-mHMC proposal
@@ -526,13 +548,13 @@ function AdvancedMH.propose(
526548 proposed_state = proposed_state_init
527549 log_grad_proposed_state = ForwardDiff. gradient(x -> AdvancedMH. logdensity(model, x), current_state. params)
528550
529- for t in 1 : L - 1
551+ for t in 1 : (L - 1 )
530552 println(" Iteration t = " , t)
531553 println(" Before update, proposed_state: " , proposed_state)
532554 log_gradient = log_grad_proposed_state
533555 proposed_state .+ = stepsize .* proposed_aux - (stepsize^ 2 / 2 ) .* log_grad_proposed_state
534556 log_grad_proposed_state = ForwardDiff. gradient(x -> AdvancedMH. logdensity(model, x), proposed_state)
535- proposed_aux .+ = - (stepsize / 2 ) .* log_gradient .- (stepsize / 2 ) .* log_grad_proposed_state
557+ proposed_aux .+ = - (stepsize / 2 ) .* log_gradient .- (stepsize / 2 ) .* log_grad_proposed_state
536558 println(" After update, proposed_state: " , proposed_state)
537559 println(" proposed_aux: " , proposed_aux)
538560 end
@@ -939,18 +961,18 @@ $(DocStringExtensions.TYPEDSIGNATURES)
939961Computes the expected squared jump distance of the chain.
940962"""
941963function esjd(chain:: MCMCChains.Chains )
942- samples = chain. value[:,:, 1 ] # N_samples x N_params x n_chains
964+ samples = chain. value[:, :, 1 ] # N_samples x N_params x n_chains
943965 n_samples, n_params = size(samples)
944966 esjd = zeros(Float64, n_params)
945967 for i in 2 : n_samples
946- esjd .+ = (samples[i, :] .- samples[i - 1 , :]). ^ 2 ./ n_samples
968+ esjd .+ = (samples[i, :] .- samples[i - 1 , :]) .^ 2 ./ n_samples
947969 end
948970 return esjd
949-
971+
950972end
951973
952974
953975
954976
955-
977+
956978end # module MarkovChainMonteCarlo
0 commit comments