关于算法:R语言用向量自回归VAR进行经济数据脉冲响应研究分析

48次阅读

共计 4309 个字符,预计需要花费 11 分钟才能阅读完成。

原文链接:http://tecdat.cn/?p=9368


自从 Sims(1980)发表开创性的论文以来,向量自回归模型曾经成为宏观经济钻研中的要害工具。这篇文章介绍了 VAR 剖析的基本概念,并领导了简略模型的估算过程。

单变量自回归

VAR 代表_向量自回归_。为了了解这意味着什么,让咱们首先来看一个简略的单变量(即仅一个因变量或内生变量)自回归(AR)模型,其模式为 yt=a1yt−1+et。

平稳性

在估算此类模型之前,应始终查看所剖析的工夫序列是否稳固,即它们的均值和方差随工夫变动是恒定的,并且不显示任何趋势行为。

有一系列统计测验,例如 Dickey-Fuller,KPSS 或 Phillips-Perron 测验,以测验序列是否稳固。另一种十分常见的做法是绘制序列并查看其是否围绕恒定的平均值(即水平线)挪动。如果是这种状况,它很可能是稳固的。

自回归滞后模型

像 AR(p)模型一样,仅凭其本身的滞后对宏观经济变量进行回归可能是一种限制性很大的办法。通常,更适合的假如是还有其余因素。通过蕴含因变量的滞后值以及其余(即,外生)变量的同期和滞后值的模型来实现这种想法。同样,这些外生变量应该是稳固的。对于内生变量 yt 和外生变量 xt 例如_自回归散布滞后_或 ADL,模型能够写成

yt=a1yt−1+b0xt+b1xt−1+et.

这种 ADL 模型的预测性能可能会比简略的 AR 模型更好。然而,如果外生变量也依赖于内生变量的滞后值怎么办?这意味着 xt 也是内生的,还有进一步的空间能够改善咱们的预测。

向量自回归模型

因而,如上所述,VAR 模型能够重写为一系列独自的 ADL 模型。实际上,能够通过别离预计每个方程来预计 VAR 模型。

规范 VAR 模型的协方差矩阵是_对称的_,即,对角线右上角的元素(“上三角”)将对角线左下角的元素(“下三角”)镜像。这反映了这样一种想法,即内生变量之间的关系仅反映相关性,并且不容许做出因果关系的陈说,因为在每个方向上的影响都是雷同的。

在所谓的_结构化_ VAR(SVAR)模型的背景下剖析了同时因果关系,或更确切地说,是变量之间的构造关系,该模型对协方差矩阵施加了限度。

在本文中,我思考 VAR(2)过程。

此示例的人工样本是在 R 中生成的

set.seed(123) # 因为可复制性的思考,重置随机数发生器

# 生成样本
t <- 200 # 工夫序列察看数
k <- 2 # 内生变量数
p <- 2 # 滞后阶数

# 生成系数矩阵
A.1 <- matrix(c(-.3, .6, -.4, .5), k) # 滞后系数矩阵 1
A.2 <- matrix(c(-.1, -.2, .1, .05), k) # 滞后系数 2
A <- cbind(A.1, A.2) # 系数矩阵

# 生成序列

series <- matrix(0, k, t + 2*p) # 带有 0 的原始序列
for (i in (p + 1):(t + 2*p)){# 生成 e ~ N(0,0.5)的序列
  series[, i] <- A.1%*%series[, i-1] + A.2%*%series[, i-2] + rnorm(k, 0, .5)
}

series <- ts(t(series[, -(1:p)])) # 转换为工夫序列格局
names <- c("V1", "V2") # 重命名变量

plot.ts(series) # 绘制序列

估算值

简略 VAR 模型的参数和协方差矩阵的预计很简略。

为了预计 VAR 模型,加载并指定数据(y)和 模型。

比拟

VAR 剖析中的一个核心问题是找到滞后的阶数,以产生最佳后果。模型比拟通常基于信息规范,例如 AIC,BIC 或 HQ。通常,因为是小样本预测,AIC 优于其余规范。然而,BIC 和 HQ 在大型样本中成果很好。

能够计算规范信息规范以找到最佳模型。在此示例中,咱们应用 AIC:

通过查看,summary咱们能够看到 AIC 倡议应用 2 的阶数。

summary(var.aic) 

## VAR Estimation Results:
## ========================= 
## Endogenous variables: Series.1, Series.2 
## Deterministic variables: none 
## Sample size: 200 
## Log Likelihood: -266.065 
## Roots of the characteristic polynomial:
## 0.6611 0.6611 0.4473 0.03778
## Call:
## VAR(y = series, type = "none", lag.max = 5, ic = "AIC")
## 
## 
## Estimation results for equation Series.1: 
## ========================================= 
## Series.1 = Series.1.l1 + Series.2.l1 + Series.1.l2 + Series.2.l2 
## 
##             Estimate Std. Error t value Pr(>|t|)    
## Series.1.l1 -0.19750    0.06894  -2.865  0.00463 ** 
## Series.2.l1 -0.32015    0.06601  -4.850 2.51e-06 ***
## Series.1.l2 -0.23210    0.07586  -3.060  0.00252 ** 
## Series.2.l2  0.04687    0.06478   0.724  0.47018    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Residual standard error: 0.4638 on 196 degrees of freedom
## Multiple R-Squared: 0.2791,  Adjusted R-squared: 0.2644 
## F-statistic: 18.97 on 4 and 196 DF,  p-value: 3.351e-13 
## 
## 
## Estimation results for equation Series.2: 
## ========================================= 
## Series.2 = Series.1.l1 + Series.2.l1 + Series.1.l2 + Series.2.l2 
## 
##             Estimate Std. Error t value Pr(>|t|)    
## Series.1.l1  0.67381    0.07314   9.213  < 2e-16 ***
## Series.2.l1  0.34136    0.07004   4.874 2.25e-06 ***
## Series.1.l2 -0.18430    0.08048  -2.290   0.0231 *  
## Series.2.l2  0.06903    0.06873   1.004   0.3164    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Residual standard error: 0.4921 on 196 degrees of freedom
## Multiple R-Squared: 0.3574,  Adjusted R-squared: 0.3443 
## F-statistic: 27.26 on 4 and 196 DF,  p-value: < 2.2e-16 
## 
## 
## 
## Covariance matrix of residuals:
##          Series.1 Series.2
## Series.1  0.21417 -0.03116
## Series.2 -0.03116  0.24154
## 
## Correlation matrix of residuals:
##          Series.1 Series.2
## Series.1    1.000   -0.137
## Series.2   -0.137    1.000`

仔细观察后果,咱们能够将实在值 与模型的参数估计值进行比拟:

实在值`

A
##      [,1] [,2] [,3] [,4]
## [1,] -0.3 -0.4 -0.1 0.10
## [2,]  0.6  0.5 -0.2 0.05
# Extract coefficients, standard errors etc. from the object
# produced by the VAR function
est_coefs <- coef(var.aic)

# 仅提取两个因变量的系数,并将它们组合为一个矩阵

# 输入四舍五入的估计值
round(est_coefs, 2)
##      Series.1.l1 Series.2.l1 Series.1.l2 Series.2.l2
## [1,]       -0.20       -0.32       -0.23        0.05
## [2,]        0.67        0.34       -0.18        0.07

所有估计值都有正确的符号,并且绝对靠近其实在值。

脉冲响应

一旦咱们确定了最终的 VAR 模型,就必须解释其预计的参数值。因为 VAR 模型中的所有变量都相互依赖,因而单个参数值仅提供 无限信息。为了更好地理解模型的动静行为,应用了脉冲响应(IR)。能够绘制响应变量的轨迹,产生在许多宏观论文中都能够找到的那些波浪曲线。

在上面的示例中,咱们想晓得受到冲击后序列 2 的行为。指定了咱们想要脉冲响应的模型和变量后,咱们将工夫范畴设置 n.ahead 为 20。该图给出了序列 2 的响应。

# 计算脉冲响应

# 绘制脉冲响应
plot(ir.1)

请留神,_正交_选项很重要,因为它阐明了变量之间的关系。在咱们的示例中,咱们曾经晓得不存在这样的关系,因为真正的方差 - 协方差矩阵(或简称协方差矩阵)在非对角元素中是对角为零的对角线。然而,因为具备 200 个观测值的无限工夫序列数据限度了参数估计的精度,因而协方差矩阵的非对角元素具备正值,这意味着 非零同时效应。为了在 IR 中排除这种状况,咱们设置了ortho = FALSE。后果是,脉冲响应在周期 0 中从零开始。也能够尝试另一种办法并进行设置ortho = TRUE,那么绘图从零开始。

要理解这一点,还能够计算并绘制_累积_脉冲响应函数,以理解 总体长期影响:

# 计算脉冲响应

# 绘图
plot(ir.2)

咱们看到,只管序列 2 对序列 1 中的 反馈在某些期间是负面的,但总体成果却是显着侧面。


最受欢迎的见解

1. 在 python 中应用 lstm 和 pytorch 进行工夫序列预测

2.python 中利用长短期记忆模型 lstm 进行工夫序列预测剖析

3. 应用 r 语言进行工夫序列(arima,指数平滑)剖析

4.r 语言多元 copula-garch- 模型工夫序列预测

5.r 语言 copulas 和金融工夫序列案例

6. 应用 r 语言随机稳定模型 sv 解决工夫序列中的随机稳定

7.r 语言工夫序列 tar 阈值自回归模型

8.r 语言 k -shape 工夫序列聚类办法对股票价格工夫序列聚类

9.python3 用 arima 模型进行工夫序列预测

正文完
 0