The class for testing model hypotheses. More...
#include <BCGoFTest.h>
Public Member Functions | |
Constructors and destructors | |
BCGoFTest (const char *name) | |
~BCGoFTest () | |
Member functions (get) | |
double | GetCalculatedPValue (bool flag_histogram=false) |
TH1D * | GetHistogramLogProb () |
BCModel * | GetTestModel () |
Member functions (set) | |
void | SetTestModel (BCModel *testmodel) |
int | SetTestPoint (std::vector< double > parameters) |
Member functions (miscellaneous methods) | |
double | LogLikelihood (std::vector< double > parameters) |
double | LogAPrioriProbability (std::vector< double > parameters) |
void | MCMCUserIterationInterface () |
Private Attributes | |
TH1D * | fHistogramLogProb |
double | fLogLikelihood |
double | fLogLikelihoodMax |
double | fLogLikelihoodMin |
std::vector< int > | fMapDataPoint |
std::vector< int > | fMapDataValue |
int | fPValueAbove |
int | fPValueBelow |
BCDataSet * | fTemporaryDataSet |
BCModel * | fTestModel |
The class for testing model hypotheses.
Definition at line 33 of file BCGoFTest.h.
BCGoFTest::BCGoFTest | ( | const char * | name | ) |
Default constructor.
Definition at line 20 of file BCGoFTest.cxx.
: BCModel(name) { // set original data set to zero fTemporaryDataSet = 0; // set test mode to zero fTestModel = 0; // reset pvalue and counter fPValue = 0; fPValueAbove = 0; fPValueBelow = 0; // reset loglikelihood and range fLogLikelihood = 0; fLogLikelihoodMin = 1e99; fLogLikelihoodMax = -1e99; // define new histogram fHistogramLogProb = 0; // set defaults for the MCMC this -> MCMCSetNChains(5); this -> MCMCSetNIterationsMax(100000); this -> MCMCSetNIterationsRun(2000); }
BCGoFTest::~BCGoFTest | ( | ) |
Default destructor.
Definition at line 49 of file BCGoFTest.cxx.
{ // restore original data set // get number of data points and values int ndatapoints = fTemporaryDataSet -> GetNDataPoints(); int ndatavalues = fTemporaryDataSet -> GetDataPoint(0) -> GetNValues(); for (int i = 0; i < ndatapoints; ++i) for (int j = 0; j < ndatavalues; ++j) fTestModel -> GetDataSet() -> GetDataPoint(i) -> SetValue(j, fTemporaryDataSet -> GetDataPoint(i) -> GetValue(j)); // restore data point limits for (unsigned int i = 0; i < this -> GetNParameters(); ++i) fTestModel -> SetDataBoundaries( fMapDataValue[i], this -> GetParameter(i) -> GetLowerLimit(), this -> GetParameter(i) -> GetUpperLimit()); // delete temporary data set delete fTemporaryDataSet; }
double BCGoFTest::GetCalculatedPValue | ( | bool | flag_histogram = false |
) |
Definition at line 223 of file BCGoFTest.cxx.
{ // set histogram point to null fHistogramLogProb = 0; if (flag_histogram) { // modify MCMC for first run // this -> MCMCSetNIterationsMax(100000); // this -> MCMCSetNIterationsRun(10000); // perform first run to obtain limits for the log(likelihood) this -> MarginalizeAll(); // modify MCMC for second run // this -> MCMCSetNIterationsMax(100000); // this -> MCMCSetNIterationsRun(10000); // create histogram double D = fLogLikelihoodMax - fLogLikelihoodMin; fHistogramLogProb = new TH1D(Form("hist_%s_logprob", this -> GetName().data()), ";ln(prob);N", 100, fLogLikelihoodMin - 0.1*D, fLogLikelihoodMax + 0.1*D); fHistogramLogProb -> SetStats(kFALSE); } else { // modify MCMC // this -> MCMCSetNIterationsMax(100000); // this -> MCMCSetNIterationsRun(10000); } // run MCMC this -> MarginalizeAll(); // check for convergence if (this -> MCMCGetNIterationsConvergenceGlobal() < 0.) { BCLog::Out(BCLog::detail, BCLog::detail, " --> MCMC did not converge in evaluation of the p-value."); return -1; } // calculate p-value fPValue = double(fPValueBelow) / double(fPValueBelow + fPValueAbove); // return p-value return fPValue; }
TH1D* BCGoFTest::GetHistogramLogProb | ( | ) | [inline] |
Definition at line 61 of file BCGoFTest.h.
{ return fHistogramLogProb; };
BCModel* BCGoFTest::GetTestModel | ( | ) | [inline] |
Definition at line 66 of file BCGoFTest.h.
{ return fTestModel; };
double BCGoFTest::LogAPrioriProbability | ( | std::vector< double > | parameters | ) | [inline, virtual] |
Returns natural logarithm of the prior probability. Method needs to be overloaded by the user.
parameters | A set of parameter values |
Reimplemented from BCModel.
Definition at line 91 of file BCGoFTest.h.
{ return 0; };
double BCGoFTest::LogLikelihood | ( | std::vector< double > | parameter | ) | [virtual] |
Calculates natural logarithm of the likelihood. Method needs to be overloaded by the user.
parameters | A set of parameter values |
Reimplemented from BCModel.
Definition at line 74 of file BCGoFTest.cxx.
{ // set the original data set to the new parameters for (int i = 0; i < int(parameters.size()); ++i) fTestModel -> GetDataSet() -> GetDataPoint(fMapDataPoint[i]) -> SetValue(fMapDataValue[i], parameters.at(i)); // calculate likelihood at the point of the original parameters double loglikelihood = fTestModel -> LogLikelihood(fDataSet -> GetDataPoint(0) -> GetValues()); // return likelihood return loglikelihood; }
void BCGoFTest::MCMCUserIterationInterface | ( | ) | [virtual] |
Reimplemented from BCIntegrate.
Definition at line 89 of file BCGoFTest.cxx.
{ int nchains = this -> MCMCGetNChains(); for (int i = 0; i < nchains; ++i) { // get likelihood at the point of the original parameters double loglikelihood = this -> MCMCGetLogProbx(i); // calculate pvalue if (loglikelihood < fLogLikelihood) fPValueBelow++; else fPValueAbove++; // if histogram exists already, then fill it ... if (fHistogramLogProb) fHistogramLogProb -> Fill(loglikelihood); // ...otherwise find range else { if (loglikelihood > fLogLikelihoodMax) fLogLikelihoodMax = loglikelihood; else if (loglikelihood < fLogLikelihoodMin) fLogLikelihoodMin = loglikelihood; } } }
void BCGoFTest::SetTestModel | ( | BCModel * | testmodel | ) | [inline] |
Definition at line 76 of file BCGoFTest.h.
{ fTestModel = testmodel; };
int BCGoFTest::SetTestPoint | ( | std::vector< double > | parameters | ) |
Definition at line 120 of file BCGoFTest.cxx.
{ // check if the boundaries of the original data set exist. if (!fTestModel -> GetFlagBoundaries()) { BCLog::Out(BCLog::warning, BCLog::warning,"BCGoFTest::SetTestDataPoint(). Boundaries of the original data set are not defined."); return 0; } // reset histogram if (fHistogramLogProb) { delete fHistogramLogProb; fHistogramLogProb = 0; } // reset variables fPValue = 0; fPValueAbove = 0; fPValueBelow = 0; // create temporary data set ... fTemporaryDataSet = new BCDataSet(); // ... and fill with the original one // get number of data points and values int ndatapoints = fTestModel -> GetDataSet() -> GetNDataPoints(); int ndatavalues = fTestModel -> GetDataSet() -> GetDataPoint(0) -> GetNValues(); for (int i = 0; i < ndatapoints; ++i) { BCDataPoint * dp = new BCDataPoint(fTestModel -> GetDataSet() -> GetDataPoint(i) -> GetValues()); fTemporaryDataSet -> AddDataPoint(dp); } // clear maps fMapDataPoint.clear(); fMapDataValue.clear(); int counter = 0; // remove parameters fParameterSet -> clear(); delete fParameterSet; fParameterSet = new BCParameterSet; // loop through data points and values for (int i = 0; i < ndatapoints; ++i) for (int j = 0; j < ndatavalues; ++j) { if (fTestModel -> GetFixedDataAxis(j)) continue; // add parameter to this model this -> AddParameter( Form("parameter_%i", counter), fTestModel -> GetDataPointLowerBoundary(j), fTestModel -> GetDataPointUpperBoundary(j)); // add another element to the maps fMapDataPoint.push_back(i); fMapDataValue.push_back(j); // increase counter counter ++; } // check if there are any non-fixed data values left if (counter == 0) { BCLog::Out(BCLog::warning, BCLog::warning,"BCGoFTest::SetTestDataPoint(). No non-fixed data values left."); return 0; } // create a new data set containing the vector of parameters which // are to be tested BCDataPoint * datapoint = new BCDataPoint(parameters); BCDataSet * dataset = new BCDataSet(); dataset -> AddDataPoint(datapoint); // calculate likelihood of the original data set fLogLikelihood = fTestModel -> LogLikelihood(parameters); // if data set has been set before, delete if (fDataSet) delete fDataSet; // set data set of this model fDataSet = dataset; // put proper range to new data set for (int i = 0; i < int(parameters.size()); ++i) this -> SetDataBoundaries( i, fTestModel -> GetParameter(i) -> GetLowerLimit(), fTestModel -> GetParameter(i) -> GetUpperLimit()); return 1; }
TH1D* BCGoFTest::fHistogramLogProb [private] |
Definition at line 126 of file BCGoFTest.h.
double BCGoFTest::fLogLikelihood [private] |
Definition at line 120 of file BCGoFTest.h.
double BCGoFTest::fLogLikelihoodMax [private] |
Definition at line 122 of file BCGoFTest.h.
double BCGoFTest::fLogLikelihoodMin [private] |
Definition at line 121 of file BCGoFTest.h.
std::vector<int> BCGoFTest::fMapDataPoint [private] |
Definition at line 102 of file BCGoFTest.h.
std::vector<int> BCGoFTest::fMapDataValue [private] |
Definition at line 103 of file BCGoFTest.h.
int BCGoFTest::fPValueAbove [private] |
Definition at line 108 of file BCGoFTest.h.
int BCGoFTest::fPValueBelow [private] |
Definition at line 107 of file BCGoFTest.h.
BCDataSet* BCGoFTest::fTemporaryDataSet [private] |
Definition at line 116 of file BCGoFTest.h.
BCModel* BCGoFTest::fTestModel [private] |
Definition at line 112 of file BCGoFTest.h.