【发布时间】:2017-10-20 13:16:58
【问题描述】:
我有:
mu_x - 一个 10x10 的实数值矩阵
ptype - 一个 10000 长的向量
sender_name_type - 一个 10000 长的向量
我想找出
的值x_real - 一个 10000 长的向量
我目前拥有并且有效的代码是:
for(i in 1:N){
if(x_available[i]){
x_real[i]~normal(x[i],0.01);} else{
x_real[i]~normal(mu_x[ptype[i],sender_name_type[i]],0.1);
}
}
不过,我想对其进行矢量化。为此,我首先需要处理 if 子句。为此,我尝试添加两个发行版,如下所示:
x_real ~ normal(mu_x[ptype,sender_name_type],0.1) * (1-x_avaiable) + normal(x,0.01) * x_available;
但是,Rstan 似乎无法处理加法/乘法分布。我尝试的第二种方法是这样的:
x_real ~ normal(mu_x[ptype,sender_name_type],0.1);
x_real[x_available == 1] ~ normal(x,0.01);
这类似于第一种方法,但它重新定义了满足条件的 x_real 的行。但是,它给了我
的错误没有匹配项:
real[] ~ normal(matrix, real)
如果可能,我如何矢量化我当前的解决方案?还有其他方法可以加快速度吗?
【问题讨论】: