利用Tushare进行分析时间序列分析第二弹

本文以沪深300指数时间序列为例,首先提取数据,并导入所需要的statsmodels库。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import tushare as ts

df  = ts.get_hist_data('hs300','2016-01-01','2018-03-09').sort_index(0)
from scipy import stats
import statsmodels.api as sm
df['close_1'] = df['close'].diff(1)
df['close_2'] = df['close_1'].diff(1)
df[['close']].plot(subplot = Flase,color = 'red',figsize = (12,6))

 

df['close'].diff(1).plot(subplot = True,figsize=(12,6))

df['close'].diff(2).plot(subplot = True,figsize=(12,6))

diff(1)与diff(2)计算了时间序列的一阶差分和二阶差分

接下来检验一下沪深300指数的收益率是否平稳(调用了自相关函数ACF):

df2=np.log(df/df.shift(1))
df2=df2.fillna(0) 
df3=data2['close']
m=10 #数	
acf,q,p=sm.tsa.acf(df3,nlags=m,qstat=True)
out=np.c_[range(1,11),acf[1:],q,p]	
output=pd.DataFrame(out, columns=['lag’, "ACF","Q","P-value"])
output=output.set_index('lag')	
output

检验多个自相关系数是否同时为0需要用到混成统计量Q(m),可以看到10个滞后,每个P对很小,因此拒绝同时为0的原假设,因此沪深300指数的对数收益率序列相关。 

接下来,验证对数收益率的平稳性:

temp = np.array(df3)
model = sm.tsa.AR(temp)
reusults_AR= model.fit()
plt.figure(figsize=(10,4))
plt.plot(temp,'b',label = 'HS')
plt.plot(result_AR.fittedvalues,'r',label = 'AR moedl')
plt.legend()

模型有18阶,即自动生成的AR模型是18阶的。如果需要绘ARIMA模型,把plot里的参数改为result_ARIMA.fittedvalues就好。

当模型特征根的模都小于1时,AR时间序列平稳。

pi,sin,cos=np.pi,np.sin,np.cos
r1=1	
t=np.linspace(0,2*pi,360)
x1=r1*cos(t)
y1=r1*sin(t)	
plt.figure(figsize=(6,6))
plt.plot(x1,y1,'k') #画单位圆
roots =1/results_AR.roots#   注意,这里results_ARroots 是计算的特征方程的解,特征根是解的倒数 for i in range(len(roots)):
    plt.plot(roots[i].real,roots[i].imag,'.r',markersize=8) #画出特征根 
plt.show()

特征根均在半径为1的圆内,因此AR(18)时间序列平稳

绘制PACF图,lags一直到40:

fig=plt.figure(figsize=(20,5))
ax1=fig.addsubplot(111)
fig=sm.graphics.tsa.plot_pacf(temp,lags=40,ax=ax1)

从PACF图的感觉是,AR(3)似乎也是可以的,PACF前三个样本(0、1、2)是显著的,后面的阶数又过大了.

接下来,用信息准则验证:

包括了AIC(赤池信息准则)BIC(贝叶斯信息准则)和H—Q准则

以ARMA(7,0)即AR(7)为例:

arma_mod70=sm.tsa.ARMA(temp,(7,0)).fit()
print arma_mod70.aic,arma_mod70.bic,arma_mod70.hqic
aicList =[] 
bicList =[] 
hqicList=[]
for i in range(1,11):	
    order =(i,0)
    tempModel=sm.tsa.ARMA(temporder).fit() 
    aicList.append(tempModel.aic)     
    bicList.append(tempModel.bic) 
    hqicList.append(tempModelhqic)
plt.figure(figsize=(15,6))	
plt.plot(aicList,'r',label=aicvalue)	
plt.plot(bicList,'b,label=bic value) 
plt.plot(hqicList,'k',label='hqicvalue)
plt.legend(loc=0)	

 

选择三个值最小的阶,由图可以看到,可以选择AR(4)或者AR(8)。

残差序列白噪声:

delta = reaults_AR.fittedvalues - temp[18:]#残差
plt.figure(figsize = (10,6))
plt.plot(delta,'r',label = 'residual error')
plt.legend(loc = 0)

 

acf,q,p=sm.tsa.acf(delta,nlags=10,qstat=True)
out =np.c_[range(1,11),acf[1:],q,p] 
output=pd.DataFrame(out, columns=['lag', "AC","Q","P-value"]) 
output =output.set_index('lag')
output

拒绝原假设,为白噪声。 

用自动生成的AR模型做预测

train=temp[:-10]
test=temp[-10:]
output =sm.tsa.AR(train).fit() 
output.predict()
predicts = output.predict(355,364,dynamic=True) 
print len(predicts) 
comp=pd.DataFrame
comp['original'] =temp[-10:]
comp['predict'] =predicts10 comp

 

comp.plot(figsize= (8,5))

从上面结果可知AR模型的预测结果并不合意。 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值