Source code for statsmodels.tsa.tests.test_tsa_tools

'''tests for some time series analysis functions

'''

from statsmodels.compat.python import zip
import numpy as np
from numpy.testing import assert_array_almost_equal, assert_equal
import statsmodels.api as sm
import statsmodels.tsa.stattools as tsa
import statsmodels.tsa.tsatools as tools
from statsmodels.tsa.tsatools import vec, vech

from .results import savedrvs
from .results.datamlw_tls import mlacf, mlccf, mlpacf, mlywar

xo = savedrvs.rvsdata.xar2
x100 = xo[-100:]/1000.
x1000 = xo/1000.


[docs]def test_acf(): acf_x = tsa.acf(x100, unbiased=False)[:21] assert_array_almost_equal(mlacf.acf100.ravel(), acf_x, 8) #why only dec=8 acf_x = tsa.acf(x1000, unbiased=False)[:21] assert_array_almost_equal(mlacf.acf1000.ravel(), acf_x, 8) #why only dec=9
[docs]def test_ccf(): ccf_x = tsa.ccf(x100[4:], x100[:-4], unbiased=False)[:21] assert_array_almost_equal(mlccf.ccf100.ravel()[:21][::-1], ccf_x, 8) ccf_x = tsa.ccf(x1000[4:], x1000[:-4], unbiased=False)[:21] assert_array_almost_equal(mlccf.ccf1000.ravel()[:21][::-1], ccf_x, 8)
[docs]def test_pacf_yw(): pacfyw = tsa.pacf_yw(x100, 20, method='mle') assert_array_almost_equal(mlpacf.pacf100.ravel(), pacfyw, 1) pacfyw = tsa.pacf_yw(x1000, 20, method='mle') assert_array_almost_equal(mlpacf.pacf1000.ravel(), pacfyw, 2)
#assert False
[docs]def test_pacf_ols(): pacfols = tsa.pacf_ols(x100, 20) assert_array_almost_equal(mlpacf.pacf100.ravel(), pacfols, 8) pacfols = tsa.pacf_ols(x1000, 20) assert_array_almost_equal(mlpacf.pacf1000.ravel(), pacfols, 8)
#assert False
[docs]def test_ywcoef(): assert_array_almost_equal(mlywar.arcoef100[1:], -sm.regression.yule_walker(x100, 10, method='mle')[0], 8) assert_array_almost_equal(mlywar.arcoef1000[1:], -sm.regression.yule_walker(x1000, 20, method='mle')[0], 8)
[docs]def test_yule_walker_inter(): # see 1869 x = np.array([1, -1, 2, 2, 0, -2, 1, 0, -3, 0, 0]) # it works result = sm.regression.yule_walker(x, 3)
[docs]def test_duplication_matrix(): for k in range(2, 10): m = tools.unvech(np.random.randn(k * (k + 1) / 2)) Dk = tools.duplication_matrix(k) assert(np.array_equal(vec(m), np.dot(Dk, vech(m))))
[docs]def test_elimination_matrix(): for k in range(2, 10): m = np.random.randn(k, k) Lk = tools.elimination_matrix(k) assert(np.array_equal(vech(m), np.dot(Lk, vec(m))))
[docs]def test_commutation_matrix(): m = np.random.randn(4, 3) K = tools.commutation_matrix(4, 3) assert(np.array_equal(vec(m.T), np.dot(K, vec(m))))
[docs]def test_vec(): arr = np.array([[1, 2], [3, 4]]) assert(np.array_equal(vec(arr), [1, 3, 2, 4]))
[docs]def test_vech(): arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) assert(np.array_equal(vech(arr), [1, 4, 7, 5, 8, 9]))
[docs]def test_add_lag_insert(): data = sm.datasets.macrodata.load().data[['year','quarter','realgdp','cpi']] nddata = data.view((float,4)) lagmat = sm.tsa.lagmat(nddata[:,2],3,trim='Both') results = np.column_stack((nddata[3:,:3],lagmat,nddata[3:,-1])) lag_data = sm.tsa.add_lag(data, 'realgdp', 3) assert_equal(lag_data.view((float,len(lag_data.dtype.names))), results)
[docs]def test_add_lag_noinsert(): data = sm.datasets.macrodata.load().data[['year','quarter','realgdp','cpi']] nddata = data.view((float,4)) lagmat = sm.tsa.lagmat(nddata[:,2],3,trim='Both') results = np.column_stack((nddata[3:,:],lagmat)) lag_data = sm.tsa.add_lag(data, 'realgdp', 3, insert=False) assert_equal(lag_data.view((float,len(lag_data.dtype.names))), results)
[docs]def test_add_lag_noinsert_atend(): data = sm.datasets.macrodata.load().data[['year','quarter','realgdp','cpi']] nddata = data.view((float,4)) lagmat = sm.tsa.lagmat(nddata[:,-1],3,trim='Both') results = np.column_stack((nddata[3:,:],lagmat)) lag_data = sm.tsa.add_lag(data, 'cpi', 3, insert=False) assert_equal(lag_data.view((float,len(lag_data.dtype.names))), results) # should be the same as insert lag_data2 = sm.tsa.add_lag(data, 'cpi', 3, insert=True) assert_equal(lag_data2.view((float,len(lag_data2.dtype.names))), results)
[docs]def test_add_lag_ndarray(): data = sm.datasets.macrodata.load().data[['year','quarter','realgdp','cpi']] nddata = data.view((float,4)) lagmat = sm.tsa.lagmat(nddata[:,2],3,trim='Both') results = np.column_stack((nddata[3:,:3],lagmat,nddata[3:,-1])) lag_data = sm.tsa.add_lag(nddata, 2, 3) assert_equal(lag_data, results)
[docs]def test_add_lag_noinsert_ndarray(): data = sm.datasets.macrodata.load().data[['year','quarter','realgdp','cpi']] nddata = data.view((float,4)) lagmat = sm.tsa.lagmat(nddata[:,2],3,trim='Both') results = np.column_stack((nddata[3:,:],lagmat)) lag_data = sm.tsa.add_lag(nddata, 2, 3, insert=False) assert_equal(lag_data, results)
[docs]def test_add_lag_noinsertatend_ndarray(): data = sm.datasets.macrodata.load().data[['year','quarter','realgdp','cpi']] nddata = data.view((float,4)) lagmat = sm.tsa.lagmat(nddata[:,-1],3,trim='Both') results = np.column_stack((nddata[3:,:],lagmat)) lag_data = sm.tsa.add_lag(nddata, 3, 3, insert=False) assert_equal(lag_data, results) # should be the same as insert also check negative col number lag_data2 = sm.tsa.add_lag(nddata, -1, 3, insert=True) assert_equal(lag_data2, results)
[docs]def test_add_lag1d(): data = np.random.randn(100) lagmat = sm.tsa.lagmat(data,3,trim='Both') results = np.column_stack((data[3:],lagmat)) lag_data = sm.tsa.add_lag(data, lags=3, insert=True) assert_equal(results, lag_data) # add index data = data[:,None] lagmat = sm.tsa.lagmat(data,3,trim='Both') # test for lagmat too results = np.column_stack((data[3:],lagmat)) lag_data = sm.tsa.add_lag(data,lags=3, insert=True) assert_equal(results, lag_data)
[docs]def test_add_lag1d_drop(): data = np.random.randn(100) lagmat = sm.tsa.lagmat(data,3,trim='Both') lag_data = sm.tsa.add_lag(data, lags=3, drop=True, insert=True) assert_equal(lagmat, lag_data) # no insert, should be the same lag_data = sm.tsa.add_lag(data, lags=3, drop=True, insert=False) assert_equal(lagmat, lag_data)
[docs]def test_add_lag1d_struct(): data = np.zeros(100, dtype=[('variable',float)]) nddata = np.random.randn(100) data['variable'] = nddata lagmat = sm.tsa.lagmat(nddata,3,trim='Both', original='in') lag_data = sm.tsa.add_lag(data, 'variable', lags=3, insert=True) assert_equal(lagmat, lag_data.view((float,4))) lag_data = sm.tsa.add_lag(data, 'variable', lags=3, insert=False) assert_equal(lagmat, lag_data.view((float,4))) lag_data = sm.tsa.add_lag(data, lags=3, insert=True) assert_equal(lagmat, lag_data.view((float,4)))
[docs]def test_add_lag_1d_drop_struct(): data = np.zeros(100, dtype=[('variable',float)]) nddata = np.random.randn(100) data['variable'] = nddata lagmat = sm.tsa.lagmat(nddata,3,trim='Both') lag_data = sm.tsa.add_lag(data, lags=3, drop=True) assert_equal(lagmat, lag_data.view((float,3)))
[docs]def test_add_lag_drop_insert(): data = sm.datasets.macrodata.load().data[['year','quarter','realgdp','cpi']] nddata = data.view((float,4)) lagmat = sm.tsa.lagmat(nddata[:,2],3,trim='Both') results = np.column_stack((nddata[3:,:2],lagmat,nddata[3:,-1])) lag_data = sm.tsa.add_lag(data, 'realgdp', 3, drop=True) assert_equal(lag_data.view((float,len(lag_data.dtype.names))), results)
[docs]def test_add_lag_drop_noinsert(): data = sm.datasets.macrodata.load().data[['year','quarter','realgdp','cpi']] nddata = data.view((float,4)) lagmat = sm.tsa.lagmat(nddata[:,2],3,trim='Both') results = np.column_stack((nddata[3:,np.array([0,1,3])],lagmat)) lag_data = sm.tsa.add_lag(data, 'realgdp', 3, insert=False, drop=True) assert_equal(lag_data.view((float,len(lag_data.dtype.names))), results)
[docs]def test_freq_to_period(): from pandas.tseries.frequencies import to_offset freqs = ['A', 'AS-MAR', 'Q', 'QS', 'QS-APR', 'W', 'W-MON', 'B'] expected = [1, 1, 4, 4, 4, 52, 52, 52] for i, j in zip(freqs, expected): assert_equal(tools.freq_to_period(i), j) assert_equal(tools.freq_to_period(to_offset(i)), j)
if __name__ == '__main__': #running them directly # test_acf() # test_ccf() # test_pacf_yw() # test_pacf_ols() # test_ywcoef() import nose nose.runmodule()