Skip to content

Commit

Permalink
Original sadf test
Browse files Browse the repository at this point in the history
PanPip committed Jun 11, 2020
1 parent e00e633 commit 26496df
Showing 2 changed files with 10 additions and 10 deletions.
10 changes: 6 additions & 4 deletions mlfinlab/structural_breaks/sadf.py
Original file line number Diff line number Diff line change
@@ -29,8 +29,9 @@ def _get_sadf_at_t(X: pd.DataFrame, y: pd.DataFrame, min_length: int, model: str
b_mean_, b_std_ = get_betas(X_, y_)
if not np.isnan(b_mean_[0]):
b_mean_, b_std_ = b_mean_[0, 0], b_std_[0, 0] ** 0.5
all_adf = np.divide(b_mean_, b_std_, out=np.zeros_like(b_mean_), where=b_std_ != 0)
#all_adf = b_mean_ / b_std_
# TODO: Rewrite logic of this module to avoid division by zero
with np.errstate(invalid='ignore'):
all_adf = b_mean_ / b_std_
if model[:2] == 'sm':
all_adf = np.abs(all_adf) / (y.shape[0]**phi)
if all_adf > bsadf:
@@ -91,8 +92,9 @@ def _get_y_x(series: pd.Series, model: str, lags: Union[int, list],
y = np.log(series.loc[y.index])
x = pd.DataFrame(index=y.index)
x['const'] = 1
float_range = np.array(np.arange(x.shape[0]), dtype='float')
x['log_trend'] = np.log(float_range, out=np.zeros_like(float_range).fill(np.nan), where=(float_range != 0))
# TODO: Rewrite logic of this module to avoid division by zero
with np.errstate(divide='ignore'):
x['log_trend'] = np.log(np.arange(x.shape[0]))
beta_column = 'log_trend'
else:
raise ValueError('Unknown model')
10 changes: 4 additions & 6 deletions mlfinlab/tests/test_structural_breaks.py
Original file line number Diff line number Diff line change
@@ -118,8 +118,7 @@ def test_sadf_test(self):
self.assertEqual(log_prices.shape[0] - min_length - lags_int - 1, sm_exp_sadf.shape[0])
self.assertEqual(log_prices.shape[0] - min_length - lags_int - 1, sm_exp_sadf_phi.shape[0])

# Below test value was changed from 28.954 to 28.997 due to error fix in sadf.py line 94
self.assertAlmostEqual(sm_power_sadf.mean(), 28.997, delta=1e-3)
self.assertAlmostEqual(sm_power_sadf.mean(), 28.954, delta=1e-3)
self.assertAlmostEqual(sm_power_sadf.iloc[29], 17.369, delta=1e-3)

self.assertAlmostEqual(linear_sadf.mean(), -0.669, delta=1e-3)
@@ -140,8 +139,7 @@ def test_sadf_test(self):
self.assertAlmostEqual(sm_exp_sadf.mean(), 28.916, delta=1e-3)
self.assertAlmostEqual(sm_exp_sadf[29], 17.100, delta=1e-3)

# Below test value was changed from 1.4874 to 1.4947 due to error fix in sadf.py line 94
self.assertAlmostEqual(sm_power_sadf_phi.mean(), 1.4947, delta=1e-3)
self.assertAlmostEqual(sm_power_sadf_phi.mean(), 1.4874, delta=1e-3)
self.assertAlmostEqual(sm_power_sadf_phi.iloc[29], 2.4564, delta=1e-3)

self.assertAlmostEqual(sm_exp_sadf_phi.mean(), 1.4787, delta=1e-3)
@@ -151,8 +149,8 @@ def test_sadf_test(self):
ones_series = pd.Series(index=log_prices.index, data=np.ones(shape=log_prices.shape[0]))
trivial_sadf = get_sadf(ones_series, model='sm_power', add_const=True, min_length=min_length, lags=lags_int,
phi=0.5)
# Below test value was changed from [-np.inf]to [0] due to error fix in sadf.py line 94
self.assertTrue((trivial_sadf.unique() == [0]).all()) # All values should be 0

self.assertTrue((trivial_sadf.unique() == [-np.inf]).all()) # All values should be -np.inf

# Test rubbish model argument.
self.assertRaises(ValueError, get_sadf, series=log_prices, model='rubbish_string', add_const=True,

0 comments on commit 26496df

Please sign in to comment.