SedSat3 1.1.6
Sediment Source Apportionment Tool - Advanced statistical methods for environmental pollution research
Loading...
Searching...
No Matches
MCMC.h
Go to the documentation of this file.
1#ifndef CMCMCCLASS
2#define CMCMCCLASS
3
4#pragma once
5
6#include <vector>
7#include "math.h"
8#include <iostream>
9#include "NormalDist.h"
10#include "GA.h"
11#include "Vector.h"
12#include "TimeSeriesSet.h"
13#include "observation.h"
14#include "parameter.h"
15#include "cmbtimeseriesset.h"
16
17class ProgressWindow;
18
26{
27 string outputpath;
29};
30
39{
47
58 unsigned int number_of_chains;
59
68 unsigned int burnout_samples;
69
77 double ini_purt_fact = 1;
78
89 double purturbation_factor = 0.05;
90
98
108
116
126
136
146
155 bool continue_mcmc = false;
156
167
174 double dp_sens;
175
185
194 unsigned int numberOfThreads = 8;
195
205 double acceptance_rate = 0.15;
206
215 double purt_change_scale = 0.75;
216
225 bool dissolve_chains = false;
226};
227
236{
238 double value;
239};
240
324template<class T>
325class CMCMC
326{
327public:
335
342
349 CMCMC(void);
350
358 CMCMC(int nn, int nn_chains);
359
366 CMCMC(T *system);
367
376 bool SetProperty(const string &varname, const string &value);
377
383 ~CMCMC(void);
384
392
399 vector<vector<double>> Params;
400
407 vector<double> pertcoeff;
408
415 vector<double> logp;
416
423 vector<double> logp1;
424
432 vector<double> u;
433
445 void initialize(CMBTimeSeriesSet *results, bool random=false);
446
453 void initialize(vector<double> par);
454
467 bool step(int k, int chain_counter);
468
486 bool step(int k, int nsamps, string filename, CMBTimeSeriesSet *results = nullptr, ProgressWindow* _rtw = 0);
487
496 vector<double> purturb(int k);
497
504 vector<CVector> temp_predicted;
505
513
520 vector<T> CopiedModels;
521
534 void writeoutput(string filename);
535
542 vector<int> params;
543
550 TimeSeriesSet<double> MData;
551
558
573 double posterior(vector<double> par, int chain_counter);
574
583 void model(T *Model1 , vector<double> par);
584
591 int getparamno(int i, int ts) const;
592
598 int get_act_paramno(int i);
599
605 int get_time_series(int i);
606
612 vector<bool> apply_to_all;
613
620 vector<Parameter> *parameters = nullptr;
621
628 vector<Observation> *observations = nullptr;
629
635 Parameter* parameter(int i);
636
642 Observation *observation(int i);
643
655 CVector sensitivity(double d, vector<double> par);
656
663 CVector sensitivity_ln(double d, vector<double> par);
664
665#ifdef Q_GUI_SUPPORT
672 ProgressWindow *rtw = nullptr;
673#endif // QT_version
674
684 CMatrix sensitivity_mat_lumped(double d, vector<double> par);
685
694 TimeSeriesSet<double> prior_distribution(int n_bins);
695
708 int readfromfile(string filename);
709
717 TimeSeriesSet<double> model(vector<double> par);
718
725 vector<vector<TimeSeriesSet<double>>> BTCout_obs;
726
733 vector<vector<TimeSeriesSet<double>>> BTCout_obs_noise;
734
740 vector<vector<TimeSeriesSet<double>>> BTCout_obs_prcntle;
741
747 vector<vector<TimeSeriesSet<double>>> BTCout_obs_prcntle_noise;
748
754 vector<CMatrix> global_sens_lumped;
755
761 TimeSeriesSet<double> paramsList;
762
768 TimeSeriesSet<double> realized_paramsList;
769
779 void ProduceRealizations(TimeSeriesSet<double> &MCMCout);
780
788 void get_outputpercentiles(TimeSeriesSet<double> &MCMCout);
789
797
805
812 double accepted_count = 0;
813
819 double total_count = 0;
820
827
846 void Perform();
847
848private:
858 int_value_pair Min(const vector<double> &vec, int current_counter, int n_chains);
859
869 int_value_pair Max(const vector<double> &vec, int current_counter, int n_chains);
870};
871
872#include "MCMC.hpp"
873
874#endif // MCMC_H
Collection of time series with labels and observed values.
Markov Chain Monte Carlo sampler for Bayesian parameter estimation.
Definition MCMC.h:326
vector< double > logp1
Log-posterior values for proposed states.
Definition MCMC.h:423
double accepted_count
Count of accepted proposals.
Definition MCMC.h:812
_MCMC_file_names FileInformation
File paths for MCMC input/output.
Definition MCMC.h:557
void model(T *Model1, vector< double > par)
Evaluate model with given parameters.
Definition MCMC.hpp:182
int get_time_series(int i)
Get time series index for parameter (legacy, may be unused)
CMBTimeSeriesSet predicted
Model predictions as time series set.
Definition MCMC.h:512
vector< double > pertcoeff
Perturbation coefficients for each parameter.
Definition MCMC.h:407
vector< vector< TimeSeriesSet< double > > > BTCout_obs
Posterior predictive samples for observations.
Definition MCMC.h:725
vector< T > CopiedModels
Copies of model object for parallel chain evaluation.
Definition MCMC.h:520
vector< CVector > temp_predicted
Temporary storage for predicted model outputs.
Definition MCMC.h:504
bool SetProperty(const string &varname, const string &value)
Set MCMC properties from string key-value pairs.
Definition MCMC.hpp:68
vector< vector< TimeSeriesSet< double > > > BTCout_obs_noise
Posterior predictive samples with simulated measurement noise.
Definition MCMC.h:733
vector< vector< TimeSeriesSet< double > > > BTCout_obs_prcntle
Percentiles of posterior predictive distribution.
Definition MCMC.h:740
double total_count
Count of total proposals (accepted + rejected)
Definition MCMC.h:819
TimeSeriesSet< double > prior_distribution(int n_bins)
Generate histogram of prior distributions.
Definition MCMC.hpp:610
void ProduceRealizations(TimeSeriesSet< double > &MCMCout)
Generate posterior predictive realizations.
Definition MCMC.hpp:652
Observation * observation(int i)
Get pointer to specific observation.
Definition MCMC.hpp:40
vector< Parameter > * parameters
Pointer to vector of Parameter objects.
Definition MCMC.h:620
vector< double > purturb(int k)
Generate proposed parameter values by perturbing current state.
Definition MCMC.hpp:377
CMCMC(int nn, int nn_chains)
Constructor with chain configuration.
vector< double > logp
Log-posterior values for current state of each chain.
Definition MCMC.h:415
CMCMC(void)
Default constructor.
Definition MCMC.hpp:19
vector< bool > apply_to_all
Flags indicating if parameter applies to all entities.
Definition MCMC.h:612
bool step(int k, int chain_counter)
Perform single MCMC step for one chain.
Definition MCMC.hpp:337
Parameter * parameter(int i)
Get pointer to specific parameter.
Definition MCMC.hpp:33
int get_act_paramno(int i)
Get active parameter number (legacy, may be unused)
TimeSeriesSet< double > MData
Measured data (observations) for likelihood calculation.
Definition MCMC.h:550
vector< vector< TimeSeriesSet< double > > > BTCout_obs_prcntle_noise
Percentiles of posterior predictive distribution with noise.
Definition MCMC.h:747
T * Model
Pointer to the model object being calibrated.
Definition MCMC.h:334
int_value_pair Max(const vector< double > &vec, int current_counter, int n_chains)
Find maximum value and its chain index.
Definition MCMC.hpp:787
double posterior(vector< double > par, int chain_counter)
Calculate log-posterior probability for given parameters.
Definition MCMC.hpp:164
void Perform()
Main entry point to run complete MCMC analysis.
Definition MCMC.hpp:725
_MCMC_settings MCMC_Settings
MCMC algorithm configuration settings.
Definition MCMC.h:391
void initialize(CMBTimeSeriesSet *results, bool random=false)
Initialize MCMC chains with starting parameter values.
Definition MCMC.hpp:200
int_value_pair Min(const vector< double > &vec, int current_counter, int n_chains)
Find minimum value and its chain index.
Definition MCMC.hpp:771
CVector sensitivity(double d, vector< double > par)
Calculate sensitivity of model output to parameters.
Definition MCMC.hpp:554
ProgressWindow * rtw
Pointer to progress window for GUI updates.
Definition MCMC.h:672
void get_outputpercentiles(TimeSeriesSet< double > &MCMCout)
Calculate percentiles of model outputs from MCMC samples.
Definition MCMC.hpp:696
CMatrix sensitivity_mat_lumped(double d, vector< double > par)
Calculate lumped sensitivity matrix.
void writeoutput(string filename)
Write MCMC results to output file.
vector< Observation > * observations
Pointer to vector of Observation objects.
Definition MCMC.h:628
int getparamno(int i, int ts) const
Get parameter index for a specific variable and time series.
CVector sensitivity_ln(double d, vector< double > par)
Calculate log-space sensitivity (for lognormal parameters)
Definition MCMC.hpp:572
vector< double > u
Uniform random values for Metropolis-Hastings accept/reject.
Definition MCMC.h:432
vector< vector< double > > Params
Parameter values for all samples and chains.
Definition MCMC.h:399
TimeSeriesSet< double > realized_paramsList
Parameter samples for posterior predictive realizations.
Definition MCMC.h:768
vector< CMatrix > global_sens_lumped
Global sensitivity analysis results (lumped)
Definition MCMC.h:754
int readfromfile(string filename)
Read MCMC state from file to continue previous run.
Definition MCMC.hpp:584
vector< int > params
Parameter indices for model evaluation.
Definition MCMC.h:542
T Model_out
Output model state after MCMC completion.
Definition MCMC.h:341
void SetRunTimeWindow(ProgressWindow *_rtw)
Set progress window for GUI updates.
Definition MCMC.hpp:530
TimeSeriesSet< double > paramsList
List of all parameter samples from MCMC.
Definition MCMC.h:761
vector< double > calc_output_percentiles
Percentiles to calculate for output distributions.
Definition MCMC.h:796
~CMCMC(void)
Destructor.
Definition MCMC.hpp:24
string last_error
Last error message from MCMC execution.
Definition MCMC.h:826
Represents a model parameter with prior distribution and constraints.
Definition parameter.h:73
File paths for MCMC input/output operations.
Definition MCMC.h:26
string outputpath
Directory path for output files.
Definition MCMC.h:27
string outputfilename
Base filename for MCMC results (without extension)
Definition MCMC.h:28
Configuration parameters for Markov Chain Monte Carlo sampling.
Definition MCMC.h:39
double acceptance_rate
Target acceptance rate for Metropolis-Hastings algorithm.
Definition MCMC.h:205
unsigned int number_of_chains
Number of parallel MCMC chains to run.
Definition MCMC.h:58
string continue_filename
Filename to continue a previous MCMC run.
Definition MCMC.h:115
bool continue_mcmc
Continue from a previous MCMC run.
Definition MCMC.h:155
unsigned int number_of_post_estimate_realizations
Number of posterior predictive realizations to generate.
Definition MCMC.h:166
double dp_sens
Finite difference step size for sensitivity analysis.
Definition MCMC.h:174
double purturbation_factor
Perturbation factor for proposal distribution during sampling.
Definition MCMC.h:89
unsigned int numberOfThreads
Number of parallel threads for MCMC computation.
Definition MCMC.h:194
bool noinipurt
Skip initial random perturbation of starting values.
Definition MCMC.h:125
bool dissolve_chains
Merge all chains into single posterior sample.
Definition MCMC.h:225
double purt_change_scale
Scale factor for adaptive perturbation adjustment.
Definition MCMC.h:215
bool global_sensitivity
Perform global sensitivity analysis during MCMC.
Definition MCMC.h:145
unsigned int number_of_parameters
Number of model parameters to estimate.
Definition MCMC.h:97
double ini_purt_fact
Initial perturbation factor for proposal distribution.
Definition MCMC.h:77
bool sensbasedpurt
Use sensitivity-based adaptive proposal distribution.
Definition MCMC.h:135
unsigned int burnout_samples
Number of initial samples to discard as burn-in.
Definition MCMC.h:68
unsigned int total_number_of_samples
Total number of MCMC samples to generate per chain.
Definition MCMC.h:46
bool noise_realization_writeout
Write out posterior predictive realizations with observation noise.
Definition MCMC.h:184
int save_interval
Interval for saving MCMC samples to output.
Definition MCMC.h:107
Utility structure pairing an integer counter with a double value.
Definition MCMC.h:236
double value
Associated value (likelihood, parameter, etc.)
Definition MCMC.h:238
int counter
Chain or sample index.
Definition MCMC.h:237