我想使用weibull分布构建用于生存分析的stan(rstan)代码。 但是我的stan代码始终无法正常工作。 如果有人知道如何处理我的问题,请教我。
我的数据就是这样
运动:(花费了兽类行为的时间) 对待:具有两个类别变量“ A”,“ B”的实验性处理 r_Day:考虑特定日期影响的随机影响
我的stan代码如下所示。
data {
int N; // all data
int D; // day
int <lower = 0, upper = 1> Treat[N];
int <lower = 0> Movment[N];
int <lower = 1, upper = D> Day[N];
}
parameters {
real <lower = 0> shape; // shape parameter
vector[2] beta;
real r_Day[D];
real <lower = 0> sigma_D;
}
transformed parameters{
vector[N] scale; // scale parameter
for(n in 1:N) scale[n] = beta[1] + beta[2]*Treat[n] + r_Day[Day[n]];
}
model {
for(n in 1:N) Movment[n] ~ weibull(shape, exp(-(scale[n]/shape))) ;
for (d in 1:D) r_Day[d] ~ normal(0, sigma_D);
}
但是此代码始终会出现错误“对数概率计算为log(0),即负无穷大。 Stan无法从该初始值开始采样。 拒绝初始值:”,并且采样停止。
请教我如何处理此错误。
答案 0 :(得分:1)
这可能是由于您在参数块中声明了sigma_D
而不使用它并且没有在其上放置先验。因此,您定义的分布是不正确的。我假设您打算将r_Day
的大小按sigma_D
的比例进行缩放,但是您仍然应该在所有参数上设置适当的先验。