Issue with specifying a MS-VAR using JAGS in Rstudio

19 Views Asked by At

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

0

There are 0 best solutions below