背景
本文以沪深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)后,研究发现:
-
显著影响因素:
-
投资者情绪指数(SEN)影响最大(系数5864.79**)
-
外部金融环境(STY系数-165.08*,DXY系数-429.85*)
-
狭义货币供应量(M1系数0.0012*)
-
通胀指标(CPI系数-117.17**)
-
非显著因素:
GDP、PPI、PMI等传统经济指标未通过显著性检验
研究结论表明,沪深300指数的短期波动主要受三大因素驱动:
① 市场情绪变化
② 国际金融环境变动
③ 国内流动性状况
而传统经济基本面指标的短期解释力相对有限,这反映了新兴市场股市受预期和非理性因素影响较大的特征。