时间序列分析在R中实践

先安装时间序列相关包,直接从CRAN上安装,会自动安装依赖的包,再导入包

#####################包准备#####################
install.packages("lmtest")
install.packages("tseries")
install.packages("fGarch")
install.packages("FinTS")
install.packages("forecast")
install.packages("MSBVAR")

library(xts)
library(lmtest)
library(tseries)
library(fGarch)
library(FinTS)
library(forecast)
library(MSBVAR)

本文选择2005年1月4日至2007年10月17日共673个数据,上证指数和深圳指数,收盘价和收益率数据部分如下:

date

sz_prc

sh_prc

sz_rat

sh_rat

2005/1/5

315.25

1251.94

0.0064

0.0032

2005/1/6

311.98

1239.43

-0.0045

-0.0044

2005/1/7

312.61

1244.75

0.0009

0.0019

2005/1/10

315.85

1252.4

0.0045

0.0027

2005/1/11

316.42

1257.46

0.0008

0.0018

sz_prc,sh_prc分别表示深证指数和上证指数的收盘价,sz_rat,sh_rat分别表示深证指数和上证指数的收盘率:

 时间序列分析在R中实践

  时间序列分析在R中实践

#####################数据准备#####################
d <- read.csv("E:/Work/R模型/数据表.csv",header=T)
dt <- as.Date(d[,"date"])
rh <- d[,"sh_rat"]
rz <- d[,"sz_rat"]
rt.rh <- xts(rh,dt)
rt.rz <- xts(rz,dt)

开始分别对RH和RZ进行自相关分析

#判断自相关阶数
pacf(rt.rh)
ar_rh <- auto.arima(rt.rh,max.p = 20)
l_rh <- ar_rh$arma[1]

时间序列分析在R中实践

时间序列分析在R中实践

根据滞后阶数定义新的数据序列

rt.rhl <- lag(rt.rh,k=-l_rh,na.pad=FALSE)
rt.rhsl <- rt.rh[1:length(rt.rhl)]

对序列直接做线性回归

#自相关滞后回归
fit_rh <- lm(rt.rhsl ~ rt.rhl)
summary(fit_rh)

时间序列分析在R中实践

r_rh <- resid(fit_rh)
#是否存在ARCH效应
ArchTest(as.ts(r_rh))

时间序列分析在R中实践

#GARCH(1,1)模型
l_rh   #6
garchFit(~arma(6,0)+garch(1,1),data=rt.rh,algorithm="nlminb+nm",trace=F,include.mean=F)

时间序列分析在R中实践

#判断自相关阶数
pacf(rt.rz)
ar_rz <- auto.arima(rt.rz,max.p = 20)
l_rz <- ar_rz$arma[1]

时间序列分析在R中实践

时间序列分析在R中实践

根据滞后阶数定义新的数据序列

rt.rzl <- lag(rt.rz,k=-l_rz,na.pad=FALSE)
rt.rzsl <- rt.rz[1:length(rt.rzl)]

对序列直接做线性回归

#自相关滞后回归
fit_rz <- lm(rt.rzsl ~ rt.rzl)
summary(fit_rz)
r_rz <- resid(fit_rz)
#是否存在ARCH效应
ArchTest(as.ts(r_rz))

时间序列分析在R中实践

时间序列分析在R中实践

#GARCH(1,1)模型
l_rz   #7
garchFit(~arma(7,0)+garch(1,1),data=rt.rz,algorithm="nlminb+nm",trace=F,include.mean=F)

时间序列分析在R中实践

分别对序列做单位根检验

#####################单位根检验#####################
adf.test(rt.rh)
adf.test(rt.rz)

时间序列分析在R中实践

#####################协整检验#####################
fit_xz <- lm(rt.rh ~ rt.rz)
r_xz <- residuals(fit_xz)
adf.test(as.ts(r_xz))

时间序列分析在R中实践

#####################Granger因果检验#####################
rt.gg <- cbind(rt.rh,rt.rz)
colnames(rt.gg) <- c("rh","rz")
granger.test(rt.gg,p=1)

时间序列分析在R中实践

从上图可以看rh是导致rz变化的granger原因。

#####################建立误差修正模型#####################
dy_rh <- diff(rt.rh,na.pad=FALSE)
dy_rz <- diff(rt.rz,na.pad=FALSE)
r_lag<- lag(r_xz,k=+1,na.pad=FALSE)
fit_ECM <- lm(dy_rh ~ r_lag + dy_rz)
summary(fit_ECM)

时间序列分析在R中实践