JAGS:为什么我的贝叶斯模型无法收敛?

时间:2020-03-09 16:11:35

标签: bayesian jags

我正在研究贝叶斯模型,偶然发现了一些收敛问题。我肯定自己犯了一个愚蠢的错误,因为我对数学没有什么正式的背景知识。不过,我无法确定问题,因此无法解决。

基本上,我正在通过将模型应用于模拟数据来对其进行完整性检查,因此在使用实际数据之前,我可以将其与“真实”值进行比较。 我的模型旨在用于心理物理学的实验。基本上,为受试者呈现一系列四个物理属性(分别称为x1,x2,x3,x4)。然后,它们产生一个结合了这些属性的响应。但是,在这种组合中,它们将赋予某些属性(例如A)比其他属性更多的权重。该模型应从整个参与者样本中获得响应(参与者一个响应),并估计对四个观测值(Psi1,Psi2,Psi3和Psi4)加权的四个系数。 为了确保您理解我,这是模拟R中数据的程序:

set.seed(40) #This makes the example reproducible...
psi <- runif(4, 0, 1) #This creates a random set of 4 coefficients between 0 and 1.
x <- c(20, 4, 2, 10) #Vector with the 4 physical properties to be learned
combinedX <-   ((psi[1]*x[1])/((psi[1]*x[1])+(psi[2]*x[2]))) - ((psi[3]*x[3])/((psi[3]*x[3])+(psi[4]*x[4]))) 
#This combination rule is a weighted version of Cramer's Phi coefficient of association. Each property x (x[1], x[2], x[3], x[4]) is multiplied by the corresponding coefficient stored in the vector psi.

n <- 50 #I want to simulate 50 data
data <- rnorm(n, combinedX, 0.1) #And they are obtained from a normal distribution with mean combinedX.

我现在想将这些模拟数据提交给JAGS中的贝叶斯模型,该模型应采用数据向量,并输出四个系数的估计值。

model{
  psi1 ~ dbeta(1,1)
  psi2 ~ dbeta(1,1)
  psi3 ~ dbeta(1,1)
  psi4 ~ dbeta(1,1)
  predx <- ((psi1*x[1])/ ((psi1*x[1])+(psi2*x[2]))) - ((psi3*x[3])/((psi3*x[3])+(psi4*x[4])))
  sigma <- exp(log_sigma)
  log_sigma ~dunif(-10, 10)

  for(i in 1:n){
    data[i] ~ dnorm(predx, sigma)
  }
}

因此,基本上,该模型仅假设数据来自均值为“ predx”的正态分布,该均值是通过将四个X和四个psis组合而获得的。

好。当我运行此模型时,我通常会获得无意义的结果,并且经常检测出收敛问题:后验极度平坦(最大不确定性),或者估计与实际值有很大不同...有时我的链条混合不正确。< / p>

我怀疑此行为有两个原因:

-自相关。但是,如何解决呢?

-问题不明确:我们有太多自由参数(4)无法从数据中估算出来。

关于如何处理此模型的任何想法?

0 个答案:

没有答案