This file is indexed.

/usr/include/openturns/swig/ANCOVA_doc.i is in libopenturns-dev 1.9-5.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
%feature("docstring") OT::ANCOVA
"ANalysis of COVAriance method (ANCOVA).

Available constructor:
    ANCOVA(*functionalChaosResult, correlatedInput*)

Parameters
----------
functionalChaosResult : :class:`~openturns.FunctionalChaosResult`
    Functional chaos result approximating the model response with
    uncorrelated inputs.
correlatedInput : 2-d sequence of float
    Correlated inputs used to compute the real values of the output.
    Its dimension must be equal to the number of inputs of the model.

Notes
-----
ANCOVA, a variance-based method described in [Caniou2012]_, is a generalization
of the ANOVA (ANalysis Of VAriance) decomposition for models with correlated
input parameters.

Let us consider a model :math:`Y = h(\\\\vect{X})` without making any hypothesis
on the dependence structure of :math:`\\\\vect{X} = \\\\{X^1, \\\\ldots, X^{n_X} \\\\}`, a
n_X-dimensional random vector. The covariance decomposition requires a functional
decomposition of the model. Thus the model response :math:`Y` is expanded as a
sum of functions of increasing dimension as follows:

.. math::
    :label: model

    h(\\\\vect{X}) = h_0 + \\\\sum_{u\\\\subseteq\\\\{1,\\\\dots,n_X\\\\}} h_u(X_u)

:math:`h_0` is the mean of :math:`Y`. Each function :math:`h_u` represents,
for any non empty set :math:`u\\\\subseteq\\\\{1, \\\\dots, n_X\\\\}`, the combined
contribution of the variables :math:`X_u` to :math:`Y`.

Using the properties of the covariance, the variance of :math:`Y` can be
decomposed into a variance part and a covariance part as follows:

.. math::

    Var[Y]&= Cov\\\\left[h_0 + \\\\sum_{u\\\\subseteq\\\\{1,\\\\dots,n_X\\\\}} h_u(X_u), h_0 + \\\\sum_{u\\\\subseteq\\\\{1,\\\\dots,n_X\\\\}} h_u(X_u)\\\\right] \\\\\\\\
          &= \\\\sum_{u\\\\subseteq\\\\{1,\\\\dots,n_X\\\\}} \\\\left[Var[h_u(X_u)] + Cov[h_u(X_u), \\\\sum_{v\\\\subseteq\\\\{1,\\\\dots,n_X\\\\}, v\\\\cap u=\\\\varnothing} h_v(X_v)]\\\\right]

This variance formula enables to define each total part of variance of
:math:`Y` due to :math:`X_u`, :math:`S_u`, as the sum of a *physical*
(or *uncorrelated*) part and a *correlated* part such as:

.. math::

    S_u = \\\\frac{Cov[Y, h_u(X_u)]} {Var[Y]} = S_u^U + S_u^C

where :math:`S_u^U` is the uncorrelated part of variance of Y due to :math:`X_u`:

.. math::

    S_u^U = \\\\frac{Var[h_u(X_u)]} {Var[Y]}

and :math:`S_u^C` is the contribution of the correlation of :math:`X_u` with the
other parameters:

.. math::

    S_u^C = \\\\frac{Cov\\\\left[h_u(X_u), \\\\displaystyle \\\\sum_{v\\\\subseteq\\\\{1,\\\\dots,n_X\\\\}, v\\\\cap u=\\\\varnothing} h_v(X_v)\\\\right]}
                 {Var[Y]}

As the computational cost of the indices with the numerical model :math:`h`
can be very high, [Caniou2012]_ suggests to approximate the model response with
a polynomial chaos expansion:

.. math::

    Y \\\\simeq \\\\hat{h} = \\\\sum_{j=0}^{P-1} \\\\alpha_j \\\\Psi_j(x)

However, for the sake of computational simplicity, the latter is constructed
considering *independent* components :math:`\\\\{X^1,\\\\dots,X^{n_X}\\\\}`. Thus the
chaos basis is not orthogonal with respect to the correlated inputs under
consideration, and it is only used as a metamodel to generate approximated
evaluations of the model response and its summands :eq:`model`.

The next step consists in identifying the component functions. For instance, for
:math:`u = \\\\{1\\\\}`:

.. math::

    h_1(X_1) = \\\\sum_{\\\\alpha | \\\\alpha_1 \\\\neq 0, \\\\alpha_{i \\\\neq 1} = 0} y_{\\\\alpha} \\\\Psi_{\\\\alpha}(\\\\vect{X})

where :math:`\\\\alpha` is a set of degrees associated to the :math:`n_X` univariate
polynomial :math:`\\\\psi_i^{\\\\alpha_i}(X_i)`.

Then the model response :math:`Y` is evaluated using a sample
:math:`X=\\\\{x_k, k=1,\\\\dots,N\\\\}` of the correlated joint distribution. Finally,
the several indices are computed using the model response and its component
functions that have been identified on the polynomial chaos.

Examples
--------
>>> import openturns as ot
>>> ot.RandomGenerator.SetSeed(0)
>>> # Model and distribution definition
>>> model = ot.SymbolicFunction(['X1','X2'], ['4.*X1 + 5.*X2'])
>>> distribution = ot.ComposedDistribution([ot.Normal()] * 2)
>>> S = ot.CorrelationMatrix(2)
>>> S[1, 0] = 0.3
>>> R = ot.NormalCopula().GetCorrelationFromSpearmanCorrelation(S)
>>> CorrelatedInputDistribution = ot.ComposedDistribution([ot.Normal()] * 2, ot.NormalCopula(R))
>>> sample = CorrelatedInputDistribution.getSample(200)
>>> # Functional chaos computation
>>> productBasis = ot.OrthogonalProductPolynomialFactory([ot.HermiteFactory()] * 2, ot.EnumerateFunction(2))
>>> adaptiveStrategy = ot.FixedStrategy(productBasis, 15)
>>> projectionStrategy = ot.LeastSquaresStrategy(ot.MonteCarloExperiment(100))
>>> algo = ot.FunctionalChaosAlgorithm(model, distribution, adaptiveStrategy, projectionStrategy)
>>> algo.run()
>>> ancovaResult = ot.ANCOVA(algo.getResult(), sample)
>>> indices = ancovaResult.getIndices()
>>> print(indices)
[0.408398,0.591602]
>>> uncorrelatedIndices = ancovaResult.getUncorrelatedIndices()
>>> print(uncorrelatedIndices)
[0.284905,0.468108]
>>> # Get indices measuring the correlated effects
>>> print(indices - uncorrelatedIndices)
[0.123494,0.123494]"

// ---------------------------------------------------------------------

%feature("docstring") OT::ANCOVA::getUncorrelatedIndices
"Accessor to the ANCOVA indices measuring uncorrelated effects.

Parameters
----------
marginalIndex : int, :math:`0 \\\\leq i < n`, optional
    Index of the model's marginal used to estimate the indices.
    By default, marginalIndex is equal to 0.

Returns
-------
indices : :class:`~openturns.Point`
    List of the ANCOVA indices measuring uncorrelated effects of the inputs.
    The effects of the correlation are represented by the indices resulting
    from the subtraction of the :meth:`getIndices` and
    :meth:`getUncorrelatedIndices` lists."

// ---------------------------------------------------------------------

%feature("docstring") OT::ANCOVA::getIndices
"Accessor to the ANCOVA indices.

Parameters
----------
marginalIndex : int, :math:`0 \\\\leq i < n`, optional
    Index of the model's marginal used to estimate the indices.
    By default, marginalIndex is equal to 0.

Returns
-------
indices : :class:`~openturns.Point`
    List of the ANCOVA indices measuring the contribution of the
    input variables to the variance of the model. These indices are made up
    of a *physical* part and a *correlated* part. The first one is obtained
    thanks to :meth:`getUncorrelatedIndices`.
    The effects of the correlation are represented by the indices resulting
    from the subtraction of the :meth:`getIndices` and
    :meth:`getUncorrelatedIndices` lists."