FunctionalChaosRandomVector¶
- class FunctionalChaosRandomVector(*args)¶
Functional chaos random vector.
Allows one to simulate a variable through a chaos decomposition, and retrieve its mean and covariance analytically from the chaos coefficients.
- Parameters:
- functionalChaosResult
FunctionalChaosResult
A result from a functional chaos decomposition.
- functionalChaosResult
Notes
This class can be used to get probabilistic properties of a functional chaos expansion or polynomial chaos expansion (PCE). For example, we can get the output mean or the output covariance matrix using the coefficients of the expansion.
Moreover, we can use this class to simulate random observations of the output. We consider the same notations as in the
FunctionalChaosAlgorithm
class. The functional chaos decomposition of h is:which can be truncated to the finite set :
The approximation can be used to build an efficient random generator of based on the random vector , using the equation:
This equation can be used to simulate independent random observations from the PCE. This can be done by simulating independent observations from the distribution of the standardized random vector , which are then pushed forward through the expansion.
Examples
First, we create the PCE.
>>> import openturns as ot >>> ot.RandomGenerator.SetSeed(0) >>> inputDimension = 1 >>> model = ot.SymbolicFunction(['x'], ['x * sin(x)']) >>> distribution = ot.ComposedDistribution([ot.Uniform()] * inputDimension) >>> polyColl = [0.0] * inputDimension >>> for i in range(distribution.getDimension()): ... polyColl[i] = ot.StandardDistributionPolynomialFactory(distribution.getMarginal(i)) >>> enumerateFunction = ot.LinearEnumerateFunction(inputDimension) >>> productBasis = ot.OrthogonalProductPolynomialFactory(polyColl, enumerateFunction) >>> degree = 4 >>> indexMax = enumerateFunction.getBasisSizeFromTotalDegree(degree) >>> adaptiveStrategy = ot.FixedStrategy(productBasis, indexMax) >>> samplingSize = 50 >>> experiment = ot.MonteCarloExperiment(distribution, samplingSize) >>> inputSample = experiment.generate() >>> outputSample = model(inputSample) >>> projectionStrategy = ot.LeastSquaresStrategy() >>> algo = ot.FunctionalChaosAlgorithm(inputSample, outputSample, \ ... distribution, adaptiveStrategy, projectionStrategy) >>> algo.run() >>> functionalChaosResult = algo.getResult()
Secondly, we get the probabilistic properties of the PCE. We can get an estimate of the mean of the output of the physical model.
>>> functionalChaosRandomVector = ot.FunctionalChaosRandomVector(functionalChaosResult) >>> mean = functionalChaosRandomVector.getMean() >>> print(mean) [0.301168]
We can get an estimate of the covariance matrix of the output of the physical model.
>>> covariance = functionalChaosRandomVector.getCovariance() >>> print(covariance) [[ 0.0663228 ]]
We can finally generate observations from the PCE random vector.
>>> simulatedOutputSample = functionalChaosRandomVector.getSample(5) >>> print(simulatedOutputSample) [ v0 ] 0 : [ 0.302951 ] 1 : [ 0.0664952 ] 2 : [ 0.0257105 ] 3 : [ 0.00454319 ] 4 : [ 0.149589 ]
Methods
If the random vector can be viewed as the composition of several
ThresholdEvent
objects, this method builds and returns the composition.Accessor to the antecedent RandomVector in case of a composite RandomVector.
Accessor to the object's name.
Accessor to the covariance of the functional chaos expansion.
Accessor to the description of the RandomVector.
Accessor to the dimension of the RandomVector.
Accessor to the distribution of the RandomVector.
Accessor to the domain of the Event.
getFrozenRealization
(fixedPoint)Compute realizations of the RandomVector.
getFrozenSample
(fixedSample)Compute realizations of the RandomVector.
Accessor to the Function in case of a composite RandomVector.
Accessor to the functional chaos result.
getMarginal
(*args)Get the random vector corresponding to the marginal component(s).
getMean
()Accessor to the mean of the functional chaos expansion.
getName
()Accessor to the object's name.
Accessor to the comparaison operator of the Event.
Accessor to the parameter of the distribution.
Accessor to the parameter description of the distribution.
Get the stochastic process.
Compute one realization of the RandomVector.
getSample
(size)Compute realizations of the RandomVector.
Accessor to the threshold of the Event.
hasName
()Test if the object is named.
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.
setName
(name)Accessor to the object's name.
setParameter
(parameters)Accessor to the parameter of the 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:
- composed
RandomVector
Composed event.
- composed
- getAntecedent()¶
Accessor to the antecedent RandomVector in case of a composite RandomVector.
- Returns:
- antecedent
RandomVector
Antecedent RandomVector in case of a
CompositeRandomVector
such as: .
- antecedent
- getClassName()¶
Accessor to the object’s name.
- Returns:
- class_namestr
The object class name (object.__class__.__name__).
- getCovariance()¶
Accessor to the covariance of the functional chaos expansion.
Let be the dimension of the input random vector, let be the dimension of the output random vector. and let be the size of the basis. We consider the following functional chaos expansion:
where is the approximation of the output random variable by the expansion, are the coefficients, are the orthonormal functions in the basis, and is the standardized random input vector. The previous equation can be equivalently written as follows:
for where is the -th component of the -th coefficient in the expansion:
The covariance matrix of the functional chaos expansion is the matrix , where each component is:
for . The covariance can be computed using the coefficients of the expansion:
for . This covariance involves all the coefficients, except the first one. The diagonal of the covariance matrix is the marginal variance:
for .
- Returns:
- covariance
CovarianceMatrix
, dimension The covariance of the functional chaos expansion.
- covariance
Examples
>>> from openturns.usecases import ishigami_function >>> import openturns as ot >>> import math >>> im = ishigami_function.IshigamiModel() >>> sampleSize = 1000 >>> inputTrain = im.distributionX.getSample(sampleSize) >>> outputTrain = im.model(inputTrain) >>> multivariateBasis = ot.OrthogonalProductPolynomialFactory([im.X1, im.X2, im.X3]) >>> selectionAlgorithm = ot.LeastSquaresMetaModelSelectionFactory() >>> projectionStrategy = ot.LeastSquaresStrategy(selectionAlgorithm) >>> totalDegree = 10 >>> enumerateFunction = multivariateBasis.getEnumerateFunction() >>> basisSize = enumerateFunction.getBasisSizeFromTotalDegree(totalDegree) >>> adaptiveStrategy = ot.FixedStrategy(multivariateBasis, basisSize) >>> chaosAlgo = ot.FunctionalChaosAlgorithm( ... inputTrain, outputTrain, im.distributionX, adaptiveStrategy, projectionStrategy ... ) >>> chaosAlgo.run() >>> chaosResult = chaosAlgo.getResult() >>> randomVector = ot.FunctionalChaosRandomVector(chaosResult) >>> covarianceMatrix = randomVector.getCovariance() >>> print('covarianceMatrix=', covarianceMatrix[0, 0]) covarianceMatrix= 13.8... >>> outputDimension = outputTrain.getDimension() >>> stdDev = ot.Point([math.sqrt(covarianceMatrix[i, i]) for i in range(outputDimension)]) >>> print('stdDev=', stdDev[0]) stdDev= 3.72...
- getDescription()¶
Accessor to the description of the RandomVector.
- Returns:
- description
Description
Describes the components of the RandomVector.
- description
- getDimension()¶
Accessor to the dimension of the RandomVector.
- Returns:
- dimensionpositive int
Dimension of the RandomVector.
- getDistribution()¶
Accessor to the distribution of the RandomVector.
- Returns:
- distribution
Distribution
Distribution of the considered
UsualRandomVector
.
- distribution
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:
- domain
Domain
Describes the domain of an event.
- domain
- 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:
- fixedPoint
Point
Point chosen as the root cause of the random vector.
- fixedPoint
- Returns:
- realization
Point
The realization corresponding to the chosen root cause.
- realization
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:
- fixedSample
Sample
Sample of root causes of the random vector.
- fixedSample
- Returns:
- sample
Sample
Sample of the realizations corresponding to the chosen root causes.
- sample
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:
- function
Function
Function used to define a
CompositeRandomVector
as the image through this function of the antecedent : .
- function
- getFunctionalChaosResult()¶
Accessor to the functional chaos result.
- Returns:
- functionalChaosResult
FunctionalChaosResult
The result from a functional chaos decomposition.
- functionalChaosResult
- getMarginal(*args)¶
Get the random vector corresponding to the marginal component(s).
- Parameters:
- iint or list of ints,
Indicates the component(s) concerned. is the dimension of the RandomVector.
- Returns:
- vector
RandomVector
RandomVector restricted to the concerned components.
- vector
Notes
Let’s note a random vector and a set of indices. If is a
UsualRandomVector
, the subvector is defined by . If is aCompositeRandomVector
, defined by with , some scalar functions, the subvector is .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 functional chaos expansion.
Let be the dimension of the input random vector, let be the dimension of the output random vector, and let be the size of the basis. We consider the following functional chaos expansion:
where is the approximation of the output random variable by the expansion, are the coefficients, are the orthonormal functions in the basis, and is the standardized random input vector. The previous equation can be equivalently written as follows:
for where is the -th component of the -th coefficient in the expansion:
The mean of the functional chaos expansion is the first coefficient in the expansion:
- Returns:
- mean
Point
, dimension The mean of the functional chaos expansion.
- mean
Examples
>>> from openturns.usecases import ishigami_function >>> import openturns as ot >>> im = ishigami_function.IshigamiModel() >>> sampleSize = 1000 >>> inputTrain = im.distributionX.getSample(sampleSize) >>> outputTrain = im.model(inputTrain) >>> multivariateBasis = ot.OrthogonalProductPolynomialFactory([im.X1, im.X2, im.X3]) >>> selectionAlgorithm = ot.LeastSquaresMetaModelSelectionFactory() >>> projectionStrategy = ot.LeastSquaresStrategy(selectionAlgorithm) >>> totalDegree = 10 >>> enumerateFunction = multivariateBasis.getEnumerateFunction() >>> basisSize = enumerateFunction.getBasisSizeFromTotalDegree(totalDegree) >>> adaptiveStrategy = ot.FixedStrategy(multivariateBasis, basisSize) >>> chaosAlgo = ot.FunctionalChaosAlgorithm( ... inputTrain, outputTrain, im.distributionX, adaptiveStrategy, projectionStrategy ... ) >>> chaosAlgo.run() >>> chaosResult = chaosAlgo.getResult() >>> randomVector = ot.FunctionalChaosRandomVector(chaosResult) >>> mean = randomVector.getMean() >>> print('mean=', mean[0]) mean= 3.50...
- getName()¶
Accessor to the object’s name.
- Returns:
- namestr
The name of the object.
- getOperator()¶
Accessor to the comparaison operator of the Event.
- Returns:
- operator
ComparisonOperator
Comparaison operator used to define the
RandomVector
.
- operator
- getParameter()¶
Accessor to the parameter of the distribution.
- Returns:
- parameter
Point
Parameter values.
- parameter
- getParameterDescription()¶
Accessor to the parameter description of the distribution.
- Returns:
- description
Description
Parameter names.
- description
- getProcess()¶
Get the stochastic process.
- Returns:
- process
Process
Stochastic process used to define the
RandomVector
.
- process
- getRealization()¶
Compute one realization of the RandomVector.
- Returns:
- realization
Point
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).
- realization
See also
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,
Number of realizations needed.
- Returns:
- realizations
Sample
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).
- realizations
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 ]
- 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.
- 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.
Examples using the class¶
Create a polynomial chaos for the Ishigami function: a quick start guide to polynomial chaos