110 lines
2.6 KiB
Python
110 lines
2.6 KiB
Python
"""
|
|
Test for BDS test for IID time series
|
|
|
|
References
|
|
----------
|
|
|
|
Kanzler, Ludwig. 1998.
|
|
BDS: MATLAB Module to Calculate Brock, Dechert & Scheinkman Test for
|
|
Independence.
|
|
Statistical Software Components. Boston College Department of Economics.
|
|
http://ideas.repec.org/c/boc/bocode/t871803.html.
|
|
|
|
"""
|
|
|
|
import os
|
|
|
|
import numpy as np
|
|
from numpy.testing import assert_almost_equal
|
|
import pandas as pd
|
|
|
|
from statsmodels.tsa.stattools import bds
|
|
|
|
DECIMAL_8 = 8
|
|
DECIMAL_6 = 6
|
|
DECIMAL_5 = 5
|
|
DECIMAL_4 = 4
|
|
DECIMAL_3 = 3
|
|
DECIMAL_2 = 2
|
|
DECIMAL_1 = 1
|
|
|
|
curdir = os.path.dirname(os.path.abspath(__file__))
|
|
data_file = os.path.join(curdir, "results", "bds_data.csv")
|
|
data = pd.read_csv(data_file, header=None)
|
|
|
|
res_file = os.path.join(curdir, "results", "bds_results.csv")
|
|
results = pd.read_csv(res_file, header=None)
|
|
|
|
|
|
class CheckBDS:
|
|
"""
|
|
Test BDS
|
|
|
|
Test values from Kanzler's MATLAB program bds.
|
|
"""
|
|
def test_stat(self):
|
|
assert_almost_equal(self.res[0], self.bds_stats, DECIMAL_8)
|
|
|
|
def test_pvalue(self):
|
|
assert_almost_equal(self.res[1], self.pvalues, DECIMAL_8)
|
|
|
|
|
|
class TestBDSSequence(CheckBDS):
|
|
"""
|
|
BDS Test on np.arange(1,26)
|
|
"""
|
|
@classmethod
|
|
def setup_class(cls):
|
|
cls.results = results[results[0] == 1]
|
|
cls.bds_stats = np.array(cls.results[2].iloc[1:])
|
|
cls.pvalues = np.array(cls.results[3].iloc[1:])
|
|
|
|
cls.data = data[0][data[0].notnull()]
|
|
cls.res = bds(cls.data, 5)
|
|
|
|
|
|
class TestBDSNormal(CheckBDS):
|
|
"""
|
|
BDS Test on np.random.normal(size=25)
|
|
"""
|
|
@classmethod
|
|
def setup_class(cls):
|
|
cls.results = results[results[0] == 2]
|
|
cls.bds_stats = np.array(cls.results[2].iloc[1:])
|
|
cls.pvalues = np.array(cls.results[3].iloc[1:])
|
|
|
|
cls.data = data[1][data[1].notnull()]
|
|
cls.res = bds(cls.data, 5)
|
|
|
|
|
|
class TestBDSCombined(CheckBDS):
|
|
"""
|
|
BDS Test on np.r_[np.random.normal(size=25), np.random.uniform(size=25)]
|
|
"""
|
|
@classmethod
|
|
def setup_class(cls):
|
|
cls.results = results[results[0] == 3]
|
|
cls.bds_stats = np.array(cls.results[2].iloc[1:])
|
|
cls.pvalues = np.array(cls.results[3].iloc[1:])
|
|
|
|
cls.data = data[2][data[2].notnull()]
|
|
cls.res = bds(cls.data, 5)
|
|
|
|
|
|
class TestBDSGDPC1(CheckBDS):
|
|
"""
|
|
BDS Test on GDPC1: 1947Q1 - 2013Q1
|
|
|
|
References
|
|
----------
|
|
http://research.stlouisfed.org/fred2/series/GDPC1
|
|
"""
|
|
@classmethod
|
|
def setup_class(cls):
|
|
cls.results = results[results[0] == 4]
|
|
cls.bds_stats = np.array(cls.results[2].iloc[1:])
|
|
cls.pvalues = np.array(cls.results[3].iloc[1:])
|
|
|
|
cls.data = data[3][data[3].notnull()]
|
|
cls.res = bds(cls.data, 5)
|