r语言数据分析案例25-基于向量自回归模型的标准普尔 500 指数长期预测与机制分析

news2025/9/19 4:00:13

一、背景介绍

2007 年的全球经济危机深刻改变了世界经济格局,引发了一系列连锁反应,波及各大洲。经济增长停滞不前,甚至在某些情况下出现负增长,给出口导向型发展中国家带来了不确定性。实体经济受到的冲击尤为严重,生产成本上升,利润下降,实际经济价值缩水。相比之下,金融部门的投资活动激增,原因是在动荡的经济环境中寻求稳定和更高的回报。然而,金融投资的性质与实体经济有很大不同,实体经济的特点是复杂且往往不可预测的因素交织在一起。。。。。

二、研究现状

理解和掌握标准普尔 500 指数的变化规律,对于正确评估美国经济趋势、跟踪世界经济发展的源和流、参与全球市场套利和定价具有重要的现实意义。基于标准普尔 500 指数在金融市场中的重要地位,标准普尔 500 指数的预测受到研究人员的更多关注。

目前对标准普尔 500 指数的研究主要集中在短期预测上,使用不同的研究工具。例如,[1]在预测标准普尔 500 指数值时使用隐马尔可夫链方法和离散时间马尔可夫链方法,指出使用全样本数据和特征子样本时预测效果更好。。。。。。

三、数据集介绍和分析

3.1 数据分析

在这项研究中,选择了美国股票的标准普尔 500 指数进行预测分析,并初步选择开盘价、最高价、最低价和收盘价作为研究数据。

标准普尔 500 指数的数据收集时间为 1995 年 1 月 3 日至 2020 年 12 月 31 日,包括该期间内的交易日。

代码和数据

报告代码和数据

library(quantmod)
library(TTR)

data$Date <- as.Date(data$Date, format = "%Y/%m/%d")

# (VWAP)
data$VWAP <- with(data, rowSums(data[, c("High", "Low", "Close")]) / 3 * Volume / sum(data$Volume))
#### Convert data to xts objects
HTM_xts <- xts(HTM[, c("Open", "High", "Low", "Close")], order.by = HTM$Date)


plot(HTM_xts)
addLegend("topleft", legend.names = colnames(HTM_xts), lwd = 1)

3.2稳定性分析

该检验的原假设和备择假设为:

原假设:该序列存在单位根。

备择假设:该序列不存在单位根。

如果我们不能拒绝原假设,我们可以说该序列是非平稳的。

以收盘价为例,通过上图我们可以看出,该指数的均值和标准差都在增加,初步判断该序列是非平稳的。

表 1. 单位根检验的结果

Variable

ADF Statistic

p value

Dickey-Fuller Test

  Open  

-0.428

0.985

  High  

-0.250

0.990

  Low   

-0.525

0.981

Close

-0.442

0.984

 从表 1 中,我们观察到所有四个时间序列的 p 值都大于 0.05。因此,我们不能拒绝原假设,并得出时间序列是非平稳的结论。为了解决这个问题,我们需要对序列进行差分。

Variable

ADF Statistic

p value

Dickey-Fuller Test

Open

-18.943

0.010

High

-18.834

0.010

Low

-18.697

0.010

Close

-18.742

0.010

 四、方法理论

向量自回归(VAR)模型是自回归(AR)模型的扩展,是一种常用的计量经济模型[6]。它考虑了多个变量之间的相互依赖关系,比简单的 AR 模型更全面。。。。。

五、模型建立和分析

选择 1995-01-03 至 2020-11-16 期间作为训练集,预测 2020-11-17 至 2020-12-31 期间的数据。

AIC(n)

HQ(n)

SC(n)

FPE(n)

1

17.678

17.686

17.699

47606900.000

2

17.073

17.086

17.111

25986330.000

3

16.810

16.829

16.865

19983500.000

4

16.735

16.759

16.805

18523240.000

5

16.583

16.613

16.670

15910690.000

6

16.513

16.549

16.617

14837310.000

7

16.442

16.484

16.563

13826240.000

8

16.391

16.439

16.529

13139830.000

9

16.307

16.360

16.461

12075260.000

10

16.273

16.332

16.444

11673230.000

我们可以看到,不同的标准选择了相同的滞后长度(n=10)。当滞后长度超过 3 时,AIC 值的下降幅度变小,这表明在 3 之后添加更多的滞后观测值并不会显著提高模型拟合度。因此,按照选择 AIC 值较小的更简单模型的原则,我们选择 p=3 作为滞后阶数。

Estimation results for equation Open:

Open = Open.l1 + High.l1 + Low.l1 + Close.l1 + Open.l2 + High.l2 + Low.l2 + Close.l2 + Open.l3 + High.l3 + Low.l3 + Close.l3 + const

Estimate

Std.Error

t value

Pr(>|t|)

Open.l1

-0.840

0.018

-45.764

< 2e-16 ***

High.l1

-0.004

0.016

-0.229

0.819

Low.l1

0.043

0.014

3.079

0.00209 **

Close.l1

0.897

0.012

72.094

< 2e-16 ***

Open.l2

-0.309

0.020

-15.594

< 2e-16 ***

High.l2

-0.113

0.019

-6.031

1.72e-09 ***

Low.l2

0.001

0.016

0.072

0.943

Close.l2

0.820

0.018

44.881

< 2e-16 ***

Open.l3

-0.011

0.013

-0.852

0.395

High.l3

-0.108

0.016

-6.676

2.66e-11 ***

Low.l3

-0.017

0.014

-1.200

0.230

Close.l3

0.367

0.016

22.711

< 2e-16 ***

const

0.135

0.093

1.449

0.147

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 7.522 on 6499 degrees of freedom

Multiple R-Squared: 0.8063, Adjusted R-squared: 0.8059

F-statistic:  2254 on 12 and 6499 DF,  p-value: < 2.2e-16

Estimation results for equation High:

High = Open.l1 + High.l1 + Low.l1 + Close.l1 + Open.l2 + High.l2 + Low.l2 + Close.l2 + Open.l3 + High.l3 + Low.l3 + Close.l3 + const

Estimate

Std.Error

t value

Pr(>|t|)

Open.l1

-0.196

0.030

-6.592

4.69e-11 ***

High.l1

-0.680

0.026

-25.885

< 2e-16 ***

Low.l1

0.041

0.023

1.815

 0.06952 . 

Close.l1

0.698

0.020

34.741

< 2e-16 ***

Open.l2

0.133

0.032

4.164

3.16e-05 ***

High.l2

-0.538

0.030

-17.707

< 2e-16 ***

Low.l2

-0.018

0.026

-0.714

0.475

Close.l2

0.715

0.030

24.222

< 2e-16 ***

Open.l3

0.111

0.021

5.308

1.14e-07 ***

High.l3

-0.324

0.026

-12.385

 < 2e-16 ***

Low.l3

-0.015

0.022

-0.658

0.511

Close.l3

0.281

0.026

10.743

 < 2e-16 ***

const

0.391

0.151

2.592

0.00955 **

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 12.15 on 6499 degrees of freedom

Multiple R-Squared: 0.3167, Adjusted R-squared: 0.3154

F-statistic:   251 on 12 and 6499 DF,  p-value: < 2.2e-16

 模型检验

为了确保模型已经捕获了数据中的所有方差和模式,我们需要测试残差项中是否存在剩余相关性。

Portmanteau Test (asymptotic)

Chi-squared = 850.9

 df = 0

 p-value < 2.2e-16

非常小的 p 值表明拒绝了无自相关的原假设。这是一个信号,表明需要增加滞后长度。我们可以考虑在 VAR 模型中选择更高的滞后阶数,以使残差中的自相关在很大程度上被消除。以“Close”为例,可以看出模型的预测性能不是很令人满意(见图 5)。

comparison_df <- data.frame(
  date = forecast_df$date,
  forecasted = forecast_df$close,
  actual = test_o$Close
)
comparison_df

ggplot(comparison_df, aes(x = date)) +
  geom_line(aes(y = forecasted, color = "Forecasted")) +
  geom_line(aes(y = Close, color = "Actual")) +
  labs(x = "Date", y = "Close Value", color = "Data") +
  scale_color_manual(values = c("Forecasted" = "blue", "Actual" = "red")) +
  theme_minimal()+
  theme(panel.border = element_rect(color = "black", fill = NA),  
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank())

四个指数的预测误差在 50 左右。

Open

High

Low

Close

RMSE

54.559

54.141

57.482

58.794

 可视化结果如下

###plot
rmse_open <- 54.55896
rmse_high <- 54.14115
rmse_low <- 57.48235
rmse_close <- 58.79398


rmse_data <- data.frame(
  RMSE = c(rmse_open, rmse_high, rmse_low, rmse_close),
  Type = c("Open", "High", "Low", "Close")
)


barplot(rmse_data$RMSE, 
        names.arg = rmse_data$Type, 
        main = "RMSE Values",
        xlab = "Type",
        ylab = "RMSE",
        col = rainbow(length(rmse_data$RMSE))) 


text(x = 1:length(rmse_data$RMSE), 
     y = rmse_data$RMSE, 
     label = round(rmse_data$RMSE, 2), 
     pos = 3, 
     cex = 0.8, 
     col = "black",
     xpd = TRUE) 

接下来,使用欧美汇率数据对 S&P 500 股票价格和其他特征进行多元线性回归:

Call:

lm(formula = dataset$UR_USD Close ~ log_Open + log_High + log_Low +

    log_Close, data = dataset)

Residuals:

Min

1Q

Median

3Q

Max

-0.48796

-0.09936

-0.02465

0.08142 

0.48518

Coefficients:

Estimate

Std. Error

t value

Pr(>|t|)

(Intercept) 

4.80613   

0.05312 

90.480

< 0.0000 ***

log_Open    

0.51837   

0.61270  

0.846            

0.397575

log_High   

-2.27459   

0.66081 

-3.442            

0.0006 ***

log_Low     

1.98556   

0.56573  

3.510            

0.000453 ***

log_Close 

-0.65925   

0.59302

-1.112            

0.266336

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1658 on 4297 degrees of freedom

Multiple R-squared:  0.4693, Adjusted R-squared:  0.4689

F-statistic: 950.1 on 4 and 4297 DF,  p-value: < 0.00000000000000022

从上述模型拟合结果可以看出,去除对数后的每日最高价和每日最低价是最显著的水平,因此从理论上讲,它们对欧美汇率有影响。 

六、结论

在这项研究中,VAR 模型被用于对标准普尔 500 指数的开盘价、最高价、最低价和收盘价进行多变量预测。然而,我们的分析表明,虽然 VAR 模型在捕捉一些变量之间的线性关系方面表现良好,但它可能无法完全捕捉非线性驱动因素的影响。随后,我们使用欧美汇率数据,结合标准普尔 500 股票和其他特征的数据,对数据进行多元线性回归和对数处理,最终结果表明,标准普尔 500 指数的每日最高价和最低价对欧元兑美元汇率有显著影响。

在未来的实验过程中,可以选择特征进行进一步的影响分析,如脉冲响应和方差分解等,这些可以继续探索影响因素,同时为经济投资提供一定程度的指导。

七、参考文献

[1]Hashemi, Ray R., et al. Extraction of the Essential Constituents of the S&P 500 Index. 2017 international conference on computational science and computational intelligence (CSCI). IEEE, 2017.

[2]Sukparungsee, S. . A comparison of s&p 500 index forecasting models of arima, arima with garch-m and arima with e-garch.International Journal of Technical Research and Applications,32,2015.

[3]K.J.M. Cremers. Stock return predictability. a Bayesian model selection perspective. Rev. Financ. Stud,15(4), 1223–1249,2002.

[4]Wang F .Predicting S&P 500 Market Price by Deep Neural Network and Enemble Model[J].E3S Web of Conferences, 2020.DOI:10.1051/e3sconf/202021402040.

[5]G. M. Siddesh,et al.A Long Short-Term Memory Network-Based Approach for Predicting the Trends in the S&P 500 Index.Journal of The Institution of Engineers.1(105),19-26,2024.

数据和代码

代码和完整报告

创作不易,希望大家多多点赞收藏和评论!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1822524.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python学习笔记8:入门知识(八)

前言 本篇是元组的知识点学习以及知识点的补充 元组 概念 不可变的列表&#xff0c;叫做元组。 在之前列表的特性中&#xff0c;我们就说过列表是可变的&#xff0c;但是在实际使用过程中&#xff0c;我们有时候仍然需要一系列不可变的元素&#xff0c;这个时候就需要元组出…

每日5题Day24 - LeetCode 116 - 120

每一步向前都是向自己的梦想更近一步&#xff0c;坚持不懈&#xff0c;勇往直前&#xff01; 第一题&#xff1a;116. 填充每个节点的下一个右侧节点指针 - 力扣&#xff08;LeetCode&#xff09; /* // Definition for a Node. class Node {public int val;public Node left;…

万字长文爆肝Spring(一)

Spring_day01 今日目标 掌握Spring相关概念完成IOC/DI的入门案例编写掌握IOC的相关配置与使用掌握DI的相关配置与使用 1&#xff0c;课程介绍 对于一门新技术&#xff0c;我们需要从为什么要学、学什么以及怎么学这三个方向入手来学习。那对于Spring来说: 1.1 为什么要学? …

the histogram of cross-entropy loss values 交叉熵损失值的直方图以及cross-entropy loss交叉熵损失

交叉熵损失值的直方图在机器学习和深度学习中有几个重要的作用和用途&#xff1a; 评估模型性能: 直方图可以帮助评估模型在训练数据和测试数据上的性能。通过观察损失值的分布&#xff0c;可以了解模型在不同数据集上的表现情况。例如&#xff0c;损失值分布的形状和范围可以反…

2024 Idea最新激活码

idea的激活与安装 操作如下&#xff1a; ① 打开网站&#xff1a;https://web.52shizhan.cn 切换到&#xff1a;激活码&#xff0c;点击获取 ② 这个时候就跳转到现成账号页面&#xff0c;点击获取体验号&#xff0c;如图 ③ 来到了获取现成账号的页面了。输入你的邮箱账号即…

uni app 自定义 带popup弹窗的input组件

工作需要。自定义了个带popup弹窗的input组件。此组件满足个人需求&#xff0c;不喜勿喷。应该可以看明白怎么回事&#xff0c;也能自己改改&#xff0c;所以就不要联系了&#xff0c;点赞收藏就好 <template><view class"dialog_main"><input v-mod…

【第七篇】SpringSecurity核心组件和核心过滤器

一、SpringSecurity中的核心组件 在SpringSecurity中的jar分为4个,作用分别为 jar作用spring-security-coreSpringSecurity的核心jar包,认证和授权的核心代码都在这里面spring-security-config如果使用SpringSecurity XML命名空间进行配置或者SpringSecurity的<br />J…

Python 使用 Tkinter库 设置 tkinter ttk 框架的背景颜色

Tkinter 设置 tkinter ttk 框架的背景颜色 在本文中&#xff0c;我们将介绍如何使用 Tkinter 在 tkinter ttk 框架中设置背景颜色。Tkinter 是 Python 中常用的 GUI 工具包&#xff0c;ttk 则是 Tkinter 中的一个模块&#xff0c;提供了一套更加现代化的控件。 Tkinter 简介 …

ESP32基础应用之esp32连接腾讯云并使用微信小程序控制的智能灯

文章目录 1. 项目简介1.1 功能接收1.2 使用资源1.3 测试平台 2 腾讯云物联网开发平台3 esp32设备开发3.1 准备参考例程3.2 vscode平台创建测试工程3.3 修改工程 问题总结使用PowerShell命令行终端生成的二维码不能用 1. 项目简介 1.1 功能接收 实现腾讯云创建项目与设备&…

泰坦尼克号数据集机器学习实战教程

泰坦尼克号数据集是一个公开可获取的数据集&#xff0c;源自1912年沉没的RMS泰坦尼克号事件。这个数据集被广泛用于教育和研究&#xff0c;特别是作为机器学习和数据分析的经典案例。数据集记录了船上乘客的一些信息&#xff0c;以及他们是否在灾难中幸存下来。以下是数据集中主…

微信小程序查分易如何使用?

期末马上到了&#xff0c;老师们又开始为发放成绩而头疼了&#xff0c;堆积如山的试卷&#xff0c;密密麻麻的分数&#xff0c;还有那些不断响起的家长电话&#xff0c;真是让人心烦。别担心&#xff0c;今天就让我来介绍一个让老师“偷懒”神器——查分易微信小程序 第一步&am…

Qt创建静态库及静态库使用

Qt创建静态库及静态库使用 1. 创建一个库文件 选择静态库 将需要打包的.h 和.cpp文件添加到程序中&#xff0c; 在编译器版本下的debug和release模式下分别编译&#xff08;右键项目&#xff0c;点击“qmake”,再点击“构建”&#xff09;后&#xff0c;在对应的的build目录下…

区间分割求解方程

本文实现了基于mpi4py的多进程算法 mpi不过多介绍&#xff0c;某些函数的用法也不是介绍范围&#xff0c;这里只给出怎么实现多进程的方程求根算法。区间划分求解方程&#xff0c;在串行程序里&#xff0c;二分法是非常经典的算法&#xff0c;现在对其进行拓展&#xff0c;实现…

Kubrnetes APIServe 监控

kube-apiserver组件监控指标及大盘使用说明_容器服务 Kubernetes 版 ACK(ACK)-阿里云帮助中心 kube-apiserver组件提供了Kubernetes的RESTful API接口&#xff0c;使得外部客户端、集群内的其他组件可以与ACK集群交互。本文介绍kube-apiserver组件的监控指标清单、大盘使用指导…

C# Winform 侧边栏,切换不同页面

在项目中我们经常遇到需要在主界面上切换不同子页面的需求&#xff0c;常用做法是左侧显示子页面菜单&#xff0c;用户通过点击左侧菜单&#xff0c;实现右边子页面的展示。 实例项目实现&#xff1a; 项目左侧侧边栏实现FlowLayoutPanel使用显示不同子窗体 实例链接&#xf…

苹果设备上的livp格式是什么?怎么转换?

livp格式是苹果公司推出的一种图片格式&#xff0c;它允许用户在iOS设备上拍摄的照片中包含声音和动作&#xff0c;从而创造出一种动态的照片效果。 livp格式的照片不仅记录了图像&#xff0c;还记录了拍摄前后1.5秒的音频和视频&#xff0c;使得照片能够“活”起来。 ✨livp…

植物大战僵尸(杂交版)最新版V2.1来袭!

【新手指导】最新版v2.1来袭 1.闪退怎么办&#xff1f; 答:窗口模式可以解决大部分问题。输入法转换成英文也可以。最后一种办法管理员运行&#xff0c;再后台可运行&#xff0c;即便不是窗口也不会闪退&#xff0c;亲测有效 2.哪里下载&#xff1f; 答&#xff1a;夸克网盘htt…

【Android】实现Recyclerview的Item可以左右侧滑动的效果

项目需要 使用Recyclerview进行列表的数据加载的时候&#xff0c;需要对这个Item进行左右滑动进行操作的功能&#xff0c; 比如这样 需求实现 上面图来源于 https://github.com/anzaizai/EasySwipeMenuLayout 这是一个可以用来进行列表左滑、右滑的项目&#xff0c;可以集…

盒马鲜生礼品卡如何使用?

盒马鲜生的礼品卡除了在门店用以外&#xff0c;还有什么用处啊 毕竟家附近的盒马距离都太远了&#xff0c;好多卡最后都闲置下来了&#xff0c;而且以前都不知道盒马卡还会过期&#xff0c;浪费了好多 还好最近发现了 盒马鲜生礼品卡现在也能在收卡云上兑现了&#xff0c;而且…