一部のコードを JAGS から Stan に移行しようとしています。次のデータセットがあるとします。
N <- 10
nchoices <- 3
ncontrols <- 3
toydata <- list("y" = rbinom(N, nchoices - 1, .5),
"controls" = matrix(runif(N*ncontrols), N, ncontrols),
"N" = N,
"nchoices" = nchoices,
"ncontrols" = ncontrols)
そして、次のコードで多項ロジットを実行したい (ドキュメントのセクション 9.5 から取得):
data {
int N;
int nchoices;
int y[N];
int ncontrols;
vector[ncontrols] controls[N];
}
parameters {
matrix[nchoices, ncontrols] beta;
}
model {
for (k in 1:nchoices)
for (d in 1:ncontrols)
beta[k,d] ~ normal(0,100);
for (n in 1:N)
y[n] ~ categorical(softmax(beta * controls[n]));
}
beta
の最初の行をゼロに修正したいと思います。JAGS では、モデル ブロックで次のように宣言するだけです。
for (i in 1:ncontrols) {
beta[1,i] <- 0
}
しかし、スタンでこれを行う方法がわかりません。たとえば、ドキュメントのセクション 6.2 (部分的に既知のパラメーター) の行に沿って多くの組み合わせを試しました。
parameters {
matrix[nchoices, ncontrols] betaNonObs;
}
transformed parameters {
matrix[nchoices, ncontrols] beta;
for (i in 1:ncontrols) beta[1][i] <- 0
for (k in 2:nchoices) beta[k] <- betaNonObs[k - 1]
}
しかし、どれも機能しません。助言がありますか?