示例#1
0
    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
示例#2
0
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
示例#3
0
    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)
示例#4
0
    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])
示例#5
0
 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)
示例#6
0
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
示例#7
0
 def diff(d):
     fracdiff = Fracdiff(d, window=self.window, mode=self.mode)
     return fracdiff.fit_transform(x.reshape(-1, 1)).reshape(-1)