R 在斯坦,哪个更有效?

R 在斯坦,哪个更有效?,r,stan,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(t

如果不要求在输出中返回转换参数,则在转换参数块或模型块中声明转换参数是否更有效

比如说

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]);
  }
  ...
}
数据{
实tt[N];
...
}
参数{
实木;
真实埃塔;
...
}
变换参数{
实木,;
for(1:N中的i){
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]);
  }
  ...
}
数据{
实tt[N];
...
}
参数{
实木;
真实埃塔;
...
}
模型{
实木,;
for(1:N中的i){
Mu[i]=eta+Mu*log(tt[i]);
}
...
}

在第一个代码块中存储Mu的所有值(当我在转换的参数块中声明Mu时)需要更多的运行时间吗

效率(相对于时间)基本相同。如果在
转换参数
块中声明某些内容,则通常需要很短的时间来验证对每个转换参数声明的约束。基本上,约束检查唯一值得注意的情况是在形成相关矩阵或协方差矩阵时,为了验证它是否为正定矩阵,必须考虑相关矩阵或协方差矩阵。在您给出的示例中,
Mu
是无约束的,因此无需检查。如果您对中间参数不感兴趣,可以在
model
块中声明它们,在这种情况下,您可以通过不存储所有中间参数来节省一些RAM(在RStan或PyStan中),或者通过避免相应的I/O来节省一点时间。

在我的虚拟示例中,我实际上省略了一些代码,这些代码在转换的参数块中创建了协方差矩阵。我注意到,与我在模型块中创建它时相比,这大大增加了我的运行时间。如果您确定协方差矩阵通过构造是正定的,那么我将在模型块中声明这一点。