11"""
22 MetropolisHastings{D}
33
4- `MetropolisHastings` has one field, `proposal`.
4+ `MetropolisHastings` has one field, `proposal`.
55`proposal` is a `Proposal`, `NamedTuple` of `Proposal`, or `Array{Proposal}` in the shape of your data.
66For example, if you wanted the sampler to return a `NamedTuple` with shape
77
@@ -38,7 +38,7 @@ none is given, the initial parameters will be drawn from the sampler's proposals
3838- `param_names` is a vector of strings to be assigned to parameters. This is only
3939used if `chain_type=Chains`.
4040- `chain_type` is the type of chain you would like returned to you. Supported
41- types are `chain_type=Chains` if `MCMCChains` is imported, or
41+ types are `chain_type=Chains` if `MCMCChains` is imported, or
4242`chain_type=StructArray` if `StructArrays` is imported.
4343"""
4444struct MetropolisHastings{D} <: MHSampler
@@ -62,12 +62,12 @@ function propose(
6262 return propose (rng, sampler. proposal, model, transition_prev. params)
6363end
6464
65- function transition (sampler:: MHSampler , model:: DensityModelOrLogDensityModel , params)
65+ function transition (sampler:: MHSampler , model:: DensityModelOrLogDensityModel , params, accepted )
6666 logdensity = AdvancedMH. logdensity (model, params)
67- return transition (sampler, model, params, logdensity)
67+ return transition (sampler, model, params, logdensity, accepted )
6868end
69- function transition (sampler:: MHSampler , model:: DensityModelOrLogDensityModel , params, logdensity:: Real )
70- return Transition (params, logdensity)
69+ function transition (sampler:: MHSampler , model:: DensityModelOrLogDensityModel , params, logdensity:: Real , accepted )
70+ return Transition (params, logdensity, accepted )
7171end
7272
7373# Define the first sampling step.
@@ -81,7 +81,7 @@ function AbstractMCMC.step(
8181 kwargs...
8282)
8383 params = initial_params === nothing ? propose (rng, sampler, model) : initial_params
84- transition = AdvancedMH. transition (sampler, model, params)
84+ transition = AdvancedMH. transition (sampler, model, params, false )
8585 return transition, transition
8686end
8787
@@ -106,9 +106,11 @@ function AbstractMCMC.step(
106106
107107 # Decide whether to return the previous params or the new one.
108108 transition = if - Random. randexp (rng) < logα
109- AdvancedMH. transition (sampler, model, candidate, logdensity_candidate)
109+ AdvancedMH. transition (sampler, model, candidate, logdensity_candidate, true )
110110 else
111- transition_prev
111+ params = transition_prev. params
112+ lp = transition_prev. lp
113+ Transition (params, lp, false )
112114 end
113115
114116 return transition, transition
0 commit comments