def transform(self, X, y=None) -> numpy.array: """ Return the fractional differentiation of `X`. Parameters ---------- X : array_like, shape (n_samples, n_series) Time-series to perform fractional differentiation. Raises ValueError if `n_samples < self.window_`. y : array_like, optional Ignored. Returns ------- fdiff : ``numpy.array``, shape (n_samples, n_series) The fractional differentiation of `X`. """ check_is_fitted(self, ["d_"]) check_array(X) prototype = Fracdiff(0.5, window=self.window, mode=self.mode).fit_transform(X) out = numpy.empty_like(prototype[:, :0]) for i in range(X.shape[1]): f = Fracdiff(self.d_[i], window=self.window, mode=self.mode) d = f.fit_transform(X[:, [i]])[-out.shape[0]:] out = numpy.concatenate((out, d), 1) return out
def invert_diff(df_forecast, columns_diff_dict): df_fc = df_forecast.copy() columns = columns_diff_dict.keys() for col in columns: f = Fracdiff(d=-columns_diff_dict[col][0], window=columns_diff_dict[col][1]) diff = f.fit_transform(df_forecast[col].values.reshape(-1, 1)) df_fc[col] = pd.Series(diff.squeeze()) return df_fc
def test_transform(self, window, mode, precision): """ Test if `FracdiffStat.transform` works for array with n_features > 1. """ np.random.seed(42) X = np.random.randn(100, 10).cumsum(0) fs = FracdiffStat(window=window, mode=mode, precision=precision).fit(X) out = fs.transform(X) exp = np.empty_like(out[:, :0]) for i in range(X.shape[1]): f = Fracdiff(fs.d_[i], mode=mode, window=window) exp = np.concatenate((exp, f.fit_transform(X[:, [i]])), 1) assert_allclose(out, exp)
def test_order(self, window, mode, precision): np.random.seed(42) X = np.random.randn(1000, 10).cumsum(0) fs = FracdiffStat(mode=mode, window=window, precision=precision) fs.fit(X) X_st = fs.transform(X) X_ns = np.empty_like(X_st[:, :0]) for i in range(X.shape[1]): f = Fracdiff(fs.d_[i] - precision, mode=mode, window=window) X_ns = np.concatenate((X_ns, f.fit_transform(X[:, [i]])), 1) for i in range(X.shape[1]): assert self._is_stat(X_st[:, i]) assert not self._is_stat(X_ns[:, i])
def test_transform(self, d, window, mode): np.random.seed(42) X = np.random.randn(100, 200) fracdiff = Fracdiff(d=d, window=window, mode=mode) out = fdiff(X, n=d, axis=0, window=window, mode=mode) assert_array_equal(fracdiff.fit_transform(X), out)
sys.path.append("../..") from fracdiff import Fracdiff # noqa: E402 def fetch_spx(): return pandas_datareader.data.DataReader( "^GSPC", "yahoo", "1999-10-01", "2020-09-30" )["Adj Close"] if __name__ == "__main__": s = fetch_spx() f = Fracdiff(0.5, window=100, mode="valid") d = f.fit_transform(s.values.reshape(-1, 1)).reshape(-1) s = s[100 - 1 :] d = pd.Series(d, index=s.index) seaborn.set_style("white") fig, ax_s = plt.subplots(figsize=(16, 8)) ax_d = ax_s.twinx() plot_s = ax_s.plot(s, color="blue", linewidth=0.6, label="S&P 500 (left)") plot_d = ax_d.plot( d, color="orange", linewidth=0.6, label="S&P 500, 0.5th differentiation (right)", ) plots = plot_s + plot_d
def diff(d): fracdiff = Fracdiff(d, window=self.window, mode=self.mode) return fracdiff.fit_transform(x.reshape(-1, 1)).reshape(-1)