R时间序列分析|S&P500股指的ARIMA模型预测与残差ARCH效应分析

R时间序列分析|S&P500股指的ARIMA模型预测与残差ARCH效应分析

前言

由于R语言对新手并不够友好,网上的资料相对也偏少,导致博主在使用R进行时间序列分析的过程中非常痛苦,参考和大量的资料和教科书做法。因此在project完成后,将代码、分析过程及必要的解释分享如下,希望可以帮到有需要的人。

创作不易,转载请注明。如有错漏之处,还请各位大佬指正。

一、数据及分析目的

Project要求对SP500的数据进行探索和分析,建立三个拟合模型,使用预测精度对模型进行筛选,并对模型残差包含的信息进行分析,最后做出预测。

主要用到的R包如下:

# 如果没有安装,直接使用install.packages()即可
library(depmixS4)
library(tseries)
library(forecast)
library(readxl)
library(stats)
library(TSA)

二、数据探索

package里自带有1950.2至2012.1的月末数据,这里选择收盘价作为train data。并且,在雅虎下载了2012.2至2013.1的数据作为test data。

#导入数据
data("sp500")
#导入12.02-13.01的数据
sp500_12_13 <- read_excel("E:/^GSPC.xlsx")#雅虎金融可直接下载
#转化为时间序列
sp500_12_13 <- ts(sp500_12_13['Close'],frequency=12, start=c(2012,2))
close_price <- ts(sp500['Close'],frequency=12, start=c(1950,2))
print(close_price)

原序列及对数序列可视化

win.graph(width=3.25,height=2.5,pointsize=8)
plot(close_price,ylab='SP500 Close Price')
plot(log(close_price),ylab='Log(SP500 Close Price)')

在这里插入图片描述

在这里插入图片描述
首先考虑将序列化为平稳序列。观察原序列图像及对数处理图像可以发现,对数处理可以在一定程度上缓解方差波动的问题。但序列仍存在明显的增长性,可以通过对序列进行分解直观观察。

#打印出四种趋势图
dc<-decompose(log(close_price))
plot(dc)

在这里插入图片描述
为了消除强烈的增长性,使用差分处理,并使用Augmented Dickey-Fuller Test进行序列平稳性检验。

adf.test(diff(log(close_price)))
#pp.test(diff(log(close_price)))#也可以用此方法进行检验

Augmented Dickey-Fuller Test
data: diff(log(close_price))
Dickey-Fuller = -8.6284, Lag order = 9, p-value = 0.01
alternative hypothesis: stationary

可以看到拒绝原假设,序列平稳,可以进行ARIMA建模。

三、ARIMA模型构建

首先对取对数后一阶差分的序列进行分解。

#打印出关于季节性趋势的图表
dc<-decompose(log(close_price))
season<-dc$figure
plot(season,type = "b",xaxt="n",xlab = "Month",ylab = "Season Effect")
#或者这样
boxplot(log(close_price)~cycle(log(close_price)))#显示季节性特征

在这里插入图片描述
没有观察到十分强烈的季节性特征(波动范围较小),序列增长性也没有十分强烈。值得注意的是,分解后的trend序列似乎仍存在一些波动趋势,但并不能被直观观察到(后续进行分析)。接着判断序列的自相关性。

#查看ACF和PACF图
win.graph(width=3.25,height=2.5,pointsize=8)
tsdisplay(diff(log(close_price)))
dc<-decompose(diff(log(close_price)))
plot(dc)

在这里插入图片描述
ACF图和PACF图都没有明显的截尾和拖尾特征,对AR()和MA()的之后阶数不好判断,但1~5期滞后都表现出较强的特征,可以考虑逐个建模比较AIC值(越小越好)。

但R提供了简洁的方法,使用函数自动寻找最优模型。这里分别使用AIC和BIC准则进行寻找。

#默认使用aic判断
auto.arima(log(close_price))
#使用bic判断
auto.arima(log(close_price),ic='bic')

#ARIMA(1,1,1)(0,0,1)[12] with drift
#ARIMA(0,1,0) with drift

给出了两个模型,一个是带漂移项的季节性ARIMA(1,1,1)(0,0,1)12模型,另一个是带漂移项的随机游走ARIMA(0,1,0)模型。

漂移项 μ \mu μ是一非零常数,是因为一阶差分为:
Δ X t = X −

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值