[关闭]
@fanxy 2020-04-12T08:48:02.000000Z 字数 9526 阅读 6601

第八讲 平稳时间序列线性模型

樊潇彦 复旦大学经济学院 金融数据


0. 准备工作

下载数据:Ch08.rar

  1. setwd("D:\\...\\Ch08")
  2. rm(list=ls())
  3. install.packages("forecast","timeDate","timeSeries","fBasics","tseries")
  4. ## 调用
  5. library(tidyverse)
  6. library(readxl)
  7. library(ggplot2)
  8. library(forecast)
  9. library(timeDate)
  10. library(timeSeries)
  11. library(fBasics)
  12. library(tseries)

1. 随机过程和时间序列基本概念

1.1 定义和数字特征

随机过程(stochastic process)是随机变量按时间编排的集合。设对每个参数 都是一个随机变量,则称下面的随机变量族为随机过程:

根据时间参数 是否连续,可分为:

数字特征 公式
均值
方差
协方差
自相关系数(ACF)
偏自相关系数(PACF) :在 AR(k-1) 模型基础上添加 对解释 的贡献
  1. # Tsay(2015):P33,例2.1
  2. d10=read.table("m-dec12910.txt",header=T)$dec10
  3. dec10=ts(d10,frequency=12,start=c(1967,1)) # 转换为ts对象
  4. par(mfcol=c(3,1)) # 设定绘图窗口3*1
  5. plot(dec10,xlab='year',ylab='returns')
  6. title(main='(a): Simple returns')
  7. f1=acf(d10,lag=24,plot=T) # 计算acf并作图
  8. pacf(d10, lag=24, plot=T) # 计算pacf并作图
  9. f1$acf[13] # 显示gamma_13 > 0
  10. f1$acf[13]*sqrt(length(d10)) # 检验1月效应(P33-34,例2.1),H0:gamma_13=0
  11. Box.test(d10,lag=24,type='Ljung') # Ljung-Box Q检验,H0: gamma_1=gamma_2=...=gamma_24=0
  12. # CAPM理论假定收益率不可预测、无自相关性,因此Ljung-Box Q检验可以用来检验有效市场假说。

1.2 随机过程分类

1.3 常用平稳和非平稳时序数据模型与转换关系

通过积分和差分,可以实现平稳与非平稳数据之间的转换:

1.4 平稳和非平稳数据检验

一、数据示例:

1 上证综指与收益率

  1. library(quantmod)
  2. # 下载上证综指无法下载可直接 load("ssec.RData")
  3. ssec<-getSymbols("000001.SS",from = "1991-07-15",to = Sys.time(),
  4. src = "yahoo",auto.assign=FALSE)
  5. ssec.m<-to.monthly(ssec) # 转换成月度数据
  6. chartSeries(ssec.m,type="candlesticks",theme="white", name = "上证综指月线图",
  7. time.scale = "",up.col="red",dn.col="green")

ssec_m.png-16.1kB

2 季度GDP与名义增长率
学校电子图书馆有很多中文数据库,下面以国泰安中季度国内生产总值为例,说明宏观经济数据的特征。

  1. library(readxl)
  2. Qgdp=read_excel("CME_Qqgdp.xlsx", skip=3, col_names =F)
  3. colnames(Qgdp)=colnames(read_excel("CME_Qqgdp.xlsx")) # 更改指标名
  4. str(Qgdp) # 查看数据结构
  5. library(zoo)
  6. Qgdp=Qgdp%>%mutate(time=as.yearmon(Quarter))%>%
  7. rename('国内生产总值(亿元)'=Gdp,
  8. '国内生产总值(比上年同期增长)(%)'=Gdpcurrperiod)%>%
  9. select(time,'国内生产总值(亿元)','国内生产总值(比上年同期增长)(%)')
  10. ggplot(Qgdp%>%gather(var,value,-time),aes(time,value))+
  11. geom_line()+facet_wrap(~var,scales="free")+
  12. labs(title="中国国内生产总值(季)",x="",y="")+theme_bw()

Qgdp.png-14.2kB

二、平稳性检验:

  1. ssec.m97=ssec.m[index(ssec.m)>as.yearmon("1997-01"),] # 1996年12月16日开始有10%涨跌幅度限制
  2. ln_ssec=log(ssec.m97$ssec.Adjusted)
  3. plot(ln_ssec, main="上证综指对数值")
  4. # 计算月收益率,由于月收益率可能较大,不用diff(log(x))
  5. ssec.m97$ret=diff(ssec.m97$ssec.Adjusted) / lag(ssec.m97$ssec.Adjusted) * 100
  6. ret=ssec.m97$ret[-1,] # 去掉第一行缺失值
  7. plot(ret, main="上证综指月收益率(%)")
  8. library(tseries)
  9. pp.test(ln_ssec) # DF检验,H0:非平稳
  10. pp.test(ret)
  11. adf.test(ln_ssec) # ADF检验,H0:非平稳
  12. adf.test(ret)
  13. kpss.test(ln_ssec) # KPSS检验,H0:平稳
  14. kpss.test(ret)

2. 常用平稳时序线性模型

2.1 简单自回归模型 AR(p)

  1. 定义和常用统计量:

    为滞后算子的多项式,上式也可以写为:
常用统计量 以 AR(1) 过程为例
均值
方差
自相关系数(ACF)
偏自相关系数(PACF)

2. 平稳性条件:

2.2 移动平均模型 MA(q)

  1. 定义和常用统计量:

    其中:
常用统计量 以 MA(1) 过程为例
均值
方差
自相关系数(ACF)
偏自相关系数(PACF)

2. 平稳性条件:
移动平均过程总是平稳的。当 时, 过程可逆,即可以转换为 过程:

2.3 自回归移动平均模型 ARMA(p,q)

  1. 定义和常用统计量:

    也可以表示为:
常用统计量 以 ARMA(1,1) 过程为例
均值
方差
自相关系数(ACF)
偏自相关系数(PACF)

2. 平稳性条件:
与 AR(p) 模型类似,ARMA(p,q) 模型的平稳性要求矩阵 的所有特征根的模均小于1。

3. 应用:模型回归与预测

模型回归的第一步是在 AR、MA 和 ARMA模型中做出选择,做 ACF 和 PACF 图将很有帮助。

- AR(p) MA(q) ARMA(p,q)
ACF 衰减 阶截尾 衰减
PACF 阶截尾 衰减 衰减

实际应用中,forcast 包中的 auto.arima() 命令,可以自动识别 ARIMA(p,d,q) 中各个阶数,非常方便。

3.1 上证综指月度收益率

  1. library(fBasics)
  2. basicStats(ret) # 对月度收益率的基本统计描述
  3. t.test(ret) # 均值检验 H0: x=0
  4. normalTest(ret,method='jb',na.rm=T) # 正态分布检验,JB-test
  5. par(mfcol=c(1,1))
  6. acf(ret, lag=12, plot=T) # 自相关系数作图
  7. Box.test(ret,lag=6,type='Ljung') # m阶自相关系数为零的检验
  8. library(forecast)
  9. regssecm=auto.arima(ret,stationary = TRUE, seasonal = FALSE,
  10. ic="aic")
  11. regssecm # 回归结果:ARIMA(2,0,1)
  12. # 拟合与预测
  13. par(mfcol=c(2,1)) # 设作图窗口2行1例
  14. plot(regssecm$x, lty = 1, main = "上证综指收益率(%)")
  15. lines(fitted(regssecm), lty = 2,lwd = 2, col = "red")
  16. predict(regssecm, n.ahead=3)
  17. plot(forecast(regssecm))

regssecm.png-21.8kB

3.2 美国GNP

  1. # Tsay(2015):P41,例2.3
  2. G=read.table("q-gnp4710.txt",header=T)$VALUE # 读取GNP数据
  3. gnp=diff(log(G)) # 增长率
  4. pp.test(gnp) # DF检验,H0:有单位根
  5. adf.test(gnp) # ADF检验,H0:有单位根
  6. tdx=c(1:253)/4+1947 # 时间指标
  7. par(mfcol=c(2,1)) # 设定作图窗口
  8. plot(tdx,G,xlab='year',ylab='GNP',type='l') # GNP
  9. plot(tdx[2:253],gnp,type='l',xlab='year',ylab='growth') # 增长率
  10. acf(gnp,lag=12) # ACF
  11. pacf(gnp,lag=12) # PACF
  12. m1=arima(gnp,order=c(3,0,0)) # 回归AR(3)
  13. m1
  14. library(forecast)
  15. m2=auto.arima(gnp,stationary = TRUE, seasonal = FALSE,
  16. ic="aic") # 自动回归命令,结果一样
  17. m2
  18. # 模型检验,作图检验残差应满足三个标准:(1)不存在波动集聚;(2)ACF图没有自相关;(3)Ljung-Box检验所有自相关系数均为零
  19. tsdiag(m1, gof=12)
  20. # 拟合与预测
  21. par(mfcol=c(2,1))
  22. plot(m2$x,lty = 1, main = "美国GNP增长率",
  23. ylab = "Return in percent", xlab = "Date")
  24. lines(fitted(m2), lty = 2,lwd = 2, col = "red")
  25. predict(m2, n.ahead=3)
  26. plot(forecast(m2))
  27. # 周期分析
  28. phi=c(1,-m1$coef[1:3]); z=polyroot(phi) # 设定和求解多项式
  29. z # 两个共轭复数、一个小于零的实数
  30. Mod(z) # 检验:z的模>1,对应特征根的模<1
  31. 2*pi/acos(Re(z)/Mod(z))[1] # 计算经济周期平均持续时间

作业

  1. 下载美国实际GDP增长率数据,检验平稳性、用ARIMA模型预测美国未来一年的实际经济增长率。
  2. 分析中国季度GDP名义增长率数据,检验平稳性、做ARIMA模型分析并预测未来一年的名义经济增长率。

参考文献

  1. Daroczi, C. et al. 2013: Introduction to R for Quantitative Finance, Packt Publishing Ltd.
  2. Tsay, R.S. 2013:《金融时间序列分析(第3版)》,王远林、王辉、潘家柱译,人民邮电出版社
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注