我使用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%之间)而不是上下线。
答案 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
中的绘图。 ggplot2
和Lower
是Upper
函数定义的带。您可以将它们指定为您想要的任何CI级别。
使用irf
首先绘制实际冲动(此处称为ggplot2
),然后为两个置信区域添加虚线:
Value
产生类似的东西: