From 8938b42f6ea2b5c7b5f89b13a45d594bac4b2624 Mon Sep 17 00:00:00 2001 From: Le Roux Erwan <erwan.le-roux@irstea.fr> Date: Fri, 17 Apr 2020 18:55:12 +0200 Subject: [PATCH] [contrasting project] add aic and bic as results of extremes --- .../abstract_result_from_model_fit.py | 9 +++++++++ .../abstract_result_from_extremes.py | 12 ++++++++++++ .../altitudes_fit/utils.py | 3 +++ .../test_gev/test_gev_temporal_extremes_mle.py | 8 ++++++++ 4 files changed, 32 insertions(+) diff --git a/extreme_fit/model/result_from_model_fit/abstract_result_from_model_fit.py b/extreme_fit/model/result_from_model_fit/abstract_result_from_model_fit.py index c82898e0..c22ed796 100644 --- a/extreme_fit/model/result_from_model_fit/abstract_result_from_model_fit.py +++ b/extreme_fit/model/result_from_model_fit/abstract_result_from_model_fit.py @@ -1,6 +1,7 @@ import numpy as np from rpy2 import robjects +from extreme_fit.model.utils import r class AbstractResultFromModelFit(object): @@ -44,6 +45,14 @@ class AbstractResultFromModelFit(object): def deviance(self): return - 2 * self.nllh + @property + def bic(self): + raise NotImplementedError + + @property + def aic(self): + raise NotImplementedError + @property def convergence(self) -> str: raise NotImplementedError diff --git a/extreme_fit/model/result_from_model_fit/result_from_extremes/abstract_result_from_extremes.py b/extreme_fit/model/result_from_model_fit/result_from_extremes/abstract_result_from_extremes.py index 10c67292..1c0233d1 100644 --- a/extreme_fit/model/result_from_model_fit/result_from_extremes/abstract_result_from_extremes.py +++ b/extreme_fit/model/result_from_model_fit/result_from_extremes/abstract_result_from_extremes.py @@ -15,10 +15,22 @@ class AbstractResultFromExtremes(AbstractResultFromModelFit): super().__init__(result_from_fit) self.gev_param_name_to_dim = gev_param_name_to_dim + @property + def summary_name_to_value(self): + return self.get_python_dictionary(r('summary')(self.result_from_fit)) + @property def results(self): return self.get_python_dictionary(self.name_to_value['results']) + @property + def bic(self): + return np.array(self.summary_name_to_value['BIC'])[0] + + @property + def aic(self): + return np.array(self.summary_name_to_value['AIC'])[0] + @property def nllh(self): return np.array(self.results['value'])[0] diff --git a/projects/contrasting_trends_in_snow_loads/altitudes_fit/utils.py b/projects/contrasting_trends_in_snow_loads/altitudes_fit/utils.py index 86372c5c..45f31c7d 100644 --- a/projects/contrasting_trends_in_snow_loads/altitudes_fit/utils.py +++ b/projects/contrasting_trends_in_snow_loads/altitudes_fit/utils.py @@ -4,6 +4,9 @@ from enum import Enum class Score(Enum): NLLH_TEST = 1 + AIC_TRAIN = 2 + BIC_TRAIN = 3 + SPAN_30_RETURN_LEVEL_2019_AT_1000M = 4 class Grouping(Enum): diff --git a/test/test_extreme_fit/test_distribution/test_gev/test_gev_temporal_extremes_mle.py b/test/test_extreme_fit/test_distribution/test_gev/test_gev_temporal_extremes_mle.py index 6066ff4a..5f4b227e 100644 --- a/test/test_extreme_fit/test_distribution/test_gev/test_gev_temporal_extremes_mle.py +++ b/test/test_extreme_fit/test_distribution/test_gev/test_gev_temporal_extremes_mle.py @@ -70,6 +70,14 @@ class TestGevTemporalExtremesMle(unittest.TestCase): mle_params_estimated_year3 = estimator.function_from_fit.get_gev_params(np.array([3])).to_dict() self.assertNotEqual(mle_params_estimated_year1, mle_params_estimated_year3) self.assertAlmostEqual(estimator.result_from_model_fit.nllh, estimator.nllh()) + # self.assertAlmostEqual(estimator.result_from_model_fit.aic, estimator.aic()) + # self.assertAlmostEqual(estimator.result_from_model_fit.bic, estimator.bic()) + # print(estimator.result_from_model_fit.summary_name_to_value) + # for k, v in estimator.result_from_model_fit.results.items(): + # print(k, np.array(v)[0]) + self.assertAlmostEqual(estimator.result_from_model_fit.aic, 215.59675857481045) + self.assertAlmostEqual(estimator.result_from_model_fit.bic, 225.1568736019512) + if __name__ == '__main__': -- GitLab