时序分析(3)--⾃回归模型(AR )
时序分析(3)
⾃回归模型(AR)
⾸先我们介绍⾃回归模型的基本概念:
Autoregressive Models - AR( p)
⾃回归模型是时序分析中的⼀项基本技术,理解和掌握AR模型是学习更⾼级和复杂时序分析模型的基础。
AR模型定义如下:
如果⼀个单变量时序数据, 可以以此时序数据本⾝的多个时刻之前的点的值来回归,这种情况称为⾃回归,公式如下:
这⾥  称为⾃回归模型的阶数,记作AR ( p )。是系数项,是⽩噪声。⾸先我们需要介绍⼀下⾃回归分析中的两个重要的分析指标:ACF 和 PACF
逍客2012款报价
ACF ( Auto Correlation Function)
⼀个随机过程的⾃相关函数就是在该过程时序数据不同时间点的Pearson相关系数。假如时序数据有两个时间点,其⾃相关系数定义为:
其中分别为均值和标准差。
求出  与的⾃相关系数,就可以得到⼀个以时间跨度k为参数的函数,称为⾃相关函数。
PACF (Partial Auto Correlation Function)
PACF偏⾃相关函数就是与的相关系数,但是移除了对到的线性依赖。
导⼊依赖包和数据
如本系列⽂章前⾯两篇⼀样
正新轮胎{y ;t =t 1,2,...}y =t αy +1t −1αy +2t −2...+αy +p t −p ωt
=αx +i =1∑p i t −i ωt
p αωt s ,t R (s ,t )=
σσt s E [(y −μ)(y −μ)]
t t s s μ,σy t {y ,y ,...}t −1t −2y t y t −k y t y t −k +1y t −1
def  tsplot (y , lags =None , figsize =(16, 10), style ='bmh'):
if  not  isinstance (y , pd .Series ):
摩旅y = pd .Series (y )
with  plt .style .context (style ):
fig = plt .figure (figsize =figsize )
# Params['font.family'] = 'Ubuntu Mono'
layout = (3, 2)
ts_ax = plt .subplot2grid (layout , (0, 0), colspan =2)
acf_ax = plt .subplot2grid (layout , (1, 0))
pacf_ax = plt .subplot2grid (layout , (1, 1))
qq_ax = plt .subplot2grid (layout , (2, 0))
pp_ax = plt .subplot2grid (layout , (2, 1))
y .plot (ax =ts_ax )
ts_ax .set_title ('Time Series Analysis Plots')
smt .graphics .plot_acf (y , lags =lags , ax =acf_ax , alpha =0.5)
smt .graphics .plot_pacf (y , lags =lags , ax =pacf_ax , alpha =0.5)
sm .qqplot (y , line ='s', ax =qq_ax )
qq_ax .set_title ('QQ Plot')
scs .probplot (y , sparams =(y .mean (), y .std ()), plot =pp_ax )
plt .tight_layout ()
return 再详细介绍AR模型之前,我们先介绍三个常见的更为简单的模型:Linear Model,log-Linear Model 和 Random Walk。
奇瑞重工线性模型(Linear Model)
时序变量是时间的线性函数
w = np .random .randn (100)
福特新福克斯y = np .empty_like (w )
lags = 30
b0 = -50.
b1 = 25.
for  t in  range (len (w )):
y [t ] = b0 + b1*t + w [t ]
_ = tsplot (y , lags =lags )
从上图可观测到,线性模型的⾃相关函数呈现阶梯型下降,⽽偏相关函数只在时间跨度为1时显⽰较强相关性,⼤于1的时间跨度时相关性为0。
y =t b +0b t +1ωt
对数线性模型(Log-linear Model)
通常表⽰固定的连续增长,如果对两边取对数,可以得到线性模型。
idx = pd .date_range ('2007-01-01', '2012-01-01', freq ='M')
# fake sales increasing at exponential rate
sales = [np .exp ( x /12 ) for  x in  range (1, len (idx )+1)]
# create dataframe and plot
df = pd .DataFrame (sales , columns =['Sales'], index =idx )
with  plt .style .context ('bmh'):
df .plot ()
plt .title ('ABC Sales')
当我们取对数之后
with  plt .style .context ('bmh'):
pd .Series (np .log (sales ), index =idx ).plot ()
plt .title ('ABC Log Sales')
y =t exp (λt )
⽩噪声
丰田最新款np.random.seed(1)
# plot of discrete white noise
randser = al(size=1000)
tsplot(randser, lags=30)
⽩噪声的⾃相关性⼏乎全为0.
随机步⾏(Random Walk)
y=
t−1ωt
t y+
np.random.seed(1)
n_samples =1000
x = w = al(size=n_samples)
for t in range(n_samples):
x[t]= x[t-1]+ w[t]
_ = tsplot(x, lags=30)
随机步⾏的⾃相关函数显⽰较慢下降的强相关性,⽽偏相关函数只在k=1时显⽰⾮常强的相关性。对随机步⾏进⾏⼀阶差分后
_ = tsplot(np.diff(x), lags=30)
和我们预期的⼀样,随机步⾏的⼀阶差分类似于⽩噪声。
指数收益率数据⾃相关分析
ACF
acf = pd.DataFrame()
for index_name in lumns:
acf[index_name]= sm.tsa.stattools.acf(indexs_logret[index_name])
_ = acf.plot(kind='bar',subplots=True,title='AutoCorrelation Plot',figsize=(12,8))