中国货币政策的动态有效性研究--基于 TVP-SV-FAVAR 模型的实证分析

本文采用TVP-SV-FAVAR模型对中国货币政策的动态有效性进行深入分析,探讨数量型和价格型货币政策对宏观经济的不同影响机制。通过对历史数据的实证研究,揭示了货币政策在应对经济结构变化和外部冲击时的动态调整,为理解“价格之谜”提供了新的解释,并对未来政策制定提供了参考。

最近看到有小伙伴留言FAVAR模型,我之前也没接触过这个模型,然后拜读了下面这篇文章,写下简略的读书笔记。希望各位小伙伴批评指正,一起学习!

【公众号】:经济知识综合


中国货币政策的动态有效性研究–基于 TVP-SV-FAVAR 模型的实证分析

1. 引言

文章创新点:

  1. 采用TVP-SV-FAVAR 模型,将中国经济发展过程中的结构突变特征考虑在内。并对货币政策的动态有效性进行研究,
  2. 分别对数量型货币政策和价格型货币政策对宏观经济的调控进行研究,最终发现两种货币政策的影响机制有所不同。
  3. 对“价格之谜”有一定的解释力度。

这篇文章的引言层层递进,抓住了主要问题,从我国的经济发展出发,说明我国的经济结构和宏观调控的结构性变革,同时将货币政策的有效性及其动态变化考虑在内,因此作者选用TVP-SV-FAVAR模型,对中国货币政策的有效性及其特征变化进行实证分析。

在文献综述部分,作者首先针对货币政策的有效性进行讨论 ,部分学者认为货币政策是中性的,即货币政策对经济发展没有显著影响,部分学者对1978-2000年和1994-2010年的中国货币政策有效性进行实证,结论均支持长期货币中性。然而,更多的学者持货币政策“非中性”的观点,认为货币政策对于经济系统具有重要的调控作用。

然后作者针对货币政策的传导机制展开讨论,Taylor 认为利率是唯一能够与物价和经济增长保持长期稳定关系的变量,这表明利率与物价和经济增长之间存在着协整关系,调整利率应该成为货币当局的主要操作方式。Meltzer(1995)货币政策能够改变资产价格, 从而引起需求和产出改变。周英章和蒋振声(2002)认为中国的货币政策是通过信贷渠道和货币渠道的共同传导发挥作用的, 相比之下信贷渠道占主导地位。

然后作者分析了TVP-SV-FAVAR 模型对于现有问题的实用性。

2. 模型设定:

2.1 SVAR模型

y t \boldsymbol{y}_{t} yt K × 1 K \times 1 K×1阶的观察变量, A , F 1 , … , F s   A, F_{1}, \ldots, F_{s}~ A,F1,,Fs  K × K K \times K K×K阶系数矩阵, u t u_{t} ut K × 1 K \times 1 K×1阶的结构扰动,假定 $ u t ∼ N ( 0 , Σ Σ ) u_{t} \sim N(0, \Sigma \Sigma) utN(0,ΣΣ)

A y t = F 1 y t − 1 + ⋯ + F s y t − s + u t , t = s + 1 , … , n A \boldsymbol{y}_{t} = F_{1} \boldsymbol{y}_{t-1}+\cdots+F_{s} \boldsymbol{y}_{t-s}+u_{t}, \quad t=s+1, \ldots, n Ayt=F1yt1++Fsyts+ut,t=s+1,,n

通过递归识别来具体结构扰动之间的同步关系,假定 A A A是下三角阵,这涉及到SVAR系统的理论机制设置,A矩阵左乘以 y t {y}_{t} yt来描述 y t {y}_{t} yt内部的同期影响。

Σ = ( σ 1 0 ⋯ 0 0 ⋱ ⋱ ⋮ ⋮ ⋱ ⋱ 0 0 ⋯ 0 σ k ) \Sigma=\left(\begin{array}{cccc} \sigma_{1} & 0 & \cdots & 0 \\ 0 & \ddots & \ddots & \vdots \\ \vdots & \ddots & \ddots & 0 \\ 0 & \cdots & 0 & \sigma_{k} \end{array}\right) Σ=σ1000000σk A = ( 1 0 ⋯ 0 a 21 ⋱ ⋱ ⋮ ⋮ ⋱ ⋱ 0 a k 1 ⋯ a k , k − 1 1 ) A=\left(\begin{array}{cccc} 1 & 0 & \cdots & 0 \\ a_{21} & \ddots & \ddots & \vdots \\ \vdots & \ddots & \ddots & 0 \\ a_{k 1} & \cdots & a_{k, k-1} & 1 \end{array}\right) A=1a21ak10ak,k1001

Reduced Form of VAR Model:,直接求解SAVR,不易求解,需转化为Reduced Form,这就需要判断A矩阵是否可逆

y t = B 1 y t − 1 + ⋯ + B s y t − s + A − 1 Σ ε t , ε t ∼ N ( 0 , I k ) \boldsymbol{y}_{t}=B_{1} \boldsymbol{y}_{t-1}+\cdots+B_{s} \boldsymbol{y}_{t-s}+A^{-1} \Sigma \varepsilon_{t}, \quad \varepsilon_{t} \sim N\left(0, I_{k}\right) yt=B1yt1++Bsyts+A1Σεt,εtN(0,Ik)

其中, B i = A − 1 F i ,  for  i = 1 , … , s B_{i}=A^{-1} F_{i}, \text { for } i=1, \ldots, s Bi=A1Fi, for i=1,,s ,将 B i B_i Bi的元素按照行进行堆叠生成 β ( k 2 s × 1  vector  ) \boldsymbol{\beta}\left(k^{2} s \times 1 \text { vector }\right) β(k2s×1 vector ),定义: X t = I k ⊗ ( y t − 1 ′ , … , y t − s ′ ) X_{t}=I_{k} \otimes\left(\boldsymbol{y}_{t-1}^{\prime}, \ldots, \boldsymbol{y}_{t-s}^{\prime}\right) Xt=Ik(yt1,,yts) ⊗ \otimes 代表克罗内克积,

y t = X t β + A − 1 Σ ε t \boldsymbol{y}_{t}=X_{t} \boldsymbol{\beta}+A^{-1} \Sigma \varepsilon_{t} yt=Xtβ+A1Σεt

2.2 FAVAR模型(向量增强自回归模型)

所有的参数都不随时间变化。

[ F t Y t ] = B 1 [ F t − 1 Y t − 1 ] + ⋯ + B p [ F t − p Y t − p ] + v t (1) \left[\begin{array}{l} F_{t} \\ Y_{t} \end{array}\right]=B_{1}\left[\begin{array}{l} F_{t-1} \\ Y_{t-1} \end{array}\right]+\cdots+B_{p}\left[\begin{array}{l} F_{t-p} \\ Y_{t-p} \end{array}\right]+v_{t} \tag{1} [FtYt]=B1[Ft1Yt1]++Bp[FtpYtp]+vt(1)

  F t   ~F_t~  Ft 为潜在因子构成的   K × 1   ~K \times1~  K×1 维向量, Y t   Y_t~ Yt 为可观测变量和货币政策工具变量构成的 L × 1 L\times1 L×1维向量;   B i ,   i = 1 , 2 , ⋯   , p   ~B_{i},~ i= 1,2,\cdots,p~  Bi, i=1,2,,p    ( K + L ) × ( K + L )   ~(K+L)\times(K+L)~  K+L×K+L 的系数矩阵; v t ∼ N ( 0 , Ω )   v_{t} \sim N(0,\Omega)~ vtN(0,Ω)  Ω \Omega Ω   ( K + L ) × ( K + L )   ~(K+L)\times(K+L)~  K+L×K+L 的协方差矩阵。

X t = Λ f F t + Λ y Y t + e t (2) X_{t}=\Lambda^{f} F_{t}+\Lambda^{y} Y_{t}+e_{t} \tag{2} Xt=ΛfFt+ΛyYt+et(2)

X t   X_{t}~ Xt 表示经济系统中存在的大量时间序列,维度是   N × 1   ~N \times1~  N×1 向量,且   K + L ≪ 1   ~K+L \ll1~  K+L1 
Λ f , Λ y   \Lambda^{f},\Lambda^{y}~ Λf,Λy 分别为 F t , Y t   F^{t},Y^{t}~ Ft,Yt 的因子载荷矩阵,其维度分别是   N × K   ~N \times K~  

在开始使用代码之前, 请仔细阅读此文件。此文件夹包含以下文件:___________________________________________________________________________________1)其他代码: B. TVP-FAVAR: 估计一个 TVP FAVAR。此代码用于演示只有, 它应该作为一个出发点, 以了解评估的工作原理 (在前往多个使用 DMA 的模型案例) 2)预测代码:a. 竞争 FCIs: 从我们收集的4现有 FCIs 的预测联邦储备银行B. DMA_TVP_FAVAR: 动态模型平均/选择的预测 (DMA/DMS),与相对 noninformative 之前C. DMA_TVP_FAVAR_TS: 动态模型平均/选择的预测 (DMA/DMS),培训样本前(此代码仅用于在线附录)FAVAR_PC_DOZ: homoskedastic FAVAR 与校长的预测组分和 Doz 等 (2011) 因素的估计 3)完整示例代码:DMA_probabilities: 绘制时变 DMA 概率, 预期数量变量和由 DMA 暗示的家庭护理(使用此代码复制图 4 & 5) 此外, 文件夹 "函数" 包含在估计期间调用的有用函数 (例如, mlag2 创建 VAR 滞后, 并且 Minn_prior_KOOP 在系数之前实现我们的明尼苏达州类型). 文件夹数据包含-猜测什么。但是, 要小心, 因为那里有两个数据集。第一个是文章中使用的 (xdata.dat, other_FCIs, ydata.dat)。但是, 我还有一个具有81个财务变量 (xdata_all) 的数据集, 仅由演示代码 TVP FAVAR 调用。在这个代码中, 我给你一个选项来加载这两个数据集中的任何一个来提取家庭护理 (为了了解算法是如何工作的)。变量的名称在. 席子文件 xnames. 垫。 如何使用代码:在每个文件的开头, 我有一个叫做 "用户输入" 的部分。请随时试用它。默认设置是在纸张中使用的, 例如 nlag=4 是 FAVAR 中滞后的数目)。 但是, 默认值的遗忘/衰变因素 (称为 l_1, l_2, l_3, l_4 在代码中, 但表示为本文) 对应于 TVP-FAVAR 模型。为了估计 FAVAR 和 FA-TVP 模型 (见纸), 你需要改变遗忘因子的值。设置 l_3=1 (离开 l_1 = l_2 = 0.96, l_4 = 0.99) 给出了 FA TVP VAR, 而设置 l_3 = l_4 = 1 (离开 l_1 = l_2 = 0.96) 给你 heteroskedastic FAVAR。您还可以通过将所有遗忘因子设置为1来获得 homoscedastic FAVAR, 但这不是本文中使用的模型 (因为我们解释这具有较低的预测性能)。 我已经设置了代码 DMA_probabilities 为了打印文件中显示的数字, 以选择的模型为条件 (例如, 遗忘因素的默认设置会给出 TVP-FAVAR 的概率)。对于预测代码的事情是半自动的, 因为我不喜欢设置 MATLAB 来计算预测结果和打印乳胶表 (更多的编程意味着更多的错误机会, 因此, 我更喜欢在 Excel 中手动计算平均值)。在这方面, 如果你想要 MSFEs 这些可以在数组 MSFE_DMA 中的代码末尾找到 (对于 DMA 情况, 类似于其他文件中的其他预测)。为了获得所有变量的平均 MSFE, 只需在 MATLAB 中使用平均值 () 函数:挤压 (平均 (MSFE_DMA (1: 末端-1,:, 1), 1) '% 为 h=1 步挤压 (平均 (MSFE_DMA (1: 末端-2,:, 2), 1) '% 为 h=2 步挤压 (平均 (MSFE_DMA (1: 末端-3,:, 3), 1) '% 为 h=3 步挤压 (平均 (MSFE_DMA (1: 末端-4,:, 4), 1) '% 为 h=4 步 健康警告:虽然一个 TVP FAVAR 是微不足道的估计, 你很快就会意识到, 预测递归与 219= 524288 模型 (正如我们在 DMA), 是一个相当的任务。您将需要一个非常强大的 PC 和大量的耐心, 或者是一个集群的服务器和 MATLAB 的并行处理工具箱 (这是我实际上做的, 即我是在我的大学中央集群远程提交 PBS 工作)。 在您尝试在您的 PC 上运行 DMA 代码之前, 我建议您在使用单个模型估计和递归预测时需要花费多少时间。您可以使用原始 DMA_TVP_FAVAR 代码来执行此项。在用户输入中有设置: var_no_dma = 1; 选择不应包含在 DMA 中的变量。上面的设置采用第一个变量 (& P500), 检查 varnames 所有20个变量的名称和顺序, 并始终将其包含在每个模型中, 从而使代码在其余的 219模型中进行 DMA。如果设置: var_no_dma = 1:20; 然后所有20个变量都包含在每个模型中, 0 个变量包含在 DMA 中。因此, 这等同于估计没有 DMA 的完整模型。选择: var_no_dma = [1 3 5 9 12 15]; 将始终包含每个因子模型中的变量 (13、59、1215), 并要求代码在剩余的14个变量中执行 DMA (因而 214= 16384 模型, 这对于旧 pc 仍然是很麻烦的)。 运行代码时请小心, 我们不承担对旧 pc 中可能发生的 CPU 过载造成的硬件损坏的责任..。此代码不适合完成初学者。然而, 经验较少的 MATLAB 用户和/或博士生应该能够很容易地理解附加的代码结合仔细研究的论文。我们不提供对此代码的支持。
### 关于 TVP-SV-VAR 模型的代码实现 #### Python 中的 TVP-SV-VAR 模型实现 Python 社区提供了多种工具包用于时间序列建模,其中包括 `pyvars` 和 `statsmodels`。然而,对于更复杂的模型TVP-SV-VAR,通常会借助贝叶斯推断库 PyMC3 或者 TensorFlow Probability。 ```python import pymc3 as pm import numpy as np from scipy.linalg import toeplitz def tvp_sv_var(y, p=1): nobs = y.shape[0] k_vars = y.shape[1] with pm.Model() as model: sigma = pm.HalfNormal('sigma', sd=1., shape=k_vars) beta = [] for i in range(k_vars): b_i = pm.Normal(f'beta_{i}', mu=0, sd=1e6, shape=(nobs-p, p*k_vars)) beta.append(b_i) epsilon = pm.MvNormal('epsilon', mu=np.zeros(k_vars), cov=np.diag(sigma**2), shape=nobs) A = tt.stack([tt.dot(toeplitz(np.concatenate((np.ones(p)*b.T[i], np.zeros(nobs-p)))), y[:-(p-i)].T).T for i,b in enumerate(beta)], axis=-1) Y_pred = pm.Deterministic('Y_pred', A.sum(axis=-1)) likelihood = pm.Potential('likelihood', pm.mvNormalLogp(Y_pred + epsilon - y[p:], chol=None, lower=True)) trace = pm.sample(1000, tune=1000, cores=4) return trace ``` 此段代码定义了一个简单的 TVP-SV-VAR 模型并利用 MCMC 方法进行了采样[^1]。 #### MATLAB 中的 TVP-SV-VAR 模型实现 MATLAB 提供了强大的矩阵运算能力,在处理多维数据方面具有优势。下面是一个简化版的 TVP-SV-VAR 的例子: ```matlab function [estimates] = tvpsvvar_estimation(data, lags) % data is T-by-K matrix of time series observations. % lags specifies the number of lagged terms. [T,K] = size(data); options = optimset('MaxFunEvals', 10000,'Display','off'); for t = max(lags)+1:T % Extract relevant subset of data up to current period t subdata = data(t-lags:t-1,:); % Define parameters and priors here... params_init = ones(K*lags*K, 1); % Initial guess estimates{t} = fmincon(@(params) log_likelihood(params,subdata), ... params_init,[],[],[],[],[],[],@nonlinear_constraints,options); end function llkhd = log_likelihood(params, subdata) % Implementation of log-likelihood function goes here... end function [cineq, ceq] = nonlinear_constraints() cineq = []; ceq = []; end end ``` 这段代码提供了一种迭代优化的方式来进行参数估计[^3]。 #### R 中的 TVP-SV-VAR 模型实现 R 是统计学界广泛使用的编程语言之一,拥有丰富的扩展包支持复杂的时间序列分析任务。这里给出一段基于 `shrinkTVAR` 函数的例子: ```r library(shrinkTVAR) fit_tvp <- shrinkTVAR( data = your_data_matrix, lambda_grid = seq(0.01, 1, length.out = 50), alpha_grid = seq(-1, 1, by = .1), h = 12L, method = "cv" ) summary(fit_tvp) plot(fit_tvp) ``` 上述代码片段展示了如何调用 `shrinkTVAR` 包中的函数完成 TVP-SV-VAR 模型训练,并展示结果摘要和绘图功能[^2].
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值