.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_data_analysis/distribution_fitting/plot_fit_extreme_value_distribution.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note Click :ref:`here ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_data_analysis_distribution_fitting_plot_fit_extreme_value_distribution.py: Fit an extreme value distribution ================================= .. GENERATED FROM PYTHON SOURCE LINES 8-15 .. code-block:: default 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) .. GENERATED FROM PYTHON SOURCE LINES 16-17 Set the random generator seed .. GENERATED FROM PYTHON SOURCE LINES 17-20 .. code-block:: default ot.RandomGenerator.SetSeed(0) .. GENERATED FROM PYTHON SOURCE LINES 21-23 The generalized extreme value distribution (GEV) ------------------------------------------------ .. GENERATED FROM PYTHON SOURCE LINES 25-29 The :class:`~openturns.GeneralizedExtremeValue` distribution is a family of continuous probability distributions that combine the :class:`~openturns.Gumbel`, :class:`~openturns.Frechet` and :class:`~openturns.WeibullMax` distribution, all extreme value distribution. In this example we use the associated :class:`~openturns.GeneralizedExtremeValueFactory` to fit sample with extreme values. This factory returns the best model among the Frechet, Gumbel and Weibull estimates according to the BIC criterion. .. GENERATED FROM PYTHON SOURCE LINES 32-35 We draw a sample from a Gumbel of parameters :math:`\beta = 1.0` and :math:`\gamma = 3.0` and another one from a Frechet with parameters :math:`\beta=1.0`, :math:`\alpha = 1.0` and :math:`\gamma = 0.0`. We consider both samples as a single sample from an unknown extreme distribution to be fitted. .. GENERATED FROM PYTHON SOURCE LINES 37-38 The distributions used: .. GENERATED FROM PYTHON SOURCE LINES 38-42 .. code-block:: default myGumbel = ot.Gumbel(1.0, 3.0) myFrechet = ot.Frechet(1.0, 1.0, 0.0) .. GENERATED FROM PYTHON SOURCE LINES 43-44 We build our experiment sample of size 2000. .. GENERATED FROM PYTHON SOURCE LINES 44-51 .. code-block:: default sample = ot.Sample() sampleFrechet = myFrechet.getSample(1000) sampleGumbel = myGumbel.getSample(1000) sample.add(sampleFrechet) sample.add(sampleGumbel) .. GENERATED FROM PYTHON SOURCE LINES 52-53 We fit the sample thanks to the `GeneralizedExtremeValueFactory`: .. GENERATED FROM PYTHON SOURCE LINES 53-57 .. code-block:: default myDistribution = ot.GeneralizedExtremeValueFactory().buildAsGeneralizedExtremeValue( sample ) .. GENERATED FROM PYTHON SOURCE LINES 58-59 We can display the parameters of the fitted distribution `myDistribution`: .. GENERATED FROM PYTHON SOURCE LINES 59-61 .. code-block:: default print(myDistribution) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none GeneralizedExtremeValue(mu=1.79565, sigma=1.54463, xi=0.546359) .. GENERATED FROM PYTHON SOURCE LINES 62-63 We can also get the actual distribution (Weibull, Frechet or Gumbel) with the `getActualDistribution` method: .. GENERATED FROM PYTHON SOURCE LINES 63-65 .. code-block:: default print(myDistribution.getActualDistribution()) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none Frechet(beta = 2.82713, alpha = 1.8303, gamma = -1.03148) .. GENERATED FROM PYTHON SOURCE LINES 66-67 The given sample is then best described by a Frechet distribution. .. GENERATED FROM PYTHON SOURCE LINES 69-70 We draw the fitted distribution and a histogram of the data. .. GENERATED FROM PYTHON SOURCE LINES 70-81 .. code-block:: default graph = myDistribution.drawPDF() graph.add(ot.HistogramFactory().build(sample).drawPDF()) graph.setColors(["black", "red"]) graph.setLegends(["GEV fitting", "histogram"]) graph.setLegendPosition("topright") view = viewer.View(graph) axes = view.getAxes() _ = axes[0].set_xlim(-20.0, 20.0) .. image-sg:: /auto_data_analysis/distribution_fitting/images/sphx_glr_plot_fit_extreme_value_distribution_001.png :alt: plot fit extreme value distribution :srcset: /auto_data_analysis/distribution_fitting/images/sphx_glr_plot_fit_extreme_value_distribution_001.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 82-90 We compare different fitting strategies for this sample: - use the histogram from the data (red) - the GEV fitted distribution (black) - the pure Frechet fitted distribution (green) - the pure Gumbel fitted distribution (blue) - the pure WeibullMax fitted distribution (dashed orange) .. GENERATED FROM PYTHON SOURCE LINES 90-121 .. code-block:: default graph = myDistribution.drawPDF() graph.add(ot.HistogramFactory().build(sample).drawPDF()) distFrechet = ot.FrechetFactory().buildAsFrechet(sample) graph.add(distFrechet.drawPDF()) distGumbel = ot.GumbelFactory().buildAsGumbel(sample) graph.add(distGumbel.drawPDF()) # We change the line style of the WeibullMax. distWeibullMax = ot.WeibullMaxFactory().buildAsWeibullMax(sample) curveWeibullMax = distWeibullMax.drawPDF().getDrawable(0) curveWeibullMax.setLineStyle("dashed") graph.add(curveWeibullMax) graph.setColors(["black", "red", "green", "blue", "orange"]) graph.setLegends( [ "GEV fitting", "histogram", "Frechet fitting", "Gumbel fitting", "WeibullMax fitting", ] ) graph.setLegendPosition("topright") view = viewer.View(graph) axes = view.getAxes() # axes is a matplotlib object _ = axes[0].set_xlim(-20.0, 20.0) .. image-sg:: /auto_data_analysis/distribution_fitting/images/sphx_glr_plot_fit_extreme_value_distribution_002.png :alt: plot fit extreme value distribution :srcset: /auto_data_analysis/distribution_fitting/images/sphx_glr_plot_fit_extreme_value_distribution_002.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 122-124 As returned by the `getActualDistribution` method the GEV distribution is a Frechet. The :class:`~openturns.GeneralizedExtremeValueFactory` class is a convenient class to fit extreme valued samples without an a priori knowledge of the underlying (at least the closest) extreme distribution. .. GENERATED FROM PYTHON SOURCE LINES 127-134 The Generalized Pareto Distribution (GPD) ----------------------------------------- In this paragraph we fit a :class:`~openturns.GeneralizedPareto` distribution. Various estimators are provided by the GPD factory. Please refer to the :class:`~openturns.GeneralizedParetoFactory` class documentation for more information. The selection is based on the sample size and compared to the `GeneralizedParetoFactory-SmallSize` key of the :class:`~openturns.ResourceMap`: .. GENERATED FROM PYTHON SOURCE LINES 136-140 .. code-block:: default print(ot.ResourceMap.GetAsUnsignedInteger( "GeneralizedParetoFactory-SmallSize")) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none 20 .. GENERATED FROM PYTHON SOURCE LINES 141-145 The small sample case ^^^^^^^^^^^^^^^^^^^^^ In this case the default estimator is based on a probability weighted method of moments, with a fallback on the exponential regression method. .. GENERATED FROM PYTHON SOURCE LINES 147-151 .. code-block:: default myDist = ot.GeneralizedPareto(1.0, 0.0, 0.0) N = 17 sample = myDist.getSample(N) .. GENERATED FROM PYTHON SOURCE LINES 152-153 We build our experiment sample of size `N`. .. GENERATED FROM PYTHON SOURCE LINES 153-156 .. code-block:: default myFittedDist = ot.GeneralizedParetoFactory().buildAsGeneralizedPareto(sample) print(myFittedDist) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none GeneralizedPareto(sigma = 0.678732, xi=0.0289962, u=0.0498077) .. GENERATED FROM PYTHON SOURCE LINES 157-158 We draw the fitted distribution as well as an histogram to visualize the fit: .. GENERATED FROM PYTHON SOURCE LINES 158-170 .. code-block:: default graph = myFittedDist.drawPDF() graph.add(ot.HistogramFactory().build(sample).drawPDF()) graph.setTitle("Generalized Pareto distribution fitting on a sample") graph.setColors(["black", "red"]) graph.setLegends(["GPD fitting", "histogram"]) graph.setLegendPosition("topright") view = viewer.View(graph) axes = view.getAxes() _ = axes[0].set_xlim(-1.0, 10.0) .. image-sg:: /auto_data_analysis/distribution_fitting/images/sphx_glr_plot_fit_extreme_value_distribution_003.png :alt: Generalized Pareto distribution fitting on a sample :srcset: /auto_data_analysis/distribution_fitting/images/sphx_glr_plot_fit_extreme_value_distribution_003.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 171-176 Large sample ^^^^^^^^^^^^ For a larger sample the estimator is based on an exponential regression method with a fallback on the probability weighted moments estimator. .. GENERATED FROM PYTHON SOURCE LINES 179-182 .. code-block:: default N = 1000 sample = myDist.getSample(N) .. GENERATED FROM PYTHON SOURCE LINES 183-184 We build our experiment sample of size `N`. .. GENERATED FROM PYTHON SOURCE LINES 184-187 .. code-block:: default myFittedDist = ot.GeneralizedParetoFactory().buildAsGeneralizedPareto(sample) print(myFittedDist) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none GeneralizedPareto(sigma = 0.971553, xi=-0.000639593, u=0.000103683) .. GENERATED FROM PYTHON SOURCE LINES 188-189 We draw the fitted distribution as well as a histogram to visualize the fit: .. GENERATED FROM PYTHON SOURCE LINES 189-202 .. code-block:: default graph = myFittedDist.drawPDF() graph.add(ot.HistogramFactory().build(sample).drawPDF()) graph.setTitle("Generalized Pareto distribution fitting on a sample") graph.setColors(["black", "red"]) graph.setLegends(["GPD fitting", "histogram"]) graph.setLegendPosition("topright") view = viewer.View(graph) axes = view.getAxes() _ = axes[0].set_xlim(-1.0, 10.0) plt.show() .. image-sg:: /auto_data_analysis/distribution_fitting/images/sphx_glr_plot_fit_extreme_value_distribution_004.png :alt: Generalized Pareto distribution fitting on a sample :srcset: /auto_data_analysis/distribution_fitting/images/sphx_glr_plot_fit_extreme_value_distribution_004.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-timing **Total running time of the script:** ( 0 minutes 0.673 seconds) .. _sphx_glr_download_auto_data_analysis_distribution_fitting_plot_fit_extreme_value_distribution.py: .. only :: html .. container:: sphx-glr-footer :class: sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_fit_extreme_value_distribution.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_fit_extreme_value_distribution.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_