我正在尝试通过 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”
答案有点延迟。原因是在您的问题正文中,您将包名称拼写为 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
无处可寻。
那么,就这样吧。
问候,托马斯