Commit b0b998e4 authored by Le Roux Erwan's avatar Le Roux Erwan
Browse files

[contrasting] nllh test ok for my first model combining a linearity in 2 different coordinates.

parent aae23816
No related merge requests found
Showing with 32 additions and 26 deletions
+32 -26
...@@ -59,8 +59,11 @@ class PolynomialParamFunction(AbstractParamFunction): ...@@ -59,8 +59,11 @@ class PolynomialParamFunction(AbstractParamFunction):
def get_param_value(self, coordinate: np.ndarray) -> float: def get_param_value(self, coordinate: np.ndarray) -> float:
gev_param_value = 0 gev_param_value = 0
for dim, max_degree in self.dim_and_degree: for i, (dim, max_degree) in enumerate(self.dim_and_degree):
for degree in range(max_degree+1): # Add intercept only once
add_intercept = i == 0
first_degree = 0 if add_intercept else 1
for degree in range(first_degree, max_degree+1):
polynomial_coef = self.coef.dim_to_polynomial_coef[dim] # type: PolynomialCoef polynomial_coef = self.coef.dim_to_polynomial_coef[dim] # type: PolynomialCoef
polynomial_coef_value = polynomial_coef.idx_to_coef[degree] polynomial_coef_value = polynomial_coef.idx_to_coef[degree]
gev_param_value += polynomial_coef_value * np.power(coordinate[dim], degree) gev_param_value += polynomial_coef_value * np.power(coordinate[dim], degree)
......
...@@ -40,9 +40,9 @@ class AbstractTemporalLinearMarginModel(LinearMarginModel): ...@@ -40,9 +40,9 @@ class AbstractTemporalLinearMarginModel(LinearMarginModel):
assert len(data) == len(df_coordinates_temp.values), 'len(data)={} != len(temp)={}'.format(len(data), assert len(data) == len(df_coordinates_temp.values), 'len(data)={} != len(temp)={}'.format(len(data),
len( len(
df_coordinates_temp.values)) df_coordinates_temp.values))
x = ro.FloatVector(data)
else: else:
x = ro.Matrix(data) data = data.flatten()
x = ro.FloatVector(data)
if self.params_class is GevParams: if self.params_class is GevParams:
if self.fit_method == MarginFitMethod.is_mev_gev_fit: if self.fit_method == MarginFitMethod.is_mev_gev_fit:
return self.ismev_gev_fit(x, df_coordinates_temp) return self.ismev_gev_fit(x, df_coordinates_temp)
......
...@@ -20,7 +20,6 @@ class ResultFromMleExtremes(AbstractResultFromExtremes): ...@@ -20,7 +20,6 @@ class ResultFromMleExtremes(AbstractResultFromExtremes):
@property @property
def margin_coef_ordered_dict(self): def margin_coef_ordered_dict(self):
values = self.name_to_value['results'] values = self.name_to_value['results']
print(values)
d = self.get_python_dictionary(values) d = self.get_python_dictionary(values)
if 'par' in d: if 'par' in d:
values = {i: param for i, param in enumerate(np.array(d['par']))} values = {i: param for i, param in enumerate(np.array(d['par']))}
......
...@@ -33,7 +33,9 @@ def get_margin_coef_ordered_dict(param_name_to_dims, mle_values, type_for_mle="G ...@@ -33,7 +33,9 @@ def get_margin_coef_ordered_dict(param_name_to_dims, mle_values, type_for_mle="G
coef_dict[coef_name] = mle_values[i] coef_dict[coef_name] = mle_values[i]
i += 1 i += 1
else: else:
for dim, max_degree in dims: # We assume that time was the first parameter
inverted_dims = dims[::-1]
for dim, max_degree in inverted_dims:
coordinate_name = dim_to_coordinate_name[dim] coordinate_name = dim_to_coordinate_name[dim]
coef_template = LinearCoef.coef_template_str(param_name, coordinate_name) coef_template = LinearCoef.coef_template_str(param_name, coordinate_name)
for j in range(1, max_degree + 1): for j in range(1, max_degree + 1):
......
...@@ -21,6 +21,7 @@ from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoo ...@@ -21,6 +21,7 @@ from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoo
from spatio_temporal_dataset.coordinates.temporal_coordinates.abstract_temporal_coordinates import \ from spatio_temporal_dataset.coordinates.temporal_coordinates.abstract_temporal_coordinates import \
AbstractTemporalCoordinates AbstractTemporalCoordinates
from spatio_temporal_dataset.dataset.abstract_dataset import AbstractDataset from spatio_temporal_dataset.dataset.abstract_dataset import AbstractDataset
from spatio_temporal_dataset.slicer.split import Split
from spatio_temporal_dataset.spatio_temporal_observations.abstract_spatio_temporal_observations import \ from spatio_temporal_dataset.spatio_temporal_observations.abstract_spatio_temporal_observations import \
AbstractSpatioTemporalObservations AbstractSpatioTemporalObservations
from test.test_projects.test_contrasting.test_two_fold_fit import load_two_fold_fit from test.test_projects.test_contrasting.test_two_fold_fit import load_two_fold_fit
...@@ -43,26 +44,27 @@ class TestGevTemporalQuadraticExtremesMle(unittest.TestCase): ...@@ -43,26 +44,27 @@ class TestGevTemporalQuadraticExtremesMle(unittest.TestCase):
estimator = model_fit.estimator_fold_1 estimator = model_fit.estimator_fold_1
return estimator return estimator
# def test_location_spatio_temporal_linearity(self): def test_location_spatio_temporal_linearity(self):
# # Create estimator
# # estimator = fitted_linear_margin_estimator(model_class, # Create estimator
# # self.coordinates, self.dataset, # estimator = fitted_linear_margin_estimator(model_class,
# # starting_year=0, # self.coordinates, self.dataset,
# # fit_method=self.fit_method) # starting_year=0,
# # # Checks that parameters returned are indeed different # fit_method=self.fit_method)
# # mle_params_estimated_year1 = estimator.function_from_fit.get_params(np.array([1])).to_dict() # # Checks that parameters returned are indeed different
# # mle_params_estimated_year3 = estimator.function_from_fit.get_params(np.array([21])).to_dict() # mle_params_estimated_year1 = estimator.function_from_fit.get_params(np.array([1])).to_dict()
# # mle_params_estimated_year5 = estimator.function_from_fit.get_params(np.array([41])).to_dict() # mle_params_estimated_year3 = estimator.function_from_fit.get_params(np.array([21])).to_dict()
# # self.assertNotEqual(mle_params_estimated_year1, mle_params_estimated_year3) # mle_params_estimated_year5 = estimator.function_from_fit.get_params(np.array([41])).to_dict()
# # self.assertNotEqual(mle_params_estimated_year3, mle_params_estimated_year5) # self.assertNotEqual(mle_params_estimated_year1, mle_params_estimated_year3)
# # # Assert the relationship for the location is indeed quadratic # self.assertNotEqual(mle_params_estimated_year3, mle_params_estimated_year5)
# # diff1 = mle_params_estimated_year1[quadratic_param] - mle_params_estimated_year3[quadratic_param] # # Assert the relationship for the location is indeed quadratic
# # diff2 = mle_params_estimated_year3[quadratic_param] - mle_params_estimated_year5[quadratic_param] # diff1 = mle_params_estimated_year1[quadratic_param] - mle_params_estimated_year3[quadratic_param]
# # self.assertNotAlmostEqual(diff1, diff2) # diff2 = mle_params_estimated_year3[quadratic_param] - mle_params_estimated_year5[quadratic_param]
# estimator = self.get_estimator_fitted(NonStationaryLocationSpatioTemporalLinearityModel) # self.assertNotAlmostEqual(diff1, diff2)
# # Assert that indicators are correctly computed estimator = self.get_estimator_fitted(NonStationaryLocationSpatioTemporalLinearityModel)
# self.assertAlmostEqual(estimator.result_from_model_fit.nllh, estimator.nllh()) # Assert that indicators are correctly computed
# self.assertAlmostEqual(estimator.result_from_model_fit.aic, estimator.aic()) self.assertAlmostEqual(estimator.result_from_model_fit.nllh, estimator.nllh(split=estimator.train_split))
# self.assertAlmostEqual(estimator.result_from_model_fit.aic, estimator.aic())
# self.assertAlmostEqual(estimator.result_from_model_fit.bic, estimator.bic()) # self.assertAlmostEqual(estimator.result_from_model_fit.bic, estimator.bic())
......
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