diff --git a/experiment/eurocode_data/main_eurocode_drawing.py b/experiment/eurocode_data/main_eurocode_drawing.py index ad5bc14aa36738177e393a18a67f7d7ba386a954..8321738bf7beb042b0da166d3c5508ee81704b73 100644 --- a/experiment/eurocode_data/main_eurocode_drawing.py +++ b/experiment/eurocode_data/main_eurocode_drawing.py @@ -23,7 +23,7 @@ mpl.rcParams['text.latex.preamble'] = [r'\usepackage{amsmath}'] def massif_name_to_ordered_return_level_uncertainties(model_class, last_year_for_the_data, altitudes, massif_names, - uncertainty_methods): + uncertainty_methods, temporal_covariate): # Load model name model_name = get_model_name(model_class) # Load altitude visualizer @@ -42,7 +42,8 @@ def massif_name_to_ordered_return_level_uncertainties(model_class, last_year_for print('{} processing altitude = {} '.format(model_name, altitude)) for ci_method in uncertainty_methods: d = visualizer.massif_name_to_altitude_and_eurocode_level_uncertainty(model_class, last_year_for_the_data, - massif_names, ci_method) + massif_names, ci_method, + temporal_covariate) # Append the altitude one by one for massif_name, return_level_uncertainty in d.items(): massif_name_to_ordered_eurocode_level_uncertainty[massif_name][ci_method].append( @@ -52,6 +53,7 @@ def massif_name_to_ordered_return_level_uncertainties(model_class, last_year_for def main_drawing(): fast_plot = [True, False][0] + temporal_covariate = 2017 # Select parameters massif_names = MASSIF_NAMES_ALPS[:] model_class_and_last_year = [ @@ -76,9 +78,9 @@ def main_drawing(): start = time.time() model_name_to_massif_name_to_ordered_return_level.update( massif_name_to_ordered_return_level_uncertainties(model_class, last_year_for_the_data, altitudes, - massif_names, uncertainty_methods)) + massif_names, uncertainty_methods, temporal_covariate)) duration = time.time() - start - print(model_class, duration) + print('Duration:', model_class, duration) # Transform the dictionary into the desired format massif_name_to_model_name_to_ordered_return_level_uncertainties = {} for massif_name in massif_names: diff --git a/experiment/meteo_france_data/scm_models_data/visualization/study_visualization/study_visualizer.py b/experiment/meteo_france_data/scm_models_data/visualization/study_visualization/study_visualizer.py index 35e3b9eb6f9f4f7e0857ff11acb3c3a5e93ac327..727af31eb0493010901e0cbd8c90f586c1a0953e 100644 --- a/experiment/meteo_france_data/scm_models_data/visualization/study_visualization/study_visualizer.py +++ b/experiment/meteo_france_data/scm_models_data/visualization/study_visualization/study_visualizer.py @@ -354,9 +354,9 @@ class StudyVisualizer(VisualizationParameters): start_year, stop_year = self.study.start_year_and_stop_year return list(range(start_year, stop_year)) - def massif_name_to_altitude_and_eurocode_level_uncertainty(self, model_class, last_year_for_the_data, massif_names, ci_method) -> Dict[str, Tuple[int, EurocodeConfidenceIntervalFromExtremes]]: + def massif_name_to_altitude_and_eurocode_level_uncertainty(self, model_class, last_year_for_the_data, massif_names, ci_method, temporal_covariate) -> Dict[str, Tuple[int, EurocodeConfidenceIntervalFromExtremes]]: massif_ids_and_names = [(massif_id, massif_name) for massif_id, massif_name in enumerate(self.study.study_massif_names) if massif_name in massif_names] - arguments = [[last_year_for_the_data, self.smooth_maxima_x_y(massif_id), model_class, ci_method] for massif_id, _ in massif_ids_and_names] + arguments = [[last_year_for_the_data, self.smooth_maxima_x_y(massif_id), model_class, ci_method, temporal_covariate] for massif_id, _ in massif_ids_and_names] if self.multiprocessing: with Pool(NB_CORES) as p: res = p.starmap(compute_eurocode_confidence_interval, arguments) diff --git a/extreme_fit/distribution/gev/main_fevd_bayesian.R b/extreme_fit/distribution/gev/main_fevd_bayesian.R index de7e0fdd1d6b3341314c3cd44a30e3599bdbd0e8..8cea57bbac012a40ce328cf99c909ce5b05ee6f5 100644 --- a/extreme_fit/distribution/gev/main_fevd_bayesian.R +++ b/extreme_fit/distribution/gev/main_fevd_bayesian.R @@ -9,9 +9,10 @@ library(SpatialExtremes) source('fevd_fixed.R') # Sample from a GEV set.seed(42) -N <- 100 -loc = 0; scale = 1; shape <- 0.1 +N <- 50 +loc = 0; scale = 1; shape <- 1 x_gev <- rgev(N, loc = loc, scale = scale, shape = shape) +start_loc = 0; start_scale = 1; start_shape = 1 # fevdPriorMy <- function (theta, q, p, log = FALSE){ # x = theta["shape"] + 0.5 @@ -43,11 +44,25 @@ x_gev <- rgev(N, loc = loc, scale = scale, shape = shape) # Add covariate coord <- matrix(ncol=1, nrow = N) -coord[,1]=seq(1,N,1) +coord[,1]=seq(0,N-1,1) +print(coord) colnames(coord) = c("T") coord = data.frame(coord, stringsAsFactors = TRUE) -# res = fevd_fixed(x_gev, data=coord, location.fun= ~T, scale.fun= ~T, method='Bayesian', priorFun="fevdPriorCustom", priorParams=list(q=c(6), p=c(9)), iter=5000, verbose=TRUE, use.phi=FALSE) -res = fevd_fixed(x_gev, data=coord, method='Bayesian', priorFun="fevdPriorCustom", priorParams=list(q=c(6), p=c(9)), iter=5000, verbose=TRUE, use.phi=FALSE) +res = fevd_fixed(x_gev, data=coord, location.fun= ~T, method='Bayesian', priorFun="fevdPriorCustom", priorParams=list(q=c(6), p=c(9)), iter=5000, verbose=TRUE, use.phi=FALSE) +# res = fevd_fixed(x_gev, data=coord, method='Bayesian', priorFun="fevdPriorCustom", priorParams=list(q=c(6), p=c(9)), iter=5000, verbose=TRUE, use.phi=FALSE) +print(res) + +v = make.qcov(res, vals = list(mu1 = c(0.0))) +# # res_find = findpars(res, FUN = "mean" , tscale = FALSE, qcov = v, +# # burn.in=4998) +# # print(res_find) +# # +res_ci = ci(res, alpha = 0.05, type = c("return.level"), + burn.in=499, + return.period = 50, FUN = "mean", tscale = FALSE, qcov=v) +print(res_ci) +print(res_ci[1, ]) + # Some display for the results # print(res) @@ -67,9 +82,9 @@ res = fevd_fixed(x_gev, data=coord, method='Bayesian', priorFun="fevdPriorCustom # Confidence interval -res_ci = ci(res, alpha = 0.05, type = c("return.level"), - return.period = 50, FUN = "mean", tscale = FALSE) -print(res_ci) +# res_ci = ci(res, alpha = 0.05, type = c("return.level"), +# return.period = 50, FUN = "mean", tscale = FALSE) +# print(res_ci) # print(attributes(res_ci)) # print(dimnames(res_ci)) # print(res_ci[1]) @@ -77,15 +92,16 @@ print(res_ci) # covariates = c(1.0, 100.0, 1000.0) # v = make.qcov(res, vals = list(mu1 = covariates, sigma1 = covariates)) -# v = make.qcov(res, vals = list(mu1 = c(0.0), sigma1 = c(0.0))) -# res_find = findpars(res, FUN = "mean" , tscale = FALSE, qcov = v, -# burn.in=4998) -# print(res_find) -# +# v = make.qcov(res, vals = list(mu1 = c(0.0))) +# # res_find = findpars(res, FUN = "mean" , tscale = FALSE, qcov = v, +# # burn.in=4998) +# # print(res_find) +# # # res_ci = ci(res, alpha = 0.05, type = c("return.level"), # burn.in=4998, # return.period = 50, FUN = "mean", tscale = FALSE, qcov=v) # print(res_ci) +# print(res_ci[1, ]) # # r = qgev(0.98, 0.1427229 , 1.120554, -0.1008511) # print(r) diff --git a/extreme_fit/model/result_from_model_fit/result_from_extremes/abstract_extract_eurocode_return_level.py b/extreme_fit/model/result_from_model_fit/result_from_extremes/abstract_extract_eurocode_return_level.py index 06277f7bc27be6495efcd01f2eaae365ab9f1c5b..f47b10dd3e6aa0288838ffbf3254e709e75f45b2 100644 --- a/extreme_fit/model/result_from_model_fit/result_from_extremes/abstract_extract_eurocode_return_level.py +++ b/extreme_fit/model/result_from_model_fit/result_from_extremes/abstract_extract_eurocode_return_level.py @@ -16,16 +16,12 @@ from extreme_fit.model.result_from_model_fit.result_from_extremes.result_from_ml class AbstractExtractEurocodeReturnLevel(object): ALPHA_CONFIDENCE_INTERVAL_UNCERTAINTY = 0.05 - def __init__(self, estimator: LinearMarginEstimator, - ci_method, - year_of_interest: int = YEAR_OF_INTEREST_FOR_RETURN_LEVEL, - ): + def __init__(self, estimator: LinearMarginEstimator, ci_method, temporal_covariate): self.ci_method = ci_method self.estimator = estimator self.result_from_fit = self.estimator.result_from_model_fit - - self.year_of_interest = year_of_interest - + self.temporal_covariate = temporal_covariate + # Fixed Parameters self.eurocode_quantile = EUROCODE_QUANTILE self.alpha_for_confidence_interval = self.ALPHA_CONFIDENCE_INTERVAL_UNCERTAINTY @@ -41,15 +37,15 @@ class AbstractExtractEurocodeReturnLevel(object): class ExtractEurocodeReturnLevelFromCiMethod(AbstractExtractEurocodeReturnLevel): result_from_fit: ResultFromMleExtremes - def __init__(self, estimator: LinearMarginEstimator, ci_method, - year_of_interest: int = YEAR_OF_INTEREST_FOR_RETURN_LEVEL): - super().__init__(estimator, ci_method, year_of_interest) + @property + def transformed_temporal_covariate(self): + return self.estimator.dataset.coordinates.transformation.transform_float(self.temporal_covariate) @cached_property def confidence_interval_method(self): return self.result_from_fit.confidence_interval_method(self.eurocode_quantile, self.alpha_for_confidence_interval, - self.year_of_interest) + self.transformed_temporal_covariate) @property def mean_estimate(self) -> np.ndarray: @@ -63,9 +59,8 @@ class ExtractEurocodeReturnLevelFromCiMethod(AbstractExtractEurocodeReturnLevel) class ExtractEurocodeReturnLevelFromMyBayesianExtremes(AbstractExtractEurocodeReturnLevel): result_from_fit: ResultFromBayesianExtremes - def __init__(self, estimator: LinearMarginEstimator, ci_method, - year_of_interest: int = YEAR_OF_INTEREST_FOR_RETURN_LEVEL): - super().__init__(estimator, ci_method, year_of_interest) + def __init__(self, estimator: LinearMarginEstimator, ci_method, temporal_covariate): + super().__init__(estimator, ci_method, temporal_covariate) assert isinstance(self.result_from_fit, ResultFromBayesianExtremes) @property @@ -78,24 +73,24 @@ class ExtractEurocodeReturnLevelFromMyBayesianExtremes(AbstractExtractEurocodeRe return margin_functions @property - def gev_params_from_fit_for_year_of_interest(self) -> List[GevParams]: - return [margin_function.get_gev_params(coordinate=np.array([self.year_of_interest]), is_transformed=False) + def gev_params_from_fit_for_temporal_covariate(self) -> List[GevParams]: + return [margin_function.get_gev_params(coordinate=np.array([self.temporal_covariate]), is_transformed=False) for margin_function in self.margin_functions_from_fit] @cached_property - def posterior_eurocode_return_level_samples_for_year_of_interest(self) -> np.ndarray: + def posterior_eurocode_return_level_samples_for_temporal_covariate(self) -> np.ndarray: return np.array( - [p.quantile(self.eurocode_quantile) for p in self.gev_params_from_fit_for_year_of_interest]) + [p.quantile(self.eurocode_quantile) for p in self.gev_params_from_fit_for_temporal_covariate]) @property def mean_estimate(self) -> np.ndarray: # Mean posterior value here - return np.mean(self.posterior_eurocode_return_level_samples_for_year_of_interest) + return np.mean(self.posterior_eurocode_return_level_samples_for_temporal_covariate) @property def confidence_interval(self): # Bottom and upper quantile correspond to the quantile bottom_quantile = self.alpha_for_confidence_interval / 2 bottom_and_upper_quantile = (bottom_quantile, 1 - bottom_quantile) - return [np.quantile(self.posterior_eurocode_return_level_samples_for_year_of_interest, q=q) + return [np.quantile(self.posterior_eurocode_return_level_samples_for_temporal_covariate, q=q) for q in bottom_and_upper_quantile] 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 d63f82c717501180b435ff6459fdfc198b42a533..0a93a88f6c1c0cc2bdb374dceffe465c96cc7f4e 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 @@ -14,11 +14,15 @@ class AbstractResultFromExtremes(AbstractResultFromModelFit): super().__init__(result_from_fit) self.gev_param_name_to_dim = gev_param_name_to_dim + @property + def is_non_stationary(self): + return len(self.gev_param_name_to_dim) == 0 + def load_dataframe_from_r_matrix(self, name): r_matrix = self.name_to_value[name] return pd.DataFrame(np.array(r_matrix), columns=r.colnames(r_matrix)) - def confidence_interval_method(self, quantile_level, alpha_interval, temporal_covariate): + def confidence_interval_method(self, quantile_level, alpha_interval, transformed_temporal_covariate): return_period = round(1 / (1 - quantile_level)) common_kwargs = { 'return.period': return_period, @@ -27,7 +31,7 @@ class AbstractResultFromExtremes(AbstractResultFromModelFit): 'type': r.c("return.level") } if self.gev_param_name_to_dim: - d = {GevParams.greek_letter_from_gev_param_name(gev_param_name) + '1': r.c(temporal_covariate) for + d = {GevParams.greek_letter_from_gev_param_name(gev_param_name) + '1': r.c(transformed_temporal_covariate) for gev_param_name in self.gev_param_name_to_dim.keys()} kwargs = { "vals": r.list(**d diff --git a/extreme_fit/model/result_from_model_fit/result_from_extremes/eurocode_return_level_uncertainties.py b/extreme_fit/model/result_from_model_fit/result_from_extremes/eurocode_return_level_uncertainties.py index 8ed06a9f96e91d0f08ee80106acf162195d0fd8d..5868612141c44c6c7fe5426698db1104cdc3ff42 100644 --- a/extreme_fit/model/result_from_model_fit/result_from_extremes/eurocode_return_level_uncertainties.py +++ b/extreme_fit/model/result_from_model_fit/result_from_extremes/eurocode_return_level_uncertainties.py @@ -11,15 +11,14 @@ from extreme_fit.model.result_from_model_fit.result_from_extremes.confidence_int ConfidenceIntervalMethodFromExtremes -def compute_eurocode_confidence_interval(last_year_for_the_data, smooth_maxima_x_y, model_class, ci_method): +def compute_eurocode_confidence_interval(last_year_for_the_data, smooth_maxima_x_y, model_class, ci_method, temporal_covariate): years, smooth_maxima = smooth_maxima_x_y idx = years.index(last_year_for_the_data) + 1 years, smooth_maxima = years[:idx], smooth_maxima[:idx] - return EurocodeConfidenceIntervalFromExtremes.from_maxima_years_model_class(smooth_maxima, years, model_class, ci_method) + return EurocodeConfidenceIntervalFromExtremes.from_maxima_years_model_class(smooth_maxima, years, model_class, temporal_covariate, ci_method) class EurocodeConfidenceIntervalFromExtremes(object): - YEAR_OF_INTEREST = 2017 def __init__(self, mean_estimate, confidence_interval): self.mean_estimate = mean_estimate @@ -31,15 +30,17 @@ class EurocodeConfidenceIntervalFromExtremes(object): @classmethod def from_estimator_extremes(cls, estimator_extremes: LinearMarginEstimator, - ci_method: ConfidenceIntervalMethodFromExtremes): + ci_method: ConfidenceIntervalMethodFromExtremes, + temporal_covariate: int): if ci_method == ConfidenceIntervalMethodFromExtremes.my_bayes: - extractor = ExtractEurocodeReturnLevelFromMyBayesianExtremes(estimator_extremes, ci_method, cls.YEAR_OF_INTEREST) + extractor = ExtractEurocodeReturnLevelFromMyBayesianExtremes(estimator_extremes, ci_method, temporal_covariate) else: - extractor = ExtractEurocodeReturnLevelFromCiMethod(estimator_extremes, ci_method, cls.YEAR_OF_INTEREST) + extractor = ExtractEurocodeReturnLevelFromCiMethod(estimator_extremes, ci_method, temporal_covariate) return cls(extractor.mean_estimate, extractor.confidence_interval) @classmethod def from_maxima_years_model_class(cls, maxima, years, model_class, + temporal_covariate, ci_method=ConfidenceIntervalMethodFromExtremes.ci_bayes): # Load coordinates and dataset coordinates, dataset = load_temporal_coordinates_and_dataset(maxima, years) @@ -53,7 +54,7 @@ class EurocodeConfidenceIntervalFromExtremes(object): fitted_estimator = fitted_linear_margin_estimator(model_class, coordinates, dataset, starting_year=1958, fit_method=fit_method) # Load object from result from extremes - return cls.from_estimator_extremes(fitted_estimator, ci_method) + return cls.from_estimator_extremes(fitted_estimator, ci_method, temporal_covariate) diff --git a/extreme_fit/model/result_from_model_fit/result_from_extremes/result_from_bayesian_extremes.py b/extreme_fit/model/result_from_model_fit/result_from_extremes/result_from_bayesian_extremes.py index a760f20f44855b3895c1885f281bdae4b44f5297..851d0837e02b00ee0c0310231848269c7c8b0cdf 100644 --- a/extreme_fit/model/result_from_model_fit/result_from_extremes/result_from_bayesian_extremes.py +++ b/extreme_fit/model/result_from_model_fit/result_from_extremes/result_from_bayesian_extremes.py @@ -53,9 +53,13 @@ class ResultFromBayesianExtremes(AbstractResultFromExtremes): 'FUN': "mean", } res = r.ci(self.result_from_fit, **bayesian_ci_parameters, **common_kwargs) - d = self.get_python_dictionary(res) - keys = ['Posterior Mean 50-year level', '95% lower CI', '95% upper CI'] - mean_estimate, lower, upper = [np.array(d[k])[0] for k in keys] + if self.gev_param_name_to_dim: + a = np.array(res)[0] + lower, mean_estimate, upper = a + else: + d = self.get_python_dictionary(res) + keys = ['Posterior Mean 50-year level', '95% lower CI', '95% upper CI'] + mean_estimate, lower, upper = [np.array(d[k])[0] for k in keys] return mean_estimate, (lower, upper) diff --git a/spatio_temporal_dataset/coordinates/transformed_coordinates/transformation/abstract_transformation.py b/spatio_temporal_dataset/coordinates/transformed_coordinates/transformation/abstract_transformation.py index a328257b66ee0f31b30652ce7c1612a51df51af6..98141e13346cd8bd2d5241f7bfd5994f4a73ae53 100644 --- a/spatio_temporal_dataset/coordinates/transformed_coordinates/transformation/abstract_transformation.py +++ b/spatio_temporal_dataset/coordinates/transformed_coordinates/transformation/abstract_transformation.py @@ -13,6 +13,9 @@ class AbstractTransformation(object): def nb_dimensions(self): return self.df_coordinates.shape[1] + def transform_float(self, coordinate: float): + return self.transform_array(np.array([coordinate]))[0] + def transform_array(self, coordinate: np.ndarray): assert len(coordinate) == self.nb_dimensions, "coordinate={}, nb_dimensions={}".format(coordinate, self.nb_dimensions) diff --git a/test/test_extreme_fit/test_model/test_confidence_interval.py b/test/test_extreme_fit/test_model/test_confidence_interval.py index 79fefd84f28e34c3f8422da5fc8ac064eb80d8b4..b7b4c52849f759a6a80554ae6449336aa2ee0249 100644 --- a/test/test_extreme_fit/test_model/test_confidence_interval.py +++ b/test/test_extreme_fit/test_model/test_confidence_interval.py @@ -16,6 +16,8 @@ from extreme_fit.model.utils import r, set_seed_r, set_seed_for_test from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates from spatio_temporal_dataset.coordinates.temporal_coordinates.abstract_temporal_coordinates import \ AbstractTemporalCoordinates +from spatio_temporal_dataset.coordinates.transformed_coordinates.transformation.abstract_transformation import \ + CenteredScaledNormalization from spatio_temporal_dataset.dataset.abstract_dataset import AbstractDataset from spatio_temporal_dataset.spatio_temporal_observations.abstract_spatio_temporal_observations import \ AbstractSpatioTemporalObservations @@ -23,7 +25,7 @@ from spatio_temporal_dataset.spatio_temporal_observations.abstract_spatio_tempor class TestConfidenceInterval(unittest.TestCase): - def setUp(self) -> None: + def load_data(self) -> None: set_seed_for_test() r(""" N <- 50 @@ -34,42 +36,69 @@ class TestConfidenceInterval(unittest.TestCase): # Compute the stationary temporal margin with isMev self.start_year = 0 df = pd.DataFrame({AbstractCoordinates.COORDINATE_T: range(self.start_year, self.start_year + 50)}) - self.coordinates = AbstractTemporalCoordinates.from_df(df) + self.coordinates = self.load_coordinates(df) df2 = pd.DataFrame(data=np.array(r['x_gev']), index=df.index) observations = AbstractSpatioTemporalObservations(df_maxima_gev=df2) self.dataset = AbstractDataset(observations=observations, coordinates=self.coordinates) self.model_classes = [StationaryTemporalModel] + @staticmethod + def load_coordinates(df): + return AbstractTemporalCoordinates.from_df(df) + def compute_eurocode_ci(self, model_class): + self.load_data() estimator = fitted_linear_margin_estimator(model_class, self.coordinates, self.dataset, starting_year=0, fit_method=self.fit_method) - return EurocodeConfidenceIntervalFromExtremes.from_estimator_extremes(estimator, self.ci_method) + return EurocodeConfidenceIntervalFromExtremes.from_estimator_extremes(estimator, self.ci_method, + self.start_year) + + @property + def bayesian_ci(self): + return { + StationaryTemporalModel: (6.756903450587758, 10.316338515219085, 15.77861914935531), + NonStationaryLocationTemporalModel: (6.588570126641043, 10.055847177064836, 14.332882862817332), + NonStationaryLocationAndScaleTemporalModel: (7.836837972383451, 11.162663922795906, 16.171701445841183), + } def test_my_bayes(self): self.fit_method = TemporalMarginFitMethod.extremes_fevd_bayesian self.ci_method = ConfidenceIntervalMethodFromExtremes.my_bayes - self.model_class_to_triplet = { - StationaryTemporalModel: (6.756903450587758, 10.316338515219085, 15.77861914935531), - NonStationaryLocationTemporalModel: (6.047033481540427, 9.708540966532225, 14.74058551926604), - NonStationaryLocationAndScaleTemporalModel: (6.383536224810785, 9.69120774797993, 13.917914357321615), - } + self.model_class_to_triplet = self.bayesian_ci def test_ci_bayes(self): self.fit_method = TemporalMarginFitMethod.extremes_fevd_bayesian self.ci_method = ConfidenceIntervalMethodFromExtremes.ci_bayes - self.model_class_to_triplet = { - StationaryTemporalModel: (6.756903450587758, 10.316338515219085, 15.77861914935531), - # NonStationaryLocationTemporalModel: (6.047033481540427, 9.708540966532225, 14.74058551926604), - # NonStationaryLocationAndScaleTemporalModel: (6.383536224810785, 9.69120774797993, 13.917914357321615), - } + self.model_class_to_triplet = self.bayesian_ci def tearDown(self) -> None: for model_class, expected_triplet in self.model_class_to_triplet.items(): - eurocode_ci = self.compute_eurocode_ci(StationaryTemporalModel) + eurocode_ci = self.compute_eurocode_ci(model_class) found_triplet = eurocode_ci.triplet for a, b in zip(expected_triplet, found_triplet): - self.assertAlmostEqual(a, b, msg="{} {}".format(model_class, found_triplet)) + self.assertAlmostEqual(a, b, msg="{} \n{}".format(model_class, found_triplet)) + + +class TestConfidenceIntervalModifiedCoordinates(TestConfidenceInterval): + + @staticmethod + def load_coordinates(df): + return AbstractTemporalCoordinates.from_df(df, transformation_class=CenteredScaledNormalization) + + @property + def bayesian_ci(self): + return { + StationaryTemporalModel: (6.756903450587758, 10.316338515219085, 15.77861914935531), + NonStationaryLocationTemporalModel: (6.266027110993808, 10.063368195790687, 14.894103640762097), + NonStationaryLocationAndScaleTemporalModel: (5.554116722722492, 13.714431163455535, 26.929963957448642), + } + + def test_my_bayes(self): + super().test_my_bayes() + + def test_ci_bayes(self): + super().test_ci_bayes() if __name__ == '__main__':