文本情绪指数与上证指数的VAR模型构建

news2024/11/26 11:58:52

      大家好,我是带我去滑雪!

      在前一篇文章中,笔者爬取了东方财富网上证指数股吧的495775条评论数据,并对文本进行了情感分析,基于自制的股票情感词典,使用了深度学习模型对爬取的文本数据进行分类标注,将正向文本标注为1,将负向文本标注为-1,将同一天的不同时段的文本标注进行加总,得到该天的情绪指数,而上证指数的收盘价格利用python获取,数据展示如下:

     由于情绪指数与上证指数的数值差距较大,后续将情绪指数总体加上2500,使其达到同一水平。下面利用数据构建VAR模型,开始代码实战。

目录

(1)导入模块

(2)导入数据

(3)平稳性检验

(4)差分与协整检验

(5)格兰杰因果检验

(6)VAR模型构建

 (7)单位根检验

 (8)脉冲响应分析


(1)导入模块

import statsmodels.api as sm
import statsmodels.stats.diagnostic
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from statsmodels.tsa.stattools import adfuller as ADF
from statsmodels.tsa.stattools import grangercausalitytests
plt.rcParams ['font.sans-serif'] ='SimHei'               #显示中文
plt.rcParams ['axes.unicode_minus']=False   

(2)导入数据

# 读取数据
train_data = pd.read_csv(r'E:\工作\硕士\博客\博客粉丝问题\情绪指数与上证指数VAR模型\data.csv',encoding="ANSI")

# 确保数据是数值型
train_data['情绪指数'] = pd.to_numeric(train_data['情绪指数'], errors='coerce')
train_data['上证指数'] = pd.to_numeric(train_data['上证指数'], errors='coerce')

# 填补或移除缺失值
train_data.dropna(inplace=True)

(3)平稳性检验

def check_station(train_data, column, alpha=0.05):
    """
    参数说明:
    train_data:原始数据
    column:要检验的列
    alpha:置信区间,默认为0.05
    返回结果:
    返回原始数据折线图、平稳性检验结果
    """
    data_series = train_data[column]
    plt.figure(figsize=(14, 5),dpi=300)  # 设置图表大小
    plt.plot(data_series)
    plt.title(f'{column} 序列图')

    print("*如数据围绕某一常数上下波动,没有上升或下降的趋势,即可认为是平稳序列。")
    data_adf = ADF(data_series)  # 单位根检验,及特征根检验,序列平稳,就不存在单位根,检验结果的P值越小越好
    if data_adf[1] < alpha:
        result = f"{column} 序列是弱平稳序列,P值为:{round(float(data_adf[1]), 4)}"
    else:
        result = f"{column} 序列不是弱平稳序列,P值为:{round(float(data_adf[1]), 4)}"
    return result

# 对每个列进行平稳性检查
for column in train_data.columns:
    result = check_station(train_data, column)
    print(result)

输出结果:

*如数据围绕某一常数上下波动,没有上升或下降的趋势,即可认为是平稳序列。
情绪指数 序列是弱平稳序列,P值为:0.0
*如数据围绕某一常数上下波动,没有上升或下降的趋势,即可认为是平稳序列。
上证指数 序列不是弱平稳序列,P值为:0.3602

(4)差分与协整检验

def coint_pvalue_matrix(train_data):
    """
    参数说明:
    train_data:原始数据,为dataframe格式,每一列代表一个变量:
    返回结果:
    返回协整检验的p_value,p_value越低,越显著。
    """
    train_data=train_data
    n=len(train_data.columns)
    #创建一个空的矩阵
    coint_pvalue=np.ones((n,n))
    #将矩阵转换为dataframe格式
    coint_pvalue=pd.DataFrame(coint_pvalue)
    coint_pvalue.index=train_data.columns
    coint_pvalue.columns=train_data.columns
    for column_1 in train_data.columns:
        for column_2 in train_data.columns:
            #协整检验会返回三个值,第二值为p值,p值越小,说明存在长期协整关系
            if column_1!=column_2:
                result = sm.tsa.stattools.coint(train_data[column_1],train_data[column_2])
                coint_pvalue.loc[column_1,column_2]=round(result[1],4)#pd.loc[index,column]
    return coint_pvalue
coint_pvalue=coint_pvalue_matrix(train_data)
print(coint_pvalue)#由于序列上证指数序列不平稳,需要差分,且不存在长期协整关系

(5)格兰杰因果检验

#差分后序列平稳,进行格兰杰因果检验
def granger_pvalue_matrix(train_data,test="ssr_chi2test",lags=10):
    """
    参数说明:
    train_data:原始数据,为dataframe格式,每一列代表一个变量:第一列为Y,第二列为X,检验X是否为Y的格兰杰原因:
    lags:为最大滞后阶数
    test:格兰杰检验方法,一共会有4个p值,默认选用ssr_chi2test的p值(其他可选项lrtest,params_ftest,ssr_ftest)
    返回结果:
    返回格兰杰检验的p_value,p_value越低,越显著。说明X是Y的格兰杰原因。
    """
    train_data=train_data
    n=len(train_data.columns)
    #初始化一个dataframe格式
    granger_pvalue=pd.DataFrame(np.zeros((n,n)))
    granger_pvalue.index=train_data.columns
    granger_pvalue.columns=train_data.columns
    for column_1 in granger_pvalue.index:
        for column_2 in granger_pvalue.columns:
            result = grangercausalitytests(train_data[[column_1,column_2]],maxlag=lags,verbose=False)#verbose=False不打印结果
            p_values = [round(result[i+1][0][test][1],4) for i in range(lags)]
            min_p_value = np.min(p_values)#一共滞后10阶,没滞后1阶都会有一个p值,获取最小的那个p值
            granger_pvalue.loc[column_1,column_2]=min_p_value
    granger_pvalue.columns = [column_2 + '_x' for column_2 in granger_pvalue.columns]
    granger_pvalue.index = [column_1 + '_y' for column_1 in granger_pvalue.index]
    return granger_pvalue
granger_pvalue=granger_pvalue_matrix(train_data)
print(granger_pvalue)

(6)VAR模型构建

#VAR模型滞后阶数不方便单独通过图表判断,一般都是设置一个最大滞后项,然后运用AIC信息准则的方式来判断,AIC值越小,模型拟合越优。
model = sm.tsa.VAR(train_data)
result=model.fit(maxlags=10, method='ols', ic="aic", trend='c', verbose=False)#ic="aic"系统会根据aic准则在(1-10)中自动选取最优模型
print(result.summary())

 输出结果:

 (7)单位根检验

def root_ar(roots,maxlim=1.5):
    """
    参数说明:
    roots:VAR模型返回的模型根。
    maxlim:坐标轴的最大值
    返回结果:
    AR根图,如果根都在单位圆内,则为平稳模型。
    """
    #绘制单位圆
    x=np.linspace(-1,1,400)
    y=np.linspace(-1,1,400)
    [X,Y]=np.meshgrid(x,y)
    Z=X*X+Y*Y
    plt.figure(figsize=(5,5))
    plt.contour(X,Y,Z,1)
    plt.title("Inverse Roots of AR")
    #提取模型根的实部和虚部
    roots_real=roots.real
    roots_imag=roots.imag
    plt.xlim(-maxlim,maxlim)
    plt.ylim(-maxlim,maxlim)
    #画中间十字线
    h_x=np.linspace(0,0,400)
    h_y=np.linspace(-maxlim,maxlim,400)
    plt.plot(h_y,h_x,"b--")
    plt.plot(h_x,h_y,"b--")
    """
    VAR模型库,对roots的解释如下:
    The roots of the VAR process are the solution to (I - coefs[0]*z - coefs[1]*z**2 … - coefs[p-1]*z**k_ar) = 0. 
    Note that the inverse roots are returned, 
    and stability requires that the roots lie outside the unit circle.
    根在模型外说明模型是平稳的,这和传统的AR根图画法有很大不同;
    因此我们将其根转换成其倒数,这样根就会落在单位圆内。
    """
    #将根转化成根的倒数(根为复数)
    Inverse_real=roots_real/(np.abs(roots)*np.abs(roots))#abs即可以算绝对值,也可以算复数的模
    Inverse_imag=-roots_imag/(np.abs(roots)*np.abs(roots))
    plt.plot(Inverse_real,Inverse_imag,"ro")
    plt.savefig(r'E:\工作\硕士\博客\博客粉丝问题\接单34-1200元\情绪指数与上证指数VAR模型\AR单位根检验.png',
            bbox_inches ="tight",
            pad_inches = 1,
            transparent = True,
            facecolor ="w",
            edgecolor ='w',
            dpi=300,
            orientation ='landscape')
    
    return None
roots=result.roots
root_ar(roots,maxlim=1.5)

#从AR根图来看,所有根都落在单位圆内,因此我们认为模型是平稳的。

输出结果:

 

说明模型是有效的。 

 (8)脉冲响应分析

#绘制脉冲响应图
irf = result.irf(15)
irf.plot(orth=False)
plt.savefig(r'E:\工作\硕士\博客\博客粉丝问题\情绪指数与上证指数VAR模型\脉冲响应图.png',
            bbox_inches ="tight",
            pad_inches = 1,
            transparent = True,
            facecolor ="w",
            edgecolor ='w',
            dpi=300,
            orientation ='landscape')

输出结果: 

需要数据集的家人们可以去百度网盘(永久有效)获取:

链接:
提取码:2138 


更多优质内容持续发布中,请移步主页查看。

   点赞+关注,下次不迷路!

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

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

相关文章

24V 350W开关电源电路原理图+PCB工程文件 UC3843AD lm193芯片

资料下载地址&#xff1a;24V 350W开关电源电路原理图PCB工程文件 UC3843AD lm193芯片 1、原理图 2、PCB

算法题 — 接雨水

给定 n 给非负整数&#xff0c;表示每个宽度为 1 的柱子的高度图&#xff0c;计算按照此排列的柱子&#xff0c;下雨之后能能接到多少雨水。 输入&#xff1a;height [0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0, 1, 0, 2, 1,…

有了这5款在线去除图片水印工具,妈妈再也不用担心图片水印问题了

Inpaint Inpaint是一款功能强大的图像处理软件&#xff0c;主要用于去除图片中的水印、杂物等不需要的元素。它的主要功能包括&#xff1a; 去除水印&#xff1a;用户可以通过Inpaint轻松去除图片中的水印。只需在软件界面中打开带有水印的图片&#xff0c;然后使用标记工具选…

深入探索Java开发世界:Redis~类型分析大揭秘

文章目录 深入探索Java开发世界&#xff1a;Redis~类型分析大揭秘一、数据结构类型二、分布式锁类型三、事物命令类型四、事物三大特性类型 深入探索Java开发世界&#xff1a;Redis~类型分析大揭秘 Redis数据库基础知识&#xff0c;类型知识点梳理~ 一、数据结构类型 Redis是一…

Pycharm导入内置库或者第三方库时标红,no module named ‘xxx‘

各版本的Pycharm都有可能会出现这样的问题&#xff1a;有些时候内置库和第三方库被标红为“No module named xxx”&#xff0c;而自己的库却能被正常导入。 本人是在使用远程ssh解释器时遇到的。实际运行该代码文件时&#xff0c;能够正常运行&#xff08;若不能正常运行则可能…

Stop Motion Studio Pro for Mac:Mac上的动画大师,让你的创意无限流动!

Stop Motion Studio Pro for Mac为创作者们提供了一个直观且易于使用的平台&#xff0c;让他们能够将静态的物体和场景转化为生动有趣的定格动画。&#x1f3a5; 无论是制作简单的玩具动画&#xff0c;还是复杂的电影级场景&#xff0c;这款软件都能轻松应对&#xff0c;让你的…

浅谈Mysql Innodb存储引擎

一、Mysql整体架构 二、MySQL 5.7 支持的存储引擎 类型 描述 MyISAM 拥有较高的插入、查询速度&#xff0c;但不支持事务 InnoDB 5.5版本后Mysql的默认数据库&#xff0c;5.6版本后支持全文索引&#xff0c;事务型数据库的首选引擎&#xff0c;支持ACID事务&#xff0c;支…

真正的智慧——诺:九九归一,以简驭繁

一、九九归一 国学道家中有物极必反的理念&#xff0c;所以&#xff0c;中国人有九九归一的说法&#xff0c;在基本数字中&#xff0c;九是大数&#xff0c;九九之意&#xff0c;相当于后天八卦一样&#xff0c;相当于一个系统完成了一次大的循环&#xff0c;九九归一&#xf…

数据资产赋能企业决策:通过精准的数据分析和洞察,构建高效的数据资产解决方案,为企业提供决策支持,助力企业实现精准营销、风险管理、产品创新等目标,提升企业竞争力

一、引言 在信息化和数字化飞速发展的今天&#xff0c;数据已成为企业最宝贵的资产之一。数据资产不仅包含了企业的基本信息&#xff0c;还蕴含了丰富的市场趋势、消费者行为和潜在商机。如何通过精准的数据分析和洞察&#xff0c;构建高效的数据资产解决方案&#xff0c;为企…

【Confluence】markdown格式转换为Confluence

简单的文本可以使用网站来快速转换&#xff0c;但是发现很多格式不能正确转换&#xff0c;所以研究了一个Py的方法来实现&#xff0c;如下&#xff1a; 安装Py插件 本方法主要借用markdown2 来实现&#xff0c;开始之前需要先安装一些库。 pip install markdown2 beautiful…

葡萄串目标检测YoloV8——从Pytorch模型训练到C++部署

文章目录 软硬件准备数据准备数据处理脚本模型训练模型部署数据分享软硬件准备 训练端 PytorchultralyticsNvidia 3080Ti部署端 fastdeployonnxruntime数据准备 用labelimg进行数据标注 数据处理脚本 xml2yolo import os import glob import xml.etree.ElementTree as ETxm…

如何在写代码中找到乐趣

平时我们写代码呢&#xff0c;多数情况都是流水线式写代码&#xff0c;基本就可以实现业务逻辑了。 如何在写代码中找到乐趣呢&#xff0c;我觉得&#xff0c;最好的方式就是&#xff1a;使用设计模式优化自己的业务代码。 参考资料&#xff1a; 实战&#xff01;工作中常用到…

【C++进阶9】异常

一、C语言传统的处理错误的方式 终止程序&#xff0c;如assert 如发生内存错误&#xff0c;除0错误时就会终止程序返回错误码 需要程序员自己去查找对应的错误 z如系统的很多库的接口函数都是通 过把错误码放到errno中&#xff0c;表示错误 二、C异常概念 异常&#xff1a;函…

企业出海的浪潮下,如何利用亚马逊云(AWS)更好地应对?

在全球化的浪潮下&#xff0c;越来越多的企业开始将目光投向国际市场。在这个数字化时代&#xff0c;云计算技术成为企业出海的必备利器之一。AWS云作为全球领先的云服务提供商&#xff0c;凭借其卓越的性能和完善的服务体系&#xff0c;成为众多企业出海的首选。 一、出海为什…

【Mybatis 与 Spring】事务相关汇总

之前分享的几篇文章可以一起看&#xff0c;形成一个体系 【Mybatis】一级缓存与二级缓存源码分析与自定义二级缓存 【Spring】Spring事务相关源码分析 【Mybatis】Mybatis数据源与事务源码分析 Spring与Mybaitis融合 SpringManagedTransaction&#xff1a; org.mybatis.spri…

小马搬运物品-第13届蓝桥杯省赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第89讲。 小马搬运物品&…

Redis 哨兵主备切换的数据丢失问题应该怎么解决?

引言&#xff1a;Redis作为一种高性能的内存数据库&#xff0c;广泛应用于分布式系统中。为了保证服务的高可用性&#xff0c;Redis提供了哨兵&#xff08;Sentinel&#xff09;机制&#xff0c;用于监控和管理Redis实例的自动故障恢复。然而&#xff0c;即使在哨兵的保护下&am…

计算机视觉中一些特殊的安装包

opencv-python Could not build wheels for opencv-python which use PEP 517 and cannot be installed 安装pip install opencv-python 输出 Collecting opencv-pythonDownloading https://files.pythonhosted.org/packages/77/f5/49f034f8d109efcf9b7e98fbc051878b83b2f02a1…

Windows宝塔面板部署ThinkPHP8.0创建Vue项目案例

安装ThinkPHP8.0 登录宝塔面板&#xff0c;创建一个站点。 输入composer代码&#xff0c;执行完成后自动创建TP目录 composer create-project topthink/think tp 网站目录设置为tp&#xff0c;运行目录设置为public 设置PHP版本为8.0以上&#xff0c;不然会出现下面的报错代…

【MotionCap】ImportError: cannot import name ‘packaging‘ from ‘pkg_resources‘

ImportError: cannot import name ‘packaging’ from ‘pkg_resources’ 降低setuptools的版本 参考大神:(ai-mocap) zhangbin@ubuntu-server:~/proj/04_mocap/third-party$ pip install -e neural_renderer