#include <boost/any.hpp>
#include <boost/format.hpp>
#include <boost/progress.hpp>
#include "mcmc++/DataTable.h"
#include "mcmc++/lot.h"
#include "mcmc++/util.h"
#include "mcmc++/statistics.h"
Include dependency graph for MCMC.h:

Go to the source code of this file.
Namespaces | |
| namespace | MCMC |
Classes | |
| class | ParameterBase |
| Pure virtual class provide interface for Parameter. More... | |
| class | ParameterT< T > |
| Base class for model parameters. More... | |
| class | StepBase |
| Base class for steps associated with different parameter types. More... | |
| class | Step< T > |
| Base class for all steps associated with one parameter type. More... | |
| class | MetroStepT< T > |
| Implements Metropolis-Hastings step for a parameter. More... | |
| class | AdaptMetroStepT< T > |
| Implements Metropolis-Hastings step for a parameter. More... | |
| class | SliceStep |
| Implements a slice sampler. More... | |
| class | FunctionStepT< T > |
| Implements a deterministic node. More... | |
| class | Model |
| Implements the statistical model. More... | |
Defines | |
| #define | __MCMC_H |
Typedefs | |
| typedef std::vector< StepBase * > | ModelSteps |
| pointer to each Step in the Model | |
| typedef std::vector< boost::any > | SampleVector |
| parameters at one iteration | |
| typedef SampleVector::const_iterator | SampleIter |
| paramter iterator | |
| typedef std::vector< SampleVector > | Results |
| SampleVectors for all iterations. | |
| typedef Results::const_iterator | ResultsIter |
| iterator over iterations | |
| typedef ParameterT< double > | Parameter |
| typedef FunctionStepT< double > | FunctionStep |
| typedef MetroStepT< double > | MetroStep |
Functions | |
| lot & | GetRNG () |
| double | safeFreq (double p, double zero=MCMC_ZERO_FREQ) |
| double | invSafeFreq (double x, double zero=MCMC_ZERO_FREQ) |
| std::vector< double > | safeFreq (const std::vector< double > &p, const double zero) |
| std::vector< double > | invSafeFreq (const std::vector< double > &x, const double zero=MCMC_ZERO_FREQ) |
| double | proposeBeta (double mean, double denom, double tolerance) |
| double | logQBeta (double newMean, double oldMean, double denom, double tolerance) |
| std::vector< double > | proposeDirch (const std::vector< double > &mean, double denom, double tolerance) |
| double | logQDirch (const std::vector< double > &newMean, const std::vector< double > &oldMean, double denom, double tolerance) |
| double | proposeNorm (double mean, double variance) |
| double | logQNorm (double newMean, double oldMean, double variance) |
| double | safeBetaPar (double x) |
| void | safeDirchPar (std::vector< double > &x) |
Variables | |
| const double | MCMC_ZERO_FREQ |
| const double | MCMC::MinBetaPar = 1.0e-1 |
| minimum value allowed for beta parameter | |
| const double | MCMC::MaxBetaPar = 1.0e4 |
| maximum value allowed for beta parameter | |
| const double | MCMC::MinDirchPar = 1.0e-1 |
| minimum value allowed for Dirichlet parameter | |
| const double | MCMC::MaxDirchPar = 1.0e4 |
| maximum value allowed for Dirichlet parameter | |
The ParameterT, StepT, and Model classes defined here are the core classes that do all of the work. To implement a Bayesian model using these classes each parameter in the model should be derived from Paramater and should override llike(), at a minimum. lprior() should be overridden for anything other than a flat prior. (Notice that the prior will be improper unless overriden when the parameter has an unbounded domain.) The model is derived from Model, and each parameter is pushed onto a stack (step_), with a specified Step type (MetroStep, SliceStep, or FunctionStep).
Definition in file MCMC.h.
| typedef FunctionStepT<double> FunctionStep |
| typedef MetroStepT<double> MetroStep |
| typedef ParameterT<double> Parameter |
| lot& GetRNG | ( | void | ) |
| std::vector<double> invSafeFreq | ( | const std::vector< double > & | x, | |
| const double | zero | |||
| ) |
Inverts a safeFreq()ed vector
| x | The vector to invert | |
| zero | The original guard (not checked) |
| double invSafeFreq | ( | const double | x, | |
| const double | zero | |||
| ) |
Converts a safeFreq()ed x back
| x | Frequency to convert back | |
| zero | Value used in original guard (not verified) |
Definition at line 124 of file MCMC.cpp.
Referenced by logQBeta(), and logQDirch().
| double logQBeta | ( | const double | newMean, | |
| const double | oldMean, | |||
| const double | denom, | |||
| const double | tolerance | |||
| ) |
lQ for a beta proposal
| newMean | New value proposed | |
| oldMean | Old value from which proposed | |
| denom | Effective sample size | |
| tolerance | Minimum value allowed in original proposal |
Definition at line 196 of file MCMC.cpp.
References Density::dbeta(), invSafeFreq(), safeBetaPar(), and Util::safeLog().
| double logQDirch | ( | const std::vector< double > & | newMean, | |
| const std::vector< double > & | oldMean, | |||
| const double | denom, | |||
| const double | tolerance | |||
| ) |
lQ for a Dirichlet proposal
| newMean | New value proposed | |
| oldMean | Old value from which proposed | |
| denom | Effective sample size | |
| tolerance | Minimum value allowed in original proposal |
Definition at line 242 of file MCMC.cpp.
References Density::ddirch(), invSafeFreq(), and Util::safeLog().
| double logQNorm | ( | const double | newMean, | |
| const double | oldMean, | |||
| const double | variance | |||
| ) |
lQ for a normal proposal
| newMean | New value proposed | |
| oldMean | Old value from which proposed | |
| variance | Variance of the proposal distribution |
Definition at line 271 of file MCMC.cpp.
References Density::dnorm(), and Util::safeLog().
| double proposeBeta | ( | const double | mean, | |
| const double | denom, | |||
| const double | tolerance | |||
| ) |
Propose a new beta variate for an M-H step
| mean | Mean for beta distribution | |
| denom | Effective sample size | |
| tolerance | Minimum value allowed (to avoid exact 0s and 1s) |
where alpha and beta are guarded by safeBetaPar()
Definition at line 178 of file MCMC.cpp.
References lot::beta(), safeBetaPar(), and safeFreq().
| std::vector<double> proposeDirch | ( | const std::vector< double > & | q, | |
| const double | denom, | |||
| const double | tolerance | |||
| ) |
Propose a new Dirichlet vector for an M-H step
| q | Mean of the proposal distribution | |
| denom | Effective sample size | |
| tolerance | Minimum value allowed (to avoid exact 0s and 1s) |
where alpha and beta are guarded by safeBetaPar()
Definition at line 220 of file MCMC.cpp.
References lot::dirichlet(), safeDirchPar(), and safeFreq().
| double proposeNorm | ( | const double | mean, | |
| const double | variance | |||
| ) |
Propose a new normal variate for an M-H step
| mean | Mean of the proposal distribution | |
| variance | Variance of the proposal distribution |
Definition at line 261 of file MCMC.cpp.
References lot::norm().
| double safeBetaPar | ( | const double | x | ) |
Ensures MinBetaPar <= x <= MaxBetaPar
| x | Frequency to guard |
Definition at line 282 of file MCMC.cpp.
References MCMC::MaxBetaPar, and MCMC::MinBetaPar.
Referenced by logQBeta(), and proposeBeta().
| void safeDirchPar | ( | std::vector< double > & | x | ) |
Ensures MinBetaPar <= x <= MaxBetaPar for all elements of a Dirichlet parameter vector
| x | Frequency to guard |
Definition at line 293 of file MCMC.cpp.
References MCMC::MaxDirchPar, and MCMC::MinDirchPar.
Referenced by proposeDirch().
| std::vector<double> safeFreq | ( | const std::vector< double > & | p, | |
| const double | zero | |||
| ) |
| double safeFreq | ( | const double | p, | |
| const double | zero | |||
| ) |
Ensures zero < p < 1-zero
| p | Frequency to guard | |
| zero | Minimum value of p allowed |
Definition at line 115 of file MCMC.cpp.
Referenced by proposeBeta(), and proposeDirch().
| const double MCMC_ZERO_FREQ |
default "zero" value for safeFreq()
1.5.1