Skip to content

Commit b0f5611

Browse files
authored
Merge pull request #353 from fooof-tools/medae
[ENH] - Add median absolute error
2 parents c6f0561 + 0aece98 commit b0f5611

File tree

2 files changed

+32
-5
lines changed

2 files changed

+32
-5
lines changed

specparam/measures/gof.py

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ def compute_mean_abs_error(power_spectrum, modeled_spectrum):
7676
Returns
7777
-------
7878
error : float
79-
Computed MAE.
79+
Computed mean absolute error.
8080
"""
8181

8282
error = np.abs(power_spectrum - modeled_spectrum).mean()
@@ -97,7 +97,7 @@ def compute_mean_squared_error(power_spectrum, modeled_spectrum):
9797
Returns
9898
-------
9999
error : float
100-
Computed MSE.
100+
Computed mean squared error.
101101
"""
102102

103103
error = ((power_spectrum - modeled_spectrum) ** 2).mean()
@@ -118,19 +118,41 @@ def compute_root_mean_squared_error(power_spectrum, modeled_spectrum):
118118
Returns
119119
-------
120120
error : float
121-
Computed rMSE.
121+
Computed root mean squared error.
122122
"""
123123

124124
error = np.sqrt(((power_spectrum - modeled_spectrum) ** 2).mean())
125125

126126
return error
127127

128128

129+
def compute_median_abs_error(power_spectrum, modeled_spectrum):
130+
"""Calculate the median absolute error.
131+
132+
Parameters
133+
----------
134+
power_spectrum : 1d array
135+
Real data power spectrum.
136+
modeled_spectrum : 1d array
137+
Modelled power spectrum.
138+
139+
Returns
140+
-------
141+
error : float
142+
Computed median absolute error.
143+
"""
144+
145+
error = np.median(np.abs(modeled_spectrum - power_spectrum), axis=0)
146+
147+
return error
148+
149+
129150
# Collect available error functions together
130151
ERROR_FUNCS = {
131152
'mae' : compute_mean_abs_error,
132153
'mse' : compute_mean_squared_error,
133154
'rmse' : compute_root_mean_squared_error,
155+
'medae' : compute_median_abs_error,
134156
}
135157

136158

@@ -143,7 +165,7 @@ def compute_error(power_spectrum, modeled_spectrum, error_metric='mae'):
143165
Real data power spectrum.
144166
modeled_spectrum : 1d array
145167
Modelled power spectrum.
146-
error_metric : {'mae', 'mse', 'rsme'} or callable
168+
error_metric : {'mae', 'mse', 'rsme', 'medae'} or callable
147169
Which approach to take to compute the error.
148170
149171
Returns

specparam/tests/measures/test_gof.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,13 @@ def test_compute_root_mean_squared_error(tfm):
3636
error = compute_root_mean_squared_error(tfm.power_spectrum, tfm.modeled_spectrum_)
3737
assert isinstance(error, float)
3838

39+
def test_compute_median_abs_error(tfm):
40+
41+
error = compute_median_abs_error(tfm.power_spectrum, tfm.modeled_spectrum_)
42+
assert isinstance(error, float)
43+
3944
def test_compute_error(tfm):
4045

41-
for metric in ['mae', 'mse', 'rmse']:
46+
for metric in ['mae', 'mse', 'rmse', 'medae']:
4247
error = compute_error(tfm.power_spectrum, tfm.modeled_spectrum_)
4348
assert isinstance(error, float)

0 commit comments

Comments
 (0)