将 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[,,] 中尺寸 ij 中的单元格总和除以非总 数量 的总和- 在维度 ij 中跨单元格 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);
        }
      }
   }