IndependentMetropolisHastings

class IndependentMetropolisHastings(*args)

Independent Metropolis-Hastings method.

Refer to Bayesian calibration, The Metropolis-Hastings Algorithm.

Available constructor:

IndependentMetropolisHastings(targetDistribution, initialState, proposal, marginalIndices)

IndependentMetropolisHastings(targetLogPDF, support, initialState, proposal, marginalIndices)

Parameters:
targetDistributionDistribution

Target distribution sampled

targetLogPDFFunction

Target log-density up to an additive constant

supportDomain

Support of the target when defined with targetLogPDF

initialStatesequence of float

Initial state of the chain

proposalDistribution

Proposal distribution, independent from the current state

marginalIndicessequence of int, optional

Indices of the components to be updated. If not specified, all components are updated. The number of updated components must be equal to the dimension of proposal.

Notes

The independent Metropolis-Hastings algorithm is a Markov Chain Monte-Carlo algorithm. It draws candidates \vect{c}^k for the next state of the chain following the user-specified proposal distribution. By construction, the proposal distribution is fixed, and does not depend on the current state of the chain. Hence, proposals should be built as approximations to the target distribution. Performance of the algorithm is measured by the acceptance rate (the higher the better).

Examples

>>> import openturns as ot
>>> import math as m
>>> ot.RandomGenerator.SetSeed(0)

Sample from a target distribution defined through its log-PDF (defined up to some additive constant) and its support:

>>> log_density = ot.SymbolicFunction('x', 'log(2 + sin(x)^2) - (2 + cos(3*x)^3 + sin(2*x)^3) * x')
>>> support = ot.Interval([0.0], [2.0 * m.pi])
>>> proposal = ot.Uniform(0.0, 2.0 * m.pi)
>>> initialState = [3.0]
>>> sampler = ot.IndependentMetropolisHastings(log_density, support, initialState, proposal)
>>> x = sampler.getSample(10)

Methods

asComposedEvent()

If the random vector can be viewed as the composition of several ThresholdEvent objects, this method builds and returns the composition.

computeLogLikelihood(state)

Compute the logarithm of the likelihood w.r.t.

computeLogPosterior(state)

Compute the logarithm of the unnormalized posterior density.

getAcceptanceRate()

Get acceptance rate.

getAntecedent()

Accessor to the antecedent RandomVector in case of a composite RandomVector.

getClassName()

Accessor to the object's name.

getConditional()

Get the conditional distribution.

getCovariance()

Accessor to the covariance of the RandomVector.

getCovariates()

Get the parameters.

getDescription()

Accessor to the description of the RandomVector.

getDimension()

Accessor to the dimension of the RandomVector.

getDistribution()

Accessor to the distribution of the RandomVector.

getDomain()

Accessor to the domain of the Event.

getFrozenRealization(fixedPoint)

Compute realizations of the RandomVector.

getFrozenSample(fixedSample)

Compute realizations of the RandomVector.

getFunction()

Accessor to the Function in case of a composite RandomVector.

getHistory()

Get the history storage.

getInitialState()

Get the initial state.

getLinkFunction()

Get the model.

getMarginal(*args)

Get the random vector corresponding to the i^{th} marginal component(s).

getMarginalIndices()

Get the indices of the sampled components.

getMean()

Accessor to the mean of the RandomVector.

getName()

Accessor to the object's name.

getObservations()

Get the observations.

getOperator()

Accessor to the comparaison operator of the Event.

getParameter()

Accessor to the parameter of the distribution.

getParameterDescription()

Accessor to the parameter description of the distribution.

getProcess()

Get the stochastic process.

getProposal()

Get the proposal distribution.

getRealization()

Compute one realization of the RandomVector.

getSample(size)

Compute realizations of the RandomVector.

getTargetDistribution()

Get the target distribution.

getTargetLogPDF()

Get the target log-pdf.

getTargetLogPDFSupport()

Get the target log-pdf support.

getThreshold()

Accessor to the threshold of the Event.

hasName()

Test if the object is named.

isComposite()

Accessor to know if the RandomVector is a composite one.

isEvent()

Whether the random vector is an event.

setDescription(description)

Accessor to the description of the RandomVector.

setHistory(strategy)

Set the history storage.

setLikelihood(*args)

Set the likelihood.

setName(name)

Accessor to the object's name.

setParameter(parameters)

Accessor to the parameter of the distribution.

setProposal(proposal)

Set the proposal distribution.

__init__(*args)
asComposedEvent()

If the random vector can be viewed as the composition of several ThresholdEvent objects, this method builds and returns the composition. Otherwise throws.

Returns:
composedRandomVector

Composed event.

computeLogLikelihood(state)

Compute the logarithm of the likelihood w.r.t. observations.

Parameters:
currentStatesequence of float

Current state.

Returns:
logLikelihoodfloat

Logarithm of the likelihood w.r.t. observations (\vect{y}^1, \dots, \vect{y}^n).

computeLogPosterior(state)

Compute the logarithm of the unnormalized posterior density.

Parameters:
currentStatesequence of float

Current state.

Returns:
logPosteriorfloat

Target log-PDF plus log-likelihood if the log-likelihood is defined

getAcceptanceRate()

Get acceptance rate.

Returns:
acceptanceRatefloat

Global acceptance rates over all the MCMC iterations performed.

getAntecedent()

Accessor to the antecedent RandomVector in case of a composite RandomVector.

Returns:
antecedentRandomVector

Antecedent RandomVector \vect{X} in case of a CompositeRandomVector such as: \vect{Y}=f(\vect{X}).

getClassName()

Accessor to the object’s name.

Returns:
class_namestr

The object class name (object.__class__.__name__).

getConditional()

Get the conditional distribution.

Returns:
conditionalDistribution

The conditional argument provided to setLikelihood()

getCovariance()

Accessor to the covariance of the RandomVector.

Returns:
covarianceCovarianceMatrix

Covariance of the considered UsualRandomVector.

Examples

>>> import openturns as ot
>>> distribution = ot.Normal([0.0, 0.5], [1.0, 1.5], ot.CorrelationMatrix(2))
>>> randomVector = ot.RandomVector(distribution)
>>> ot.RandomGenerator.SetSeed(0)
>>> print(randomVector.getCovariance())
[[ 1    0    ]
 [ 0    2.25 ]]
getCovariates()

Get the parameters.

Returns:
parametersPoint

Fixed parameters of the model g required to define the likelihood.

getDescription()

Accessor to the description of the RandomVector.

Returns:
descriptionDescription

Describes the components of the RandomVector.

getDimension()

Accessor to the dimension of the RandomVector.

Returns:
dimensionpositive int

Dimension of the RandomVector.

getDistribution()

Accessor to the distribution of the RandomVector.

Returns:
distributionDistribution

Distribution of the considered UsualRandomVector.

Examples

>>> import openturns as ot
>>> distribution = ot.Normal([0.0, 0.0], [1.0, 1.0], ot.CorrelationMatrix(2))
>>> randomVector = ot.RandomVector(distribution)
>>> ot.RandomGenerator.SetSeed(0)
>>> print(randomVector.getDistribution())
Normal(mu = [0,0], sigma = [1,1], R = [[ 1 0 ]
 [ 0 1 ]])
getDomain()

Accessor to the domain of the Event.

Returns:
domainDomain

Describes the domain of an event.

getFrozenRealization(fixedPoint)

Compute realizations of the RandomVector.

In the case of a CompositeRandomVector or an event of some kind, this method returns the value taken by the random vector if the root cause takes the value given as argument.

Parameters:
fixedPointPoint

Point chosen as the root cause of the random vector.

Returns:
realizationPoint

The realization corresponding to the chosen root cause.

Examples

>>> import openturns as ot
>>> distribution = ot.Normal()
>>> randomVector = ot.RandomVector(distribution)
>>> f = ot.SymbolicFunction('x', 'x')
>>> compositeRandomVector = ot.CompositeRandomVector(f, randomVector)
>>> event = ot.ThresholdEvent(compositeRandomVector, ot.Less(), 0.0)
>>> print(event.getFrozenRealization([0.2]))
[0]
>>> print(event.getFrozenRealization([-0.1]))
[1]
getFrozenSample(fixedSample)

Compute realizations of the RandomVector.

In the case of a CompositeRandomVector or an event of some kind, this method returns the different values taken by the random vector when the root cause takes the values given as argument.

Parameters:
fixedSampleSample

Sample of root causes of the random vector.

Returns:
sampleSample

Sample of the realizations corresponding to the chosen root causes.

Examples

>>> import openturns as ot
>>> distribution = ot.Normal()
>>> randomVector = ot.RandomVector(distribution)
>>> f = ot.SymbolicFunction('x', 'x')
>>> compositeRandomVector = ot.CompositeRandomVector(f, randomVector)
>>> event = ot.ThresholdEvent(compositeRandomVector, ot.Less(), 0.0)
>>> print(event.getFrozenSample([[0.2], [-0.1]]))
    [ y0 ]
0 : [ 0  ]
1 : [ 1  ]
getFunction()

Accessor to the Function in case of a composite RandomVector.

Returns:
functionFunction

Function used to define a CompositeRandomVector as the image through this function of the antecedent \vect{X}: \vect{Y}=f(\vect{X}).

getHistory()

Get the history storage.

Returns:
historyHistoryStrategy

Used to record the chain.

getInitialState()

Get the initial state.

Returns:
initialStatesequence of float

Initial state of the chain

getLinkFunction()

Get the model.

Returns:
linkFunctionFunction

The linkFunction argument provided to setLikelihood()

getMarginal(*args)

Get the random vector corresponding to the i^{th} marginal component(s).

Parameters:
iint or list of ints, 0\leq i < dim

Indicates the component(s) concerned. dim is the dimension of the RandomVector.

Returns:
vectorRandomVector

RandomVector restricted to the concerned components.

Notes

Let’s note \vect{Y}=\Tr{(Y_1,\dots,Y_n)} a random vector and I \in [1,n] a set of indices. If \vect{Y} is a UsualRandomVector, the subvector is defined by \tilde{\vect{Y}}=\Tr{(Y_i)}_{i \in I}. If \vect{Y} is a CompositeRandomVector, defined by \vect{Y}=f(\vect{X}) with f=(f_1,\dots,f_n), f_i some scalar functions, the subvector is \tilde{\vect{Y}}=(f_i(\vect{X}))_{i \in I}.

Examples

>>> import openturns as ot
>>> distribution = ot.Normal([0.0, 0.0], [1.0, 1.0], ot.CorrelationMatrix(2))
>>> randomVector = ot.RandomVector(distribution)
>>> ot.RandomGenerator.SetSeed(0)
>>> print(randomVector.getMarginal(1).getRealization())
[0.608202]
>>> print(randomVector.getMarginal(1).getDistribution())
Normal(mu = 0, sigma = 1)
getMarginalIndices()

Get the indices of the sampled components.

Returns:
marginalIndicesIndices

The marginalIndices argument provided to the constructor

getMean()

Accessor to the mean of the RandomVector.

Returns:
meanPoint

Mean of the considered UsualRandomVector.

Examples

>>> import openturns as ot
>>> distribution = ot.Normal([0.0, 0.5], [1.0, 1.5], ot.CorrelationMatrix(2))
>>> randomVector = ot.RandomVector(distribution)
>>> ot.RandomGenerator.SetSeed(0)
>>> print(randomVector.getMean())
[0,0.5]
getName()

Accessor to the object’s name.

Returns:
namestr

The name of the object.

getObservations()

Get the observations.

Returns:
observationsSample

The observations argument provided to setLikelihood()

getOperator()

Accessor to the comparaison operator of the Event.

Returns:
operatorComparisonOperator

Comparaison operator used to define the RandomVector.

getParameter()

Accessor to the parameter of the distribution.

Returns:
parameterPoint

Parameter values.

getParameterDescription()

Accessor to the parameter description of the distribution.

Returns:
descriptionDescription

Parameter names.

getProcess()

Get the stochastic process.

Returns:
processProcess

Stochastic process used to define the RandomVector.

getProposal()

Get the proposal distribution.

Returns:
proposalDistribution

The distribution from which the transition kernels of the independent Metropolis-Hastings algorithm is defined

getRealization()

Compute one realization of the RandomVector.

Returns:
realizationPoint

Sequence of values randomly determined from the RandomVector definition. In the case of an event: one realization of the event (considered as a Bernoulli variable) which is a boolean value (1 for the realization of the event and 0 else).

Examples

>>> import openturns as ot
>>> distribution = ot.Normal([0.0, 0.0], [1.0, 1.0], ot.CorrelationMatrix(2))
>>> randomVector = ot.RandomVector(distribution)
>>> ot.RandomGenerator.SetSeed(0)
>>> print(randomVector.getRealization())
[0.608202,-1.26617]
>>> print(randomVector.getRealization())
[-0.438266,1.20548]
getSample(size)

Compute realizations of the RandomVector.

Parameters:
nint, n \geq 0

Number of realizations needed.

Returns:
realizationsSample

n sequences of values randomly determined from the RandomVector definition. In the case of an event: n realizations of the event (considered as a Bernoulli variable) which are boolean values (1 for the realization of the event and 0 else).

Examples

>>> import openturns as ot
>>> distribution = ot.Normal([0.0, 0.0], [1.0, 1.0], ot.CorrelationMatrix(2))
>>> randomVector = ot.RandomVector(distribution)
>>> ot.RandomGenerator.SetSeed(0)
>>> print(randomVector.getSample(3))
    [ X0        X1        ]
0 : [  0.608202 -1.26617  ]
1 : [ -0.438266  1.20548  ]
2 : [ -2.18139   0.350042 ]
getTargetDistribution()

Get the target distribution.

Returns:
targetDistributionDistribution

The targetDistribution argument provided to the constructor

getTargetLogPDF()

Get the target log-pdf.

Returns:
targetLogPDFFunction

The targetLogPDF argument provided to the constructor

getTargetLogPDFSupport()

Get the target log-pdf support.

Returns:
supportInterval

The support argument provided to the constructor

getThreshold()

Accessor to the threshold of the Event.

Returns:
thresholdfloat

Threshold of the RandomVector.

hasName()

Test if the object is named.

Returns:
hasNamebool

True if the name is not empty.

isComposite()

Accessor to know if the RandomVector is a composite one.

Returns:
isCompositebool

Indicates if the RandomVector is of type Composite or not.

isEvent()

Whether the random vector is an event.

Returns:
isEventbool

Whether it takes it values in {0, 1}.

setDescription(description)

Accessor to the description of the RandomVector.

Parameters:
descriptionstr or sequence of str

Describes the components of the RandomVector.

setHistory(strategy)

Set the history storage.

Parameters:
historyHistoryStrategy

Used to record the chain.

setLikelihood(*args)

Set the likelihood.

Parameters:
conditionalDistribution

Required distribution to define the likelihood of the underlying Bayesian statistical model.

observations2-d sequence of float

Observations \vect y^i required to define the likelihood.

linkFunctionFunction, optional

Function g that maps the chain into the conditional distribution parameters. If provided, its input dimension must match the chain dimension and its output dimension must match the conditional distribution parameter dimension. Else it is set to the identity.

covariates2-d sequence of float, optional

Parameters \vect c^i of the linkFunction for each observation \vect y^i. If provided, their dimension must match the parameter dimension of linkFunction.

Notes

Once this method is called, the class no longer samples from the distribution targetDistribution or from the distribution defined by targetLogPDF and support, but considers that distribution as being the prior. Let \pi(\vect \theta) be the PDF of the prior at the point \vect \theta. The class now samples from the posterior, whose PDF is proportional to L(\vect\theta) \, \pi(\vect\theta), the likelihood L(\vect \theta) being defined from the arguments of this method.

The optional parameters linkFunction and covariates allow several options to define the likelihood L(\vect \theta). Letting f be the PDF of the distribution conditional:

  • Without linkFunction and covariates the likelihood term reads:

    L(\vect \theta) = \prod_{i=1}^n f(\vect{y}^i|\vect{\theta})

  • If only the linkFunction is provided:

    L(\vect \theta) = \prod_{i=1}^n f(\vect{y}^i|g(\vect{\theta}))

  • If both the linkFunction and covariates are provided:

    L(\vect \theta) = \prod_{i=1}^n f(\vect{y}^i|g_{\vect c^i}(\vect{\theta}))

setName(name)

Accessor to the object’s name.

Parameters:
namestr

The name of the object.

setParameter(parameters)

Accessor to the parameter of the distribution.

Parameters:
parametersequence of float

Parameter values.

setProposal(proposal)

Set the proposal distribution.

Parameters:
proposalDistribution

The distribution from which the transition kernels of the independent Metropolis-Hastings algorithm is defined

Examples using the class

Sampling from an unnormalized probability density

Sampling from an unnormalized probability density