将JAGS!=逻辑运算符转换为Stan

时间:2019-07-20 03:52:36

标签: r jags 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[,,]是一个在上游定义的三维数组。

循环中的功能是什么?它是“ 1:NxSubectLvl维度中的i单元和j中的mSxBxW[,,]单元的总和除以非零单元总数 number 的总和在1:NxSubectLvli的{​​{1}}单元格中跨过?对吗?

我将如何在Stan中复制它?

如果我在Stan脚本的同一位置使用此代码...

j

...它引发错误

// 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中不可用之外,对我而言这毫无意义。

1 个答案:

答案 0 :(得分:1)

问题是0是整数,而矩阵中包含实数。

一种解决方法是将实变量定义为零并使用该变量:

class(DT$C) <- "list"
DT[,  C := list(list(unlist(C))), iso]