• 时间序列分析(12)| 脉冲响应函数、格兰杰因果检验


    上篇介绍到,VAR模型研究的是多个时间序列变量之间的相互影响关系,但是模型估计出的参数结果及其显著水平似乎并不能直观地反映这种影响关系,而要想直观地呈现这种关系,就需要使用本篇介绍的「脉冲响应函数」(impulse response function)。

    1 脉冲响应函数

    1.1 向量移动平均(VMA)

    通过上篇的介绍,我们知道双变量的VAR模型的标准形式如下:

    通过不断迭代,可以将上式进行如下转换:

    当,,而的数学期望始终为0,则为的数学期望,记为。则有,

    通过上篇我们还知道,

    代入得到,

    上式称为VAR的移动平均形式,即VMA(vector moving averge)。

    1.2  VMA的系数矩阵()

    通过定义如下符号:

    VMA可以写成如下形式:

    可以看出,中的元素刻画了的单位变化对时间序列变量当期值的影响作用。以双变量为例,每个都是一个二行、二列的矩阵:

    • 第一行、第一列:的单位变化对的影响作用;

    • 第一行、第二列:的单位变化对的影响作用;

    • 第二行、第一列:的单位变化对的影响作用;

    • 第二行、第二列:的单位变化对的影响作用。

    每个位置的元素构成了一个脉冲响应函数,反映了不同滞后期的的单位变化对的影响的变化趋势。

    1.3 R中的函数及案例

    和上篇一样,这里仍然使用vars工具包中的相关函数。

    计算VMA的系数矩阵()的函数是Phi(),它的语法结构如下:

    Phi(x, nstep = 10)
    • 参数含义如下:

    • x:由VAR()SVAR()函数估计出的VAR模型对象;

    • nstep:的最大滞后项数,默认为10。

    Phi()函数输出的矩阵个数是nstep + 1,其中第一个为,然后依次为、、...、。

    1. library(vars)
    2. model <- VAR(Canada, p = 2type = "const")
    3. Phi(model, nstep = 2)  
    4. ## , , 1
    5. ## 
    6. ##      [,1] [,2] [,3] [,4]
    7. ## [1,]    1    0    0    0
    8. ## [2,]    0    1    0    0
    9. ## [3,]    0    0    1    0
    10. ## [4,]    0    0    0    1
    11. ## 
    12. ## , , 2
    13. ## 
    14. ##            [,1]        [,2]        [,3]        [,4]
    15. ## [1,]  1.6378206  0.16727167 -0.06311863  0.26558478
    16. ## [2,] -0.1727658  1.15042820  0.05130390 -0.47850131
    17. ## [3,] -0.2688329 -0.08106500  0.89547833  0.01213003
    18. ## [4,] -0.5807638 -0.07811707  0.01866214  0.61893150
    19. ## 
    20. ## , , 3
    21. ## 
    22. ##            [,1]       [,2]        [,3]       [,4]
    23. ## [1,]  2.0191501  0.3491150 -0.14251580  0.6512430
    24. ## [2,]  0.1676489  1.1553945 -0.01191318  0.1240154
    25. ## [3,] -0.3062245 -0.2169480  0.86759379 -0.1419466
    26. ## [4,] -0.8923428 -0.1847587  0.10271259  0.1952708

    脉冲响应函数可以通过irf()函数计算,语法结构如下:

    1. irf(x, impulse = NULL, response = NULL,
    2.     n.ahead = 10, ortho = TRUE, cumulative = FALSE, 
    3.     boot = TRUE, ci = 0.95, runs = 100, seed = NULL, ...)

    主要参数含义如下:

    • x、n.ahead:同Phi()函数的xnstep参数;

    • impulse:作为脉冲的变量;默认为所有内生变量;

    • response:作为响应的变量;默认为所有内生变量;

    • cumulative:是否计算累积的脉冲响应系数。

    1. impluse <- irf(model, n.ahead = 20)
    2. par(mfrow = c(2,2))
    3. plot(impluse)
    30778308f59848abe0f94f2d3ed44c2b.png 193d1638c31b9141cc3d7f143ba232e3.png d6c0187c669e88f47dc1060bbf3d3fa4.png 7bb39ad209ccb7a939e1bfb2dd89ffe9.png

    2 格兰杰因果检验

    若变量的「滞后值」对的当期值具有影响作用,则称是的格兰杰(Granger)原因,即对于下式中至少有一个滞后项系数不为0:

    402 Payment Required

    • 是否为0与是否是格兰杰原因无关,因为它刻画的是当期值而非滞后值对当期值的影响作用。

    格兰杰因果检验(Granger Causality Test)就是检验某(些)变量是否是其他变量的格兰杰原因,其零假设是该变量不是其他变量的格兰杰原因。若零假设为真,意味着没必要把该变量作为VAR模型的内生变量看待。

    可以使用vars工具包中的causality()函数进行格兰杰因果检验,语法结构如下:

    1. causality(x, cause = NULL, vcov.=NULL, 
    2.           boot=FALSE, boot.runs=100)

    检验变量e是否为其他变量的格兰杰原因:

    1. causality(model, cause = "e")
    2. ## $Granger
    3. ## 
    4. ##  Granger causality H0: e do not Granger-cause prod rw U
    5. ## 
    6. ## data:  VAR object model
    7. ## F-Test = 6.2768, df1 = 6, df2 = 292, p-value = 3.206e-06
    推荐阅读

    b9ebb68277070689dfe2fba5446bfd1a.png
    ggplot2基础语法系列推文汇总
    9bd8fbb41004234831fdd3f2e92cc3dc.png
    胶水函数用法的几个例子
    5c543d28c989ee71e0847e3932b18806.png
    空间计量经济模型的简单形式在R语言中的实现
    33eecea8471a5bd3f5657e1b69226ec2.png
    使用R语言的常用工具包绘制双变量填充地图
    66d587895240c1a86f6ab8adef90df80.png
    R语言基础绘图系统的拼图功能

    6e887cb8b3b511e9d0eb8cae9dc548ea.png
  • 相关阅读:
    vue怎样封装接口
    Python第二语言(十三、PySpark实战)
    FANUC机器人_KAREL编程入门学习(1)
    当配置类用@Component不断调用@Bean注解的方法,会new出新对象,但是并不会覆盖一开始注入spring容器中的那个对象
    苹果macOS Sonoma 14正式版 “黑苹果”且用且珍惜
    Springboot项目如何加密返回值和请求参数
    多旋翼无人机仿真 rotors_simulator:用键盘控制无人机飞行
    ESP32学习笔记 - 基于 ESP32 移植 LVGL8.3
    JS——Math 数学函数、toFixed 保留小数位
    WPSpell将拼写检查添加到VCL应用程序
  • 原文地址:https://blog.csdn.net/weixin_54000907/article/details/125532538