Exemple #1
0
    def test_variance_ratio(self):
        vr = VarianceRatio(self.inflation, debiased=False)
        y = self.inflation
        dy = np.diff(y)
        mu = dy.mean()
        dy2 = y[2:] - y[:-2]
        nq = dy.shape[0]
        denom = np.sum((dy - mu) ** 2.0) / (nq)
        num = np.sum((dy2 - 2 * mu) ** 2.0) / (nq * 2)
        ratio = num / denom

        assert_almost_equal(ratio, vr.vr)
        assert 'Variance-Ratio Test' in str(vr)
        vr.debiased = True
        assert vr.debiased is True
Exemple #2
0
    def test_variance_ratio(self):
        vr = VarianceRatio(self.inflation, debiased=False)
        y = self.inflation
        dy = np.diff(y)
        mu = dy.mean()
        dy2 = y[2:] - y[:-2]
        nq = dy.shape[0]
        denom = np.sum((dy - mu) ** 2.0) / (nq)
        num = np.sum((dy2 - 2 * mu) ** 2.0) / (nq * 2)
        ratio = num / denom

        assert_almost_equal(ratio, vr.vr)
        assert 'Variance-Ratio Test' in str(vr)
        vr.debiased = True
        assert vr.debiased is True
Exemple #3
0
    def test_variance_ratio(self):
        vr = VarianceRatio(self.inflation, debiased=False)
        y = self.inflation
        dy = np.diff(y)
        mu = dy.mean()
        dy2 = y[2:] - y[:-2]
        nq = dy.shape[0]
        denom = np.sum((dy - mu)**2.0) / nq
        num = np.sum((dy2 - 2 * mu)**2.0) / (nq * 2)
        ratio = num / denom

        assert_almost_equal(ratio, vr.vr)
        assert "Variance-Ratio Test" in str(vr)
        with pytest.warns(FutureWarning, match="Mutating unit root"):
            vr.debiased = True
        assert vr.debiased is True
def test_wrong_exceptions_variance_ratio(nobs, trend, overlap, debiased):
    y = np.random.standard_normal((nobs,))
    try:
        vr = VarianceRatio(y, trend=trend, lags=4, overlap=overlap, debiased=debiased)
        assert np.isfinite(vr.stat)
    except InfeasibleTestException:
        pass
Exemple #5
0
 def test_variance_ratio_non_robust(self):
     vr = VarianceRatio(self.inflation, robust=False, debiased=False)
     y = self.inflation
     dy = np.diff(y)
     mu = dy.mean()
     dy2 = y[2:] - y[:-2]
     nq = dy.shape[0]
     denom = np.sum((dy - mu) ** 2.0) / nq
     num = np.sum((dy2 - 2 * mu) ** 2.0) / (nq * 2)
     ratio = num / denom
     variance = 3.0 / 2.0
     stat = np.sqrt(nq) * (ratio - 1) / np.sqrt(variance)
     assert_almost_equal(stat, vr.stat)
     orig_stat = vr.stat
     vr.robust = True
     assert_equal(vr.robust, True)
     assert vr.stat != orig_stat
Exemple #6
0
 def test_variance_ratio_non_robust(self):
     vr = VarianceRatio(self.inflation, robust=False, debiased=False)
     y = self.inflation
     dy = np.diff(y)
     mu = dy.mean()
     dy2 = y[2:] - y[:-2]
     nq = dy.shape[0]
     denom = np.sum((dy - mu) ** 2.0) / nq
     num = np.sum((dy2 - 2 * mu) ** 2.0) / (nq * 2)
     ratio = num / denom
     variance = 3.0 / 2.0
     stat = np.sqrt(nq) * (ratio - 1) / np.sqrt(variance)
     assert_almost_equal(stat, vr.stat)
     orig_stat = vr.stat
     vr.robust = True
     assert_equal(vr.robust, True)
     assert vr.stat != orig_stat
def VarianceRatioTest(data, printResults=True, trend=None, lags=None):
    options_Trend = trend if trend != None else {'nc','c'}
    options_Lags = lags if lags != None else {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24}

    results = dict()
    for column in data.columns:
        print("Variance Ratio test for column: " + column)
        results_Trend = dict()
        for option_Trend in options_Trend:
            results_Lag = dict()
            for option_Lag in options_Lags:
                result = VarianceRatio(data[column].dropna(), trend=option_Trend, lags=option_Lag)
                if printResults:
                    result.summary()
                results_Lag[option_Lag] = result
            results_Trend[option_Trend] = results_Lag
        results[column] = results_Trend
    return results
Exemple #8
0
def generate_stationarity_dataframe(potential_pairs_index, cv_spreads_train):

    adfuller_t = []
    adfuller_p = []
    kpss_t = []
    kpss_p = []
    pp_t = []
    pp_p = []
    vr_t = []
    vr_p = []

    warnings.filterwarnings('ignore')
    for i, pair in enumerate(potential_pairs_index):
        temp_spread = cv_spreads_train[pair]

        temp_adfuller = ts.adfuller(temp_spread)
        temp_adfuller_t = temp_adfuller[0]
        temp_adfuller_p = temp_adfuller[1]

        temp_kpss = ts.kpss(temp_spread)
        temp_kpss_t = temp_kpss[0]
        temp_kpss_p = temp_kpss[1]

        temp_pp = PhillipsPerron(temp_spread)
        temp_pp_t = temp_pp.stat
        temp_pp_p = temp_pp.pvalue

        temp_vr = VarianceRatio(temp_spread)
        temp_vr_t = temp_vr.stat
        temp_vr_p = temp_vr.pvalue

        adfuller_t.append(temp_adfuller_t)
        adfuller_p.append(temp_adfuller_p)

        kpss_t.append(temp_kpss_t)
        kpss_p.append(temp_kpss_p)

        pp_t.append(temp_pp_t)
        pp_p.append(temp_pp_p)

        vr_t.append(temp_vr_t)
        vr_p.append(temp_vr_p)

    cv_stationary_tests = pd.DataFrame(
        {
            'adf_t_stat': adfuller_t,
            'adf_p_value': adfuller_p,
            'kpss_t_stat': kpss_t,
            'kpss_p_value': kpss_p,
            'pp_t_stat': pp_t,
            'pp_p_value': pp_p,
            'vr_t_stat': vr_t,
            'vr_p_value': vr_p
        },
        index=potential_pairs_index)
    return cv_stationary_tests
Exemple #9
0
 def test_variance_ratio_no_constant(self):
     y = self.rng.randn(100)
     vr = VarianceRatio(y, trend='nc', debiased=False)
     dy = np.diff(y)
     mu = 0.0
     dy2 = y[2:] - y[:-2]
     nq = dy.shape[0]
     denom = np.sum((dy - mu) ** 2.0) / nq
     num = np.sum((dy2 - 2 * mu) ** 2.0) / (nq * 2)
     ratio = num / denom
     assert_almost_equal(ratio, vr.vr)
     assert_equal(vr.debiased, False)
Exemple #10
0
    def test_variance_ratio_no_overlap(self):
        vr = VarianceRatio(self.inflation, overlap=False)

        with warnings.catch_warnings(record=True) as w:
            computed_value = vr.vr
            assert_equal(len(w), 1)

        y = self.inflation
        # Adjust due ot sample size
        y = y[:-1]
        dy = np.diff(y)
        mu = dy.mean()
        dy2 = y[2::2] - y[:-2:2]
        nq = dy.shape[0]
        denom = np.sum((dy - mu) ** 2.0) / nq
        num = np.sum((dy2 - 2 * mu) ** 2.0) / nq
        ratio = num / denom
        assert_equal(ratio, computed_value)

        vr.overlap = True
        assert_equal(vr.overlap, True)
        vr2 = VarianceRatio(self.inflation)
        assert_almost_equal(vr.stat, vr2.stat)
Exemple #11
0
    def test_variance_ratio_no_overlap(self):
        vr = VarianceRatio(self.inflation, overlap=False)

        with warnings.catch_warnings(record=True) as w:
            computed_value = vr.vr
            assert_equal(len(w), 1)

        y = self.inflation
        # Adjust due ot sample size
        y = y[:-1]
        dy = np.diff(y)
        mu = dy.mean()
        dy2 = y[2::2] - y[:-2:2]
        nq = dy.shape[0]
        denom = np.sum((dy - mu) ** 2.0) / nq
        num = np.sum((dy2 - 2 * mu) ** 2.0) / nq
        ratio = num / denom
        assert_equal(ratio, computed_value)

        vr.overlap = True
        assert_equal(vr.overlap, True)
        vr2 = VarianceRatio(self.inflation)
        assert_almost_equal(vr.stat, vr2.stat)
def perform_variance_ratio_test(series, lag=2, notes=False):
    """
    The null hypothesis of a VR is that the process is a random walk, possibly plus drift. 
    Rejection of the null with a positive test statistic indicates the presence of positive 
    serial correlation in the time series.
    Return p-value.  Less than 0.05, reject null hypothesis.  It is not a random walk.
    """
    result = VarianceRatio(series, lag).pvalue

    if notes:
        print('Variance Ratio: {:.3f}'.format(result))
        if result < 0.05:
            print('Not a random walk')
        else:
            print('Random Walk')
    else:
        return result, result < 0.05
Exemple #13
0
 def test_variance_ratio_generic(self):
     # TODO: Currently not a test, just makes sure code runs at all
     vr = VarianceRatio(self.inflation, lags=24)
     assert isinstance(vr, VarianceRatio)
Exemple #14
0
 def test_variance_ratio_invalid_lags(self):
     y = self.inflation
     with pytest.raises(ValueError):
         VarianceRatio(y, lags=1)
def test_mean_reversion(times_series):
    print(VarianceRatio(times_series))
    print(VarianceRatio(times_series, lags=4))
    print(VarianceRatio(times_series, lags=8))
    print(VarianceRatio(times_series, lags=16))
    print(hurst(times_series))
Exemple #16
0
import statsmodels.tsa.stattools as st
import matplotlib.pylab as plt
import numpy as np
import pandas as pd

df_caus = pd.read_csv('USDCAD.csv')
plt.hold(False)
df_caus.y.plot()
#plt.show()
print st.adfuller(df_caus.y, maxlag=1)

import hurst as h
print 'H doviz kuru', h.hurst(df_caus.y)

from arch.unitroot import VarianceRatio
vr = VarianceRatio(np.log(df_caus.y))
print(vr.summary().as_text())

df_caus['ylag'] = df_caus['y'].shift(1)
df_caus['deltaY'] = df_caus['y'] - df_caus['ylag']

import statsmodels.formula.api as smf
results = smf.ols('deltaY ~ ylag', data=df_caus).fit()
lam = results.params['ylag']
print lam

halflife = -np.log(2) / lam
print halflife, 'days'
#plt.savefig(files.image_path + '\LH_close_vol_return.png')

data = lh['Close'].resample('M').mean()  # resample daily data to monthly data
data = data['1992':'2004']
data = np.log(data / data.shift(1)).dropna() * 100  # d 1
adf = ADF(data)
print(adf.summary().as_text())
kpss = KPSS(data)
print(kpss.summary().as_text())
dfgls = DFGLS(data)
print(dfgls.summary().as_text())
pp = PhillipsPerron(data)
print(pp.summary().as_text())
za = ZivotAndrews(data)
print(za.summary().as_text())
vr = VarianceRatio(data, 12)
print(vr.summary().as_text())

print(data.describe())
print('Lean Hogs Future skewness is {}'.format(data.skew(axis=0)))
print('Lean Hogs Future kurtosis is {}'.format(data.kurtosis(axis=0)))

import matplotlib.gridspec as gridspec
import statsmodels.api as sm
import scipy.stats as stats
import seaborn as sns

# Plot figure with subplots of different sizes
fig = plt.figure(1)
# set up subplot grid
gridspec.GridSpec(2, 2)
import statsmodels.tsa.stattools as st
import matplotlib.pylab as plt
import numpy as np
import pandas as pd

df_caus = pd.read_csv('USDCAD.csv')
plt.hold(False)
df_caus.y.plot()
#plt.show()
print st.adfuller(df_caus.y,maxlag=1)

import hurst as h
print 'H doviz kuru', h.hurst(df_caus.y)

from arch.unitroot import VarianceRatio
vr = VarianceRatio(np.log(df_caus.y))
print(vr.summary().as_text())

df_caus['ylag'] = df_caus['y'].shift(1)
df_caus['deltaY'] = df_caus['y'] - df_caus['ylag']

import statsmodels.formula.api as smf
results = smf.ols('deltaY ~ ylag', data=df_caus).fit()
lam = results.params['ylag']
print lam

halflife=-np.log(2)/lam
print halflife, 'days'
Exemple #19
0
plt.title('1986–2018 Lean Hogs Future return frequency')
plt.xlabel('Possible range of data values')
# Pull up summary statistics
print(lh.describe())

adf = ADF(lh['Close'])
print(adf.summary().as_text())
kpss = KPSS(lh['Close'])
print(kpss.summary().as_text())
dfgls = DFGLS(lh['Close'])
print(dfgls.summary().as_text())
pp = PhillipsPerron(lh['Close'])
print(pp.summary().as_text())
za = ZivotAndrews(lh['Close'])
print(za.summary().as_text())
vr = VarianceRatio(lh['Close'], 12)
print(vr.summary().as_text())

from arch import arch_model

X = 100 * lh

import datetime as dt
am = arch_model(X, p=4, o=0, q=0, vol='Garch', dist='StudentsT')
res = am.fit(last_obs=dt.datetime(2003, 12, 31))
forecasts = res.forecast(horizon=1, start='2004-1-1')
cond_mean = forecasts.mean['2004':]
cond_var = forecasts.variance['2004':] / 31
print(res.summary())

# acf and pacf test
def calculate_variance_ratio(dfseries):
    """Calculates the variance ratio to Asses that the Hurst exponent is correctly calculated"""
    log_series = np.log2(dfseries)
    vratio = VarianceRatio(log_series)
    print(vratio)
    return vratio