我正在尝试将一些代码从 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)
并且我想使用以下代码运行多项 logit(取自文档的第 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
}
但我不确定如何在 Stan 中执行此操作。我已经按照文档(部分已知参数)第 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]
}
但它们都不起作用。有什么建议么?