R stan积分integrate_1d的差异

问题描述

全部。

我想在for循环的rstan中使用integration_1d函数。 即使它正在工作,但最终仍无法收敛。 由于它是直接集成的,例如$ \ int_ {0} ^ {\ mbox {observed_failure} [i]} \ mbox {exp}(\ rho * \ beta_2 * Treat [i] * x)dx $,因此我也尝试了使用积分值$(\ mbox {exp}(\ rho * \ beta_2 * Treat [i] * \ mbox {observed_failure} [i])-1)/(\ rho * \ beta_2 * Treat [i]) $,它通常可以正常工作并收敛。出于这个原因,我可以说我唯一更改过的集成_1d代码存在问题。

functions {
  real func(real x,real xc,real[] theta,real[] x_r,int[] x_i){
    real beta2 = theta[1];
    real rho = theta[2];
    int d = x_i[1];
    return(exp(rho *beta2 * d * x ));
  }
} 
data {
   ...
    int treat[new_N];
   ...
}
transformed data {
  real x_r[0]; // I do not have real data
  int x_i[1]; // I only have integer data
}
parameters {
   real beta0;
   real beta1;
   real beta2;
   real rho;
   ...
}
model {
 ...
  for (i in 1:new_N) {
    h[i] = h0 * exp(eta*age[i] + rho*( beta1*treat[i] +  beta2 * treat[i] * observed_failure[i] + U[i]));
    integ[i] =  integrate_1d(func,observed_failure[i],{beta2,rho},x_r,{treat[i]},1e-8);
    S[i] = exp(- h0 * exp(eta * age[i]) * exp(rho * (beta0 + beta1 * treat[i]) + U[i]) * integ[i]);
  }
 ...
} 

fit = stan(data = data1,model_code = stan_codes,iter = 2000,预热= 1000, 薄= 1,链=链,pars = pars,init = inits,control = list(adapt_delta = 0.99))

当我在上面跑步时,它正在工作但没有收敛,显示“预热后出现了1191个发散的过渡”。

我尝试过...

  1. 将公差更改为1e-10或1e-5,但两者都不起作用。
  2. adapt_delta从0.8增加到0.99,但未成功
  3. 增加了迭代次数和预热次数(iter = 3000,预热= 2000)

我的关于Integrated_1d的代码是否错误...?

这是我的R版本:

R 4.0.2 x86_64-apple-darwin17.0 stan_version 2.21.0

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...