Commit 90a15a57 authored by Le Roux Erwan's avatar Le Roux Erwan
Browse files

[TREND ANALYSIS] add test_mean, and test_variance for the GevParams class

parent ef47242e
No related merge requests found
Showing with 29 additions and 3 deletions
+29 -3
......@@ -18,15 +18,15 @@ mpl.rcParams['hatch.linewidth'] = 0.3
def main_non_stationary_model_comparison():
stop_loop = True
stop_loop = False
for altitude in POSTER_ALTITUDES[:]:
for trend_test_class in [GevLocationTrendTest, GevScaleTrendTest, GevLocationAndScaleTrendTest,
ComparisonAgainstMu, ComparisonAgainstSigma][::-1][-1:]:
ComparisonAgainstMu, ComparisonAgainstSigma][::-1][:]:
vizualiser = get_full_altitude_visualizer(Altitude_Hypercube_Year_Visualizer, altitude=altitude,
exact_starting_year=1958, reduce_strength_array=False,
trend_test_class=trend_test_class,
)
vizualiser.save_to_file = False
# vizualiser.save_to_file = False
vizualiser.visualize_massif_trend_test_one_altitude(poster_plot=True, write_text_on_massif=False)
if stop_loop:
return
......
......@@ -2,6 +2,7 @@ from collections import OrderedDict
from typing import List
from cached_property import cached_property
from mpmath import euler, pi
from extreme_estimator.extreme_models.utils import r
from extreme_estimator.margin_fits.extreme_params import ExtremeParams
......@@ -78,6 +79,8 @@ class GevParams(ExtremeParams):
return np.nan
elif self.shape >= 1:
return np.inf
elif self.shape == 0:
return self.location + self.scale * euler
else:
return self.location + self.scale * (self.g(k=1) - 1) / self.shape
......@@ -87,6 +90,8 @@ class GevParams(ExtremeParams):
return np.nan
elif self.shape >= 0.5:
return np.inf
elif self.shape == 0.0:
return (self.scale * pi) ** 2 / 6
else:
return ((self.scale / self.shape) ** 2) * (self.g(k=2) - self.g(k=1) ** 2)
......
import unittest
from mpmath import euler
import numpy as np
from scipy.special.cython_special import gamma
from extreme_estimator.margin_fits.gev.gev_params import GevParams
......@@ -33,6 +36,24 @@ class TestGevParams(unittest.TestCase):
self.assertEqual(gev_params.variance, np.inf)
self.assertEqual(gev_params.std, np.inf)
def test_mean(self):
mu = 1.0
sigma = 1.0
gev_params = GevParams(loc=mu, shape=0.0, scale=sigma)
self.assertEqual(gev_params.mean, mu + sigma * euler)
chi = 0.5
gev_params = GevParams(loc=mu, shape=chi, scale=sigma)
self.assertEqual(gev_params.mean, mu + sigma * (gamma(1 - 0.5) - 1) / chi)
def test_variance(self):
mu = 1.0
sigma = 1.0
gev_params = GevParams(loc=mu, shape=0.0, scale=sigma)
self.assertEqual(gev_params.variance, ((sigma * np.math.pi) ** 2) / 6)
chi = 0.25
gev_params = GevParams(loc=mu, shape=chi, scale=sigma)
self.assertEqual(gev_params.variance, ((sigma / chi) ** 2) * (gamma(1 - 2 * chi) - (gamma(1 - chi) ** 2)))
if __name__ == '__main__':
unittest.main()
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment