An error occurred while loading the file. Please try again.
-
Le Roux Erwan authored
[GEV TREND TEST] rename and refactor the code for one parameter gev trend test (to prepare the introduction of tests with two parameters)
cdcbd7e6
from multiprocessing.pool import Pool
import numpy as np
from experiment.trend_analysis.univariate_test.abstract_gev_trend_test import AbstractGevTrendTest
from utils import NB_CORES
def compute_gev_change_point_test_result(smooth_maxima, starting_year, trend_test_class, years):
trend_test = trend_test_class(years, smooth_maxima, starting_year) # type: AbstractGevTrendTest
assert isinstance(trend_test, AbstractGevTrendTest)
return trend_test.test_trend_type, trend_test.test_trend_slope_strength, trend_test.non_stationary_nllh, trend_test.test_trend_constant_quantile, trend_test.non_stationary_deviance, trend_test.stationary_deviance
def compute_gev_change_point_test_results(multiprocessing, maxima, starting_years, trend_test_class,
years):
if multiprocessing:
list_args = [(maxima, starting_year, trend_test_class, years) for starting_year in
starting_years]
with Pool(NB_CORES) as p:
trend_test_res = p.starmap(compute_gev_change_point_test_result, list_args)
else:
trend_test_res = [
compute_gev_change_point_test_result(maxima, starting_year, trend_test_class, years)
for starting_year in starting_years]
# Keep only the most likely starting year
# (i.e. the starting year that minimizes its negative log likelihood)
# (set all the other data to np.nan so that they will not be taken into account in mean function)
best_idx = list(np.argmin(trend_test_res, axis=0))[2]
# print(best_idx, trend_test_res)
best_idxs = [best_idx]
# todo: by doing a sorting on the deviance, I could get the nb_top_likelihood_values values
# best_idxs = list(np.argmax(trend_test_res, axis=0))[-nb_top_likelihood_values:]
return trend_test_res, best_idxs