情节脉冲响应函数(新)

时间:2016-03-10 06:56:30

标签: r plot

我使用vars package来显示脉冲响应。例如:

library(vars)
Canada <- Canada * 1000
var <- VAR(Canada, p = 2, type = "both")
plot(irf(var, impulse = "rw", response = "U", boot = T, cumulative = FALSE,     n.ahead = 20))

然而,情节功能目前并不完全适合我的需要,我更喜欢用数据制作自己的情节。现在,我如何可视化

中的数据
irf(var, impulse = "rw", response = "U", boot = T, cumulative = FALSE,     n.ahead = 20)

?如果可能的话,我也更愿意绘制一个95%的带(填充区域在上下95%之间)而不是上下线。

1 个答案:

答案 0 :(得分:1)

假设irf中有data个对象,您可以先在data.frame中收集所需的数据,然后使用此对象在ggplot2中绘图

这一步无疑可以做得更简单,更清洁,但这就是我所拥有的:

library(dplyr)
library(tidyr)

variables <- data$irf %>% names

ir <- lapply(1:length(variables), function(e){
    data_to_plot <- data.frame(data %>% `$`(irf) %>% `[[`(variables[e])) %>%
      mutate("t" = 1:NROW(.)) %>%
      gather(.,Variable, Value, -t)

    upper_ci <- data.frame(data %>% `$`(Upper) %>% `[[`(variables[e])) %>%
      mutate("t" = 1:NROW(.)) %>%
      gather(.,Variable, Upper, -t)

    lower_ci <- data.frame(data %>% `$`(Lower) %>% `[[`(variables[e]) ) %>%
      mutate("t" = 1:NROW(.)) %>%
      gather(.,Variable, Lower, -t)

    res <- inner_join(data_to_plot, upper_ci, c("t","Variable")) %>%
           inner_join(.,lower_ci, c("t","Variable")) %>%
           mutate(impulse = paste("Shock to", variables[e])) 
}) %>% rbind_all

这会产生一个名为data.frame的{​​{1}},其设置如下:

ir

关键是您希望因素 t Variable Value Upper Lower impulse (int) (chr) (dbl) (dbl) (dbl) (chr) 1 1 Var2 1.0000000 1.0000000 1.0000000 Shock to Var2 2 2 Var2 0.7954066 0.7995073 0.7914643 Shock to Var2 3 3 Var2 0.6089447 0.6151634 0.6028292 Shock to Var2 4 4 Var2 0.4588737 0.4649281 0.4533494 Shock to Var2 5 5 Var2 0.2273798 0.2344760 0.2220514 Shock to Var2 6 6 Var2 0.1762154 0.1831608 0.1691510 Shock to Var2 7 7 Var2 0.1349820 0.1454106 0.1278052 Shock to Var2 8 8 Var2 0.1203771 0.1310155 0.1119077 Shock to Var2 9 9 Var2 0.1150205 0.1255296 0.1050281 Shock to Var2 10 10 Var2 0.1121840 0.1263839 0.1009568 Shock to Var2 .. ... ... ... ... ... ... variable的字符用于impulse中的绘图。 ggplot2LowerUpper函数定义的带。您可以将它们指定为您想要的任何CI级别。

使用irf首先绘制实际冲动(此处称为ggplot2),然后为两个置信区域添加虚线:

Value

产生类似的东西:

Impulse Response Function