gpt4 book ai didi

r - 绘制脉冲响应函数(新)

转载 作者:行者123 更新时间:2023-12-02 09:58:43 28 4
gpt4 key购买 nike

我正在使用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% 水平之间的填充区域)而不是上下线。

最佳答案

假设您有 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.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
.. ... ... ... ... ... ...

关键点是你想要因子的字符,variableimpulse用于在 ggplot2 中绘图。 LowerUpperirf 定义的波段功能。我相信您可以将它们指定为您想要的任何 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"))

产生类似:

Impulse Response Function

关于r - 绘制脉冲响应函数(新),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35909614/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com