I was trying to run a 2-regimes Markov switching VAR model with 6 variables and 13 lags, using R2jags in R this is the code
data <- as.matrix(rawdata[2:323, c(2, 3, 5, 9, 10, 11)])
# Model specification
model_string <- "
model {
# Priors for VAR coefficients
for (k in 1:2) {
for (i in 1:n_vars) {
for (j in 1:(max_lag+1)) { # Corrected loop index
phi[k, i, j] ~ dnorm(0, 0.01) # Prior for VAR coefficients in regime k
}
}
}
# Priors for error standard deviations
for (k in 1:2) {
for (i in 1:n_vars) {
sigma[k, i] ~ dunif(0, 100) # Prior for error standard deviation in regime k
}
}
# Regime transition probabilities
p[1] ~ dbeta(1, 1) # Prior for probability of staying in regime 1
p[2] <- 1 - p[1] # Probability of transitioning to regime 2
# Initial regime
for (t in 1:n_obs) {
regime[t] ~ dcat(prob_init) # Initial regime follows categorical distribution
}
# Markov switching VAR model
for (t in 1:n_obs) {
for (i in 1:n_vars) {
mu[t, i] <- phi[regime[t], i, (max_lag+1)] + sum(phi[regime[t], i, 1:max_lag] * Y[(max_lag+t - 1):(t), i]) # Regime-specific mean
Y[(max_lag+t), i] ~ dnorm(mu[t, i], sigma[regime[t], i]) # VAR model equation with regime-specific variance
}
}
}
"
# Set parameters
parameters <- c("phi", "sigma", "p", "regime")
# Data list
max_lag <- 13
n_obs <- nrow(data) - max_lag
n_vars <- ncol(data)
prob_init <- c(0.5, 0.5) # Initial probability for each regime
regime_init <- sample.int(2, n_obs, replace = TRUE) # Initialize regime randomly
data_list <- list("Y" = data, "n_obs" = n_obs, "n_vars" = n_vars, "max_lag" = max_lag, "prob_init" = prob_init, "regime" = regime_init)
# MCMC settings
n_chains <- 3
n_iter <- 1000
n_burnin <- 500
# Run MCMC
model <- jags.model(textConnection(model_string), data = data_list, n.chains = n_chains)
I am always receiving an invalid range error. Is anyone able to help?
this is the error, line 31 is the end of the last loop of the model
Error in jags.model(textConnection(model_string), data = data_list, n.chains = n_chains) :
RUNTIME ERROR:
Compilation error on line 31.
Invalid range
thanks a lot