我有:
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 的行。但是,它给了我的错误
没有匹配项:
真实 [] ~ 正常(矩阵,真实)
如果可能,我如何矢量化我当前的解决方案?还有其他方法可以加快速度吗?