RandomWalkMetropolisHastings

class RandomWalkMetropolisHastings(*args)

Random Walk Metropolis-Hastings method.

Refer to Bayesian calibration, The Metropolis-Hastings Algorithm.

Available constructor:

RandomWalkMetropolisHastings(prior, conditional, observations, initialState, proposal)

RandomWalkMetropolisHastings(prior, conditional, model, modelParameters, observations, initialState, proposal)

Parameters
priorDistribution

Prior distribution of the parameters of the underlying Bayesian statistical model.

conditionalDistribution

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

modelFunction

Function required to define the likelihood. The dimension of the output of the model argument must be equal to the dimension of the setParameter method of the conditional argument.

observations2-d sequence of float

Observations required to define the likelihood. If a model argument is specified, the observations correspond to the output of the model.

initialStatesequence of float

Initial state of the Monte-Carlo Markov chain on which the Sampler is based. The dimension of the initialState must be equal to the dimension of the prior.

modelParameters2-d sequence of float

Parameters of the model to be fixed. The dimension of the modelParameters argument must be equal to the dimension of the setParameter method of the model argument. The size of the modelParameters variable must be equal to the size of the observations argument.

proposallist of Distribution

Distributions from which the transition kernels of the MCMC are defined, as explained hereafter. In the following of this paragraph, \delta \sim p_j means that the realization \delta is obtained according to the j^{th} Distribution of the list proposal of size d. The underlying MCMC algorithm is a Metropolis-Hastings one which draws candidates (for the next state of the chain) using a random walk: from the current state \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 does not depend on \vect{\theta}^k. More precisely, here, during the k^{th} Metropolis-Hastings iteration, only the j^{th} component \delta_j^k of \vect{\delta}^k , with j=k \mod d, is not zero and \delta_j^k = \lambda_j^k \delta^k where \lambda_j^k is a deterministic scalar calibration coefficient and where \delta^k \sim p_j. Moreover, \lambda_j^k = 1 by default, but adaptive strategy based on the acceptance rate of each component can be defined using the method setCalibrationStrategyPerComponent().

Notes

A RandomWalkMetropolisHastings enables to carry out MCMC sampling according to the preceding statements. It is important to note that sampling one new realization comes to carrying out d Metropolis- Hastings iterations (such as described above): all of the components of the new realization can differ from the corresponding components of the previous realization. Besides, the burn-in and thinning parameters do not take into consideration the number of MCMC iterations indeed, but the number of sampled realizations.

Examples

>>> import openturns as ot
>>> ot.RandomGenerator.SetSeed(0)
>>> chainDim = 3
>>> # Observations
>>> obsDim = 1
>>> obsSize = 10
>>> y = [-9.50794871493506, -3.83296694500105, -2.44545713047953,
...      0.0803625289211318, 1.01898069723583, 0.661725805623086,
...      -1.57581204592385, -2.95308465670895, -8.8878164296758,
...      -13.0812290405651]
>>> y_obs = ot.Sample([[yi] for yi in y])
>>> # Parameters
>>> modelParameters = ot.Sample(obsSize, chainDim)
>>> for i in range(obsSize):
...     for j in range(chainDim):
...         modelParameters[i, j] = (-2 + 5.0 * i / 9.0) ** j
>>> # Model
>>> fullModel = ot.SymbolicFunction(
...          ['p1', 'p2', 'p3', 'x1', 'x2', 'x3'],
...          ['p1*x1+p2*x2+p3*x3', '1.0'])
>>> parametersSet = range(chainDim)
>>> parametersValue = [0.0] * len(parametersSet)
>>> model = ot.ParametricFunction(fullModel, parametersSet, parametersValue)
>>> # Calibration parameters
>>> calibrationColl = [ot.CalibrationStrategy()]*chainDim
>>> # Proposal distribution
>>> proposalColl = [ot.Uniform(-1.0, 1.0)]*chainDim
>>> # Prior distribution
>>> sigma0 = [10.0]*chainDim
>>> #  Covariance matrix
>>> Q0_inv = ot.CorrelationMatrix(chainDim)
>>> for i in range(chainDim): 
...     Q0_inv[i, i] = sigma0[i] * sigma0[i]
>>> mu0 = [0.0]*chainDim
>>> #  x0 ~ N(mu0, sigma0)
>>> prior = ot.Normal(mu0, Q0_inv)
>>> # Conditional distribution y~N(z, 1.0)
>>> conditional = ot.Normal()
>>> # Create a metropolis-hastings sampler
>>> sampler = ot.RandomWalkMetropolisHastings(
...     prior, conditional, model, modelParameters, y_obs, mu0, proposalColl)
>>> sampler.setCalibrationStrategyPerComponent(calibrationColl)
>>> sampler.setBurnIn(200)
>>> sampler.setThinning(10)
>>> # Get a realization
>>> print(sampler.getRealization())
[1.22816,1.0049,-1.99008]

Methods

computeLogLikelihood(currentState)

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

getAcceptanceRate()

Get acceptance rate.

getAntecedent()

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

getBurnIn()

Get the length of the burn-in period.

getCalibrationStrategyPerComponent()

Get the calibration strategy per component.

getClassName()

Accessor to the object's name.

getConditional()

Get the conditional distribution.

getCovariance()

Accessor to the covariance of the RandomVector.

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.

getMarginal(*args)

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

getMean()

Accessor to the mean of the RandomVector.

getModel()

Get the model.

getName()

Accessor to the object's name.

getNonRejectedComponents()

Get the components to be always accepted.

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.

getParameters()

Get the parameters.

getPrior()

Get the prior distribution.

getProcess()

Get the stochastic process.

getProposal()

Get the proposal.

getRealization()

Compute one realization of the RandomVector.

getSample(size)

Compute realizations of the RandomVector.

getShadowedId()

Accessor to the object's shadowed id.

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.

setBurnIn(burnIn)

Set the length of the burn-in period.

setCalibrationStrategy(calibrationStrategy)

Set the calibration strategy.

setCalibrationStrategyPerComponent(...)

Set the calibration strategy per component.

setDescription(description)

Accessor to the description of the RandomVector.

setHistory(strategy)

Set the history storage.

setName(name)

Accessor to the object's name.

setNonRejectedComponents(nonRejectedComponents)

Set the components to be always accepted.

setObservations(observations)

Set the observations.

setParameter(parameters)

Accessor to the parameter of the distribution.

setParameters(parameters)

Set the parameters.

setPrior(prior)

Set the prior distribution.

setProposal(proposal)

Set the proposal.

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(currentState)

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

getAcceptanceRate()

Get acceptance rate.

Returns
acceptanceRatePoint of dimension d

Sequence whose the j^{th} component corresponds to the acceptance rate of the candidates \vect{c}^k obtained from a state \vect{\theta}^k by only changing its j^{th} component, that is to the acceptance rate only relative to the k^{th} MCMC iterations such that k \mod d=j (see the paragraph dedicated to the constructors of the class above). These are 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}).

getBurnIn()

Get the length of the burn-in period.

Returns
lenghtint

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.

getCalibrationStrategyPerComponent()

Get the calibration strategy per component.

Returns
strategylist of CalibrationStrategy

A list of CalibrationStrategy strategy, whose j^{th} component strategy[j] defines whether and how the \lambda_j^k (see the paragraph dedicated to the constructors of the class above) are rescaled, on the basis of the last j^{th} component acceptance rate \rho_j^k . The calibration coefficients are rescaled every q\times d MCMC iterations with q = strategy[j].getCalibrationStep(), thus on the basis of the acceptances or refusals of the last q candidates obtained by only changing the j^{th} component of the current state: \lambda_j^k = \Phi_j (\rho_j^k)\lambda_j^{k-qd} where \Phi_j(.) is defined by strategy[j].computeUpdateFactor().

getClassName()

Accessor to the object’s name.

Returns
class_namestr

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

getConditional()

Get the conditional distribution.

Returns
conditionalDistribution

Distribution taken into account in the definition of the likelihood, whose PDF with parameters \vect{w} corresponds to f(.|\vect{w}) in the equations of the target distribution’s PDF.

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

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

Get the model.

Returns
modelFunction

Model take into account in the definition of the likelihood, which corresponds to g, that is the functions g^i (1\leq i \leq n) in the equation of the target distribution’s PDF.

getName()

Accessor to the object’s name.

Returns
namestr

The name of the object.

getNonRejectedComponents()

Get the components to be always accepted.

Returns
nonRejectedComponentsIndices

The indices of the components that are not tuned, and sampled according to the prior distribution in order to take into account the intrinsic uncertainty, as opposed to the epistemic uncertainty corresponding to the tuned variables.

getObservations()

Get the observations.

Returns
observationsSample

Sample taken into account in the definition of the likelihood, which corresponds to the n-tuple of the \vect{y}^i (1\leq i \leq n) in equations of the target distribution’s PDF.

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.

getParameters()

Get the parameters.

Returns
parametersPoint

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

getPrior()

Get the prior distribution.

Returns
priorDistribution

The prior distribution of the parameter of the underlying Bayesian statistical model, whose PDF corresponds to \pi in the equations of the target distribution’s PDF.

getProcess()

Get the stochastic process.

Returns
processProcess

Stochastic process used to define the RandomVector.

getProposal()

Get the proposal.

Returns
proposallist of Distribution

The d-tuple of Distributions p_j (1 \leq j \leq d) from which the transition kernels of the random walk Metropolis-Hastings algorithm are defined; look at the paragraph dedicated to the constructors of the class above.

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.

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

setBurnIn(burnIn)

Set the length of the burn-in period.

Parameters
lenghtint

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.

setCalibrationStrategy(calibrationStrategy)

Set the calibration strategy.

Parameters
strategyCalibrationStrategy

Same strategy applied for each component \lambda_j^k.

setCalibrationStrategyPerComponent(calibrationStrategy)

Set the calibration strategy per component.

Parameters
strategylist of CalibrationStrategy

A list of CalibrationStrategy strategy, whose j^{th} component strategy[j] defines whether and how the \lambda_j^k (see the paragraph dedicated to the constructors of the class above) are rescaled, on the basis of the last j^{th} component acceptance rate \rho_j^k . The calibration coefficients are rescaled every q\times d MCMC iterations with q = strategy[j].getCalibrationStep(), thus on the basis of the acceptances or refusals of the last q candidates obtained by only changing the j^{th} component of the current state: \lambda_j^k = \Phi_j (\rho_j^k)\lambda_j^{k-qd} where \Phi_j(.) is defined by strategy[j].computeUpdateFactor().

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.

setName(name)

Accessor to the object’s name.

Parameters
namestr

The name of the object.

setNonRejectedComponents(nonRejectedComponents)

Set the components to be always accepted.

Parameters
nonRejectedComponentssequence of int

The indices of the components that are not tuned, and sampled according to the prior distribution in order to take into account the intrinsic uncertainty, as opposed to the epistemic uncertainty corresponding to the tuned variables.

setObservations(observations)

Set the observations.

Parameters
observations2-d sequence of float

Sample taken into account in the definition of the likelihood, which corresponds to the n-tuple of the \vect{y}^i (1\leq i \leq n) in the equations of the target distribution’s PDF.

setParameter(parameters)

Accessor to the parameter of the distribution.

Parameters
parametersequence of float

Parameter values.

setParameters(parameters)

Set the parameters.

Parameters
parameterssequence of float

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

setPrior(prior)

Set the prior distribution.

Parameters
priorDistribution

The prior distribution of the parameter of the underlying Bayesian statistical model, whose PDF corresponds to \pi in the equations of the target distribution’s PDF.

setProposal(proposal)

Set the proposal.

Parameters
proposallist of Distribution

The d-tuple of Distributions p_j (1 \leq j \leq d) from which the transition kernels of the random walk Metropolis-Hastings algorithm are defined; look at the paragraph dedicated to the constructors of the class above.

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.