Source code for gemseo.uncertainty.statistics.ot_parametric_statistics

# Copyright 2021 IRT Saint Exupéry, https://www.irt-saintexupery.com
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License version 3 as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
"""OpenTURNS-based parametric estimation of statistics from a dataset."""

from __future__ import annotations

from typing import ClassVar

from gemseo.uncertainty.distributions.openturns.distribution import OTDistribution
from gemseo.uncertainty.distributions.openturns.distribution_fitter import (
    OTDistributionFitter,
)
from gemseo.uncertainty.statistics.base_parametric_statistics import (
    BaseParametricStatistics,
)


[docs] class OTParametricStatistics( BaseParametricStatistics[ OTDistribution, OTDistributionFitter.default_fitting_criterion, OTDistributionFitter.DistributionName, OTDistributionFitter.FittingCriterion, OTDistributionFitter.SignificanceTest, ] ): """A toolbox to compute statistics using OpenTURNS probability distribution-fitting. Examples: >>> from gemseo import ( ... create_discipline, ... create_parameter_space, ... sample_disciplines, ... ) >>> from gemseo.uncertainty.statistics.parametric_statistics import ( ... OTParametricStatistics, ... ) >>> >>> discipline = create_discipline( ... "AnalyticDiscipline", {"y1": "x1+2*x2", "y2": "x1-3*x2"} ... ) >>> parameter_space = create_parameter_space() >>> parameter_space.add_random_variable( ... "x1", "OTUniformDistribution", minimum=-1, maximum=1 ... ) >>> parameter_space.add_random_variable( ... "x2", "OTNormalDistribution", mu=0.5, sigma=2 ... ) >>> >>> dataset = sample_disciplines( ... [discipline], ... parameter_space, ... ["y1"], ... algo_name="OT_MONTE_CARLO", ... n_samples=100, ... ) >>> >>> statistics = OTParametricStatistics( ... dataset, ["Normal", "Uniform", "Triangular"] ... ) >>> fitting_matrix = statistics.get_fitting_matrix() >>> mean = statistics.compute_mean() """ DistributionName: ClassVar[OTDistributionFitter.DistributionName] = ( OTDistributionFitter.DistributionName ) FittingCriterion: ClassVar[OTDistributionFitter.FittingCriterion] = ( OTDistributionFitter.FittingCriterion ) SignificanceTest: ClassVar[OTDistributionFitter.SignificanceTest] = ( OTDistributionFitter.SignificanceTest ) _DISTRIBUTION_FITTER: ClassVar[OTDistributionFitter] = OTDistributionFitter