@fanxy
2020-04-12T16:48:02.000000Z
字数 9526
阅读 7903
樊潇彦
复旦大学经济学院
金融数据
下载数据:Ch08.rar
setwd("D:\\...\\Ch08")
rm(list=ls())
install.packages("forecast","timeDate","timeSeries","fBasics","tseries")
## 调用
library(tidyverse)
library(readxl)
library(ggplot2)
library(forecast)
library(timeDate)
library(timeSeries)
library(fBasics)
library(tseries)
随机过程(stochastic process)是随机变量按时间编排的集合。设对每个参数 , 都是一个随机变量,则称下面的随机变量族为随机过程:
根据时间参数 是否连续,可分为:
数字特征 | 公式 |
---|---|
均值 | |
方差 | |
协方差 | |
自相关系数(ACF) | |
偏自相关系数(PACF) | :在 AR(k-1) 模型基础上添加 对解释 的贡献 |
# Tsay(2015):P33,例2.1
d10=read.table("m-dec12910.txt",header=T)$dec10
dec10=ts(d10,frequency=12,start=c(1967,1)) # 转换为ts对象
par(mfcol=c(3,1)) # 设定绘图窗口3*1
plot(dec10,xlab='year',ylab='returns')
title(main='(a): Simple returns')
f1=acf(d10,lag=24,plot=T) # 计算acf并作图
pacf(d10, lag=24, plot=T) # 计算pacf并作图
f1$acf[13] # 显示gamma_13 > 0
f1$acf[13]*sqrt(length(d10)) # 检验1月效应(P33-34,例2.1),H0:gamma_13=0
Box.test(d10,lag=24,type='Ljung') # Ljung-Box Q检验,H0: gamma_1=gamma_2=...=gamma_24=0
# CAPM理论假定收益率不可预测、无自相关性,因此Ljung-Box Q检验可以用来检验有效市场假说。
通过积分和差分,可以实现平稳与非平稳数据之间的转换:
一、数据示例:
1 上证综指与收益率
library(quantmod)
# 下载上证综指无法下载可直接 load("ssec.RData")
ssec<-getSymbols("000001.SS",from = "1991-07-15",to = Sys.time(),
src = "yahoo",auto.assign=FALSE)
ssec.m<-to.monthly(ssec) # 转换成月度数据
chartSeries(ssec.m,type="candlesticks",theme="white", name = "上证综指月线图",
time.scale = "",up.col="red",dn.col="green")
2 季度GDP与名义增长率
学校电子图书馆有很多中文数据库,下面以国泰安中季度国内生产总值为例,说明宏观经济数据的特征。
library(readxl)
Qgdp=read_excel("CME_Qqgdp.xlsx", skip=3, col_names =F)
colnames(Qgdp)=colnames(read_excel("CME_Qqgdp.xlsx")) # 更改指标名
str(Qgdp) # 查看数据结构
library(zoo)
Qgdp=Qgdp%>%mutate(time=as.yearmon(Quarter))%>%
rename('国内生产总值(亿元)'=Gdp,
'国内生产总值(比上年同期增长)(%)'=Gdpcurrperiod)%>%
select(time,'国内生产总值(亿元)','国内生产总值(比上年同期增长)(%)')
ggplot(Qgdp%>%gather(var,value,-time),aes(time,value))+
geom_line()+facet_wrap(~var,scales="free")+
labs(title="中国国内生产总值(季)",x="",y="")+theme_bw()
二、平稳性检验:
ssec.m97=ssec.m[index(ssec.m)>as.yearmon("1997-01"),] # 1996年12月16日开始有10%涨跌幅度限制
ln_ssec=log(ssec.m97$ssec.Adjusted)
plot(ln_ssec, main="上证综指对数值")
# 计算月收益率,由于月收益率可能较大,不用diff(log(x))
ssec.m97$ret=diff(ssec.m97$ssec.Adjusted) / lag(ssec.m97$ssec.Adjusted) * 100
ret=ssec.m97$ret[-1,] # 去掉第一行缺失值
plot(ret, main="上证综指月收益率(%)")
library(tseries)
pp.test(ln_ssec) # DF检验,H0:非平稳
pp.test(ret)
adf.test(ln_ssec) # ADF检验,H0:非平稳
adf.test(ret)
kpss.test(ln_ssec) # KPSS检验,H0:平稳
kpss.test(ret)
常用统计量 | 以 AR(1) 过程为例 |
---|---|
均值 | |
方差 | |
自相关系数(ACF) | |
偏自相关系数(PACF) |
2. 平稳性条件:
常用统计量 | 以 MA(1) 过程为例 |
---|---|
均值 | |
方差 | |
自相关系数(ACF) | |
偏自相关系数(PACF) |
2. 平稳性条件:
移动平均过程总是平稳的。当 时, 过程可逆,即可以转换为 过程:
常用统计量 | 以 ARMA(1,1) 过程为例 |
---|---|
均值 | |
方差 | |
自相关系数(ACF) | |
偏自相关系数(PACF) |
2. 平稳性条件:
与 AR(p) 模型类似,ARMA(p,q) 模型的平稳性要求矩阵 的所有特征根的模均小于1。
模型回归的第一步是在 AR、MA 和 ARMA模型中做出选择,做 ACF 和 PACF 图将很有帮助。
- | AR(p) | MA(q) | ARMA(p,q) |
---|---|---|---|
ACF | 衰减 | 阶截尾 | 衰减 |
PACF | 阶截尾 | 衰减 | 衰减 |
实际应用中,forcast
包中的 auto.arima()
命令,可以自动识别 ARIMA(p,d,q)
中各个阶数,非常方便。
library(fBasics)
basicStats(ret) # 对月度收益率的基本统计描述
t.test(ret) # 均值检验 H0: x=0
normalTest(ret,method='jb',na.rm=T) # 正态分布检验,JB-test
par(mfcol=c(1,1))
acf(ret, lag=12, plot=T) # 自相关系数作图
Box.test(ret,lag=6,type='Ljung') # m阶自相关系数为零的检验
library(forecast)
regssecm=auto.arima(ret,stationary = TRUE, seasonal = FALSE,
ic="aic")
regssecm # 回归结果:ARIMA(2,0,1)
# 拟合与预测
par(mfcol=c(2,1)) # 设作图窗口2行1例
plot(regssecm$x, lty = 1, main = "上证综指收益率(%)")
lines(fitted(regssecm), lty = 2,lwd = 2, col = "red")
predict(regssecm, n.ahead=3)
plot(forecast(regssecm))
# Tsay(2015):P41,例2.3
G=read.table("q-gnp4710.txt",header=T)$VALUE # 读取GNP数据
gnp=diff(log(G)) # 增长率
pp.test(gnp) # DF检验,H0:有单位根
adf.test(gnp) # ADF检验,H0:有单位根
tdx=c(1:253)/4+1947 # 时间指标
par(mfcol=c(2,1)) # 设定作图窗口
plot(tdx,G,xlab='year',ylab='GNP',type='l') # GNP
plot(tdx[2:253],gnp,type='l',xlab='year',ylab='growth') # 增长率
acf(gnp,lag=12) # ACF
pacf(gnp,lag=12) # PACF
m1=arima(gnp,order=c(3,0,0)) # 回归AR(3)
m1
library(forecast)
m2=auto.arima(gnp,stationary = TRUE, seasonal = FALSE,
ic="aic") # 自动回归命令,结果一样
m2
# 模型检验,作图检验残差应满足三个标准:(1)不存在波动集聚;(2)ACF图没有自相关;(3)Ljung-Box检验所有自相关系数均为零
tsdiag(m1, gof=12)
# 拟合与预测
par(mfcol=c(2,1))
plot(m2$x,lty = 1, main = "美国GNP增长率",
ylab = "Return in percent", xlab = "Date")
lines(fitted(m2), lty = 2,lwd = 2, col = "red")
predict(m2, n.ahead=3)
plot(forecast(m2))
# 周期分析
phi=c(1,-m1$coef[1:3]); z=polyroot(phi) # 设定和求解多项式
z # 两个共轭复数、一个小于零的实数
Mod(z) # 检验:z的模>1,对应特征根的模<1
2*pi/acos(Re(z)/Mod(z))[1] # 计算经济周期平均持续时间