索引超出范围GraphCat.Parent OpenBUGS

时间:2015-03-17 13:57:37

标签: r

我正在尝试在R和OpenBUGS中实现FHMM,但现在我仍然坚持以下错误。

起初,OpenBUGS只是给了我讨厌的东西"出了问题"错误,将Traphandler.ocf重命名为Traphandler_simple.ocf后,我能够看到"索引超出范围" GraphCat.Parents中发生错误。尽管如此,我无法找到令人讨厌的代码(对Fortran一无所知,对MCMC一无所知)

我试图构建的FHMM的结构有M = 3个子链(s [m,n],其中m = 1,2,3,n = 1,...,100,在我的代码中),每个子链具有K = 2个状态,并且发射y是3个链的线性高斯分布。排放

这是我的模特,

# M=3, K=2, N=100

model <- function() {
  for( m in 1:M ) {
    s[m,1] ~ dcat(pi[m,1:K])    # initial states of each sub-chain
  }
  for( m in 1:M ) {
    for( i in 2:N ) {
      s[m,i] ~ dcat(trans[s[m,i-1],1:K,m])    # dim(trans) is c(2,2,3)
    }
  }
  for( m in 1:M ) {
    for( i in 1:N ) {
      mu0[m,i] <- mu[m,s[m,i]]
      sigma[m,i] <- 1/tau[m,s[m,i]]
    }
  }

  for( i in 1:N ) {
    mm[i] <- sum(mu0[1:M,i])
    tt[i] <- 1/sum(sigma[1:M,i])
    y[i] ~ dnorm(mm[i],tt[i])
  }
}

这就是我在R中设置初始值和数据的方法,

# Initial values
s.B <- matrix(rep(M*N),nrow=M,ncol=N)
for(i in 1:M) {
  s.B[i,] <- sample(1:K, N, replace=TRUE, rdirichlet(1,rep(1, K)))
}
inits <- function() {list(s=s.B)}

# data
P1 <- array(dim=c(2,2,3))
for( i in 1:M ) {
  P1[,,i] <- rdirichlet(K,rep(1, K))
}
K <- 2,
M <- 3,
N <- 100,
pi <- rdirichlet(M,rep(1, K)),
trans <- P1,
mu <- mus + rnorm(M*K,0,1),
sigma <- sigmas + rnorm(M*K,0,0.3)
tau <- 1/sigma

# y is the observed sequence of data
data <- list("y","pi","trans","mu","tau","N","K","M")

# Parameters
params <- c("s")

当OpenBUGS尝试对s [1,2]进行采样时,似乎发生了错误, 但我对这意味着什么没有一点相关的线索。 (stackoverflow不允许我发布屏幕截图,直到我有10个声誉......)

0 个答案:

没有答案