Nothing
test_that("flat prior cholesky", {
data <- usmacro_growth[,c("GDPC1","CPIAUCSL","FEDFUNDS")]
phi <- specify_prior_phi(data = data, lags = 2L, prior = "normal",
normal_sds = 1e6)
sigma <- specify_prior_sigma(data = data, type = "cholesky",
cholesky_U_prior = "normal",
cholesky_normal_sds = 1e6,
cholesky_heteroscedastic = FALSE,
cholesky_priorhomoscedastic = matrix(c(0.01,0.01), ncol(data), 2))
set.seed(123)
mod <- bvar(data, lags = 2, prior_intercept = 1e6, prior_phi = phi,
prior_sigma = sigma, draws = 10000)
phi_post_mean <- apply(mod$PHI, 1:2, mean)
ols <- solve(crossprod(mod$X), crossprod(mod$X,mod$Y))
expect_lt(max(abs(ols-phi_post_mean)),0.01)
})
test_that("geweke test sample_phi_cholesky", {
# distribution test function
mydist.test <- function(x,y){
# x: iid draws
# y: autocorrelated draws
x.n <- length(x)
y.n <- length(y)
x.mean <- mean(x)
y.mean <- mean(y)
x.var <- var(x)
y.var <- coda::spectrum0.ar(y)$spec
statistic <- (x.mean - y.mean)/sqrt(x.var/x.n + y.var/y.n)
pnorm(-abs(statistic))
}
# settings
set.seed(123)
draws <- 10000
n <- 50 # observations
M <- 5 # time-series
K <- 10 # coefficients per equation
# 'known' variance-covariance
U_inv <- diag(M)
U_inv[upper.tri(U_inv)] <- seq(.1, by = .1, len = (M^2-M)/2)
U <- backsolve(U_inv, diag(M))
d <- rep(20, M)
d_sqrt <- sqrt(d)
d_sqrt_mat <- matrix(d_sqrt, n, M, byrow = TRUE)
SIGMA <- crossprod(U_inv*d_sqrt)
SIGMA_chol <- diag(d_sqrt)%*%U_inv
#cov2cor(SIGMA)
# simulate regressors
X <- matrix(rnorm(n*K), n, K)
# Prior: coefficients ~ (iid) N(0,1)
V_prior <- matrix(1, K, M)
PHI_prior <- matrix(0, K, M)
# independent draws
PHI_ind <- array(rnorm(K*M*draws,as.vector(PHI_prior), as.vector(sqrt(V_prior))),c(K,M,draws))
# MCMC draws
# initialize with draw from prior
PHI_draws <- array(as.numeric(NA), c( K, M, draws))
PHI <- matrix(rnorm(K*M, 0, sqrt(as.vector(V_prior))), K, M)
# alternately draw from observables|unobservables and unobservables|oberservables
for(r in seq.int(draws)){
# simulate observables|unobservables
Y <- X%*%PHI + matrix(rnorm(n*M), n, M, byrow = TRUE)%*%SIGMA_chol
# simulate unobservables|oberservables
PHI_draws[,,r] <- PHI <- bayesianVARs:::sample_PHI_cholesky(PHI, PHI_prior, Y,
X, U, d_sqrt_mat,
V_prior)
}
# compare distribution of quadratic length in terms of euclidean distance of iid and autocorrelated draws
test1 <- mydist.test(apply(PHI_ind, 3, function(x) (sum(x^2))),apply(PHI_draws, 3, function(x) (sum(x^2))))
#qqplot(apply(PHI_ind, 3, function(x) (sum(x^2))), apply(PHI_draws, 3, function(x) (sum(x^2))));abline(0,1)
test2 <- ks.test(apply(PHI_draws, 3, function(x) (sum(x^2))), "pchisq", df=K*M)$p.value
#qqplot(qchisq(ppoints(draws), df = K*M), apply(PHI_draws[,,], 3, function(x) (sum(x^2))),
#main = expression("Q-Q plot for" ~~ {chi^2}[nu == K*M]));abline(0,1)
expect_gt(test1, 0.01)
expect_gt(test2, 0.01)
})
test_that("miss-specified input", {
data <- usmacro_growth[,c("GDPC1","CPIAUCSL","FEDFUNDS")]
phi <- specify_prior_phi(data = data, lags = 4L)
expect_error(bvar(data, lags = 1L, prior_phi = phi))
})
test_that("flat prior cholesky", {
data <- usmacro_growth[,c("GDPC1","CPIAUCSL","FEDFUNDS")]
phi <- specify_prior_phi(data = data, lags = 2L, prior = "normal",
normal_sds = 1e6)
sigma <- specify_prior_sigma(data = data, type = "cholesky",
cholesky_U_prior = "normal",
cholesky_normal_sds = 1e6,
cholesky_heteroscedastic = FALSE,
cholesky_priorhomoscedastic = matrix(c(1e-6,1e-6), ncol(data), 2))
set.seed(123)
mod <- bvar(data, lags = 2, prior_intercept = 1e6, prior_phi = phi,
prior_sigma = sigma, draws = 10000)
phi_post_mean <- apply(mod$PHI, 1:2, mean)
ols <- solve(crossprod(mod$X), crossprod(mod$X,mod$Y))
expect_lt(max(abs(ols-phi_post_mean)),0.01)
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.