拓端tecdat|R语言使用ARIMA模型预测股票收益时间序列|附代码数据

2023/9/30 17:41:44

全文链接:http://tecdat.cn/?p=2831

原文出处:拓端数据部落公众号

相关视频:在Python和R语言中建立EWMA,ARIMA模型预测时间序列

“预测非常困难,特别是关于未来”。丹麦物理学家尼尔斯·波尔(Neils Bohr)

很多人都会看到这句名言。预测是这篇博文的主题。在这篇文章中,我们将介绍流行的ARIMA预测模型,以预测股票的收益,并演示使用R编程的ARIMA建模的逐步过程。

时间序列中的预测模型是什么?

预测涉及使用其历史数据点预测变量的值,或者还可以涉及在给定另一个变量的值的变化的情况下预测一个变量的变化。预测方法主要分为定性预测和定量预测。时间序列预测属于定量预测的范畴,其中统计原理和概念应用于变量的给定历史数据以预测同一变量的未来值。使用的一些时间序列预测技术包括:

  • 自回归模型(AR)
  • 移动平均模型(MA)
  • 季节回归模型
  • 分布滞后模型

什么是自回归移动平均模型(ARIMA)?

ARIMA代表Autoregressive Integrated Moving Average。ARIMA也被称为Box-Jenkins方法。Box和Jenkins声称,通过对系列Y t进行差分,可以使非平稳数据平稳。

ARIMA模型结合了三种基本方法:

  • 自回归(AR) - 在自回归的一个给定的时间序列数据在他们自己的滞后值,这是由在模型中的“P”值表示回归的值。
  • 差分(I-for Integrated) - 这涉及对时间序列数据进行差分以消除趋势并将非平稳时间序列转换为平稳时间序列。这由模型中的“d”值表示。如果d = 1,则查看两个时间序列条目之间的差分,如果d = 2,则查看在d = 1处获得的差分的差分,等等。
  • 移动平均线(MA) - 模型的移动平均性质由“q”值表示,“q”值是误差项的滞后值的数量。

该模型称为自回归整合移动平均值或Y t的 ARIMA(p,d,q)。我们将按照下面列举的步骤来构建我们的模型。

第1步:测试和确保平稳性

要使用Box-Jenkins方法对时间序列进行建模,该系列必须是平稳的。平稳时间序列表示没有趋势的时间序列,其中一个具有恒定的均值和随时间的方差,这使得预测值变得容易。

测试平稳性 -我们使用Augmented Dickey-Fuller单位根测试测试平稳性。对于平稳的时间序列,由ADF测试得到的p值必须小于0.05或5%。如果p值大于0.05或5%,则可以得出结论:时间序列具有单位根,这意味着它是一个非平稳过程。

差分 -为了将非平稳过程转换为平稳过程,我们应用差分方法。区分时间序列意味着找出时间序列数据的连续值之间的差分。差分值形成新的时间序列数据集,可以对其进行测试以发现新的相关性或其他有趣的统计特性。

我们可以连续多次应用差分方法,产生“一阶差分”,“二阶差分”等。

在我们进行下一步之前,我们应用适当的差分阶数(d)使时间序列平稳。

第2步:识别p和q

在此步骤中,我们通过使用自相关函数(ACF)和偏相关函数(PACF)来确定自回归(AR)和移动平均(MA)过程的适当阶数。

识别AR模型的p阶

对于AR模型,ACF将以指数方式衰减,PACF将用于识别AR模型的阶数(p)。如果我们在PACF上的滞后1处有一个显着峰值,那么我们有一个1阶AR模型,即AR(1)。如果我们在PACF上有滞后1,2和3的显着峰值,那么我们有一个3阶AR模型,即AR(3)。

识别MA模型的q阶

对于MA模型,PACF将以指数方式衰减,ACF图将用于识别MA过程的阶数。如果我们在ACF上的滞后1处有一个显着的峰值,那么我们有一个1阶的MA模型,即MA(1)。如果我们在ACF上的滞后1,2和3处有显着的峰值,那么我们有一个3阶的MA模型,即MA(3)。

第3步:估算和预测

一旦我们确定了参数(p,d,q),我们就可以估算ARIMA模型在训练数据集上的准确性,然后使用拟合模型使用预测函数预测测试数据集的值。最后,我们交叉检查我们的预测值是否与实际值一致。

使用R编程构建ARIMA模型

现在,让我们按照解释的步骤在R中构建ARIMA模型。有许多软件包可用于时间序列分析和预测。我们加载相关的R包进行时间序列分析,并从雅虎财经中提取股票数据。

#从雅虎财经中提取数据

getSymbols('TECHM.NS',from ='2012-01-01',to =''2015-01-01')

#选择相关的收盘价序列

stock_prices = TECHM.NS [,4]

在下一步中,我们计算股票的对数收益,因为我们希望ARIMA模型预测对数收益而不是股票价格。我们还使用绘图函数绘制了对数收益序列。

#计算股票 一阶差分

stock = diff(log(stock_prices),lag = 1)

plot(stock,type ='l',main ='log return plot')

接下来,我们对收益序列数据调用ADF测试以检查平稳性。来自ADF测试的p值为0.01告诉我们该序列是平稳的。如果序列是非平稳的,我们首先会对回归序列进行差分,使其序列平稳。

在下一步中,我们将数据集拆分为两部分 - 训练和测试

acf.stock = acf(stock [c(1:breakpoint),],main ='ACF Plot',lag.max = 100)

我们可以观察这些图并得出自回归(AR)阶数和移动平均(MA)阶数。

我们知道,对于AR模型,ACF将呈指数衰减,PACF图将用于识别AR模型的阶数(p)。对于MA模型,PACF将以指数方式衰减,ACF图将用于识别MA模型的阶数(q)。从这些图中我们选择AR 阶数 = 2和MA 阶数 = 2.因此,我们的ARIMA参数将是(2,0,2)。

我们的目标是从断点开始预测整个收益序列。我们将在R中使用For循环语句,在此循环中,我们预测测试数据集中每个数据点的收益值。

在下面给出的代码中,我们首先初始化一个序列,它将存储实际的收益,另一个系列来存储预测的收益。在For循环中,我们首先根据动态分割点划分训练数据集和测试数据集。

我们在训练数据集上调用arima函数,其指定的阶数为(2,0,2)。我们使用这个拟合模型通过使用forecast.Arima函数来预测下一个数据点。该功能设置为99%置信水平。可以使用置信度参数来增强模型。我们将使用模型中的预测点估计。预测函数中的“h”参数表示我们要预测的值的数量。

我们可以使用摘要功能确认ARIMA模型的结果在可接受的范围内。在最后一部分中,我们将每个预测收益和实际收益分别附加到预测收益序列和实际收益序列。


#初始化实际对数收益率的xts对象
 
Actual_series = xts(0,as.Date("2014-11-25","%Y-%m-%d"))
 
#初始化预测收益序列的数据
 
fit = arima(stock_train,order = c(2,0,2),include.mean = FALSE)
 
#绘制残差的acf图
 
acf(fit$ residuals,main ="Residuals plot")
 
arima.forecast = forecast.Arima(fit,h = 1,level = 99)
 
#绘制预测
 
#为预测期创建一系列预测收益
 
forecasted_series = rbind(forecasted_series,arima.forecast $ mean [1])
 
#为预测期创建一系列实际收益
 
Actual_series = c(Actual_series,xts(Actual_return))
 
RM(Actual_return)
 

在我们转到代码的最后部分之前,让我们从测试数据集中检查ARIMA模型的结果以获取样本数据点。

从得到的系数,收益方程可写为:

Y t = 0.6072 * Y (t-1) -0.8818 * Y (t-2) -0.5447ε (t-1)+0.8972ε (t-2)

系数给出了标准误差,这需要在可接受的范围内。Akaike信息标准(AIC)评分是ARIMA模型准确性的良好指标。模型更好地降低AIC得分。我们还可以查看残差的ACF图; 良好的ARIMA模型的自相关性将低于阈值限制。预测的点收益为-0.001326978,在输出的最后一行中给出。

让我们通过比较预测回报与实际回报来检查ARIMA模型的准确性。代码的最后一部分计算此准确性信息。

#调整实际收益率序列的长度
 
Actual_series = Actual_series [-1]
 
#创建预测序列的时间序列对象
 
forecasted_series = xts(forecasted_series,index(Actual_series))
 
#创建两个回归系列的图 - 实际与预测
 
#创建一个表格,用于预测的准确性
 
comparsion = merge(Actual_series,forecasted_series)
 
comparsion $ Accuracy = sign(comparsion $ Actual_series)== sign(comparsion $ Precasted)
 
#计算准确度百分比指标
 
Accuracy_percentage = sum(comparsion $ Accuracy == 1)* 100 / length(comparsion $ Accuracy)

模型的准确率百分比达到55%左右。可以尝试运行模型以获得(p,d,q)的其他可能组合,或者使用auto.arima函数选择最佳的最佳参数来运行模型。

结论

最后,在本文中,我们介绍了ARIMA模型,并将其应用于使用R编程语言预测股票价格收益。我们还通过实际收益检查了我们的预测结果。

   


最受欢迎的见解

1.在python中使用lstm和pytorch进行时间序列预测

2.python中利用长短期记忆模型lstm进行时间序列预测分析

3.使用r语言进行时间序列(arima,指数平滑)分析

4.r语言多元copula-garch-模型时间序列预测

5.r语言copulas和金融时间序列案例

6.使用r语言随机波动模型sv处理时间序列中的随机波动

7.r语言时间序列tar阈值自回归模型

8.r语言k-shape时间序列聚类方法对股票价格时间序列聚类

9.python3用arima模型进行时间序列预测


http://www.jnnr.cn/a/108833.html

相关文章

还担心接口乱糟糟?快来试试“斯瓦格”在线文档管理平台!

在开发过程中,前后端最糟心的事就是沟通接口,在此过程中,吵得最凶的根源就在于接口文档的不完善、乱、难于使用,甚至都没有统一管理接口的地方。本文将分享一款在线接口文档管理工具:“斯瓦格”,同时我将用…

【实战】Mysql 千万级数据表结构变更 、含脚本

一、实测结果 业务无感知,无死锁平滑 线上800万数据以下 直接使用 alter 新增字段 300ms左右 2000万数据,强制使用主键索引,每次查询50万数据 并插入新表 ,耗时 20s ,cpu 占45% 二、整体步骤 创建新表 biz_table_ne…

【MySQL】高性能高可用表设计实战-表设计篇(MySQL专栏启动)

📫作者简介:小明java问道之路,专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码,就职于大型金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1…

python,满分,砝码称重【第十二届】【省赛】【研究生组】

完整源代码在文章末尾,首先这种涉及到二维数组的优化问题,优先考虑动态规划 核心思路: 先构建一个二维python列表(详情参考(341条消息) python 二维列表(数组)赋值问题_z小白的博客-CSDN博客_python创建二…

WXML模板语法

文章目录1、数据绑定1.1 数据绑定的基本原则1.2在data中定义页面的数据1.3 Mustache语法的格式1.4 Mustache语法的应用场景1.5 算数运算2、事件绑定2.1 小程序常用的事件2.2事件对象的属性列表2.3 target和currentTarget的区别2.4 <font colorred>bindtap的语法格式2.5 在…

【树莓派不吃灰】使用frp内网穿透,实现远程访问树莓派

目录1. 前言2. frp内网穿透2.1 概述2.2 实现原理3. 开源frp项目4. 公网服务器选型5. 下载frp软件5.1 公网服务器下载frp服务器5.1.1 github选择适合服务端的版本5.1.2 公网服务器进行下载解压5.2 树莓派下载frp客户端5.2.1 github选择适合客户端的版本5.2.2 树莓派进行下载解压…

R语言—基本数据管理

文章目录基本数据管理1.创建新变量&#xff08;1&#xff09;$符号&#xff08;2&#xff09;attach函数&#xff08;3&#xff09;transform函数2.变量的重编码&#xff08;1&#xff09;使用逻辑判断式编码&#xff08;2&#xff09;使用ifelse函数进行重编码&#xff08;3&a…

数据集资源之一:最经典大规模、多样化的自动驾驶视频数据集——BDD100K数据集

本专栏主要分享本人收集整理的深度学习数据集资源&#xff0c;供大家参考使用。一个合适的数据集是论文写作、科研成功的开始。栏目会先简要介绍数据集&#xff0c;然后分享数据集的链接。本文分享最经典大规模、多样化的自动驾驶视频数据集BDD100K数据集。 一、BDD100K数据集…

性能追击:万字长文 30+ 图 8 大主流服务器程序线程模型展示

看大佬如何用 30图片揭秘 8 大主流服务器程序线程模型&#xff1a; 最近拍的照片比较少&#xff0c;不知道配什么图好&#xff0c;于是自己画了一个&#xff0c;凑合着用&#xff0c;让大家见笑了。 本文我们来探索一下主流的各种应用服务器的网络处理模型&#xff0c;看看大家…

kalibr标定IMU随机变量(高斯分布)的方差

参考&#xff1a; 标定源码&#xff1a;GitHub - rpng/kalibr_allan: IMU Allan standard deviation charts for use with Kalibr and inertial kalman filters. 注意&#xff1a;kalibr_allan内部只有一个ros包&#xff08;bagconvert&#xff09;&#xff0c;并且编译需要安装…

flask---》M3U8流视频数据爬虫

介绍 HLS技术介绍 现在大部分视频客户端都采用HTTP Live Streaming&#xff0c;而不是直接播放MP4等视频文件&#xff08;HLS&#xff0c;Apple为了提高流播效率开发的技术&#xff09;。HLS技术的特点是将流媒体切分为若干【TS片段】&#xff08;比如几秒一段&#xff09;&…

Python编程 数值类型 数学计算

作者简介&#xff1a;一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.Python数值类型 1.数学计算&#xff08;熟悉&#xff09; 2.导入方法&…

JS代码压缩

JS代码压缩 本文分享一种技术&#xff0c;用于实现JS代码压缩。 该技术使用LZW算法。 LZW算法又叫“串表压缩算法”&#xff0c;简而言之&#xff0c;通过建立一个字符串表&#xff0c;用较短的代码来表示较长的字符串来实现压缩。 具体的实现方法是&#xff1a;提取原始文…

python 基于PHP+MySQL的学生成绩管理系统

学生成绩管理是每一个学校都会面临的一个问题,传统的管理模式已经明显到和时代不同步。通过我对当前学校成绩管理的需求和自己的实习经验整理出了一个能够满足大多数学校的学生成绩管理系统。本系统分为管理人员,教师和学生三种用户,每种用户各负责其一部分功能然后通过他们的整…

基于SSM的校园音乐点歌系统平台

目录 第一章 绪论 5 1.1 研究背景 5 1.2系统研究现状 5 1.3 系统实现的功能 6 1.4系统实现的特点 6 1.5 本文的组织结构 6 第二章开发技术与环境配置 7 2.1 Java语言简介 7 2.2JSP技术 8 2.3 MySQL环境配置 8 2.4 MyEclipse环境配置 9 2.5 mysql数据库介绍 9 2.6 B/S架构 9 第三…

学习笔记-WinRM

WinRM 什么是 WinRM Windows 远程管理(WinRM)是 WS-Management Protocol 的 Microsoft 实现。 WS-Management 协议是一种基于 SOAP 的防火墙友好协议&#xff0c;旨在用于系统查找和交换管理信息。WS-Management 协议规范的目的是为企业系统提供互操作性和一致性&#xff0c;其…

java---贪心---货仓选址(每日一道算法2022.11.5)

题目&#xff1a; 在一条数轴上有 N 家商店&#xff0c;它们的坐标分别为 A1∼AN。 现在需要在数轴上建立一家货仓&#xff0c;每天清晨&#xff0c;从货仓到每家商店都要运送一车商品。 为了提高效率&#xff0c;求把货仓建在何处&#xff0c;可以使得货仓到每家商店的距离之和…

二叉树的前中后序遍历(递归与迭代)

作者&#xff1a;~小明学编程 文章专栏&#xff1a;Java数据结构 格言&#xff1a;目之所及皆为回忆&#xff0c;心之所想皆为过往 目录 简介 前序遍历 递归法 迭代法 中序遍历 递归法 迭代法 后序遍历 递归法 迭代法 简介 前面学习二叉树的时候&#xff0c;已经学过…

关于深度学习高维矩阵的形象化理解

对于初次接触深度学习的小白来说&#xff0c;高维张量总是很难理解&#xff0c;在我理解高维张量的本质后&#xff0c;也理解了之前阻拦我理解的问题点&#xff0c;所以写下这篇博客&#xff0c;用常用的三个对张量操作的函数进行解释&#xff0c;希望对后面学习的人有所帮助。…

[buuctf]ciscn_2019_ne_5

解析 PWN题ciscn_2019_ne_5&#xff0c;第一步&#xff0c;查询版本保护等信息&#xff0c;命令checksec filename&#xff0c;32位windows文件&#xff0c;开启保护有RELRO&#xff0c;Stack&#xff0c;NX&#xff0c;PIE。 保护都是什么意思&#xff1a; 1.Arch&#xff1…
最新文章