首页 > 其他分享 >R语言使用ARIMA模型预测股票收益时间序列|附代码数据

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

时间:2023-10-25 23:56:57浏览次数:50  
标签:MA 预测 模型 代码 ARIMA 序列 我们

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

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

最近我们被客户要求撰写关于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模型进行时间序列预测

 

标签:MA,预测,模型,代码,ARIMA,序列,我们
From: https://www.cnblogs.com/tecdat/p/17788409.html

相关文章

  • R语言估计时变VAR模型时间序列的实证研究分析案例|附代码数据
    原文链接: http://tecdat.cn/?p=3364原文出处:拓端数据部落公众号 最近我们被客户要求撰写关于时变VAR模型的研究报告,包括一些图形和统计输出。加载R包和数据集 加载包后,我们将此数据集中包含的12个心情变量进行子集化:  mood_data<-as.matrix(symptom_data$data[,......
  • R语言使用马尔可夫链对营销中的渠道归因建模|附代码数据
    原文链接:http://tecdat.cn/?p=5383最近我们被客户要求撰写关于马尔可夫链的研究报告,包括一些图形和统计输出。在这篇文章中,我们看看什么是渠道归因,以及它如何与马尔可夫链的概念联系起来我们还将通过一个电子商务公司的案例研究来理解这个概念如何在理论上和实践上运作(使用R)。......
  • 代码沙盒
    场景:针对b端的一些系统,针对不同的客户需求,可能都对其进行适配,在标准的产品上做改造开发,但是这种模式不太好,可以在代码层面预留扩展点实现不同租户的自定义。但是针对租户自定义的代码,不能影响标准功能,所以需要其代码运行在一个沙盒中(设置起运行时间和内存大小) 实现方案:1.jav......
  • 代码随想录第一天 | 704. 二分查找 、 27. 移除元素
    https://leetcode.cn/problems/binary-search/第一眼看到题目的时候下意识直接搞了暴力搜索(一个一个对比),后来觉得时间复杂度太高了,就搞了二分法,之后再看文章,思路透彻了很多,因为我之前写二分法都是凭感觉,没有仔细琢磨过 https://leetcode.cn/problems/remove-element/帅!otto ......
  • 代码随想训练营的第十五天(Python)| 二叉树的前、中、后续遍历(各种花式遍历哈哈)
    前序遍历统一写法用None来区分遍历查找的节点和处理节点1、递归法classSolution:defpreorderTraversal(self,root:Optional[TreeNode])->List[int]:res=[]self.preorder(root,res)returnresdefpreorder(self,root,res):......
  • 如何将Python程序打包并保护源代码
    导言:在某些情况下,我们可能希望将Python程序打包成可执行文件,以便用户无法查看程序的源代码。这种需求通常出现在商业软件、数据分析工具或其他需要保护知识产权的场景中。本文将介绍如何使用PyInstaller工具来打包Python程序,并确保它可以执行和读取配置信息。第一步:安装PyInstal......
  • c语言代码练习37
    问:在一个杨氏矩阵中查找某个数#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intAyue(intarr[3][3],intk,introw,intcol){intx=0;inty=col-1;while(x<row&&y>=0){if(arr[x][y]>k)......
  • Nacos相关技术文档&Golang操作Nacos实现配置监听的代码
    Nacos相关技术文档Nacos中文文档~~~(三)Nacos开发教程之服务数据持久化(四)Nacos开发教程之SpringCloud集成服务注册(参考,后续用go实现)(五)Nacos开发教程之SpringCloud集成配置管理(参考,后续用go实现)(六)Nacos开发教程之后台系统使用~~~Mac-M1电脑本地使用docker搭建Nacos-Server参考:http......
  • 实战系列(一)Dubbo和Spring Cloud的区别,包含代码详解
    Dubbo和SpringCloud都是微服务架构中的重要框架,但它们的定位和关注点不同。Dubbo是阿里巴巴开源的一个高性能、轻量级的RPC框架,主要用于构建微服务之间的服务治理。而SpringCloud是基于SpringBoot的一个微服务架构开发工具,它提供了一系列的开发工具和服务,帮助开发者快......
  • 实战系列(二)MybatisPlus详细介绍,包含代码详解
    MybatisPlus是一个功能强大的MyBatis增强工具,它提供了丰富的特性来简化操作数据库的代码。它主要用于简化JDBC操作,节省开发时间,并能够自动化完成所有的CRUD代码。MybatisPlus官网:https://baomidou.com/1.MybatisPlus的基本功能提供丰富的CRUD方法,包括:insert、selectById......