r - 在 Stan 中哪个更有效?
问题描述
如果我不需要在输出中返回转换后的参数,那么在转换后的参数块或模型块中声明转换后的参数是否更有效。
例如
data {
real<lower=0> tt[N];
...
}
parameters {
real <lower = 0> mu;
real <lower = 0> eta;
...
}
transformed parameters{
real Mu[N];
for(i in 1:N){
Mu[i] = eta + mu*log(tt[i]);
}
...
}
相比
data {
real<lower=0> tt[N];
...
}
parameters {
real <lower = 0> mu;
real <lower = 0> eta;
...
}
model{
real Mu[N];
for(i in 1:N){
Mu[i] = eta + mu*log(tt[i]);
}
...
}
是否需要更多运行时间才能将 Mu 的所有值存储在第一个代码块中(当我在转换后的参数块中声明 Mu 时)?
解决方案
效率(相对于时间)基本相同。如果您在transformed parameters
块中声明某些内容,通常需要很短的时间来验证您在每个转换参数上声明的约束。基本上,约束检查明显的唯一情况是当您形成相关矩阵或协方差矩阵时,必须考虑它以验证它是正定的。在您给出的示例中,Mu
不受约束,因此无需检查。如果您对中间参数不感兴趣,那么在块中声明它们是有意义的model
,在这种情况下,您可以通过不存储所有这些参数来节省一些 RAM(在 RStan 或 PyStan 中),并且通过避免对应的 I/O。
推荐阅读
- python - 实际上 model.save() 在 Keras 中保存了什么?
- android - Kotlin - 传递给 Fragment 时 Activity 中的路径显示为 null 然后更改值
- python - 识别美式日期
- kubernetes - Go 客户端 SDK:检查 Deployment 是否完全就绪
- git - 如何获取Git命令的运行时间?
- c++ - 在 C++ 中为 C 标头中的结构省略“struct”关键字是否安全?
- c++ - WinSock c++ inet_ntop 总是显示 204.204.204.204 (并且 accept() 没有失败)
- javascript - 引导表单验证按钮重定向
- c# - 如何在 C# Windows 窗体中从 Sql 表中加载名称和值的组合框?
- r - R中的安然电子邮件分析