我读到here可以(我的解释很简单)调用 Stan来自 C++ 程序的例程。
我有一些复杂的对数似然函数,我用 C++ 编写了它们,但我真的不知道如何使用 Stan 语言对它们进行编码。是否可以使用我已经用 C++ 编写的对数似然函数来调用 Stan 中的蒙特卡洛例程?如果有的话,有这方面的例子吗?
这似乎是一件很自然的事情,但我找不到任何关于如何做到这一点的示例或指示。
最佳答案
经过进一步审查(您可能想不接受我之前的答案),您可以尝试以下操作:在 functions
中编写一个带有用户定义函数的 .stan 程序。具有正确签名(并解析)但基本上不执行任何操作的 block 。像这样
functions {
real foo_log(real[] y, vector beta, matrix X, real sigma) {
return not_a_number(); // replace this after parsing to C++
}
}
data {
int<lower=1> N;
int<lower=1> K;
matrix[N,K] X;
real y[N];
}
parameters {
vector[K] beta;
real<lower=0> sigma;
}
model {
y ~ foo(beta, X, sigma);
// priors here
}
然后,使用 CmdStan 编译该模型,这将生成一个 .hpp 文件作为中间步骤。编辑 foo_log
正文中的 .hpp 文件调用您的模板化 C++ 函数,并#include 定义您的内容的头文件。然后重新编译并执行二进制文件。
这实际上可能对您有用,但如果您所做的任何事情都有广泛的用途,我们希望您贡献 C++ 内容。
关于c++ - 从 C++ 程序调用 Stan 例程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31862831/