Note
Go to the end to download the full example code.
Use the Box-Cox transformationΒΆ
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.
import openturns as ot
import openturns.viewer as viewer
from matplotlib import pylab as plt
ot.Log.Show(ot.Log.NONE)
Define a process
myIndices = [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)
Draw a field
field = myXtProcess.getRealization()
graph = field.drawMarginal(0)
view = viewer.View(graph)
Draw values
marginal = ot.HistogramFactory().build(field.getValues())
graph = marginal.drawPDF()
view = viewer.View(graph)
Build the transformed field through Box-Cox
myModelTransform = ot.BoxCoxFactory().build(field)
myStabilizedField = myModelTransform(field)
Draw values
marginal = ot.HistogramFactory().build(myStabilizedField.getValues())
graph = marginal.drawPDF()
view = viewer.View(graph)
plt.show()