80 lines
2.2 KiB
Python
80 lines
2.2 KiB
Python
|
"""Descriptive Statistics for Time Series
|
||
|
|
||
|
Created on Sat Oct 30 14:24:08 2010
|
||
|
|
||
|
Author: josef-pktd
|
||
|
License: BSD(3clause)
|
||
|
"""
|
||
|
|
||
|
import numpy as np
|
||
|
from . import stattools as stt
|
||
|
|
||
|
|
||
|
#todo: check subclassing for descriptive stats classes
|
||
|
class TsaDescriptive:
|
||
|
'''collection of descriptive statistical methods for time series
|
||
|
|
||
|
'''
|
||
|
|
||
|
def __init__(self, data, label=None, name=''):
|
||
|
self.data = data
|
||
|
self.label = label
|
||
|
self.name = name
|
||
|
|
||
|
def filter(self, num, den):
|
||
|
from scipy.signal import lfilter
|
||
|
xfiltered = lfilter(num, den, self.data)
|
||
|
return self.__class__(xfiltered, self.label, self.name + '_filtered')
|
||
|
|
||
|
def detrend(self, order=1):
|
||
|
from . import tsatools
|
||
|
xdetrended = tsatools.detrend(self.data, order=order)
|
||
|
return self.__class__(xdetrended, self.label, self.name + '_detrended')
|
||
|
|
||
|
def fit(self, order=(1,0,1), **kwds):
|
||
|
from .arima_model import ARMA
|
||
|
self.mod = ARMA(self.data)
|
||
|
self.res = self.mod.fit(order=order, **kwds)
|
||
|
#self.estimated_process =
|
||
|
return self.res
|
||
|
|
||
|
def acf(self, nlags=40):
|
||
|
return stt.acf(self.data, nlags=nlags)
|
||
|
|
||
|
def pacf(self, nlags=40):
|
||
|
return stt.pacf(self.data, nlags=nlags)
|
||
|
|
||
|
def periodogram(self):
|
||
|
#does not return frequesncies
|
||
|
return stt.periodogram(self.data)
|
||
|
|
||
|
# copied from fftarma.py
|
||
|
def plot4(self, fig=None, nobs=100, nacf=20, nfreq=100):
|
||
|
data = self.data
|
||
|
acf = self.acf(nacf)
|
||
|
pacf = self.pacf(nacf)
|
||
|
w = np.linspace(0, np.pi, nfreq, endpoint=False)
|
||
|
spdr = self.periodogram()[:nfreq] #(w)
|
||
|
|
||
|
if fig is None:
|
||
|
import matplotlib.pyplot as plt
|
||
|
fig = plt.figure()
|
||
|
ax = fig.add_subplot(2,2,1)
|
||
|
namestr = ' for %s' % self.name if self.name else ''
|
||
|
ax.plot(data)
|
||
|
ax.set_title('Time series' + namestr)
|
||
|
|
||
|
ax = fig.add_subplot(2,2,2)
|
||
|
ax.plot(acf)
|
||
|
ax.set_title('Autocorrelation' + namestr)
|
||
|
|
||
|
ax = fig.add_subplot(2,2,3)
|
||
|
ax.plot(spdr) # (wr, spdr)
|
||
|
ax.set_title('Power Spectrum' + namestr)
|
||
|
|
||
|
ax = fig.add_subplot(2,2,4)
|
||
|
ax.plot(pacf)
|
||
|
ax.set_title('Partial Autocorrelation' + namestr)
|
||
|
|
||
|
return fig
|