将 JAGS != 逻辑运算符翻译成 Stan
Translate JAGS != logical operator into Stan
我正在尝试将 Kruschke 的一些代码改编成 Stan,但无法重现以下内容。
# JAGS code
for ( i in 1:NxBetweenLvl ) {
for ( j in 1:NxWithinLvl ) {
mBxW[i,j] <- ( sum( mSxBxW[1:NxSubjectLvl,i,j] ) / sum( mSxBxW[1:NxSubjectLvl,i,j]!=0 ) )
}
}
注意mSxBxW[,,]
是上游定义的三维数组。
循环中的函数是做什么的?它是“数组 mSxBxW[,,]
中尺寸 i
和 j
中的单元格总和除以非总 数量 的总和- 在维度 i
和 j
中跨单元格 1:NxSubectLvl
的单元格为零?对吗?
我如何在 Stan 中复制它?
如果我在我的 Stan 脚本中的相同位置使用此代码...
// Stan Code
for (i in 1:nGroup) {
for (j in 1:nCond) {
mGxC[i,j] = sum(mSxCxG[1:nSubj,i,j]) / sum( mSxCxG[1:nSubj,i,j]!=0 );
}
}
...它抛出错误
Binary infix operator != with functional interpretation logical_neq requires arguments or primitive type (int or real), found left type=real[], right arg type=int;
这对我来说毫无意义,除了 !=
运算符在 JAGS 中有效但在 Stan 中无效。
问题是 0 是一个整数,而您的矩阵中有实数。
解决这个问题的一种方法是将一个实数变量定义为零并使用它:
{
real zero = 0;
for (i in 1:nGroup) {
for (j in 1:nCond) {
mGxC[i,j] = sum(mSxCxG[1:nSubj,i,j]) / sum( mSxCxG[1:nSubj,i,j]!=zero);
}
}
}
我正在尝试将 Kruschke 的一些代码改编成 Stan,但无法重现以下内容。
# JAGS code
for ( i in 1:NxBetweenLvl ) {
for ( j in 1:NxWithinLvl ) {
mBxW[i,j] <- ( sum( mSxBxW[1:NxSubjectLvl,i,j] ) / sum( mSxBxW[1:NxSubjectLvl,i,j]!=0 ) )
}
}
注意mSxBxW[,,]
是上游定义的三维数组。
循环中的函数是做什么的?它是“数组 mSxBxW[,,]
中尺寸 i
和 j
中的单元格总和除以非总 数量 的总和- 在维度 i
和 j
中跨单元格 1:NxSubectLvl
的单元格为零?对吗?
我如何在 Stan 中复制它?
如果我在我的 Stan 脚本中的相同位置使用此代码...
// Stan Code
for (i in 1:nGroup) {
for (j in 1:nCond) {
mGxC[i,j] = sum(mSxCxG[1:nSubj,i,j]) / sum( mSxCxG[1:nSubj,i,j]!=0 );
}
}
...它抛出错误
Binary infix operator != with functional interpretation logical_neq requires arguments or primitive type (int or real), found left type=real[], right arg type=int;
这对我来说毫无意义,除了 !=
运算符在 JAGS 中有效但在 Stan 中无效。
问题是 0 是一个整数,而您的矩阵中有实数。
解决这个问题的一种方法是将一个实数变量定义为零并使用它:
{
real zero = 0;
for (i in 1:nGroup) {
for (j in 1:nCond) {
mGxC[i,j] = sum(mSxCxG[1:nSubj,i,j]) / sum( mSxCxG[1:nSubj,i,j]!=zero);
}
}
}