Почему Rjags выбрасывает «Неизвестная переменная mu.fine»?Ошибка Rjags - PullRequest
0 голосов
/ 29 ноября 2018

В настоящее время я пытаюсь разработать модель в JAGS, но, к сожалению, продолжаю получать следующую ошибку:

Error in jags.model("ref_model.txt", data = ref.data.jags, inits = inits3, : RUNTIME ERROR: Compilation error on line 26. Unknown variable mu.fine Either supply values for this variable with the data or define it on the left hand side of a relation.

Это происходит, когда я запускаю следующий код:

# Function that generates the initial values for MCMC:
inits <- function()
{
 list(beta0=rnorm(1),
      beta1=rnorm(1),
      beta2=rnorm(1),
      beta3=rnorm(1),
      beta4=rnorm(1),
      beta5=rnorm(1),
      beta6=rnorm(1))
}
inits3 <- list(inits(), inits(), inits())

# Parameters that will be monitored:
params <- c("beta0", # intercept
          "beta1", "beta2", "beta3", # slopes
          "beta4", "beta5", "beta6",
          "pred.fine") # fine-grain predictions

# Model compilation:
jm <- jags.model("ref_model.txt",
               data = ref.data.jags,
               inits = inits3,
               n.chains = 3,
               n.adapt = 1000)

Ниже приведено то, что находится в файле с именем "ref_model.txt", я запускаю это в R с помощью Rjags в R

# Model definition for JAGS:
cat("
model
{
  # priors
  beta0 ~ dnorm(0, 0.01)
  beta1 ~ dnorm(0, 0.1)
  beta2 ~ dnorm(0, 0.1)
  beta3 ~ dnorm(0, 0.1)
  beta4 ~ dnorm(0, 0.1)
  beta5 ~ dnorm(0, 0.1)
  beta6 ~ dnorm(0, 0.1)

  # fitting the model to the fine-grain reference dataset
  # (600 well surveyed cells)
    for (j in 1:N.ref)
    {
      # Eq. 1 (see Methods):
      log(lambda.fine[j]) <- beta0 +
                             beta1 * NPP.ref[j] +
                             beta2 * LC.ref[j] +
                             beta3 * PW.ref[j] +
                             beta4 * HFP.ref[j] +
                             beta5 * PS.ref[j] +
                             beta6 * T.ref[j]
      # Eq. 2 (see Methods):
      S.ref[j] ~ dpois(mu.fine[j])
    }

  # predicting in the complete fine-grain dataset
  # (all 6238 fine-grain grid cells)
    for (i in 1:N.fine)
    {
      log(pred.fine[i]) <- beta0 +
                           beta1 * NPP[i] +
                           beta2 * LC[i] +
                           beta3 * PW[i] +
                           beta4 * HFP[i] +
                           beta5 * PS[i] +
                           beta6 * T[i]
    }
}
 ", file="ref_model.txt")

Я немного запутался, почемувозникает ошибка. Если кто-нибудь может посоветовать, как мне решить эту проблему, я был бы очень признателен.

1 Ответ

0 голосов
/ 30 ноября 2018

Эта ошибка возникает, потому что mu.fine происходит только с правой стороны уравнения, а не слева.По-другому, похоже, что S.ref зависит от mu.fine, но вы не сказали JAGS, что такое mu.fine (для него нет значений).Предполагая, что lambda.fine является линейным предиктором, а S.ref является вашей зависимой переменной, вы можете изменить

S.ref[j] ~ dpois(mu.fine[j])

на

S.ref[j] ~ dpois(lambda.fine[j])

и тогда эта ошибка не возникнет.

...