RandomWalkMetropolisHastings

class RandomWalkMetropolisHastings(*args)

Random Walk Metropolis-Hastings method.

Refer to Bayesian calibration, The Metropolis-Hastings Algorithm.

Available constructor:

RandomWalkMetropolisHastings(targetDistribution, initialState, proposal, marginalIndices)

RandomWalkMetropolisHastings(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

Distribution of the steps of the random walk

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 random walk Metropolis-Hastings algorithm is a Markov Chain Monte-Carlo algorithm. It draws candidates for the next state of the chain as follows: denoting the current state by \vect{\theta}^k, the candidate \vect{c}^k for \vect{\theta}^{k+1} can be expressed as \vect{c}^k = \vect{\theta}^k +\vect{\delta}^k where the distribution of \vect{\delta}^k is the provided proposal distribution.

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.Normal(0.0, 2.0)
>>> initialState = [3.0]
>>> sampler = ot.RandomWalkMetropolisHastings(log_density, support, initialState, proposal)
>>> sampler.setBurnIn(20)
>>> sampler.setThinning(2)
>>> x = sampler.getSample(10)

The target distribution can also be a Distribution. Since all Distribution objects have a getSample() method, this is only useful in Bayesian settings where we also define a likelihood. The likelihood function penalizes the initially provided target distribution (now viewed as the prior) in order to get the posterior distribution. We sample from the posterior.

>>> prior = ot.ComposedDistribution([ot.Uniform(-100.0, 100.0)] * 2)
>>> proposal = ot.Normal([0.0] * 2, [0.5, 0.05], ot.IdentityMatrix(2))
>>> initialState = [0.0] * 2
>>> sampler = ot.RandomWalkMetropolisHastings(prior, initialState, proposal)
>>> conditional = ot.Bernoulli()
>>> data = ot.Sample([[53, 1], [57, 1], [58, 1], [63, 1], [66, 0], [67, 0],
... [67, 0], [67, 0], [68, 0], [69, 0], [70, 0], [70, 0], [70, 1], [70, 1],
... [72, 0], [73, 0], [75, 0], [75, 1], [76, 0], [76, 0], [78, 0], [79, 0], [81, 0]])
>>> observations = data[:, 1]
>>> covariates = data[:, 0]
>>> fun = ot.SymbolicFunction(['alpha', 'beta', 'x'], ['exp(alpha + beta * x) / (1 + exp(alpha + beta * x))'])
>>> linkFunction = ot.ParametricFunction(fun, [2], [0.0])
>>> sampler.setLikelihood(conditional, observations, linkFunction, covariates)
>>> alpha_beta = sampler.getSample(10)

Methods

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.

getAdaptationExpansionFactor()

Get the expansion factor.

getAdaptationFactor()

Get the adaptation factor.

getAdaptationPeriod()

Get the calibration step.

getAdaptationRange()

Get the range.

getAdaptationShrinkFactor()

Get the shrink factor.

getAntecedent()

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

getBurnIn()

Get the length of the burn-in period.

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.

getFunction()

Accessor to the Function in case of a composite RandomVector.

getHistory()

Get the history storage.

getId()

Accessor to the object's id.

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.

getShadowedId()

Accessor to the object's shadowed id.

getTargetDistribution()

Get the target distribution.

getTargetLogPDF()

Get the target log-pdf.

getTargetLogPDFSupport()

Get the target log-pdf support.

getThinning()

Get the thinning parameter.

getThreshold()

Accessor to the threshold of the Event.

getVerbose()

Tell whether the verbose mode is activated or not.

getVisibility()

Accessor to the object's visibility state.

hasName()

Test if the object is named.

hasVisibleName()

Test if the object has a distinguishable name.

isComposite()

Accessor to know if the RandomVector is a composite one.

isEvent()

Whether the random vector is an event.

setAdaptationExpansionFactor(expansionFactor)

Set the expansion factor.

setAdaptationPeriod(period)

Set the calibration step.

setAdaptationRange(range)

Set the range.

setAdaptationShrinkFactor(shrinkFactor)

Set the shrink factor.

setBurnIn(burnIn)

Set the length of the burn-in period.

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.

setShadowedId(id)

Accessor to the object's shadowed id.

setThinning(thinning)

Set the thinning parameter.

setVerbose(verbose)

Set the verbose mode.

setVisibility(visible)

Accessor to the object's visibility state.

__init__(*args)
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.

getAdaptationExpansionFactor()

Get the expansion factor.

Returns
expansionFactorfloat

Expansion factor e for the adaptation

getAdaptationFactor()

Get the adaptation factor.

Returns
factorfloat

Current adaptation factor, for inspection.

getAdaptationPeriod()

Get the calibration step.

Returns
periodpositive int

Number of samples before the adaptation occurs

getAdaptationRange()

Get the range.

Returns
rangeInterval of dimension 1

Range [m,M] in the description of the method computeUpdateFactor().

getAdaptationShrinkFactor()

Get the shrink factor.

Returns
shrinkFactorfloat

Shrink factor s for the adaptation

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}).

getBurnIn()

Get the length of the burn-in period.

Returns
burninint

Length of the burn-in period, that is the number of first iterates of the MCMC chain which will be thrown away when generating the sample.

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.

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.

getId()

Accessor to the object’s id.

Returns
idint

Internal unique identifier.

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 random walk Metropolis-Hastings algorithm is defined

getRealization()

Compute one realization of the RandomVector.

Returns
aRealizationPoint

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).

See also

getSample

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).

See also

getRealization

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 ]
getShadowedId()

Accessor to the object’s shadowed id.

Returns
idint

Internal unique identifier.

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

getThinning()

Get the thinning parameter.

Returns
thinningint

Thinning parameter: storing only every k^{th} point after the burn-in period.

Notes

When generating a sample of size q, the number of MCMC iterations performed is l+1+(q-1)k where l is the burn-in period length and k the thinning parameter.

getThreshold()

Accessor to the threshold of the Event.

Returns
thresholdfloat

Threshold of the RandomVector.

getVerbose()

Tell whether the verbose mode is activated or not.

Returns
isVerbosebool

The verbose mode is activated if it is True, desactivated otherwise.

getVisibility()

Accessor to the object’s visibility state.

Returns
visiblebool

Visibility flag.

hasName()

Test if the object is named.

Returns
hasNamebool

True if the name is not empty.

hasVisibleName()

Test if the object has a distinguishable name.

Returns
hasVisibleNamebool

True if the name is not empty and not the default one.

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}.

setAdaptationExpansionFactor(expansionFactor)

Set the expansion factor.

Parameters
expansionFactorfloat, e > 1

Expansion factor e for the adaptation

setAdaptationPeriod(period)

Set the calibration step.

Parameters
periodpositive int

Number of samples before the adaptation occurs

setAdaptationRange(range)

Set the range.

Parameters
rangeInterval of dimension 1

Range [m,M] for the adaptation

setAdaptationShrinkFactor(shrinkFactor)

Set the shrink factor.

Parameters
shrinkFactorfloat, 0 < s < 1

Shrink factor s for the adaptation

setBurnIn(burnIn)

Set the length of the burn-in period.

Parameters
burninint

Length of the burn-in period, that is the number of first iterates of the MCMC chain which will be thrown away when generating the sample.

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 random walk Metropolis-Hastings algorithm is defined

setShadowedId(id)

Accessor to the object’s shadowed id.

Parameters
idint

Internal unique identifier.

setThinning(thinning)

Set the thinning parameter.

Parameters
thinningint, k \geq 0

Thinning parameter: storing only every k^{th} point after the burn-in period.

Notes

When generating a sample of size q, the number of MCMC iterations performed is l+1+(q-1)k where l is the burn-in period length and k the thinning parameter.

setVerbose(verbose)

Set the verbose mode.

Parameters
isVerbosebool

The verbose mode is activated if it is True, desactivated otherwise.

setVisibility(visible)

Accessor to the object’s visibility state.

Parameters
visiblebool

Visibility flag.