You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用plot()函数能否在同一窗口展示VAR模型的多个IRF脉冲响应函数

问题原因

vars包自带的irf对象的plot()方法底层基于grid绘图体系实现,和base R绘图的par参数体系不兼容,因此你设置par(mfrow)不会生效。

解决方案1:提取IRF数据用base R绘图(可兼容par(mfrow))

你可以直接从irf对象中提取脉冲响应估计值、置信区间上下限数据,用base R原生的plot()函数绘图,此时par参数可以正常生效,示例代码如下:

library(vars)
# 替换为你自己拟合的VAR模型Var1
data(Canada)
Var1 <- VAR(Canada, p = 2, type = "const")

# 生成你需要的多个IRF对象,示例为3个不同响应变量的IRF
irf1 <- irf(Var1, n.ahead = 10, ortho = TRUE, response = "e")
irf2 <- irf(Var1, n.ahead = 10, ortho = TRUE, response = "prod")
irf3 <- irf(Var1, n.ahead = 10, ortho = TRUE, response = "rw")
irf_list <- list(irf1, irf2, irf3)

# 设置画布布局,可自行调整行数、列数
par(mfrow = c(3,1), mar = c(4,4,2,1))

# 循环绘制每个IRF
for (i in seq_along(irf_list)) {
  irf_obj <- irf_list[[i]]
  # 提取对应冲击的IRF数据,此处以第一个冲击为例,可根据需求调整索引
  irf_val <- irf_obj$irf[[1]][,1]
  lower <- irf_obj$Lower[[1]][,1]
  upper <- irf_obj$Upper[[1]][,1]
  n_ahead <- length(irf_val)
  
  # 绘制脉冲响应曲线
  plot(0:(n_ahead-1), irf_val, type = "l", lwd = 2, col = "blue",
       xlab = "年份", ylab = "增长率", 
       main = paste0("响应变量:", irf_obj$response))
  # 绘制95%置信区间
  lines(0:(n_ahead-1), lower, lty = 2, col = "red")
  lines(0:(n_ahead-1), upper, lty = 2, col = "red")
  # 添加0参考线
  abline(h = 0, lty = 3, col = "gray")
}

解决方案2:用grid排列工具直接拼接原生IRF图

如果你不想自行编写绘图逻辑,也可以将plot.irf生成的grid对象转为可拼接的grob对象,再统一排版:

library(vars)
library(gridExtra)
library(ggplotify)

# 生成多个IRF对象
irf1 <- irf(Var1, n.ahead = 10, ortho = TRUE, response = "e")
irf2 <- irf(Var1, n.ahead = 10, ortho = TRUE, response = "prod")
irf3 <- irf(Var1, n.ahead = 10, ortho = TRUE, response = "rw")

# 将每个IRF图转为grob对象
g1 <- as.grob(~plot(irf1, main = "", xlab = "年份", ylab = "增长率"))
g2 <- as.grob(~plot(irf2, main = "", xlab = "年份", ylab = "增长率"))
g3 <- as.grob(~plot(irf3, main = "", xlab = "年份", ylab = "增长率"))

# 按3行1列布局排列
grid.arrange(g1, g2, g3, nrow = 3)

内容的提问来源于stack exchange,提问作者Joe94

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 05:54:02