Commit 04a73d0a authored by Le Roux Erwan's avatar Le Roux Erwan
Browse files

[refactor] refactor test_quantile_estimator.py. Quantile estimators works for...

[refactor] refactor test_quantile_estimator.py. Quantile estimators works for any temporal coordinates.
parent 2e28c325
No related merge requests found
Showing with 22 additions and 20 deletions
+22 -20
...@@ -10,6 +10,8 @@ from extreme_fit.function.abstract_quantile_function import AbstractQuantileFunc ...@@ -10,6 +10,8 @@ from extreme_fit.function.abstract_quantile_function import AbstractQuantileFunc
from extreme_fit.function.margin_function.abstract_margin_function import AbstractMarginFunction from extreme_fit.function.margin_function.abstract_margin_function import AbstractMarginFunction
from extreme_fit.function.param_function.linear_coef import LinearCoef from extreme_fit.function.param_function.linear_coef import LinearCoef
from extreme_fit.function.param_function.param_function import LinearParamFunction from extreme_fit.function.param_function.param_function import LinearParamFunction
from extreme_fit.model.margin_model.linear_margin_model.abstract_temporal_linear_margin_model import \
AbstractTemporalLinearMarginModel
from extreme_fit.model.margin_model.linear_margin_model.linear_margin_model import LinearMarginModel from extreme_fit.model.margin_model.linear_margin_model.linear_margin_model import LinearMarginModel
from extreme_fit.model.quantile_model.quantile_regression_model import AbstractQuantileRegressionModel from extreme_fit.model.quantile_model.quantile_regression_model import AbstractQuantileRegressionModel
from extreme_fit.model.result_from_model_fit.abstract_result_from_model_fit import AbstractResultFromModelFit from extreme_fit.model.result_from_model_fit.abstract_result_from_model_fit import AbstractResultFromModelFit
...@@ -31,7 +33,7 @@ class AbstractQuantileEstimator(AbstractEstimator, ABC): ...@@ -31,7 +33,7 @@ class AbstractQuantileEstimator(AbstractEstimator, ABC):
class QuantileEstimatorFromMargin(LinearMarginEstimator, AbstractQuantileEstimator): class QuantileEstimatorFromMargin(LinearMarginEstimator, AbstractQuantileEstimator):
def __init__(self, dataset: AbstractDataset, margin_model: LinearMarginModel, quantile): def __init__(self, dataset: AbstractDataset, margin_model: AbstractTemporalLinearMarginModel, quantile):
super().__init__(dataset=dataset, quantile=quantile, margin_model=margin_model) super().__init__(dataset=dataset, quantile=quantile, margin_model=margin_model)
@cached_property @cached_property
...@@ -53,8 +55,10 @@ class QuantileRegressionEstimator(AbstractQuantileEstimator): ...@@ -53,8 +55,10 @@ class QuantileRegressionEstimator(AbstractQuantileEstimator):
def function_from_fit(self) -> AbstractQuantileFunction: def function_from_fit(self) -> AbstractQuantileFunction:
result_from_model_fit = self.result_from_model_fit # type: ResultFromQuantreg result_from_model_fit = self.result_from_model_fit # type: ResultFromQuantreg
coefs = result_from_model_fit.coefficients coefs = result_from_model_fit.coefficients
dims = list(np.arange(len(coefs)) - 1) nb_coefs = len(coefs)
linear_coef = LinearCoef('quantile', idx_to_coef=dict(zip(dims, coefs))) dims = list(range(nb_coefs-1))
idx_to_coef = dict(zip([-1] + dims, coefs))
linear_coef = LinearCoef(idx_to_coef=idx_to_coef)
param_function = LinearParamFunction(dims=dims, coordinates=self.dataset.coordinates.coordinates_values(), param_function = LinearParamFunction(dims=dims, coordinates=self.dataset.coordinates.coordinates_values(),
linear_coef=linear_coef) linear_coef=linear_coef)
return QuantileFunctionFromParamFunction(coordinates=self.dataset.coordinates, return QuantileFunctionFromParamFunction(coordinates=self.dataset.coordinates,
......
...@@ -4,6 +4,7 @@ from rpy2 import robjects ...@@ -4,6 +4,7 @@ from rpy2 import robjects
from extreme_fit.model.abstract_model import AbstractModel from extreme_fit.model.abstract_model import AbstractModel
from extreme_fit.model.result_from_model_fit.result_from_quantilreg import ResultFromQuantreg from extreme_fit.model.result_from_model_fit.result_from_quantilreg import ResultFromQuantreg
from extreme_fit.model.utils import r, safe_run_r_estimator, get_coord_df from extreme_fit.model.utils import r, safe_run_r_estimator, get_coord_df
from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates
from spatio_temporal_dataset.dataset.abstract_dataset import AbstractDataset from spatio_temporal_dataset.dataset.abstract_dataset import AbstractDataset
...@@ -47,8 +48,10 @@ class ConstantQuantileRegressionModel(AbstractQuantileRegressionModel): ...@@ -47,8 +48,10 @@ class ConstantQuantileRegressionModel(AbstractQuantileRegressionModel):
return '1' return '1'
class AllCoordinatesQuantileRegressionModel(AbstractQuantileRegressionModel): class TemporalCoordinatesQuantileRegressionModel(AbstractQuantileRegressionModel):
@property @property
def formula_str(self): def formula_str(self):
return '+'.join(self.dataset.coordinates.coordinates_names[-1:]) assert self.dataset.coordinates.has_temporal_coordinates \
and not self.dataset.coordinates.has_spatial_coordinates
return AbstractCoordinates.COORDINATE_T
import numpy as np
from cached_property import cached_property from cached_property import cached_property
from extreme_fit.function.param_function.param_function import LinearParamFunction from extreme_fit.function.param_function.param_function import LinearParamFunction
...@@ -8,4 +9,4 @@ class ResultFromQuantreg(AbstractResultFromModelFit): ...@@ -8,4 +9,4 @@ class ResultFromQuantreg(AbstractResultFromModelFit):
@property @property
def coefficients(self): def coefficients(self):
return self.name_to_value['coefficients'] return np.array(self.name_to_value['coefficients'])
...@@ -2,29 +2,23 @@ import unittest ...@@ -2,29 +2,23 @@ import unittest
from extreme_fit.estimator.quantile_estimator.abstract_quantile_estimator import QuantileEstimatorFromMargin, \ from extreme_fit.estimator.quantile_estimator.abstract_quantile_estimator import QuantileEstimatorFromMargin, \
QuantileRegressionEstimator QuantileRegressionEstimator
from extreme_fit.model.margin_model.linear_margin_model.temporal_linear_margin_models import StationaryTemporalModel
from spatio_temporal_dataset.dataset.simulation_dataset import MarginDataset from spatio_temporal_dataset.dataset.simulation_dataset import MarginDataset
from test.test_utils import load_test_1D_and_2D_spatial_coordinates, load_test_spatiotemporal_coordinates, \ from test.test_utils import load_test_1D_and_2D_spatial_coordinates, load_test_spatiotemporal_coordinates, \
load_smooth_margin_models, load_smooth_quantile_model_classes load_smooth_margin_models, load_smooth_quantile_model_classes, load_test_temporal_coordinates
class TestQuantileEstimator(unittest.TestCase): class TestQuantileEstimator(unittest.TestCase):
DISPLAY = False DISPLAY = False
def test_smooth_margin_estimator_spatial(self): def test_quantile_estimator_temporal(self):
self.nb_points = 20 self.nb_points = 20
self.nb_obs = 1 self.nb_obs = 1
self.coordinates = load_test_1D_and_2D_spatial_coordinates(nb_points=self.nb_points)[:1] self.coordinates = load_test_temporal_coordinates(nb_steps=self.nb_points)
def test_smooth_margin_estimator_spatio_temporal(self):
self.nb_points = 2
self.nb_steps = 2
self.nb_obs = 1
self.coordinates = load_test_spatiotemporal_coordinates(nb_steps=self.nb_steps, nb_points=self.nb_points)
def tearDown(self) -> None:
quantile = 0.5 quantile = 0.5
for coordinates in self.coordinates: for coordinates in self.coordinates:
constant_margin_model = load_smooth_margin_models(coordinates=coordinates)[0] constant_margin_model = StationaryTemporalModel(coordinates)
dataset = MarginDataset.from_sampling(nb_obs=self.nb_obs, dataset = MarginDataset.from_sampling(nb_obs=self.nb_obs,
margin_model=constant_margin_model, margin_model=constant_margin_model,
coordinates=coordinates) coordinates=coordinates)
...@@ -32,7 +26,7 @@ class TestQuantileEstimator(unittest.TestCase): ...@@ -32,7 +26,7 @@ class TestQuantileEstimator(unittest.TestCase):
quantile_estimators = [ quantile_estimators = [
QuantileEstimatorFromMargin(dataset, constant_margin_model, quantile), QuantileEstimatorFromMargin(dataset, constant_margin_model, quantile),
] ]
for quantile_model_class in load_smooth_quantile_model_classes()[:1]: for quantile_model_class in load_smooth_quantile_model_classes()[:]:
quantile_estimator = QuantileRegressionEstimator(dataset, quantile, quantile_model_class) quantile_estimator = QuantileRegressionEstimator(dataset, quantile, quantile_model_class)
quantile_estimators.append(quantile_estimator) quantile_estimators.append(quantile_estimator)
......
...@@ -18,7 +18,7 @@ from extreme_fit.model.max_stable_model.max_stable_models import Smith, BrownRes ...@@ -18,7 +18,7 @@ from extreme_fit.model.max_stable_model.max_stable_models import Smith, BrownRes
from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall, Safran, SafranRainfall, \ from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall, Safran, SafranRainfall, \
SafranTemperature, SafranPrecipitation SafranTemperature, SafranPrecipitation
from extreme_fit.model.quantile_model.quantile_regression_model import ConstantQuantileRegressionModel, \ from extreme_fit.model.quantile_model.quantile_regression_model import ConstantQuantileRegressionModel, \
AllCoordinatesQuantileRegressionModel TemporalCoordinatesQuantileRegressionModel
from spatio_temporal_dataset.coordinates.spatial_coordinates.abstract_spatial_coordinates import \ from spatio_temporal_dataset.coordinates.spatial_coordinates.abstract_spatial_coordinates import \
AbstractSpatialCoordinates AbstractSpatialCoordinates
from spatio_temporal_dataset.coordinates.spatial_coordinates.alps_station_3D_coordinates import \ from spatio_temporal_dataset.coordinates.spatial_coordinates.alps_station_3D_coordinates import \
...@@ -43,7 +43,7 @@ TEST_3D_SPATIAL_COORDINATES = [AlpsStation3DCoordinatesWithAnisotropy] ...@@ -43,7 +43,7 @@ TEST_3D_SPATIAL_COORDINATES = [AlpsStation3DCoordinatesWithAnisotropy]
TEST_TEMPORAL_COORDINATES = [ConsecutiveTemporalCoordinates] TEST_TEMPORAL_COORDINATES = [ConsecutiveTemporalCoordinates]
TEST_SPATIO_TEMPORAL_COORDINATES = [UniformSpatioTemporalCoordinates, LinSpaceSpatial2DSpatioTemporalCoordinates] TEST_SPATIO_TEMPORAL_COORDINATES = [UniformSpatioTemporalCoordinates, LinSpaceSpatial2DSpatioTemporalCoordinates]
TEST_MARGIN_TYPES = [ConstantMarginModel, LinearAllParametersAllDimsMarginModel][:] TEST_MARGIN_TYPES = [ConstantMarginModel, LinearAllParametersAllDimsMarginModel][:]
TEST_QUANTILES_TYPES = [ConstantQuantileRegressionModel, AllCoordinatesQuantileRegressionModel][:] TEST_QUANTILES_TYPES = [ConstantQuantileRegressionModel, TemporalCoordinatesQuantileRegressionModel][:]
TEST_NON_STATIONARY_TEMPORAL_MARGIN_TYPES = [NonStationaryLocationTemporalModel, NonStationaryScaleTemporalModel, TEST_NON_STATIONARY_TEMPORAL_MARGIN_TYPES = [NonStationaryLocationTemporalModel, NonStationaryScaleTemporalModel,
NonStationaryShapeTemporalModel] NonStationaryShapeTemporalModel]
TEST_MAX_STABLE_ESTIMATOR = [MaxStableEstimator] TEST_MAX_STABLE_ESTIMATOR = [MaxStableEstimator]
......
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