Gibbs sampling¶
Source: examples/tmcmc_and_gibbs.py
Gibbs is useful when parameters have very different scales or are weakly coupled, and you want per-parameter tuning of the proposal.
Scalar Gibbs (one parameter at a time)¶
gibbs = mc.Gibbs(n_samples=10_000, proposal_std=0.5)
result = gibbs.run(problem, x0=[0.0, 0.0])
print(result.mean())
print(f"per-block acc: {gibbs.block_acceptance_rates}")
By default, each dimension gets its own scalar MH update with the same proposal_std.
Per-block proposal std¶
gibbs = mc.Gibbs(
n_samples=10_000,
blocks=[[0], [1]], # one param per block
proposal_std=[0.8, 0.5], # different std per block
)
result = gibbs.run(problem, x0=[0.0, 0.0])
Block updates¶
Update multiple parameters jointly per block:
# 4-D problem: update params 0,1 together, then 2,3 together
gibbs = mc.Gibbs(
n_samples=10_000,
blocks=[[0, 1], [2, 3]],
proposal_std=[0.5, 0.3],
)
result = gibbs.run(problem_4d, x0=[0, 0, 0, 0])
Acceptance rates¶
gibbs.block_acceptance_rates # list: one rate per block
gibbs.acceptance_rate # mean over all blocks
Target: 20–40% per block for scalar updates.