绘制脉冲响应函数(新)

Joh*_*nny 5 plot r

我正在使用vars 包来可视化脉冲响应。例子:

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))
Run Code Online (Sandbox Code Playgroud)

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

irf(var, impulse = "rw", response = "U", boot = T, cumulative = FALSE,     n.ahead = 20)
Run Code Online (Sandbox Code Playgroud)

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

kri*_*ang 3

假设你有你的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
Run Code Online (Sandbox Code Playgroud)

这会产生具有以下设置的调用 data.frameir

       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
..   ...      ...       ...       ...       ...           ...
Run Code Online (Sandbox Code Playgroud)

variable关键点是您需要用于因子和impulse绘图的字符ggplot2LowerUpper是由函数定义的带irf。我相信您可以将它们指定为您想要的任何 CI 级别。

首先ggplot2绘制实际脉冲(Value此处称为),然后为两个置信带添加虚线:

ggplot(ir, aes(x = t, y = Value, colour = Variable))  +
  geom_line(size = 1) +
  geom_line(aes(x = t, y = Upper, colour = Variable), linetype = 2, size = 1) +
  geom_line(aes(x = t, y = Lower, colour = Variable), linetype = 2, size = 1) +
  scale_colour_manual(values = c("steelblue", "firebrick2", "forestgreen")) +
  scale_x_continuous(limits = c(1,20), breaks = 1:20) +
  facet_wrap(~impulse, ncol = 1) +
  xlab("Time") +
  ylab("") +
  theme(legend.title = element_blank(),
        legend.position = "bottom",
        text = element_text(face = "bold"))
Run Code Online (Sandbox Code Playgroud)

产生类似的东西:

脉冲响应函数