问题描述
全部。
我想在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个发散的过渡”。
我尝试过...
- 将公差更改为1e-10或1e-5,但两者都不起作用。
- adapt_delta从0.8增加到0.99,但未成功
- 增加了迭代次数和预热次数(iter = 3000,预热= 2000)
我的关于Integrated_1d的代码是否错误...?
这是我的R版本:
R 4.0.2 x86_64-apple-darwin17.0 stan_version 2.21.0
谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)