1

関数と同様jagsR関数はありますrepか? 次のようなコードを使用して配列を作成したいと思います。

n ~ dmulti(pi, N) # pi is a 3 dimensional probability vector, N is fixed
  # the dimension of n is hard coded in this line:
a <- c(rep(0, n[1]), rep(1, n[2]), rep(2, n[3])) 

マニュアルを読みましたが、これを達成する方法を見つけることができませんでした。Stan がおそらくこれを許可することは理解していますが、離散パラメーターで推論を行う必要があるため、Stan を使用できませんでした。あなたの助けに本当に感謝します!

この質問は、JAGS ヘルプ フォーラムにも投稿されています。

4

3 に答える 3

1

短い答えはノーです。残念ながらそうではありません。JAGS/BUGS 言語の規定の 1 つは、変数の次元が固定されている必要がある (すべての要素が 1 回だけ定義されている) ことです。この例では、a はベクトル n に応じて次元のサイズを変更します。探している結果を得るには他の方法があるかもしれませんが、このアプローチを使用しないでください。

ちなみに、許可されていないコードのビット (多項分布の LHS と RHS) で n を 2 回使用しますが、それは単にタイプミスである可能性があります :)

マット

于 2015-02-14T11:55:54.940 に答える
0

ベクトルにいくつかのループを設定できます。

library(R2jags)

M <- function() {
  for (i in 1:n[1]) {
    a[i] <- 0
  }
  for (i in 1:n[2]) {
    a[i + n[1]] <- 1
  }
  for (i in 1:n[3]) {
    a[i + sum(n[1:2])] <- 2
  }
}

j <- jags(list(n=3:5), NULL, 'a', M, DIC=FALSE)
j$BUGSoutput$mean$a

## [1] 0 0 0 1 1 1 1 2 2 2 2 2

ただし、@MattDenwood が示唆したように、要素の合計nが可変の場合、これはエラーをスローしますa。シミュレーション全体で一定の長さでなければなりません。

于 2015-02-16T09:51:41.877 に答える