Apply a Box-Cox transformation to a FieldΒΆ
The objective of this Use Case is to estimate a Box Cox transformation from a field which all values are positive (eventually after a shift to satisfy the positiveness) and to apply it on the field. The object BoxCoxFactory enables to create a factory of Box Cox transformation. Then, we estimate the Box Cox transformation from the initial field values
thanks to the method build of the object
BoxCoxFactory, which produces an object of type BoxCoxTransform. If the field values
have some negative values, it is possible to translate the values with respect a given shift
which has to be mentioned either at the creation of the object BoxCoxFactory or when using the method build. Then the Box Cox transformation is the composition of
and this translation.
The object BoxCoxTransform enables to:
transform the field values
of dimension
into the values
with stabilized variance, such that for each vertex
we have:
or
thanks to the operand (). The field based on the values
shares the same mesh than the initial field.
create the inverse Box Cox transformation such that :
or
thanks to the method getInverse() which produces an object of type InverseBoxCoxTransform that can be evaluated on a field. The new field based shares the same mesh than the initial field.
[1]:
from __future__ import print_function
import openturns as ot
[2]:
# Define a process
myIndices= ot.Indices([10,5])
myMesher =ot.IntervalMesher(myIndices)
myInterval = ot.Interval([0.0, 0.0], [2.0, 1.0])
myMesh = myMesher.build(myInterval)
amplitude = [1.0]
scale = [0.2, 0.2]
myCovModel = ot.ExponentialModel(scale, amplitude)
myXproc = ot.GaussianProcess(myCovModel, myMesh)
g = ot.SymbolicFunction(['x1'], ['exp(x1)'])
myDynTransform = ot.ValueFunction(g, myMesh)
myXtProcess = ot.CompositeProcess(myDynTransform, myXproc)
[3]:
# Draw a field
field = myXtProcess.getRealization()
field.drawMarginal(0)
[3]:

[4]:
# Draw values
marginal = ot.HistogramFactory().build(field.getValues())
marginal.drawPDF()
[4]:

[5]:
# Build the transformed field through Box-Cox
myModelTransform = ot.BoxCoxFactory().build(field)
myStabilizedField = myModelTransform(field)
[6]:
# Draw values
marginal = ot.HistogramFactory().build(myStabilizedField.getValues())
marginal.drawPDF()
[6]:
