Public Member Functions | Public Attributes | Protected Types | Protected Member Functions | Protected Attributes | List of all members
o2scl::mcmc_para_table< func_t, fill_t, data_t, vec_t > Class Template Reference

A generic MCMC simulation class writing data to a o2scl::table_units object. More...

#include <mcmc_para.h>

Inheritance diagram for o2scl::mcmc_para_table< func_t, fill_t, data_t, vec_t >:
o2scl::mcmc_para_base< func_t, std::function< int(const vec_t &, double, size_t, bool, data_t &)>, data_t, vec_t >

Public Member Functions

virtual void write_files ()
 Write MCMC tables to files.
 
virtual void mcmc_cleanup ()
 Desc.
 
virtual void ac_coeffs (size_t ncols, ubmatrix &ac_coeffs)
 Desc.
 
virtual void ac_lengths (size_t ncols, ubmatrix &ac_coeffs_cols, ubvector &ac_lengths)
 Desc.
 
virtual void reorder_table ()
 Reorder the table by thread and walker index.
 
void reblock (size_t n_blocks)
 Reaverage the data into blocks of a fixed size in order to avoid autocorrelations. More...
 
Basic usage
virtual void set_names_units (std::vector< std::string > names, std::vector< std::string > units)
 Set the table names and units.
 
virtual int mcmc (size_t nparams, vec_t &low, vec_t &high, std::vector< func_t > &func, std::vector< fill_t > &fill)
 Perform an MCMC simulation. More...
 
std::shared_ptr< o2scl::table_units<> > get_table ()
 Get the output table.
 
void set_table (std::shared_ptr< o2scl::table_units<> > &t)
 Set the output table.
 
void get_chain_sizes (std::vector< size_t > &csizes)
 Determine the chain sizes.
 
virtual int add_line (const vec_t &pars, double log_weight, size_t walker_ix, bool new_meas, data_t &dat, size_t i_thread, fill_t &fill)
 A measurement function which adds the point to the table.
 
- Public Member Functions inherited from o2scl::mcmc_para_base< func_t, std::function< int(const vec_t &, double, size_t, bool, data_t &)>, data_t, vec_t >
virtual int mcmc (size_t nparams, vec_t &low, vec_t &high, std::vector< func_t > &func, std::vector< std::function< int(const vec_t &, double, size_t, bool, data_t &)> > &meas)
 Perform an MCMC simulation. More...
 
virtual void set_proposal (o2scl::prob_cond_mdim< vec_t > &p)
 Set the proposal distribution.
 
virtual void unset_proposal ()
 Go back to random-walk Metropolis with a uniform distribution.
 

Public Attributes

bool allow_estimates
 If true, allow estimates of the weight (default false)
 
- Public Attributes inherited from o2scl::mcmc_para_base< func_t, std::function< int(const vec_t &, double, size_t, bool, data_t &)>, data_t, vec_t >
size_t max_iters
 If non-zero, the maximum number of MCMC iterations (default 0)
 
std::string prefix
 Prefix for output filenames.
 
size_t n_threads
 Number of OpenMP threads.
 
std::vector< ubvectorinitial_points
 Initial points in parameter space. More...
 
std::vector< size_t > n_accept
 The number of Metropolis steps which were accepted in each thread (summed over all walkers)
 
std::vector< size_t > n_reject
 The number of Metropolis steps which were rejected in each thread (summed over all walkers)
 
bool aff_inv
 If true, use affine-invariant Monte Carlo.
 
double step_fac
 Stepsize factor (default 10.0)
 
size_t n_warm_up
 Number of warm up steps (successful steps not iterations) (default 0) More...
 
int user_seed
 If non-zero, use as the seed for the random number generator (default 0)
 
int verbose
 Output control (default 0)
 
size_t max_bad_steps
 Maximum number of failed steps when generating initial points with affine-invariant sampling (default 1000)
 
size_t n_walk
 Number of walkers for affine-invariant MC or 1 otherwise (default 1)
 
bool err_nonconv
 If true, call the error handler if msolve() or msolve_de() does not converge (default true)
 
bool always_accept
 If true, accept all steps.
 
double ai_initial_step
 Initial step fraction for affine-invariance sampling walkers (default 0.1)
 

Protected Types

typedef std::function< int(const vec_t &, double, size_t, bool, data_t &)> internal_measure_t
 Measurement functor type for the parent.
 
typedef mcmc_para_base< func_t, internal_measure_t, data_t, vec_t > parent_t
 Type of parent class.
 

Protected Member Functions

virtual int mcmc_init ()
 MCMC initialization function. More...
 
virtual int fill_line (const vec_t &pars, double log_weight, std::vector< double > &line, data_t &dat, size_t i_walker, fill_t &fill)
 Fill line with data for insertion into the table.
 
- Protected Member Functions inherited from o2scl::mcmc_para_base< func_t, std::function< int(const vec_t &, double, size_t, bool, data_t &)>, data_t, vec_t >
virtual void best_point (vec_t &best, double w_best, data_t &dat)
 Function to run for the best point.
 

Protected Attributes

std::vector< std::string > col_names
 Column names.
 
std::vector< std::string > col_units
 Column units.
 
std::shared_ptr< o2scl::table_units<> > table
 Main data table for Markov chain.
 
bool first_write
 
std::vector< int > walker_rows
 Record the last row in the table which corresponds to each walker.
 
interpm_idw< double * > esti
 Likelihood estimator.
 
- Protected Attributes inherited from o2scl::mcmc_para_base< func_t, std::function< int(const vec_t &, double, size_t, bool, data_t &)>, data_t, vec_t >
double max_time
 Time in seconds (default is 0)
 
std::ofstream scr_out
 The screen output file.
 
std::vector< rng_gslrg
 Random number generators.
 
o2scl::prob_cond_mdim< vec_t > * prop_dist
 Proposal distribution.
 
bool pd_mode
 If true, then use the user-specified proposal distribution.
 
bool warm_up
 If true, we are in the warm up phase.
 
std::vector< vec_t > current
 Current points in parameter space for each walker and each OpenMP thread. More...
 
std::vector< data_t > data_arr
 Data array. More...
 
std::vector< bool > switch_arr
 Data switch array for each walker and each OpenMP thread. More...
 
std::vector< std::vector< size_t > > ret_value_counts
 Return value counters, one vector for each OpenMP thread.
 
std::vector< size_t > curr_walker
 Index of the current walker. More...
 
int mpi_rank
 The MPI processor rank.
 
int mpi_nprocs
 The MPI number of processors.
 
double mpi_start_time
 The MPI starting time.
 

Additional Inherited Members

- Static Public Attributes inherited from o2scl::mcmc_para_base< func_t, std::function< int(const vec_t &, double, size_t, bool, data_t &)>, data_t, vec_t >
static const int mcmc_done
 Integer to indicate completion.
 
static const int mcmc_skip
 Integer to indicate rejection.
 

Detailed Description

template<class func_t, class fill_t, class data_t, class vec_t = ubvector>
class o2scl::mcmc_para_table< func_t, fill_t, data_t, vec_t >

This class performs a MCMC simulation and stores the results in a o2scl::table_units object. The user must specify the column names and units in set_names_units() before mcmc() is called.

The function add_line is the measurement function of type measure_t in the parent. The overloaded function mcmc() in this class works a bit differently in that it takes a function object (type fill_t) of the form

int fill_func(const vec_t &pars, double log_weight,
std::vector<double> &line, data_t &dat);

which should store any auxillary values stored in the data object to line, in order to be added to the table.

The output table will contain the parameters, the logarithm of the function (called "log_wgt") and a multiplying factor called "mult". This "fill" function is called only when a step is accepted and the multiplier for that row is set to 1. If a future step is rejected, then the multiplier is increased by one, rather than adding the same row to the table again.

This class forms the basis of the MCMC used in the Bayesian analysis of neutron star mass and radius in http://github.com/awsteiner/bamr .

Note
This class is experimental.

Definition at line 1137 of file mcmc_para.h.

Member Function Documentation

◆ mcmc()

template<class func_t , class fill_t , class data_t , class vec_t = ubvector>
virtual int o2scl::mcmc_para_table< func_t, fill_t, data_t, vec_t >::mcmc ( size_t  nparams,
vec_t &  low,
vec_t &  high,
std::vector< func_t > &  func,
std::vector< fill_t > &  fill 
)
inlinevirtual

Perform an MCMC simulation over nparams parameters starting at initial point init, limiting the parameters to be between low and high, using func as the objective function and calling the measurement function meas at each MC point.

Definition at line 1325 of file mcmc_para.h.

◆ mcmc_init()

template<class func_t , class fill_t , class data_t , class vec_t = ubvector>
virtual int o2scl::mcmc_para_table< func_t, fill_t, data_t, vec_t >::mcmc_init ( )
inlineprotectedvirtual

This function sets the column names and units.

Reimplemented from o2scl::mcmc_para_base< func_t, std::function< int(const vec_t &, double, size_t, bool, data_t &)>, data_t, vec_t >.

Definition at line 1165 of file mcmc_para.h.

◆ reblock()

template<class func_t , class fill_t , class data_t , class vec_t = ubvector>
void o2scl::mcmc_para_table< func_t, fill_t, data_t, vec_t >::reblock ( size_t  n_blocks)
inline
Note
The number of blocks n_blocks must be larger than the current table size. This function expects to find a column named "mult" which contains the multiplicity of each column, as is the case after a call to mcmc_para_base::mcmc().

This function is useful to remove autocorrelations to the table so long as the autocorrelation length is shorter than the block size. This function does not compute the autocorrelation length to check that this is the case.

Definition at line 1602 of file mcmc_para.h.


The documentation for this class was generated from the following file:

Documentation generated with Doxygen. Provided under the GNU Free Documentation License (see License Information).