【发布时间】:2019-03-26 19:31:42
【问题描述】:
我需要将数据作为具有不同长度的向量列表和具有相同行数但具有不同列数的矩阵列表传递。有没有办法在 Rstan 中传递数据?
【问题讨论】:
-
Stan 用户指南中有一章解释了如何打包和解包不规则数组。目前还没有原生支持,因此您要么必须按照 Ben 在他的回答中建议的方式进行填充,要么按照用户指南中描述的方式进行编码。
我需要将数据作为具有不同长度的向量列表和具有相同行数但具有不同列数的矩阵列表传递。有没有办法在 Rstan 中传递数据?
【问题讨论】:
答案基本上是否定的,Stan 语言不允许参差不齐的数据结构,例如不同长度的向量、不同列数的矩阵等。
根据您的应用程序,使用填充或展平可能是最简单的方法。通过填充,我的意思是向您的向量添加额外的值或向您的矩阵添加额外的列,以使它们的大小都相同。最好使用Inf 或-Inf 作为填充值,以便在目标日志内核中意外使用错误时更容易发现错误。通过展平,我的意思是通过连接各种长度的向量来制作一个长向量,向量也是如此。然后在 Stan 程序的本地块中将它们改造成适当大小的向量和矩阵。在这两种情况下,您还需要将所有内容的大小作为整数数组传递。
另一种可能性是使用一些脚本来声明数据块中需要的每个向量或矩阵,即使它们的大小不同。这很简单,但很难生成相应的代码来利用它们。
【讨论】: