Python数据分析案例83——宏观经济指标与沪深指数实证研究分析

背景

本文以沪深300指数为例,探讨了宏观经济指标与股市表现的关联性。通过文献梳理确定了关键影响因素,并选取2015-2024年的数据进行实证分析。研究采用多元回归方法,考察了利率(LPR)、经济增长(GDP)、价格指数(CPI、PPI)、货币供应量(M0、M1、M2)、景气指标(PMI)、融资规模(TSF)、国际因素(STY、DXY)及市场情绪(SEN)等变量对股指的作用。实证结果显示,市场情绪、美国利率、美元汇率、狭义货币供应和消费价格指数对沪深300指数具有显著解释力,而其他经济基本面指标的影响不显著。这表明股市短期走势更易受资金流动、投资者心理和外部金融条件等因素驱动。后续研究可考虑纳入更多变量,并尝试建立非线性模型以深化相关认识。


数据介绍

数据就是一个表格,从Tushare上获取的,我之前有博文介绍怎么获取,数据就是一个表:

数据是日度的,后续要转为月度的。

其中的close是沪深300每天的收盘价,是作为因变量的y,其他都是一些宏观经济指标,是自变量x,具体含义如下:

中文名称

英文全称

英文简写

沪深300收盘价

CSI 300 Closing Price

Close

贷款市场报价利率

Loan Prime Rate

LPR

国内生产总值

Gross Domestic Product

GDP

消费者价格指数

Consumer Price Index

CPI

生产者价格指数

Producer Price Index

PPI

流通中现金

Currency in Circulation

M0

狭义货币供应量

Narrow Money Supply

M1

广义货币供应量

Broad Money Supply

M2

采购经理人指数

Purchasing Managers' Index

PMI

社会融资规模

Total Social Financing

TSF

美国短期利率

US Short-Term Yield

STY

美元指数

US Dollar Index

DXY

投资者情绪指数

Sentiment Index

SEN

当然, 需要本文的全部数据和代码的同学还是可以参考:宏观经济


代码实现

导入包

import numpy as pd 
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import statsmodels.api as sm
import statsmodels.formula.api as smf
plt.rcParams['font.sans-serif'] = ['KaiTi']  #指定默认字体 SimHei黑体
plt.rcParams['axes.unicode_minus'] = False   #解决保存图像是负号'

读取数据

df=pd.read_excel('指数数据.xlsx',sheet_name='000300.SH',parse_dates=['trade_date']).set_index('trade_date').drop(columns='ts_code')
df.head()

利率,GDP,CPI,PPI,PMI,M0,M1,M2,社融。

然后将数据进行月度重采样,取每个月最后的数据作为这个月的取值,然后进行向前填充。

df=df.resample('M').last().ffill().bfill()

描述性统计

df.describe().T.round(3)

还画出每个变量的箱线图进行可视化

column = x_cols # 列表头
fig = plt.figure(figsize=(6,6), dpi=128)  # 指定绘图对象宽度和高度
for i in range(len(x_cols)):
    plt.subplot(4,3,i + 1)  # 2行3列子图
    sns.boxplot(data=df.iloc[:,i].to_numpy(), orient="v",width=0.5)  # 箱式图
    plt.ylabel(column[i], fontsize=12)
    plt.xticks([])
plt.tight_layout()
#plt.savefig('箱线图.jpg',dpi=128)
plt.show()

从数据统计结果来看,2015-2024年间各变量均呈现不同程度的波动。沪深300指数(Close)均值为3909.67点,但波动幅度较大,最低值与最高值相差近一倍,反映出市场在此期间经历了显著震荡。货币政策方面,LPR利率均值4.034%,波动区间3.1%-5.51%,显示央行根据经济形势进行了相应调整。

宏观经济数据显示,GDP后期增长较快,CPI和PPI均值相近,但PPI波动更为明显。货币供应方面,M2规模显著高于M1,符合中国以银行存款为主的金融结构特点。社会融资规模(TSF)曾出现负值,可能与2017年金融去杠杆等政策有关。国际方面,美国短期利率(STY)波动幅度大于国内LPR,表明美联储政策调整更为频繁。投资者情绪指数(SEN)多数时间保持稳定,但个别时点出现明显回落,反映市场阶段性悲观情绪。这些统计特征为后续研究提供了重要参考。

相关性分析

画出每个X变量和y的相关性关系,画散点图:

y = df['Close']
x_cols = ['LPR', 'GDP', 'CPI', 'PPI', 'M0', 'M1','M2', 'PMI', 'TSF' ,'STY', 'DXY', 'SEN']
x = df[x_cols]
fig = plt.figure(figsize=(8,8), dpi=128)  
for i in range(len(x_cols)):
    plt.subplot(4,3,i + 1)  # 2行3列子图
    sns.scatterplot(x=x.iloc[:, i], y=y)
    #plt.ylabel(column[i], fontsize=12)
    #plt.xticks([])
plt.tight_layout()
#plt.savefig('散点图.jpg',dpi=128)
plt.show()

还需要计算相关系数矩阵

df.corr()

进行可视化

import matplotlib.colors as mcolors
plt.figure(figsize=(8,6),dpi=128)
colors = ['#ffffd9', '#edf8b1', '#c7e9b4', '#7fcdbb', '#41b6c4', '#1d91c0']
my_cmap = mcolors.LinearSegmentedColormap.from_list('my_colormap', colors)
sns.heatmap(df.corr().round(3), cmap=my_cmap, annot=True, annot_kws={"size": 8})
#plt.savefig('相关系数.jpg')
plt.show()

从数据来看,不同宏观经济指标与股市的关联性存在明显差异。M2与股市呈现正相关趋势,表明货币供应量增加可能推动股市上涨,这与流动性影响市场的理论相符。PMI数据则显示,当经济景气度较高时,股市表现往往较好,反映市场对企业经营预期的敏感性。

相比之下,CPI、GDP等指标与股市的短期关联较弱,可能需要引入滞后效应或其他变量进行更深入分析。值得注意的是,美国短期利率(STY)与A股呈负相关,可能由于高利率环境导致资本外流,进而抑制股市表现。

相关性分析

  • 投资者情绪(SEN)与股市的相关性最高(0.74),说明市场情绪对短期走势影响显著。

  • 货币供应量(M1、M2、M0)与股市呈正相关,其中M1的影响相对较强(0.29),反映流动性对市场的支撑作用。

  • 利率因素方面,LPR与股市呈弱负相关(-0.17),而美国短期利率(STY)的负相关性更强(-0.37),显示外部金融环境对A股的潜在影响。

  • 美元指数(DXY)与股市负相关(-0.36),可能因美元走强引发资本外流压力。

  • GDP和CPI的相关性较低,表明短期股市波动更易受流动性和市场情绪驱动,而非纯粹的经济基本面。

综上,股市短期表现受流动性、投资者情绪及外部金融环境影响较大,而经济增长和通胀等长期因素的作用相对间接。后续可通过回归分析进一步验证各变量的显著性


回归分析

本章节将构建回归模型进行实证分析研究。选择的自变量为贷款市场报价利率(LPR)、国内生产总值(GDP)、消费者价格指数(CPI)、生产者价格指数(PPI)、流通中现金(M0)、狭义货币供应量(M1)、广义货币供应量(M2)、采购经理人指数(PMI)、社会融资规模(TSF)、美国短期利率(STY)、美元指数(DXY)以及投资者情绪指数(SEN)作为解释变量。选择的因变量是沪深300每日收盘价(Close)。

构建回归公式

formula = f"{'Close'} ~ {'+'.join(x_cols)}"
formula

进行回归

model = smf.ols(formula, data=df)
model = model.fit() 
model.summary()

实证结果显示,M2的回归系数为0.0012且高度显著(p=0.000),验证了货币供应量扩张对股市的提振作用,符合流动性驱动资产价格的理论预期。LPR在5%显著性水平下呈现正向影响,表明降息政策有助于改善市场预期。然而,GDP、CPI等传统宏观经济指标均未通过显著性检验,暗示这些变量对短期股市波动的解释力有限,可能需要考虑时滞效应或非线性传导机制。

值得注意的是,投资者情绪和外部金融环境变量表现出较强的解释力,而M0和M1等货币指标虽未显著但符号方向存在差异,提示可能存在多重共线性问题。后续通过VIF检验进一步验证模型的稳健性。研究结果表明,在制定市场策略时,应更关注流动性状况、市场情绪和全球金融环境等即时性因素,而非单纯依赖传统经济基本面指标。

def VIF_calculate(df_all,y_name):
    x_cols=df_all.columns.to_list()
    x_cols.remove(y_name)
    
    def vif(df_exog,exog_name):
        exog_use = list(df_exog.columns)
        exog_use.remove(exog_name)
        model=smf.ols(f"{exog_name}~{'+'.join(list(exog_use))}",data=df_exog).fit()
        return 1./(1.-model.rsquared)
 
    df_vif=pd.DataFrame()
    for x in x_cols:
        df_vif.loc['VIF',x]=vif(df_all[x_cols],x)
        
    df_vif.loc['tolerance']=1/df_vif.loc['VIF']
    df_vif=df_vif.T.sort_values('VIF',ascending=False)
    df_vif.loc['mean_vif']=df_vif.mean()
    return df_vif

我们对模型里面的变量进行VIF的计算,结果如下

VIF_calculate(df,'Close')

一般认为方差膨胀因子大于10的变量就具有多重共线性,其中M2和M0两个货币供应量,都是大于20以上,说明这两个指标和其他的解释变量有严重的多重共线性,此时需要进一步的优化模型来处理。因此在下一步回归中,我们剔除M2和M0两个货币供应量因素,使用其他的10个变量再次进行模型回归,

model = smf.ols('Close ~ LPR+GDP+CPI+M1+PPI+PMI+TSF+DXY+STY+SEN', data=df)
model = model.fit() 
model.summary()

其回归结果如上表。

模型优化后,多重共线性问题得到有效改善。调整后的回归结果显示:
1)模型解释力保持稳定(调整R²=0.812),F检验显著;
2)核心变量影响突出:

  • 投资者情绪指数(SEN)保持最强解释力(系数5864.79)

  • 外部金融变量(DXY、STY)持续显著负向影响

  • CPI的负向效应增强(系数-117.17)

  • M1的解释作用显现(p<0.05)

3)经济基本面指标(GDP、PPI等)仍不显著,反映市场反应机制存在时滞或非线性特征。LPR系数方向反转,暗示政策传导具有复杂性。

研究结果表明,沪深300指数走势主要受三大因素驱动:
① 投资者情绪波动
② 全球金融环境变化
③ 通胀预期调整

这一发现印证了市场定价过程中存在的非理性特征,为理解A股运行规律提供了新的实证依据。

再次计算VIF

VIF_calculate(df.drop(columns=['M0','M2']),'Close')

VIF还比较合理,不存在严重的多重共线性了。


模型检验

回归完成后需要对模型进行残差的检验,画出残差和拟合值的图,还有残差的正态图,

x=model.fittedvalues;y=model.resid
 
plt.subplots(1,2,figsize=(8,3),dpi=128)
plt.subplot(121)
plt.scatter(model.fittedvalues,model.resid)
plt.xlabel('拟合值')
plt.ylabel('残差')
plt.title('(a)残差值与拟合值图',fontsize=15)
plt.axhline(0,ls='--')
 
ax2=plt.subplot(122)
pplot=sm.ProbPlot(model.resid,fit=True)
pplot.qqplot(line='r',ax=ax2,xlabel='期望正态值',ylabel='标准化的观测值')
ax2.set_title('(b)残差正态Q-Q图',fontsize=15)
plt.show()

模型诊断结果显示回归假设基本满足:
1)残差图显示误差项随机分布,无明显趋势,符合同方差性要求;
2)Q-Q图中数据点基本沿参考线分布,仅尾部略有偏离,满足正态性假设;
3)检验结果支持模型设定的合理性,为参数估计的有效性提供了统计基础。

这些诊断表明模型构建恰当,能够可靠地支持前文得出的研究结论。


总结

本研究基于2015-2024年数据,采用多元回归方法分析了12个宏观经济变量对沪深300指数的影响。在解决多重共线性问题(剔除M0和M2)后,研究发现:

  1. 显著影响因素:

  • 投资者情绪指数(SEN)影响最大(系数5864.79**)

  • 外部金融环境(STY系数-165.08*,DXY系数-429.85*)

  • 狭义货币供应量(M1系数0.0012*)

  • 通胀指标(CPI系数-117.17**)

  1. 非显著因素:
    GDP、PPI、PMI等传统经济指标未通过显著性检验

研究结论表明,沪深300指数的短期波动主要受三大因素驱动:
① 市场情绪变化
② 国际金融环境变动
③ 国内流动性状况
而传统经济基本面指标的短期解释力相对有限,这反映了新兴市场股市受预期和非理性因素影响较大的特征。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阡之尘埃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值