如何使用零或一技巧在 JAGS 中编写 Weibull(参数化 AFT)模型

How to write a Weibull (Parametric AFT) model in JAGS using Zero or One Trick

提问人:Xingzhi Xu 提问时间:11/1/2023 最后编辑:halferXingzhi Xu 更新时间:11/3/2023 访问量:70

问:

我正在尝试在 JAGS 中编写一个定制的 weibull AFT 模型。但是我定制的 weibull 船尾模型的输出与使用 .~dweib()

我尝试了三种不同的方式:

  1. 用。time[i] ~ dweib(b, λ[i])
model{
  for(i in 1 : N) {
    is.censored[i] ~ dinterval(time[i], cen[i])
    time[i] ~ dweib(b, lambda[i])
    lambda[i] <- exp(-mu[i] * b)
    mu[i] <- beta0 + beta1 * trt[i]
  }
  
  ##priors for betas
  beta0 ~ dnorm(0, 0.001)
  beta1 ~ dnorm(0, 0.001)
  
  ##prior for b
  b ~ dgamma(0.001, 0.001)
  sigma <- pow(alpha, -1)
}
  1. 使用零个或一个技巧来生成自定义的似然分布。我使用jags手册中的危险和生存函数公式。我在下面的代码中使用了一个技巧。
data{
  for(z in 1:N){
    ones[z] <- 1
  }
  C <- 1000000
}

model{
  for(i in 1 : N) {
    is.censored[i] ~ dinterval(time[i], cen[i])
    ones[i] ~ dbern(ones.mean[i])
    
    ##one trick
    ones.mean[i] <- L[i] / C
    
    ##customize log-likelihood of the weibull distribution
    L[i] <- ifelse(is.censored[i],
            S[i],
            h[i]*S[i])
    
    h[i] <- b * lambda[i] * pow(time[i], b - 1)
    S[i] <- exp(-lambda[i] * pow(time[i], b))
    lambda[i] <- exp(-(mu + beta_formula[i]) * b)
    beta_formula[i] <- beta1 * trt[i]
  }
  
  beta1 ~ dnorm(0, 0.001)
  
  ##prior for mu and sigma of the weibull distribution
  mu ~ dnorm(0, 0.001)
  b ~ dgamma(0.001, 0.001)
  sigma <- pow(b, -1)
}
  1. 我使用该软件包对频率论者的参数化 AFT 模型进行威布尔分布建模,以确认方法 1 和 2 的结果。在拟合模型之前,我将审查指示器更改为死亡指示器。flexsurv
flexsurvreg(formula = Surv(survT, dead) ~ I(trt), 
                           data = df, dist = 'weibull')

在拟合了所有三个模型后,我注意到模型 2 的结果与模型 1 和模型 3 的结果明显不同(处理系数是 11 而不是 0.2),因此我定制的 Weibull 模型显然有问题。

我仍在尝试弄清楚如何上传数据集。同时,如何检查模型 2 的代码?一旦弄清楚,我会立即上传数据集。

R 贝叶斯 生存分析 Jags Weibull

评论

0赞 gregor-fausto 11/17/2023
是否可以在包附带的数据集之一(例如数据集)上测试该问题?如果您无法弄清楚如何上传自己的数据,使用这样的内置数据集可能会帮助您获得答案。此外,我认为您的模型中可能不需要这条线;至少我在其他地方没有看到该参数。flexsurvovariansigma <- pow(..., -1)

答: 暂无答案