package statalign.mcmc; import statalign.utils.GammaDistribution; public class GammaProposal extends ProposalDistribution<Double> { private GammaDistribution g; private double proposalShape; private double proposalRate; public GammaProposal(double a, double b) { proposalShape = a; proposalRate = b; g = new GammaDistribution(a,1.0/b); } public double logDensity(Double x) { return Math.log(g.density(x)); } public Double sample() { return g.sample(); } public void updateProposal(double proposalWidthControlVariable, Double currentParam) { double scale = currentParam < 1e-6 ? 1e-6 : currentParam; double conc = 1.0/proposalWidthControlVariable; g = new GammaDistribution(conc + proposalShape, scale / (conc + proposalRate)); } }