Байесовская модель бета-регрессии - Ошибка в зазубринах: неверное родительское значение - PullRequest
1 голос
/ 10 июля 2019

Я пытаюсь запустить байесовскую модель пула в зазубринах через R и получаю сообщение об ошибке

Я обнаружил у людей, которые сталкивались с подобными проблемами, что это может быть вызвано значениями априорных значений, отрицательных значений, отрицательных логарифмов, синтаксических ошибок и т. Д. Я устранил все из них, но ошибка сохраняется.

## just for the prediction
pred.jac <- seq(min(test.bayes$Latitude), max(test.bayes$Latitude), 10)

data = list(
  jac = test.bayes$Jaccard,
  lat = test.bayes$Latitude,
  pred.jac = pred.jac)


inits = list(
  list(alpha = 1, beta = 2.5, sigma = 50),
  list(alpha = 2, beta = 1.5, sigma = 20),
  list(alpha = 3, beta = 0.75, sigma = 10))



{
  sink("BetaPooledJAGS.R")
  cat("
      model{

      # priors
      alpha ~ dnorm(0, 0.0001)
      beta ~ dnorm(0, 0.0001)
      sigma ~ dunif(0, 10)


      # likelihood


      for (i in 1:length(jac)) {
      mu[i] <- alpha + beta * lat[i]
      a[i] <- ((1 - mu[i]) / (sigma^2) - 1 / mu[i]) * mu[i]^2
      b[i] <- alpha * (1 / mu[i] - 1)
      jac[i] ~ dbeta(a[i], b[i])


      }

      # predicted jaccard as derived quantities
      for (i in 1:length(pred.jac)) {
      mu_pred[i] <- alpha + beta * lat[i]
      mu_pred1[i] <- exp(mu_pred[i])
      }

      }

      ",fill = TRUE)
  sink()
}


n.adapt = 3000
n.update = 5000
n.iter = 5000
jm.pooled = jags.model(file="BetaPooledJAGS.R", data = data, n.adapt = n.adapt, inits = inits, n.chains = length(inits))

Когда я запускаю код, я получаю сообщение об ошибке ниже:

Ошибка в jags.model (file = "BetaPooledJAGS.R", data = data, n.adapt = n.adapt,: ошибка в узле jac [1] Недопустимые родительские значения

Вот ссылка на подмножество моих данных.

https://fil.email/IuwgYhKs

1 Ответ

2 голосов
/ 10 июля 2019

Вы получаете отрицательные значения для b с этими инициалами, если lat положительно, и b должно быть> 0 в бета-распределении, в JAGS и в более общем смысле.

Например, с использованием инициаловот inits[[1]]:

mu = 1 + 2.5*lat при условии, что lat положительно, тогда mu > 1

b = 1 * (1/mu-1) И 1/mu < 1, если mu>1, поэтому 1/mu - 1 < 0.

Поэтому b = 1*-ve так b<0

...