如何使用 GitHub 中提供的代码从 R 中的 BSVARS 包计算贝叶斯估计 SVAR 的脉冲响应?

问题描述 投票:0回答:1

我正在尝试通过 GitHub 中提供的以下代码,使用 BSVARS 包为包中已给定的模型生成结构 var 的脉冲响应。但我收到错误。我该如何纠正这个错误?

library(bsvars)
data(us_fiscal_lsuw)
specification  = specify_bsvar_sv$new(us_fiscal_lsuw, p = 4)
set.seed(123)
burn_in        = estimate_bsvar_sv(10, specification)
posterior      = estimate_bsvar_sv(50, burn_in$get_last_draw())
# normalise the posterior
BB            = posterior$last_draw$starting_values$B     
B_hat         = diag(sign(diag(BB))) %*% BB                
bsvars::normalise_posterior(posterior, B_hat)              

compute_impulse_responses <- function(posterior, horizon) {
  
  stopifnot("Argument posterior must contain estimation output from the estimate function." = any(class(posterior)[1] == c("PosteriorBSVAR", "PosteriorBSVARMSH", "PosteriorBSVARMIX", "PosteriorBSVARSV")))
  stopifnot("The posterior output must be normalised for the impulse responses to be interpretable." = posterior$is_normalised())
  stopifnot("Argument horizon must be a positive integer number." = horizon > 0 & horizon %% 1 == 0)
  
  posterior_B     = posterior$posterior$B
  posterior_A     = posterior$posterior$A
  N               = dim(posterior_A)[1]
  p               = (dim(posterior_A)[2] - 1) / N
  S               = dim(posterior_A)[3]
  
  qqq             = .Call(`_bsvars_bsvars_ir`, posterior_B, posterior_A, horizon, p)
  
  irfs            = array(NA, c(N, N, horizon + 1, S))
  for (s in 1:S) irfs[,,,s] = qqq[s][[1]]
  class(irfs)     = "PosteriorIR"
  
  return(irfs)
}

irf           = compute_impulse_responses(posterior, horizon = 8)

Error in compute_impulse_responses(posterior, horizon = 8) : 
  object '_bsvars_bsvars_ir' not found

起初我对第一个(如果不是争论)有疑问,但我纠正了它。但我遇到了这个错误,我不知道该怎么办?

compute_impulse_responses(posterior, Horizon = 8) 中的错误: 找不到对象“_bsvars_bsvars_ir”

r bayesian vector-auto-regression
1个回答
0
投票

答案有点延迟。原因是在您的问题正文中,您将包名称拼写为 BSVARS,这与 bsvars 不同,所以在当天,我忽略了此条目,因为它与我的包不对应。

您想要做的问题是您正在混合软件包版本。您必须使用

install.packages("bsvars")
安装了 v1.0.0,但想使用开发者版本包中的功能
compute_impulse_responses

嗯,最好的方法是使用

devtools::install_github("bsvars/bsvars")
安装开发人员版本的软件包,包括最新功能(但不一定通过 CRAN 存储库检查)。

问题是这个包使用代码片段中可见的C++代码:

qqq             = .Call(`_bsvars_bsvars_ir`, posterior_B, posterior_A, horizon, p)

此结构仅用作 R 包中函数的定义。它在像您这样的 R 脚本中不起作用,因为调用的 C++ 函数

_bsvars_bsvars_ir
无处可寻。

那么,就这样吧。

问候,托马斯

© www.soinside.com 2019 - 2024. All rights reserved.