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:
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 :
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.
from __future__ import print_function 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= 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)
Draw a field
field = myXtProcess.getRealization() graph = field.drawMarginal(0) view = viewer.View(graph)
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)
marginal = ot.HistogramFactory().build(myStabilizedField.getValues()) graph = marginal.drawPDF() view = viewer.View(graph) plt.show()
Total running time of the script: ( 0 minutes 1.174 seconds)