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 c82898e03edd1cde5d4fe0f90668eb6c23db02fa..c22ed7965dd366e2110614b111c9da1e8605839a 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 10c67292ef941189a3f380d26172a94813cd374a..1c0233d1ad19a77a4f6ed8a743027c8edbde99c9 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 86372c5c76347c248aa8b9523de181b2397879ee..45f31c7dc201008cf357ce9b4d02c7bec2cce7e0 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 6066ff4a2bdd44fe1adf10c05d685205c4f6c9ee..5f4b227e14bd5e48cbd815f69750318a84b38f2d 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__':