From c9ba84f76ddf8e97f6152632ffaf896bb52f0965 Mon Sep 17 00:00:00 2001 From: adamwang15 Date: Mon, 15 Jul 2024 20:34:06 +1000 Subject: [PATCH 1/4] transpose everything #27 --- R/estimate.BSVARSIGN.R | 13 +++++++-- R/specify_bsvarSIGN.R | 66 ++++++++++++++++++++---------------------- 2 files changed, 42 insertions(+), 37 deletions(-) diff --git a/R/estimate.BSVARSIGN.R b/R/estimate.BSVARSIGN.R index ab19e9d..19405cd 100644 --- a/R/estimate.BSVARSIGN.R +++ b/R/estimate.BSVARSIGN.R @@ -96,16 +96,23 @@ estimate.BSVARSIGN = function(specification, S, thin = 1, show_progress = TRUE) # get the inputs to estimation # prior = specification$last_draw$prior$get_prior() - prior = specification$prior + prior = specification$prior$get_prior() starting_values = specification$starting_values$get_starting_values() identification = specification$identification$get_identification() max_tries = identification$max_tries data_matrices = specification$data_matrices$get_data_matrices() p = specification$p + + prior$B = t(prior$A) + prior$Ysoc = t(prior$Ysoc) + prior$Xsoc = t(prior$Xsoc) + prior$Ysur = t(prior$Ysur) + prior$Xsur = t(prior$Xsur) + Y = t(data_matrices$Y) + X = t(data_matrices$X) # estimation - qqq = .Call(`_bsvarSIGNs_bsvar_sign_cpp`, S, p, - data_matrices$Y, data_matrices$X, identification$VB, + qqq = .Call(`_bsvarSIGNs_bsvar_sign_cpp`, S, p, Y, X, identification$VB, identification$sign_irf, identification$sign_narrative, identification$sign_B, identification$zero_irf, prior, starting_values, show_progress, thin, max_tries) diff --git a/R/specify_bsvarSIGN.R b/R/specify_bsvarSIGN.R index 933f4b6..40ca716 100644 --- a/R/specify_bsvarSIGN.R +++ b/R/specify_bsvarSIGN.R @@ -139,23 +139,20 @@ specify_prior_bsvarSIGN = R6::R6Class( "PriorBSVARSIGN", public = list( + #' @field p a positive integer - the number of lags. + p = 1, + #' @field hyper a \code{(N+3)xS} matrix of hyper-parameters \eqn{\mu, \delta, \lambda, \psi}. hyper = matrix(), - #' @field B a \code{KxN} normal prior mean matrix for the autoregressive + #' @field A a \code{NxK} normal prior mean matrix for the autoregressive #' parameters. - B = matrix(), + A = matrix(), #' @field V a \code{KxK} matrix determining the normal prior column-specific #' covariance for the autoregressive parameters. V = matrix(), - #' @field Vp a \code{px1} vector of lag shrinkage level. - Vp = matrix(), - - #' @field Vd a \code{(d+1)x1} vector of (large) variances for constants. - Vd = matrix(), - #' @field S an \code{NxN} matrix determining the inverted-Wishart prior scale #' of error terms covariance matrix. S = matrix(), @@ -167,22 +164,22 @@ specify_prior_bsvarSIGN = R6::R6Class( #' @field data an \code{TxN} matrix of observations. data = matrix(), - #' @field Y an \code{TxN} matrix of dependent variables. + #' @field Y an \code{NxT} matrix of dependent variables. Y = matrix(), - #' @field X an \code{TxK} matrix of independent variables. + #' @field X an \code{KxT} matrix of independent variables. X = matrix(), #' @field Ysoc an \code{NxN} matrix with the sum-of-coefficients dummy observations. Ysoc = matrix(), - #' @field Xsoc an \code{NxK} matrix with the sum-of-coefficients dummy observations. + #' @field Xsoc an \code{KxN} matrix with the sum-of-coefficients dummy observations. Xsoc = matrix(), #' @field Ysur an \code{NxN} matrix with the single-unit-root dummy observations. Ysur = matrix(), - #' @field Xsur an \code{NxK} matrix with the single-unit-root dummy observations. + #' @field Xsur an \code{KxN} matrix with the single-unit-root dummy observations. Xsur = matrix(), #' @field mu.scale a positive scalar - the shape of the gamma prior for \eqn{\mu}. @@ -224,7 +221,7 @@ specify_prior_bsvarSIGN = R6::R6Class( #' prior = specify_prior_bsvarSIGN$new(oil, p = 1) #' prior$B # show autoregressive prior mean #' - initialize = function(data, p, exogenous = NULL, stationary = rep(FALSE, dim(data)[2])) { + initialize = function(data, p, exogenous = NULL, stationary = rep(FALSE, ncol(data))) { stopifnot("Argument p must be a positive integer number." = p > 0 & p %% 1 == 0) @@ -245,9 +242,7 @@ specify_prior_bsvarSIGN = R6::R6Class( B = matrix(0, K, N) B[1:N,] = diag(!stationary) - Vp = (1:p)^-2 - Vd = rep(100, 1 + d) - V = diag(c(kronecker(Vp, rep(1, N)), Vd)) + V = diag(c(kronecker((1:p)^-2, rep(1, N)), rep(100, 1 + d))) s2.ols = rep(NA, N) for (n in 1:N) { @@ -282,20 +277,18 @@ specify_prior_bsvarSIGN = R6::R6Class( # } # Xstar = cbind(Xstar, c(rep(0, N), 1), matrix(0, N + 1, d)) - self$Y = Y - self$X = X - self$Vp = Vp - self$Vd = Vd - + self$p = p self$hyper = hyper - self$B = B + self$A = t(B) self$V = V self$S = diag(N) self$nu = N + 2 - self$Ysoc = Ysoc - self$Xsoc = Xsoc - self$Ysur = Ysur - self$Xsur = Xsur + self$Y = t(Y) + self$X = t(X) + self$Ysoc = t(Ysoc) + self$Xsoc = t(Xsoc) + self$Ysur = t(Ysur) + self$Xsur = t(Xsur) self$mu.scale = scale self$mu.shape = shape self$delta.scale = scale @@ -316,11 +309,10 @@ specify_prior_bsvarSIGN = R6::R6Class( #' get_prior = function(){ list( + p = self$p, hyper = self$hyper, - B = self$B, + A = self$A, V = self$V, - Vp = self$Vp, - Vd = self$Vd, S = self$S, nu = self$nu, Ysoc = self$Ysoc, @@ -373,10 +365,16 @@ specify_prior_bsvarSIGN = R6::R6Class( init = narrow_hyper(model, hyper) prior = self$get_prior() + prior$B = t(prior$A) + prior$Ysoc = t(prior$Ysoc) + prior$Xsoc = t(prior$Xsoc) + prior$Ysur = t(prior$Ysur) + prior$Xsur = t(prior$Xsur) + result = stats::optim( init, \(x) -log_posterior_hyper(extend_hyper(hyper, model, matrix(x)), - model, self$Y, self$X, prior), + model, t(self$Y), t(self$X), prior), method = 'L-BFGS-B', lower = rep(0, length(init)), upper = init * 100, @@ -393,7 +391,8 @@ specify_prior_bsvarSIGN = R6::R6Class( variance = e$vectors %*% diag(as.vector(1 / abs(e$values))) %*% t(e$vectors) } - self$hyper = sample_hyper(S, burn_in, mode, model, self$Y, self$X, variance, prior) + self$hyper = sample_hyper(S, burn_in, mode, model, + t(self$Y), t(self$X), variance, prior) self$hyper = self$hyper[, -(1:burn_in)] } # END estimate_hyper @@ -716,15 +715,14 @@ specify_bsvarSIGN = R6::R6Class( B[lower.tri(B, diag = TRUE)] = TRUE self$data_matrices = bsvars::specify_data_matrices$new(data, p, exogenous) - self$data_matrices$Y = t(self$data_matrices$Y) - self$data_matrices$X = t(self$data_matrices$X) self$identification = specify_identification_bsvarSIGN$new(N, sign_irf, sign_narrative, sign_B, zero_irf, max_tries) - self$prior = specify_prior_bsvarSIGN$new(data, p, exogenous, stationary) + self$prior = specify_prior_bsvarSIGN$new(data, p, exogenous, + stationary) self$starting_values = bsvars::specify_starting_values_bsvar$new(N, self$p, d) }, # END initialize From e05665cba48fb19166fbfc64567db6fe00fbf5c4 Mon Sep 17 00:00:00 2001 From: adamwang15 Date: Mon, 15 Jul 2024 20:38:55 +1000 Subject: [PATCH 2/4] element-wise multiplication of prior V and psi #27 --- inst/varia/nicetry.R | 9 +++++---- src/bsvars_sign.cpp | 7 +++++-- src/sample_hyper.cpp | 7 ++++--- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/inst/varia/nicetry.R b/inst/varia/nicetry.R index 6b428e9..6344bae 100644 --- a/inst/varia/nicetry.R +++ b/inst/varia/nicetry.R @@ -4,7 +4,7 @@ name = sapply(1:7, \(i) data$ShortDescr[[i]][[1]]) data = data$y colnames(data) = name -data = optimism +# data = optimism spec = specify_bsvarSIGN$new(data, p = 4) @@ -12,9 +12,10 @@ start_time = Sys.time() spec$prior$estimate_hyper(S = 10000, burn_in = 5000, mu = TRUE, delta = TRUE, lambda = TRUE, psi = TRUE) -# post = estimate(spec, S = 1000) -# irf = compute_impulse_responses(post, horizon = 40) -# plot(irf, probability = 0.68) +post = estimate(spec, S = 100) +class(post) = "PosteriorBSVAR" +irf = compute_impulse_responses(post, horizon = 40) +plot(irf, probability = 0.68) end_time = Sys.time() end_time - start_time diff --git a/src/bsvars_sign.cpp b/src/bsvars_sign.cpp index ead6630..bc6133b 100644 --- a/src/bsvars_sign.cpp +++ b/src/bsvars_sign.cpp @@ -79,6 +79,7 @@ Rcpp::List bsvar_sign_cpp( double w, mu, delta, lambda; vec hyper, psi; + vec prior_v = as(prior["V"]).diag(); mat B, Sigma, chol_Sigma, h_invp, Q, shocks; mat prior_V, prior_S, post_B, post_V, post_S; @@ -103,8 +104,10 @@ Rcpp::List bsvar_sign_cpp( psi = hyper.rows(3, N + 2); // update Minnesota prior - prior_V = diagmat(join_vert(lambda*lambda * kron(as(prior["Vp"]), 1 / psi), - as(prior["Vd"]))); + prior_v.rows(0, N * lags - 1) = lambda * lambda * + prior_v.rows(0, N * lags - 1) % + repmat(1 / psi, lags, 1); + prior_V = diagmat(prior_v); prior_S = diagmat(psi); // update dummy observation prior diff --git a/src/sample_hyper.cpp b/src/sample_hyper.cpp index 9e8ee58..70a0889 100644 --- a/src/sample_hyper.cpp +++ b/src/sample_hyper.cpp @@ -143,6 +143,7 @@ double log_ml_dummy( ) { int N = Y.n_cols; + int p = as(prior["p"]); double mu = hyper(0); double delta = hyper(1); double lambda = hyper(2); @@ -150,9 +151,9 @@ double log_ml_dummy( // update Minnesota prior mat prior_B = as(prior["B"]); - mat prior_V = diagmat(join_vert( - lambda*lambda * kron(as(prior["Vp"]), 1 / psi), - as(prior["Vd"]))); + vec v = as(prior["V"]).diag(); + v.rows(0, N*p - 1) = lambda * lambda * v.rows(0, N*p - 1) % repmat(1 / psi, p, 1); + mat prior_V = diagmat(v); mat prior_S = diagmat(psi); int prior_nu = as(prior["nu"]); From 3cf0f80a0bb16408f742a16815dc052253e5cb1e Mon Sep 17 00:00:00 2001 From: adamwang15 Date: Mon, 15 Jul 2024 21:57:13 +1000 Subject: [PATCH 3/4] change lags to p --- data/oil.rda | Bin 13237 -> 13318 bytes inst/include/bsvarSIGNs_RcppExports.h | 4 ++-- man/specify_prior_bsvarSIGN.Rd | 18 ++++++++---------- src/RcppExports.cpp | 12 ++++++------ src/bsvars_sign.cpp | 20 ++++++++++++-------- 5 files changed, 28 insertions(+), 26 deletions(-) diff --git a/data/oil.rda b/data/oil.rda index ca5e5e8e5e1efc2c903e78ba6f66983a0e8ed14e..cd1e14ba6360366a70ab6642283b7be9aecea8c0 100644 GIT binary patch literal 13318 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%0AX& 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 Q(I5O>$rRy2L5qZ%T-l#SK>z>% literal 13237 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

Lu+~w>1lMWKvzZ= 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 >(rcpp_result_gen); } - inline Rcpp::List bsvar_sign_cpp(const int& S, const int& lags, const arma::mat& Y, const arma::mat& X, const arma::field& VB, const arma::cube& sign_irf, const arma::mat& sign_narrative, const arma::mat& sign_B, const arma::field& Z, const Rcpp::List& prior, const Rcpp::List& starting_values, const bool show_progress = true, const int thin = 100, const int& max_tries = 10000) { + inline Rcpp::List bsvar_sign_cpp(const int& S, const int& p, const arma::mat& Y, const arma::mat& X, const arma::field& VB, const arma::cube& sign_irf, const arma::mat& sign_narrative, const arma::mat& sign_B, const arma::field& Z, const Rcpp::List& prior, const Rcpp::List& starting_values, const bool show_progress = true, const int thin = 100, const int& max_tries = 10000) { typedef SEXP(*Ptr_bsvar_sign_cpp)(SEXP,SEXP,SEXP,SEXP,SEXP,SEXP,SEXP,SEXP,SEXP,SEXP,SEXP,SEXP,SEXP,SEXP); static Ptr_bsvar_sign_cpp p_bsvar_sign_cpp = NULL; if (p_bsvar_sign_cpp == NULL) { @@ -98,7 +98,7 @@ namespace bsvarSIGNs { RObject rcpp_result_gen; { RNGScope RCPP_rngScope_gen; - rcpp_result_gen = p_bsvar_sign_cpp(Shield(Rcpp::wrap(S)), Shield(Rcpp::wrap(lags)), Shield(Rcpp::wrap(Y)), Shield(Rcpp::wrap(X)), Shield(Rcpp::wrap(VB)), Shield(Rcpp::wrap(sign_irf)), Shield(Rcpp::wrap(sign_narrative)), Shield(Rcpp::wrap(sign_B)), Shield(Rcpp::wrap(Z)), Shield(Rcpp::wrap(prior)), Shield(Rcpp::wrap(starting_values)), Shield(Rcpp::wrap(show_progress)), Shield(Rcpp::wrap(thin)), Shield(Rcpp::wrap(max_tries))); + rcpp_result_gen = p_bsvar_sign_cpp(Shield(Rcpp::wrap(S)), Shield(Rcpp::wrap(p)), Shield(Rcpp::wrap(Y)), Shield(Rcpp::wrap(X)), Shield(Rcpp::wrap(VB)), Shield(Rcpp::wrap(sign_irf)), Shield(Rcpp::wrap(sign_narrative)), Shield(Rcpp::wrap(sign_B)), Shield(Rcpp::wrap(Z)), Shield(Rcpp::wrap(prior)), Shield(Rcpp::wrap(starting_values)), Shield(Rcpp::wrap(show_progress)), Shield(Rcpp::wrap(thin)), Shield(Rcpp::wrap(max_tries))); } if (rcpp_result_gen.inherits("interrupted-error")) throw Rcpp::internal::InterruptedException(); diff --git a/man/specify_prior_bsvarSIGN.Rd b/man/specify_prior_bsvarSIGN.Rd index 4d32ae4..f6ea882 100644 --- a/man/specify_prior_bsvarSIGN.Rd +++ b/man/specify_prior_bsvarSIGN.Rd @@ -45,18 +45,16 @@ prior$estimate_hyper(S = 5) \section{Public fields}{ \if{html}{\out{

}} \describe{ +\item{\code{p}}{a positive integer - the number of lags.} + \item{\code{hyper}}{a \code{(N+3)xS} matrix of hyper-parameters \eqn{\mu, \delta, \lambda, \psi}.} -\item{\code{B}}{a \code{KxN} normal prior mean matrix for the autoregressive +\item{\code{A}}{a \code{NxK} normal prior mean matrix for the autoregressive parameters.} \item{\code{V}}{a \code{KxK} matrix determining the normal prior column-specific covariance for the autoregressive parameters.} -\item{\code{Vp}}{a \code{px1} vector of lag shrinkage level.} - -\item{\code{Vd}}{a \code{(d+1)x1} vector of (large) variances for constants.} - \item{\code{S}}{an \code{NxN} matrix determining the inverted-Wishart prior scale of error terms covariance matrix.} @@ -65,17 +63,17 @@ inverted-Wishart prior for error terms covariance matrix.} \item{\code{data}}{an \code{TxN} matrix of observations.} -\item{\code{Y}}{an \code{TxN} matrix of dependent variables.} +\item{\code{Y}}{an \code{NxT} matrix of dependent variables.} -\item{\code{X}}{an \code{TxK} matrix of independent variables.} +\item{\code{X}}{an \code{KxT} matrix of independent variables.} \item{\code{Ysoc}}{an \code{NxN} matrix with the sum-of-coefficients dummy observations.} -\item{\code{Xsoc}}{an \code{NxK} matrix with the sum-of-coefficients dummy observations.} +\item{\code{Xsoc}}{an \code{KxN} matrix with the sum-of-coefficients dummy observations.} \item{\code{Ysur}}{an \code{NxN} matrix with the single-unit-root dummy observations.} -\item{\code{Xsur}}{an \code{NxK} matrix with the single-unit-root dummy observations.} +\item{\code{Xsur}}{an \code{KxN} matrix with the single-unit-root dummy observations.} \item{\code{mu.scale}}{a positive scalar - the shape of the gamma prior for \eqn{\mu}.} @@ -114,7 +112,7 @@ Create a new prior specification PriorBSVAR. data, p, exogenous = NULL, - stationary = rep(FALSE, dim(data)[2]) + stationary = rep(FALSE, ncol(data)) )}\if{html}{\out{
}} } diff --git a/src/RcppExports.cpp b/src/RcppExports.cpp index aef846b..da784b8 100644 --- a/src/RcppExports.cpp +++ b/src/RcppExports.cpp @@ -127,12 +127,12 @@ RcppExport SEXP _bsvarSIGNs_bsvarSIGNs_ir(SEXP posterior_BSEXP, SEXP posterior_T return rcpp_result_gen; } // bsvar_sign_cpp -Rcpp::List bsvar_sign_cpp(const int& S, const int& lags, const arma::mat& Y, const arma::mat& X, const arma::field& VB, const arma::cube& sign_irf, const arma::mat& sign_narrative, const arma::mat& sign_B, const arma::field& Z, const Rcpp::List& prior, const Rcpp::List& starting_values, const bool show_progress, const int thin, const int& max_tries); -static SEXP _bsvarSIGNs_bsvar_sign_cpp_try(SEXP SSEXP, SEXP lagsSEXP, SEXP YSEXP, SEXP XSEXP, SEXP VBSEXP, SEXP sign_irfSEXP, SEXP sign_narrativeSEXP, SEXP sign_BSEXP, SEXP ZSEXP, SEXP priorSEXP, SEXP starting_valuesSEXP, SEXP show_progressSEXP, SEXP thinSEXP, SEXP max_triesSEXP) { +Rcpp::List bsvar_sign_cpp(const int& S, const int& p, const arma::mat& Y, const arma::mat& X, const arma::field& VB, const arma::cube& sign_irf, const arma::mat& sign_narrative, const arma::mat& sign_B, const arma::field& Z, const Rcpp::List& prior, const Rcpp::List& starting_values, const bool show_progress, const int thin, const int& max_tries); +static SEXP _bsvarSIGNs_bsvar_sign_cpp_try(SEXP SSEXP, SEXP pSEXP, SEXP YSEXP, SEXP XSEXP, SEXP VBSEXP, SEXP sign_irfSEXP, SEXP sign_narrativeSEXP, SEXP sign_BSEXP, SEXP ZSEXP, SEXP priorSEXP, SEXP starting_valuesSEXP, SEXP show_progressSEXP, SEXP thinSEXP, SEXP max_triesSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::traits::input_parameter< const int& >::type S(SSEXP); - Rcpp::traits::input_parameter< const int& >::type lags(lagsSEXP); + Rcpp::traits::input_parameter< const int& >::type p(pSEXP); Rcpp::traits::input_parameter< const arma::mat& >::type Y(YSEXP); Rcpp::traits::input_parameter< const arma::mat& >::type X(XSEXP); Rcpp::traits::input_parameter< const arma::field& >::type VB(VBSEXP); @@ -145,15 +145,15 @@ BEGIN_RCPP Rcpp::traits::input_parameter< const bool >::type show_progress(show_progressSEXP); Rcpp::traits::input_parameter< const int >::type thin(thinSEXP); Rcpp::traits::input_parameter< const int& >::type max_tries(max_triesSEXP); - rcpp_result_gen = Rcpp::wrap(bsvar_sign_cpp(S, lags, Y, X, VB, sign_irf, sign_narrative, sign_B, Z, prior, starting_values, show_progress, thin, max_tries)); + rcpp_result_gen = Rcpp::wrap(bsvar_sign_cpp(S, p, Y, X, VB, sign_irf, sign_narrative, sign_B, Z, prior, starting_values, show_progress, thin, max_tries)); return rcpp_result_gen; END_RCPP_RETURN_ERROR } -RcppExport SEXP _bsvarSIGNs_bsvar_sign_cpp(SEXP SSEXP, SEXP lagsSEXP, SEXP YSEXP, SEXP XSEXP, SEXP VBSEXP, SEXP sign_irfSEXP, SEXP sign_narrativeSEXP, SEXP sign_BSEXP, SEXP ZSEXP, SEXP priorSEXP, SEXP starting_valuesSEXP, SEXP show_progressSEXP, SEXP thinSEXP, SEXP max_triesSEXP) { +RcppExport SEXP _bsvarSIGNs_bsvar_sign_cpp(SEXP SSEXP, SEXP pSEXP, SEXP YSEXP, SEXP XSEXP, SEXP VBSEXP, SEXP sign_irfSEXP, SEXP sign_narrativeSEXP, SEXP sign_BSEXP, SEXP ZSEXP, SEXP priorSEXP, SEXP starting_valuesSEXP, SEXP show_progressSEXP, SEXP thinSEXP, SEXP max_triesSEXP) { SEXP rcpp_result_gen; { Rcpp::RNGScope rcpp_rngScope_gen; - rcpp_result_gen = PROTECT(_bsvarSIGNs_bsvar_sign_cpp_try(SSEXP, lagsSEXP, YSEXP, XSEXP, VBSEXP, sign_irfSEXP, sign_narrativeSEXP, sign_BSEXP, ZSEXP, priorSEXP, starting_valuesSEXP, show_progressSEXP, thinSEXP, max_triesSEXP)); + rcpp_result_gen = PROTECT(_bsvarSIGNs_bsvar_sign_cpp_try(SSEXP, pSEXP, YSEXP, XSEXP, VBSEXP, sign_irfSEXP, sign_narrativeSEXP, sign_BSEXP, ZSEXP, priorSEXP, starting_valuesSEXP, show_progressSEXP, thinSEXP, max_triesSEXP)); } Rboolean rcpp_isInterrupt_gen = Rf_inherits(rcpp_result_gen, "interrupted-error"); if (rcpp_isInterrupt_gen) { diff --git a/src/bsvars_sign.cpp b/src/bsvars_sign.cpp index bc6133b..e077562 100644 --- a/src/bsvars_sign.cpp +++ b/src/bsvars_sign.cpp @@ -17,7 +17,7 @@ using namespace arma; // [[Rcpp::export]] Rcpp::List bsvar_sign_cpp( const int& S, // number of draws from the posterior - const int& lags, // number of lags + const int& p, // number of lags const arma::mat& Y, // NxT dependent variables const arma::mat& X, // KxT dependent variables const arma::field& VB, // N-list @@ -56,7 +56,7 @@ Rcpp::List bsvar_sign_cpp( Rcout << " Press Esc to interrupt the computations" << endl; Rcout << "**************************************************|" << endl; } - Progress p(50, show_progress); + Progress bar(50, show_progress); const int T = Y.n_rows; const int N = Y.n_cols; @@ -104,9 +104,13 @@ Rcpp::List bsvar_sign_cpp( psi = hyper.rows(3, N + 2); // update Minnesota prior - prior_v.rows(0, N * lags - 1) = lambda * lambda * - prior_v.rows(0, N * lags - 1) % - repmat(1 / psi, lags, 1); + prior_v.rows(0, N * p - 1) = lambda * lambda * + prior_v.rows(0, N * p - 1) % + repmat(1 / psi, p, 1); + + prior_V = diagmat(lambda * lambda * prior_v % + join_vert(repmat(1 / psi, p, 1), + ones(K - N * p))); prior_V = diagmat(prior_v); prior_S = diagmat(psi); @@ -129,7 +133,7 @@ Rcpp::List bsvar_sign_cpp( B = rmatnorm_cpp(post_B, post_V, Sigma); h_invp = inv(trimatl(chol_Sigma)); // lower tri, h(Sigma) is upper tri - result = sample_Q(lags, Y, X, B, h_invp, chol_Sigma, prior, + result = sample_Q(p, Y, X, B, h_invp, chol_Sigma, prior, VB, sign_irf, sign_narrative, sign_B, Z, max_tries); Q = result(0); shocks = result(1); @@ -148,14 +152,14 @@ Rcpp::List bsvar_sign_cpp( if (s % 200 == 0) checkUserInterrupt(); // Increment progress bar - if (any(prog_rep_points == s)) p.increment(); + if (any(prog_rep_points == s)) bar.increment(); // if (omp_get_thread_num() == 0) { // // Check for user interrupts // if (s % 10 == 0) checkUserInterrupt(); // // // Increment progress bar - // if (any(prog_rep_points == s)) p.increment(); + // if (any(prog_rep_points == s)) bar.increment(); // } } // END s loop From ce7db40fa0e15fb16b7152ff0f2467958b6500bf Mon Sep 17 00:00:00 2001 From: adamwang15 Date: Mon, 15 Jul 2024 22:04:40 +1000 Subject: [PATCH 4/4] Update test_specify.R --- inst/tinytest/test_specify.R | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/inst/tinytest/test_specify.R b/inst/tinytest/test_specify.R index d2b740f..dfc7886 100644 --- a/inst/tinytest/test_specify.R +++ b/inst/tinytest/test_specify.R @@ -8,13 +8,13 @@ spec = specify_bsvarSIGN$new(oil) expect_identical(class(spec)[1], "BSVARSIGN") -expect_identical(dim(spec$data_matrices$Y)[1], - dim(spec$data_matrices$X)[1]) +expect_identical(dim(spec$data_matrices$Y)[2], + dim(spec$data_matrices$X)[2]) expect_identical(length(spec$data_matrices$get_data_matrices()), 2L) -expect_identical(dim(spec$prior$B)[1], dim(spec$data_matrices$X)[2]) +expect_identical(dim(spec$prior$A)[2], dim(spec$data_matrices$X)[1]) expect_identical(class(spec$prior$get_prior()), "list") @@ -51,13 +51,13 @@ spec = specify_bsvarSIGN$new(oil, expect_identical(class(spec)[1], "BSVARSIGN") -expect_identical(dim(spec$data_matrices$Y)[1], - dim(spec$data_matrices$X)[1]) +expect_identical(dim(spec$data_matrices$Y)[2], + dim(spec$data_matrices$X)[2]) expect_identical(length(spec$data_matrices$get_data_matrices()), 2L) -expect_identical(dim(spec$prior$B)[1], dim(spec$data_matrices$X)[2]) +expect_identical(dim(spec$prior$A)[2], dim(spec$data_matrices$X)[1]) expect_identical(class(spec$prior$get_prior()), "list")