Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 贝叶斯贝塔回归模型——jags中的错误:无效的父值_R_Bayesian_Jags - Fatal编程技术网

R 贝叶斯贝塔回归模型——jags中的错误:无效的父值

R 贝叶斯贝塔回归模型——jags中的错误:无效的父值,r,bayesian,jags,R,Bayesian,Jags,我试图通过R在jags中运行一个贝叶斯池模型,并得到一条错误消息 我从遇到类似问题的人身上发现,它可能由优先级值、负值、负值日志、语法错误等触发。我已经消除了所有这些问题,但错误仍然存在 ## just for the prediction pred.jac <- seq(min(test.bayes$Latitude), max(test.bayes$Latitude), 10) data = list( jac = test.bayes$Jaccard, lat = test

我试图通过R在jags中运行一个贝叶斯池模型,并得到一条错误消息

我从遇到类似问题的人身上发现,它可能由优先级值、负值、负值日志、语法错误等触发。我已经消除了所有这些问题,但错误仍然存在

## 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))

##只是为了预测

pred.jac如果lat为正值,则带有这些首字母的
b
的值为负值,并且
b
在beta分布、JAG和更一般的情况下必须>0

例如,使用
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
so
bThanks@umomamaomao。很好的解释。这在设置初始值时并不明显。有避免这种情况的惯例吗?在给定beta分布的情况下,mu似乎不能大于1?或者它在什么时候匹配并不重要?获得b>0的明显方法是使用-ve alpha?或者你会对我的情况提出什么建议?首字母总是很棘手的,我不认为有惯例,因为它总是取决于你的型号。通常这需要一点思考和大量的尝试和错误。如果你不初始化它能工作吗?那将是最简单的。如果alpha和beta小得多,例如beta,去掉首字母会产生相同的错误。我遵循了关于alpha和beta的建议,但错误也没有消失。我对这两个变量进行了对数变换并将其居中,但模型给出了相同的错误。我注意到,因为jac的范围是0.27-1,所以不可能不出现b=0的情况,这违反了b>0。但为了消除这一问题,我删除了jac>0.9但错误相同的数据。更新:如果sigma也很小(sigma<0.1),则α和sigma的建议有效。但是,从0到1的数据需要截断,形式为y[i]~dbeta(a[i],b[i])T(0.001,0.99999)。所以,对于我的数据中的1部分,我只是从1中减去0.00001,使其小于1。我相信这个变通方法可以通过执行(0+0.00001)来达到下限(0)。注意:这种方法对于我的数据是有意义的,因为btw 1和0.99999之间没有明显的差异。