微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R stan积分integrate_1d的差异

如何解决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 举报,一经查实,本站将立刻删除。