资讯动态

SVAR实证复现:影子银行对中小企业融资挤出效应与脉冲响应

发布时间:2026/9/18 5:10:27 来源:尧图企业网站定制
简介这是一份面向金融学研究者、高校师生及政策研究人员的实证论文围绕影子银行与民营中小企业融资之间的关系展开借助结构向量自回归SVAR模型检验二者的Granger因果关系。论文指出影子银行对中小企业从正规金融机构融资存在“挤出”效应短期融资需求会刺激影子银行膨胀但长期不可持续并进一步讨论其提高融资成本、风险与难度的问题最后提出以市场为导向、坚持金融服务实体经济、发挥互联网金融积极作用的改革思路。资源内含1个PDF文件压缩包约1.24MB便于直接阅读与引用知识点涵盖影子银行、信贷配给、Granger因果检验、脉冲响应分析及金融深化改革等核心概念。目前已有77人学习适合需要理解中小企业融资困境与金融改革方向的读者参考。1. 一篇 2015 年的 SVAR 实证论文为什么值得当技术活拆一遍2015 年《华东经济管理》第 4 期登过一篇论文作者王蕾、张婧婕、陈霄用 2002 年 2 月到 2009 年 11 月共 94 个月的月度数据把影子银行规模Sbk和私营企业及个体贷款Pel塞进一个两变量 SVAR 模型结论是两者互为 Granger 原因影子银行对正规渠道融资存在挤出效应。这份 PDF 值得当技术资源拆的地方是它的建模链条没有跳步变量口径定义、二次指数平滑填补缺失值、ADF 单位根检验、五准则选滞后阶数、AR 特征根稳定性、AB 型 SVAR 的短期约束、正交化脉冲响应一步不落。换成「消费信贷余额对信用卡逾期率」这类双变量场景整条流水线可以直接迁移。反直觉的点在脉冲响应。中小企业融资对影子银行扰动的响应不是当期就转负而是先波动下降第 5 个月触底之后缓慢回升整条曲线始终压在零轴下方。挤出效应是滞后出现的只看当期系数会得出相反判断。2. 变量构造与缺失值回填Sbk 加总口径和 Pel 的口径对齐变量口径决定后面所有结论。同样的 SVAR 代码把 Sbk 换成社会融资规模脉冲响应形状可能完全反过来。这一层没定清楚后面调参数都是在给错误输入做精修。2.1 影子银行规模为什么用三项加总论文梳理了国内几种测度思路认为影子银行中约 82% 来自委托贷款、信托贷款和民间借贷另外未贴现银行承兑汇票也贡献了一部分。最终用于建模的 Sbk是委托贷款、信托贷款、未贴现银票三者的月度加总民间借贷因为缺少可统计的总量数据被排除在外。这个取舍有代价口径漏掉民间借贷会低估真实规模但换任何「可统计、可复现」的口径都得做类似妥协。做类似研究时常见做法是在稳健性检验里换一版口径再跑一次看脉冲响应方向是否翻转。Pel 选得更讲究用的是其他商业银行对私营企业及个体发放的人民币短期贷款而不是更宽泛的「中小企业贷款余额」——它按月公布颗粒度够且直接对应「从正规金融机构获得的融资」这个被解释对象。变量含义构造口径频率观测数Sbk影子银行规模委托贷款 信托贷款 未贴现银行承兑汇票月度加总月94Pel私营企业及个体贷款其他商业银行对私营企业及个体工商户发放的人民币短期贷款月94样本区间2002-02 至 2009-112009 年后部分口径停止公布故截断月942.2 点状缺失用二次指数平滑回填先把数据读进来并对齐到月度频率索引错位是这类面板数据最常见的第一道坑。import pandas as pd df (pd.read_csv(sbk_pel_monthly.csv, parse_dates[month], index_colmonth) .asfreq(MS)[[sbk, pel]]) # MS 每月月初避免月末/月初索引错位asfreq(MS)把索引强制成每月初频率缺失月份会以 NaN 出现而不是被静默跳过。接下来处理缺口论文用的是二次指数平滑法。from statsmodels.tsa.holtwinters import ExponentialSmoothing def fill_by_quadratic_smoothing(series: pd.Series) - pd.Series: Holt 线性趋势即经典二次指数平滑回填点状缺失。 observed series.dropna() fit ExponentialSmoothing( observed, trendadd, # 水平 趋势对应二次指数平滑 seasonalNone, # 月度数据不额外挂季节项 initialization_methodestimated, # 初始水平/趋势由似然估计给出 ).fit(optimizedTrue) # 对 alpha、beta 做数值优化 fitted pd.Series(fit.fittedvalues, indexobserved.index) return series.combine_first(fitted.reindex(series.index)) df[sbk] fill_by_quadratic_smoothing(df[sbk]) df[pel] fill_by_quadratic_smoothing(df[pel])逻辑是先拿观测值拟合 Holt 模型再让原始值优先、缺口位置用拟合值补。参数上trendadd决定模型有线性趋势项这正是二次指数平滑与一次指数平滑的唯一区别initialization_methodestimated换成heuristic会让前几期拟合值偏差明显变大optimizedTrue关掉的话平滑系数取默认经验值长缺口位置的回填会偏离原序列的波动幅度。注意平滑法只适合点状缺口。某个变量连续缺 6 个月以上拟合值会沿着自己的趋势外推等于人为造出一段过于平滑的曲线ADF 检验和脉冲响应都会被这段人造数据带偏。补齐后把缺失位置单独标记跑一遍含缺口和剔除该段的对照。2.3 ADF 检验确认 I(0) 再进 VAR两列时间序列进 VAR 前必须确认平稳否则统计量分布失真容易出伪回归。论文用 EViews 6.0 做 ADF结论是 Sbk 与 Pel 都通过检验为零阶单整 I(0)可以直接建 VAR 而不必差分。from statsmodels.tsa.stattools import adfuller def adf_row(s: pd.Series, name: str, maxlag: int 12) - dict: stat, pval, used_lag, nobs, crit, _ adfuller( s.dropna(), maxlagmaxlag, regressionc, autolagAIC ) return {变量: name, ADF统计量: round(stat, 4), p值: round(pval, 4), 使用滞后阶: used_lag, 样本量: nobs, 5%临界值: round(crit[5%], 4)} print(pd.DataFrame([adf_row(df[sbk], Sbk), adf_row(df[pel], Pel)]).to_string(indexFalse))参数说明maxlag12让信息准则在最多 12 阶里挑滞后月度数据给到一年的长度上限比较稳regressionc表示检验方程带常数项、不带趋势项这两列都是有长期均值的水平变量硬加趋势项会削弱检验力autolagAIC自动控制滞后阶数避免残差自相关把检验结果抬高。判读方式ADF 的原假设是「序列存在单位根」p 值小于 0.05 才能拒绝。如果这里没过别急着差分先查是不是样本区间跨了口径调整或断点那种情况差分也救不回来。3. 从 VAR(6) 到 AB 型 SVAR滞后阶数与识别约束怎么定滞后阶数和识别约束是这套模型里最容易被拍脑袋决定的两步也是复现结果对不上的主要来源。论文在这两处的处理路径比较清楚值得逐条拆。3.1 五个准则打架时听谁的论文先算 Sbk 与 Pel 的动态相关系数最大值出现在当期说明企业对影子银行规模变化的反应很快短期相关系数的最大值落在第六期。随后做 VAR 滞后阶数检验在 5% 显著水平下LR、FPE、AIC 三个准则都指向 6 阶SC 与 HQ 在自己的最小值处偏向更短的阶数最终取 6。准则倾向阶数特点LR6似然比检验小样本下比 AIC 保守FPE6最终预测误差看样本外预测能力AIC6惩罚轻倾向偏大的阶数SC偏短惩罚重小样本容易压到 1 阶HQ偏短惩罚介于 AIC 与 SC 之间from statsmodels.tsa.api import VAR model VAR(df[[pel, sbk]]) print(model.select_order(maxlags8).summary()) res model.fit(6)select_order一次给出 aic、bic对应 SC、hqic、fpe 四个准则的选择结果。maxlags8控制搜索上界样本只有 94 个月时给到 8 比给 12 稳每多一个阶数就多吃掉一个观测。为什么最后听 AIC 而不是 SC两变量小样本 VAR 里 SC 容易把阶数压到 1残差自相关没清干净脉冲响应会出现假振荡。先由动态相关系数找到第六期的证据再用 AIC 印证两条线互相对上才定 6 阶这个顺序比单纯看准则表更可靠。3.2 VAR(6) 估计与 AR 特征根稳定性论文给出的 VAR(6) 估计结果里Pel 方程 R² 约 0.645、调整后约 0.589Sbk 方程 R² 约 0.412、调整后约 0.318。Sbk 方程拟合度明显更低说明影子银行规模受模型外因素影响更大——这是个信号模型对 Pel 的解释力强于对 Sbk 的解释力后续读脉冲响应时对 Sbk 那条曲线要更谨慎。稳定性检查看 AR 特征根全部模必须落在单位圆内。import numpy as np roots res.roots # 伴随矩阵特征根的倒数 modulus np.abs(roots) print(特征根模:, np.round(modulus, 4), 是否全部小于1:, bool((modulus 1).all()))res.roots返回的是特征根的倒数判据是模全部小于 1。任何一根的模大于等于 1模型就不稳定脉冲响应不收敛长期读数发散图也就没法解释。遇到不稳定常见处理是延长滞后阶数或者对变量做差分但差分会让「水平变量之间存在长期关系」这个前提失效得先想清楚建模目标是短期动态还是长期均衡。3.3 AB 型 SVAR 的那个约束设在哪VAR 只能描述变量之间的滞后关系估不出当期关系。影子银行与中小企业融资之间反应迅速当期影响不能丢所以要升到 SVAR。两变量情况下结构式需要施加 k(k-1)/2 1 个约束才能识别。论文选的是短期约束民营中小企业融资对当期的影子银行规模没有反应用矩阵写出来就是 A 矩阵的第一行第二列取 0。经济含义是企业这个月从正规银行拿到多少贷款不可能因为这个月才出现的影子银行规模变化而立刻改变授信审批有周期反过来影子银行规模会在当期对中小企业融资的变化作出反应。3.4 A、B 矩阵的极大似然估计Python 生态里没有现成的 AB 型 SVAR似然函数得自己写。import numpy as np from scipy.optimize import minimize def neg_loglik(theta, S, T): AB 型 SVAR 的负对数似然。theta [a21, b11, b22]。 a21, b11, b22 theta A np.array([[1.0, 0.0], [a21, 1.0]]) # a12 0即施加的短期约束 B np.diag([b11, b22]) # 对角阵结构冲击之间不相关 Ainv np.linalg.inv(A) Sigma Ainv B B.T Ainv.T # 简约式残差协方差的结构形式 sign, logdet np.linalg.slogdet(Sigma) if sign 0 or b11 0 or b22 0: return 1e10 # 惩罚非法参数区域 return 0.5 * T * (logdet np.trace(np.linalg.inv(Sigma) S)) S res.sigma_u.values T res.nobs best minimize(neg_loglik, x0[-0.5, 60.0, 900.0], args(S, T), methodNelder-Mead, options{maxiter: 5000}) a21, b11, b22 best.x print(fa21{a21:.4f} b11{b11:.2f} b22{b22:.2f})逻辑是A ε_t B u_t这个标准形式下简约式残差与其协方差满足 Σ A⁻¹BBA⁻¹把这个 Σ 代进多元正态的对数似然待估参数只剩 a21、b11、b22 三个恰好等于 2×2 对称协方差的自由元素个数属于恰好识别。参数说明theta的顺序固定为 A 的非对角元素在前、B 的对角元素在后S用 VAR(6) 估出来的残差协方差矩阵T取有效样本量b11 0 or b22 0的判断是为了挡掉优化跑到负标准差上初值按量级给第二个方差比第一个大一个数量级是因为 Sbk 的月度波动远大于 Pel。论文估出来的两个标准差分别在数十和数百的量级方向与上面给的初值一致。估完必须做一次自洽检查把 Σ 反代回去看A Sigma A.T和B B.T是否近似相等不等就说明优化没收敛换初值或者改用方差平方根参数化重跑。4. Granger 因果检验与结构脉冲响应的读法系数表只是中间产物能对外表述的结论来自因果检验和脉冲响应。这两块最容易读错一个是滞后阶数的敏感性一个是正交化的口径。4.1 Granger 因果检验对滞后阶数极其敏感论文用 1 到 6 阶分别做了检验结果分成两段。检验用滞后阶数原假设Sbk 不是 Pel 的 Granger 原因原假设Pel 不是 Sbk 的 Granger 原因1 阶接受p 值约 0.16拒绝2~6 阶拒绝拒绝from statsmodels.tsa.stattools import grangercausalitytests for lag in range(1, 7): o1 grangercausalitytests(df[[pel, sbk]], maxlaglag, verboseFalse) o2 grangercausalitytests(df[[sbk, pel]], maxlaglag, verboseFalse) print(flag{lag} Sbk→Pel p{o1[lag][0][ssr_ftest][1]:.3f} fPel→Sbk p{o2[lag][0][ssr_ftest][1]:.3f})列顺序不能反grangercausalitytests默认检验的是「第二列不是第一列的 Granger 原因」想让 Pel 当被解释变量就得把 pel 放第一列。ssr_ftest是 F 检验的 p 值与论文表 5 的判读口径一致用ssr_chi2test会在小样本下给出偏乐观的 p 值。1 阶的结论和 2 阶以后相反不是数据有问题而是自由度变了——滞后阶数直接决定结论方向这也是论文把 1 到 6 阶全列出来的原因。4.2 结构脉冲响应得自己算res.irf()给的是 Cholesky 正交化变量顺序决定分解结果和论文的 AB 型识别不是一回事。要做 AB 型 SVAR 的脉冲响应得手动把结构冲击还原出来。Ainv np.linalg.inv(np.array([[1.0, 0.0], [a21, 1.0]])) Bmat np.diag([b11, b22]) Phi res.ma_rep(maxn24) # VAR 的 MA 系数形状 (25, 2, 2) Theta np.array([p Ainv Bmat for p in Phi]) # 简约式冲击 → 结构冲击 resp_pel_to_sbk Theta[:, 0, 1] # Pel 对第 2 个结构冲击(Sbk)的响应 for h in range(0, 25, 5): print(fh{h:02d} {resp_pel_to_sbk[h]:.2f})res.ma_rep(maxn24)给出 VAR 的移动平均系数序列Ainv Bmat把简约式冲击翻译成结构冲击两者相乘才是结构脉冲响应。索引Theta[:, 0, 1]的含义是第 1 个变量对第 2 个结构冲击在第 h 期的响应和论文图 2 对应把变量索引对调就得到图 3。这一步最容易出错的地方是漏乘Ainv那样得到的其实是简约式响应形状相近但幅度和置信带都不对。4.3 两条曲线上的关键读数论文图 2 是中小企业融资对影子银行扰动的响应整条曲线压在零轴下方第 5 个月到达最低点之后回升但未穿过零轴。这个形态对应「挤出效应」影子银行规模扩张后中小企业从中长期看从正规银行拿到的钱是减少的。图 3 反过来影子银行对中小企业融资扰动的响应当期为正第 5 期达到正向最大值之后衰减并趋向零。意思是中小企业短期融资需求的扩张会推高影子银行规模但这个推动不具持续性。读这两条曲线有三件事不能省。置信带要一起看脉冲响应的点估计单独没有意义偏离带跨零就说明该期响应在统计上不显著。横轴单位是月、纵轴是亿元别把「第 5 期」当成 5 个季度。转折点要单独核对第 5 期触底这种读数如果置信带在这一期跨零就不能把最低点当成结论只能说方向为负。5. 复现偏差排查与可复用的验证链跑完一遍代码结果和论文对不上一半以上通常不是模型选错了而是几个固定环节存在细微差异。把这几处先排掉再谈结论差异才有意义。5.1 三处最常见的偏差来源现象常见成因处理方式滞后阶数与论文不一致样本区间截取点或缺失值回填方式不同固定 p6 重跑比较各准则曲线而非单点结果A、B 估出负的方差优化初值离真值太远落到非法区域换初值或改用标准差的平方根做参数化响应形状相似但幅度差一倍变量单位不统一元与亿元混用全部换算到亿元或对序列分别取自然对数第三条尤其隐蔽。Sbk 与 Pel 的量级差一到两个数量级B 矩阵的两个对角元素也因此差一个数量级这正是识别里把两个方差分开估的意义。单位不统一不会让模型报错只会让脉冲响应的幅度解释失去意义。5.2 一条可复用的断言链把关键中间件落盘再用断言把假设固定下来比每次重跑后肉眼看图可靠得多。import numpy as np def check_svar_fit(A, B, Sigma, tol1e-4): 校验 A、B 与简约式残差协方差是否自洽。 return np.allclose(A Sigma A.T, B B.T, atoltol) A_hat np.array([[1.0, 0.0], [a21, 1.0]]) B_hat np.diag([b11, b22]) assert check_svar_fit(A_hat, B_hat, res.sigma_u.values), A、B 与简约式协方差不自洽 assert (np.abs(res.roots) 1).all(), VAR 不稳定脉冲响应不可用 assert res.nobs 6 * 2 * 2, 有效样本量不足滞后阶数应下调 np.save(irf_pel_to_sbk.npy, resp_pel_to_sbk) # 中间件落盘便于跨口径对照check_svar_fit用矩阵等式做自洽校验atol1e-4是按亿元量级设的容差res.nobs那条断言对应经验规则——两变量 VAR(6) 的参数个数接近 26 个样本量低于参数量的三倍时AIC 选出的阶数会明显不稳。把脉冲响应数组落盘之后换口径、换区间、换滞后阶数都只是改一行参数重跑一次就能看到结论有没有翻转也才能在报告里说清哪一版结果是稳健的。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价