Python数据分析案例31——中国A股的月份效应研究(方差分析,虚拟变量回归)

news2024/9/24 9:20:24

案例背景

本次案例是博主本科在行为金融学课程上做的一个小项目,最近看很多经管类的学生作业都很需要,我就用python来重新做了一遍。不弄那些复杂的机器学习模型了,经管类同学就用简单的统计学方法来做模型就好。


研究目的

有效市场假说是现代金融证券市场的理论基础之一,根据这一理论,投资者买卖股票市场是很难通过主动管理去获得超额收益,而且平均时间段的收益应该也没有显著性的差异。​

但在我国市场明显存在着一个春节效应,即股市二月份的收益率一般远要高于一年中其他月份的收益率。而且中国股市还有一句老话,叫做五穷六绝七翻身,意思是五月六月的收益率低,而七月的收益率就有所上升。国外学者研究中,一些成熟的股票市场也会出现着这样一种季节性的或是周末性的效应​。这种违背了有效市场假说的现象,一般应该与人的心理会有联系,研究范围属于行为金融学范围。

本文以上证综合指数为例,选取收盘价作为样本数据,对其进行实证分析研究,检验中国股市是否呈现在了月份效应,根据这一分析,可以对股票投资策略上提出一定的建议​。


数据

既然研究中国股市,那就用最有代表性的A股上证指数吧,十多年了还是3000点不保.....

使用akshare的api接口进行获取数据,当然本项目的全部代码和数据文件还是可以这样获取,需要的同学可以看看:数据


代码实现

导入包:

import akshare as ak
import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
import seaborn as sns 
 
%matplotlib inline
plt.rcParams['font.sans-serif'] = ['KaiTi']  #中文
plt.rcParams['axes.unicode_minus'] = False   #负号

数据获取 

然后获取上证指数的数据 

# 获取上证指数的日K线数据
df_300= ak.stock_zh_index_daily(symbol="sh000001")
df_300 

##储存

df_300.to_excel('data.xlsx',index=False)

换成别的数据文件都可以,别的股票或者指数....


 数据转化

要换成自己的数据文件就再读取一遍就好了,命名为df_300,后面一样用。

既然研究月份,那么得需要先计算每个月的收益率,转化日K为月份

# 转换日期格式并设置为索引
df_300['date'] = pd.to_datetime(df_300['date'])
df_300.set_index('date', inplace=True)
df=df_300.resample('M').ffill()

 使用每个月的收盘价

df['monthly_return']=df['close'].pct_change().fillna((0))
df

最后一列就是每个月的收益率了,但是这样一条数据不直观,这样看比较好:
 

data=pd.DataFrame()
data['monthly_return']=df['monthly_return']
data['year'] = df.index.year
data['month'] = df.index.month
data = data.pivot_table(index='year', columns='month', values='monthly_return').iloc[1:-1,:]
data

这样就可以清楚地看见每年每个月的收益率了。

描述性统计

描述性统计也很方便:

data.describe()

 

每个月的收益率和均值方差,一目了然。

简单做个t检验,来看看哪几个月的收益率存在显著性差异

import scipy.stats as stats
for i in range(len(data.columns)):
    for j in range(i + 1, len(data.columns)):
        t_statistic, p_value = stats.ttest_ind(data[data.columns[i]], data[data.columns[j]])
        if p_value < 0.05:
            print(f"0.05的显著性水平下,{data.columns[i]}月和{data.columns[j]}月有显著性差异")

画出每个月的箱线图:

#查看特征变量的箱线图分布
columns = data.columns.tolist() # 列表头
dis_cols = 4                   #一行几个
dis_rows = len(columns)
plt.figure(figsize=(4 * dis_cols, 4 * dis_rows))
 
for i in range(len(columns)):
    plt.subplot(dis_rows,dis_cols,i+1)
    sns.boxplot(data=data[columns[i]].to_numpy(), orient="v",width=0.5)
    plt.xlabel(columns[i],fontsize = 20)
plt.tight_layout()
plt.show()

这样看不直观,数据变一下画小提琴图:
 

df['month']=df.index.month
df1=df[['month','monthly_return']]

画图 

fig = plt.figure(figsize=(14, 6), dpi=256)  # 指定绘图对象宽度和高度
ax = sns.violinplot(x='month',y='monthly_return',width=0.8,saturation=0.9,lw=0.8,palette="Set2",orient="v",inner="box",data=df1)
#plt.xlabel((['月份' + str(i+1) for i in range(13)]),fontsize=10)
plt.ylabel('monthly_return', fontsize=16)
plt.show()

可以看到基本上每个月的收益率均值都是0附近,5月和8月的方差较大,这和历史上的某些“股灾”“金融风暴”有关。


方差分析

我们要研究的是不同月份之间的股市收益率差异,就是分类型自变量是否对数值型因变量有显著性影响,那么就是方差分析的范围了。

原假设:不同月份之间的股市收益率相同。

备择假设:不同月份之间的股市收益率存在显著性不同。

先导入包:
 

import statsmodels.api as sm
from statsmodels.formula.api import ols
from statsmodels.stats.multicomp import pairwise_tukeyhsd

进行方差分析:

df1['month']= df1['month'].astype('category')
model = ols('monthly_return ~ month', data=df1).fit()
anova_results = sm.stats.anova_lm(model, typ=1)
anova_results

 

我们可以看到F值只有0.61,p值为0.8,远远不显著,说明每个月的收益率没有显著性差异。

接受原假设,即不能说明每个月的收益有显著性差异。

得到这个结果我是很惊讶的,因为我本科做的是显著的呀,奇怪,从2019年到2023年就变得不显著了???

我不死心,用虚拟变量回归的方法再试了一次。


虚拟变量回归

虚拟变量就是0和1这种哑变量,计算机里面又叫独立热编码,如果我们想表示12个月份,那么就生成一个12维的X,表示1月就第一个x为1,其他为0,表示2月就第二个x为1,其他为0.....以此类推。然后用这些X去和收益率y进行回归。
注意,在实际操作中只能生成k-1个变量,不然会陷入“虚拟变量陷阱”,即形成完美的多重共线性。

所以我删除了一月,用一月作为基准月份:

# 创建月份虚拟变量
df1 = pd.get_dummies(df1, columns=['month'], prefix='month', drop_first=True)

# 构建线性回归模型,一月作为基准月份被省略
formula = 'monthly_return ~ ' + ' + '.join([col for col in df1.columns if col.startswith('month_')])
model = ols(formula, data=df1).fit()

# 输出模型结果
model_summary = model.summary()
model_summary

只看F值,好吧还是不显著,F值对应的p有0.8,远远不显著 。再看每个虚拟变量的t值,也没有一个显著。。。丫的,我不甘心,但是这就是现实。。我也没办法变得显著了。


之后我还尝试使用沪深300指数,我发现也是不显著。这说明,不同月份之间的A股收益率确实不存在显著性差异,那些幻想说2月份春节收益率高的,不存在....可能是某写个别的年份2月收益率高(例如2019),但是整体来看,A股30多年,不存在那些月份会有离谱的收益率。。。

虽然不显著,但是这个研究还是有意义的,起码说明了A股股市在月份效应上真的没啥规律。


 当然,这案例换一下数据,换一个效应都还是很好模仿的。例如可以用个股的数据,或者某个行业的数据,研究节假日效应,季节效应,等等,都是虚拟变量,都是方差分析可以做的。


创作不易,看官觉得写得还不错的话点个关注和赞吧,本人会持续更新python数据分析领域的代码文章~(需要定制代码可私信)

 

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

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

相关文章

论文复现|tightly focused circularly polarized ring Airy beam

请尊重原创的劳动成果 如需要转载&#xff0c;请后台联系 前言 采用MATLAB复现一篇论文里面的插图&#xff0c;涡旋光束的聚焦的仿真方式有很多种&#xff0c;这里采用MATLAB进行仿真&#xff0c;当然也有其他的很多方式&#xff0c;不同的方式各有千秋。 论文摘要 本文证明…

Sqoop安全性:确保安全的数据传输

确保数据传输的安全性在大数据处理中至关重要。Sqoop作为一个用于数据传输的工具&#xff0c;也提供了多种安全性措施&#xff0c;以确保数据在传输过程中的机密性和完整性。本文将深入探讨Sqoop的安全性特性&#xff0c;提供详细的示例代码和全面的内容&#xff0c;以帮助大家…

压缩编码之不同缩放参数对重建图像质量的影响的python实现——JPEG变换编码不同压缩率的模拟

原理 JPEG&#xff08;Joint Photographic Experts Group&#xff09;是一种常用的图像压缩标准&#xff0c;它通过采用离散余弦变换&#xff08;DCT&#xff09;和量化来实现图像的压缩。 离散余弦变换&#xff08;DCT&#xff09;&#xff1a; JPEG首先将图像分割成8x8的块…

彝族民居一大特色——土掌房

彝族民居一大特色——土掌房在彝区&#xff0c;各地、各支系传承的居室建筑形式是多种多样的&#xff0c;并与当地的居住习俗有密切关联&#xff0c;从村寨的聚落到住宅的地址&#xff1b;从房间的分置到什物的堆放&#xff1b;从建筑结构到民居信仰和禁忌&#xff0c;都表现出…

U-Boot学习(3):.config、defconfig文件对比及图形化配置Kconfig

在上一节中&#xff0c;我们介绍了U-Boot编译和.config配置文件生成分析&#xff0c;我们可以通过make xxx__defconfig来进行一些配置&#xff0c;其中xxx__defconfig对应config目录下的基于不同开发板的一些配置&#xff0c;指令执行完后会根据对应的配置在根目录下生成一个.c…

基于java web的机票管理系统设计与实现设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

Redis主从架构、哨兵集群原理实战

1.主从架构简介 背景 单机部署简单&#xff0c;但是可靠性低&#xff0c;且不能很好利用CPU多核处理能力生产环境必须要保证高可用&#xff0c;一般不可能单机部署读写分离是可用性要求不高、性能要求较高、数据规模小的情况 目标 读写分离&#xff0c;扩展主节点的读能力&…

多选下拉框数据溢出父页面高度被截断

问题 解决 给父页面div一个最小高度minHeight。 <div style{{minHeight: 300,marginTop: 20}}><Row><Select...</Row> </div>&#xff08;在我的具体实例中&#xff0c;下拉框与表格页面都为Tabs ——> TabPane 所包含。故下拉框高度超出页面高…

【Spring实战】29 @Value 注解

文章目录 1. 定义2. 好处3. 示例1&#xff09;注入基本类型2&#xff09;注入集合类型3&#xff09;使用默认值4&#xff09;注入整数和其他类型 总结 在实际的应用中&#xff0c;我们经常需要从外部配置文件或其他配置源中获取参数值。Spring 框架提供了 Value 注解&#xff0…

基于SSM的网上购物商城设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

任务13:使用MapReduce对天气数据进行ETL(获取各基站ID)

任务描述 知识点&#xff1a; 天气数据进行ETL 重 点&#xff1a; 掌握MapReduce程序的运行流程熟练编写MapReduce程序使用MapReduce进行ETL 内 容&#xff1a; 编写MapReduce程序编写Shell脚本&#xff0c;获取MapReduce程序的inputPath将生成的inputPath文件传入到Wi…

【Debian】非图形界面Debian10.0.0安装xfce和lxde桌面

一、安装 1. Debian10.0.0安装xfce桌面 sudo apt update sudo apt install xfce4 startxfce4 2. Debian10.0.0安装lxde桌面 sudo apt-get install lxde安装后重启电脑。 二、说明 XFCE、LXDE 和 GNOME 是三个流行的桌面环境&#xff0c;它们都是为类 Unix 操作系统设计…

【数位dp】【C++算法】600. 不含连续1的非负整数

作者推荐 【矩阵快速幂】封装类及测试用例及样例 涉及知识点 数位dp LeetCode600. 不含连续1的非负整数 给定一个正整数 n &#xff0c;请你统计在 [0, n] 范围的非负整数中&#xff0c;有多少个整数的二进制表示中不存在 连续的 1 。 示例 1: 输入: n 5 输出: 5 解释: 下…

浏览器打印无法显示单选框选中效果

上面是原代码&#xff0c;我点击打印&#xff0c;出现打印页面&#xff0c;但单选框并未勾选中&#xff0c;我在外部放了一模一样的代码是能勾选上的&#xff0c;于是我对打印页的input单选框进行分析&#xff0c;发现他丢失了checked属性。然后通过gpt分析原因。得知了default…

RK3399平台入门到精通系列讲解(外设篇)热成像传感器MLX90640 JNI控制程序

文章目录 JNI回调函数回调函数的实现驱动可以详看:链接 JNI 文件:native-lib.cpp

领域特定语言(Domain-Specific Language, DSL)在 Visual Studio 2022中的实验——建立领域模型

一、环境 dotnet --version 8.0.101 Microsoft Visual Studio Enterprise 2022 (64 位) - Current 版本 17.8.4 已安装组件 ComponentLinkVisual Studiohttp://go.microsoft.com/fwlink/?LinkId185579Visual Studio SDKhttps://go.microsoft.com/fwlink/?li…

RabbitMQ的安装使用

RabbitMQ是什么&#xff1f; MQ全称为Message Queue&#xff0c;消息队列&#xff0c;在程序之间发送消息来通信&#xff0c;而不是通过彼此调用通信。 RabbitMQ 主要是为了实现系统之间的双向解耦而实现的。当生产者大量产生数据时&#xff0c;消费者无法快速消费&#xff0c;…

图解结算平台:准确高效给商户结款

这是《百图解码支付系统设计与实现》专栏系列文章中的第&#xff08;4&#xff09;篇。 本章主要讲清楚支付系统中商户结算涉及的基本概念&#xff0c;产品架构、系统架构&#xff0c;以及一些核心的流程和相关领域模型、状态机设计等。 1. 前言 收单结算是支付系统最重要的子…

曲面上偏移命令的查找

今天学习老王的SW绘图时&#xff0c;遇到一个命令找不到&#xff0c;查询了一会终于找到了这个命令&#xff0c;防止自己忘记&#xff0c;特此记录一下&#xff0c;这个命令就是“曲面上偏移”&#xff0c;网上好多的教程都是错误的&#xff0c;实际上这个命令没有在曲面里面&a…

蓝桥杯备赛 | 洛谷做题打卡day3

蓝桥杯备赛 | 洛谷做题打卡day3 sort函数真的很厉害&#xff01; 文章目录 蓝桥杯备赛 | 洛谷做题打卡day3sort函数真的很厉害&#xff01;【深基9.例1】选举学生会题目描述输入格式输出格式样例 #1样例输入 #1 样例输出 #1 我的一些话 【深基9.例1】选举学生会 题目描述 学校…