Skip to content

Commit 8862303

Browse files
jpolziluise
authored andcommitted
implement vrmse (#1147)
1 parent 36b4f37 commit 8862303

File tree

1 file changed

+23
-0
lines changed
  • packages/evaluate/src/weathergen/evaluate

1 file changed

+23
-0
lines changed

packages/evaluate/src/weathergen/evaluate/score.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ def __init__(
179179
"l2": self.calc_l2,
180180
"mse": self.calc_mse,
181181
"rmse": self.calc_rmse,
182+
"vrmse": self.calc_vrmse,
182183
"bias": self.calc_bias,
183184
"acc": self.calc_acc,
184185
"froct": self.calc_froct,
@@ -618,6 +619,28 @@ def calc_rmse(self, p: xr.DataArray, gt: xr.DataArray, group_by_coord: str | Non
618619

619620
return rmse
620621

622+
def calc_vrmse(self, p: xr.DataArray, gt: xr.DataArray, group_by_coord: str | None = None):
623+
"""
624+
Calculate variance-normalized root mean squared error (VRMSE) of forecast data w.r.t. reference data
625+
Parameters
626+
----------
627+
p: xr.DataArray
628+
Forecast data array
629+
gt: xr.DataArray
630+
Ground truth data array
631+
group_by_coord: str
632+
Name of the coordinate to group by.
633+
If provided, the coordinate becomes a new dimension of the VRMSE score.
634+
"""
635+
if self._agg_dims is None:
636+
raise ValueError(
637+
"Cannot calculate variance-normalized root mean squared error without aggregation dimensions (agg_dims=None)."
638+
)
639+
640+
vrmse = np.sqrt(self.calc_mse(p, gt, group_by_coord) / (gt.var(dim=self._agg_dims)+1e-6))
641+
642+
return vrmse
643+
621644
@staticmethod
622645
def sort_by_coords(da_to_sort: xr.DataArray, da_reference: xr.DataArray) -> xr.DataArray:
623646
"""

0 commit comments

Comments
 (0)