ROOT logo
ROOT » ROOFIT » ROOSTATS » RooStats::MetropolisHastings

class RooStats::MetropolisHastings: public TObject

This class uses the Metropolis-Hastings algorithm to construct a Markov Chain of data points using Monte Carlo. In the main algorithm, new points in the parameter space are proposed and then visited based on their relative likelihoods. This class can use any implementation of the ProposalFunction, including non-symmetric proposal functions, to propose parameter points and still maintain detailed balance when constructing the chain.

The "Likelihood" function that is sampled when deciding what steps to take in the chain has been given a very generic implementation. The user can create any RooAbsReal based on the parameters and pass it to a MetropolisHastings object with the method SetFunction(RooAbsReal&). Be sure to tell MetropolisHastings whether your RooAbsReal is on a (+/-) regular or log scale, so that it knows what logic to use when sampling your RooAbsReal. For example, a common use is to sample from a -log(Likelihood) distribution (NLL), for which the appropriate configuration calls are SetType(MetropolisHastings::kLog); SetSign(MetropolisHastings::kNegative); If you're using a traditional likelihood function: SetType(MetropolisHastings::kRegular); SetSign(MetropolisHastings::kPositive); You must set these type and sign flags or MetropolisHastings will not construct a MarkovChain.

Also note that in ConstructChain(), the values of the variables are randomized uniformly over their intervals before construction of the MarkovChain begins.

Function Members (Methods)

voidTObject::AbstractMethod(const char* method) const
virtual voidTObject::AppendPad(Option_t* option = "")
virtual voidTObject::Browse(TBrowser* b)
static TClass*Class()
virtual const char*TObject::ClassName() const
virtual voidTObject::Clear(Option_t* = "")
virtual TObject*TObject::Clone(const char* newname = "") const
virtual Int_tTObject::Compare(const TObject* obj) const
virtual RooStats::MarkovChain*ConstructChain()
virtual voidTObject::Copy(TObject& object) const
virtual voidTObject::Delete(Option_t* option = "")MENU
virtual Int_tTObject::DistancetoPrimitive(Int_t px, Int_t py)
virtual voidTObject::Draw(Option_t* option = "")
virtual voidTObject::DrawClass() constMENU
virtual TObject*TObject::DrawClone(Option_t* option = "") constMENU
virtual voidTObject::Dump() constMENU
virtual voidTObject::Error(const char* method, const char* msgfmt) const
virtual voidTObject::Execute(const char* method, const char* params, Int_t* error = 0)
virtual voidTObject::Execute(TMethod* method, TObjArray* params, Int_t* error = 0)
virtual voidTObject::ExecuteEvent(Int_t event, Int_t px, Int_t py)
virtual voidTObject::Fatal(const char* method, const char* msgfmt) const
virtual TObject*TObject::FindObject(const char* name) const
virtual TObject*TObject::FindObject(const TObject* obj) const
virtual Option_t*TObject::GetDrawOption() const
static Long_tTObject::GetDtorOnly()
virtual const char*TObject::GetIconName() const
virtual const char*TObject::GetName() const
virtual char*TObject::GetObjectInfo(Int_t px, Int_t py) const
static Bool_tTObject::GetObjectStat()
virtual Option_t*TObject::GetOption() const
virtual const char*TObject::GetTitle() const
virtual UInt_tTObject::GetUniqueID() const
virtual Bool_tTObject::HandleTimer(TTimer* timer)
virtual ULong_tTObject::Hash() const
virtual voidTObject::Info(const char* method, const char* msgfmt) const
virtual Bool_tTObject::InheritsFrom(const char* classname) const
virtual Bool_tTObject::InheritsFrom(const TClass* cl) const
virtual voidTObject::Inspect() constMENU
voidTObject::InvertBit(UInt_t f)
virtual TClass*IsA() const
virtual Bool_tTObject::IsEqual(const TObject* obj) const
virtual Bool_tTObject::IsFolder() const
Bool_tTObject::IsOnHeap() const
virtual Bool_tTObject::IsSortable() const
Bool_tTObject::IsZombie() const
virtual voidTObject::ls(Option_t* option = "") const
voidTObject::MayNotUse(const char* method) const
RooStats::MetropolisHastingsMetropolisHastings(const RooStats::MetropolisHastings&)
RooStats::MetropolisHastingsMetropolisHastings(RooAbsReal& function, const RooArgSet& paramsOfInterest, RooStats::ProposalFunction& proposalFunction, Int_t numIters)
virtual Bool_tTObject::Notify()
voidTObject::Obsolete(const char* method, const char* asOfVers, const char* removedFromVers) const
static voidTObject::operator delete(void* ptr)
static voidTObject::operator delete(void* ptr, void* vp)
static voidTObject::operator delete[](void* ptr)
static voidTObject::operator delete[](void* ptr, void* vp)
void*TObject::operator new(size_t sz)
void*TObject::operator new(size_t sz, void* vp)
void*TObject::operator new[](size_t sz)
void*TObject::operator new[](size_t sz, void* vp)
RooStats::MetropolisHastings&operator=(const RooStats::MetropolisHastings&)
virtual voidTObject::Paint(Option_t* option = "")
virtual voidTObject::Pop()
virtual voidTObject::Print(Option_t* option = "") const
virtual Int_tTObject::Read(const char* name)
virtual voidTObject::RecursiveRemove(TObject* obj)
voidTObject::ResetBit(UInt_t f)
virtual voidTObject::SaveAs(const char* filename = "", Option_t* option = "") constMENU
virtual voidTObject::SavePrimitive(ostream& out, Option_t* option = "")
voidTObject::SetBit(UInt_t f)
voidTObject::SetBit(UInt_t f, Bool_t set)
virtual voidSetChainParameters(const RooArgSet& set)
virtual voidTObject::SetDrawOption(Option_t* option = "")MENU
static voidTObject::SetDtorOnly(void* obj)
virtual voidSetFunction(RooAbsReal& function)
virtual voidSetNumBurnInSteps(Int_t numBurnInSteps)
virtual voidSetNumIters(Int_t numIters)
static voidTObject::SetObjectStat(Bool_t stat)
virtual voidSetParameters(const RooArgSet& set)
virtual voidSetProposalFunction(RooStats::ProposalFunction& proposalFunction)
virtual voidSetSign(RooStats::MetropolisHastings::FunctionSign sign)
virtual voidSetType(RooStats::MetropolisHastings::FunctionType type)
virtual voidTObject::SetUniqueID(UInt_t uid)
virtual voidShowMembers(TMemberInspector& insp)
virtual voidStreamer(TBuffer& b)
voidStreamerNVirtual(TBuffer& b)
virtual voidTObject::SysError(const char* method, const char* msgfmt) const
Bool_tTObject::TestBit(UInt_t f) const
Int_tTObject::TestBits(UInt_t f) const
virtual voidTObject::UseCurrentStyle()
virtual voidTObject::Warning(const char* method, const char* msgfmt) const
virtual Int_tTObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0)
virtual Int_tTObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0) const
virtual Double_tCalcNLL(Double_t xL)
virtual voidTObject::DoError(int level, const char* location, const char* fmt, va_list va) const
virtual Bool_tShouldTakeStep(Double_t d)

Data Members

enum FunctionSign { kNegative
enum FunctionType { kRegular
enum TObject::EStatusBits { kCanDelete
enum TObject::[unnamed] { kIsOnHeap
RooArgSetfChainParamsRooRealVars that are stored in the chain
RooAbsReal*fFunctionfunction that will generate likelihood values
Int_tfNumBurnInStepsnumber of iterations to discard as burn-in, starting from the first
Int_tfNumItersnumber of iterations to run metropolis algorithm
RooArgSetfParametersRooRealVars that define all parameter space
RooStats::ProposalFunction*fPropFuncProposal function for MCMC integration
RooStats::MetropolisHastings::FunctionSignfSignwhether the likelihood is negative (like NLL) or positive
RooStats::MetropolisHastings::FunctionTypefTypewhether the likelihood is on a regular, log, (or other) scale

Class Charts

Inheritance Inherited Members Includes Libraries
Class Charts

Function documentation

 default constructor
MetropolisHastings(RooAbsReal& function, const RooArgSet& paramsOfInterest, RooStats::ProposalFunction& proposalFunction, Int_t numIters)
MarkovChain* ConstructChain()
Bool_t ShouldTakeStep(Double_t d)
Double_t CalcNLL(Double_t xL)
 default constructor
virtual ~MetropolisHastings()
void SetChainParameters(const RooArgSet& set)
 specify the parameters to store in the chain
 if not specified all of them will be stored
{ fChainParams.removeAll(); fChainParams.add(set); RemoveConstantParameters(&fChainParams); }
void SetParameters(const RooArgSet& set)
 specify all the parameters of interest in the interval
{ fParameters.removeAll(); fParameters.add(set); RemoveConstantParameters(&fParameters); }
void SetProposalFunction(RooStats::ProposalFunction& proposalFunction)
 set the proposal function for suggesting new points for the MCMC
{ fPropFunc = &proposalFunction; }
void SetNumIters(Int_t numIters)
 set the number of iterations to run the metropolis algorithm
{ fNumIters = numIters; }
void SetNumBurnInSteps(Int_t numBurnInSteps)
 set the number of steps in the chain to discard as burn-in,
 starting from the first
{ fNumBurnInSteps = numBurnInSteps; }
void SetFunction(RooAbsReal& function)
 set the (likelihood) function
{ fFunction = &function; }
void SetSign(RooStats::MetropolisHastings::FunctionSign sign)
 set the sign of the function
{ fSign = sign; }
void SetType(RooStats::MetropolisHastings::FunctionType type)
 set the type of the function
{ fType = type; }