r - Plot() 脉冲响应函数 - 在一个窗口中显示多个?
问题描述
我估计了一个 VAR - 模型,我想在一个窗口中显示多个 IRF。这可能与 plot() 吗?我试过par(mfrow)
了,但没有用。任何提示或想法?
提前致谢
irf1 <- irf(Var1, n.ahead = 10, ortho = T,response="y2")
plot(irf1,main = "",xlab ="years",ylab="growth rate")
解决方案
如果 ggplot2 是适合您的解决方案,此功能可以提供帮助:
例子
library(tidyverse)
tsp.var.irf <- function(irf){
if (class(irf) %in% "varirf") {
} else{
stop("Only 'varirf' class object from vars::irf()")
}
fortify <- function(data){
result <- vector(mode = "list",length = 0L)
for (d in 1:length(data)) {
result[[length(result)+1]]<- tibble::tibble(imp = names(data)[d],
lag = 0:{nrow(data[[d]])-1},
tibble::as_tibble(data[[d]]))
}
data <- tidyr::unnest(tibble::tibble(result),cols = result)
return(data)}
data_irf <- fortify(irf$irf)
data_lower <- fortify(irf$Lower)
data_upper <- fortify(irf$Upper)
suppressMessages(
plot_data <- tibble::add_column(data_irf,type = "mean") %>%
dplyr::full_join(tibble::add_column(data_lower,type = "lower")) %>%
dplyr::full_join(tibble::add_column(data_upper,type = "upper")) %>%
tidyr::pivot_longer(cols = -c(imp,lag,type)) %>%
dplyr::mutate(imp = paste(imp,"(imp.)"),
name = paste(name,"(res.)")))
plot <- ggplot2::ggplot(plot_data) +
ggplot2::geom_line(ggplot2::aes(x = lag,value,
lty = type),show.legend = F) +
ggplot2::facet_grid(cols = ggplot2::vars(imp),
rows = ggplot2::vars(name)) +
ggplot2::scale_linetype_manual(values = c("lower"=2,
"upper"=2,
"mean"=1)) +
ggplot2::geom_hline(yintercept = 0,lty = 3) +
ggplot2::scale_x_continuous(labels = as.integer)
return(plot)
}
library(vars)
#> Loading required package: MASS
#>
#> Attaching package: 'MASS'
#> The following object is masked from 'package:dplyr':
#>
#> select
#> Loading required package: strucchange
#> Loading required package: zoo
#>
#> Attaching package: 'zoo'
#> The following objects are masked from 'package:base':
#>
#> as.Date, as.Date.numeric
#> Loading required package: sandwich
#>
#> Attaching package: 'strucchange'
#> The following object is masked from 'package:stringr':
#>
#> boundary
#> Loading required package: urca
#> Loading required package: lmtest
data("Canada")
model <- VAR(Canada,3)
model_irf <- irf(model)
tsp.var.irf(model_irf)
由reprex 包于 2022-02-11 创建(v1.0.0)
推荐阅读
- javascript - onsubmit JS 脚本不会重定向到正确的位置
- css - 如何居中反应选择元素
- laravel - 如何在 laravel 中每 3 个月做一次 cron 工作?
- c# - 我们如何访问 Roslyn API 中的 DisabledTextTrivia?
- sql - System.Data.SqlClient 包已安装,但在 Xamarin Forms 应用程序中未被识别为 Using 语句
- java - 如何使用属性文件中的信息实例化一个类?
- java - 如何安全地转换通用通配符“?” Java 中的已知类型参数?
- python - 如何在 AWS SAM 中集中重用自定义 Python 函数?
- javascript - 使用 chartjs 在 React 中创建可滚动的折线图
- sql - 如果在 BigQuery 中的平方根内计算结果为负,如何将数字变为零?