Bayesian 威布尔网络元分析

Bayesian 威布尔网络元分析,bayesian,survival-analysis,winbugs,r2winbugs,winbugs14,Bayesian,Survival Analysis,Winbugs,R2winbugs,Winbugs14,我目前正在对几个临床试验的生存数据进行荟萃分析 为了做到这一点,我使用相同的方法从已发布的分析中获得了代码。但是,当使用已发布分析中的数据运行此代码时,我无法复制它们的结果。事实上,结果无法收敛到任何合理的估计 代码本身(不包括数据)应该是正确的,因为它直接来自作者。我假设问题与初始值有关,或者 如何运行采样的参数,但在播放w/many之后 初始值、磨合长度、变薄等。。。我没有得到有意义的结果 如果有人建议如何运行(初始值等),以使其正常运行,我将不胜感激。或者,如果代码中存在问题,或者数据的设

我目前正在对几个临床试验的生存数据进行荟萃分析

为了做到这一点,我使用相同的方法从已发布的分析中获得了代码。但是,当使用已发布分析中的数据运行此代码时,我无法复制它们的结果。事实上,结果无法收敛到任何合理的估计

代码本身(不包括数据)应该是正确的,因为它直接来自作者。我假设问题与初始值有关,或者 如何运行采样的参数,但在播放w/many之后 初始值、磨合长度、变薄等。。。我没有得到有意义的结果

如果有人建议如何运行(初始值等),以使其正常运行,我将不胜感激。或者,如果代码中存在问题,或者数据的设置方式与代码不匹配,那么了解这些信息将非常有用

作为旁注,我正在使用R2WinBUGs进行分析,尽管我有 单独使用WinBUGs也会遇到同样的问题

关于该方法的一些额外背景知识:

其工作方式是通过估计形状和比例的差异 二次参数化威布尔分布的参数 使用随机效应进行多个研究的治疗

Weibull分布被重新参数化,使得 危险率为a+b*log(t),其中a为刻度参数,b为a 形状参数。由此,您可以计算可能性 给定数量故障中给定数量故障的功能 病人在一段时间内死亡

不幸的是,这篇文章是公开的,但是如果你可以在这里访问 链接是:

输入模型的变量的快速摘要:

NT:包括的单独治疗的数量

N:主数据集中的行数。 NS:研究数量

s:数据行对应的研究(编号为1:6)

r:本次治疗/研究间隔期内失败的患者人数

n:本研究间隔期开始时有风险的患者人数 治疗/研究

t:该行数据对应的处理(编号1:3)

b:表示哪种治疗是基线治疗,其他治疗与之比较(每行设置为1)

bs:作为本研究对照组的治疗

bt:治疗,这是本研究的研究分支

WinBUGS代码(包括数据):

随机效应网络元分析模型的Winbugs代码 模型 { for(1:N中的i) {#N=数据集中的数据点数量 #可能性 r[i]~dbin(p[i],n[i])
p[i]给你一些建议,希望能对你有所帮助:

  • 我认为您的问题可以在中得到更好的回答;尽管如果您想将问题转移到那里,您应该重写它,而不是发布代码转储

  • 已经有好几年了,距离上次更新已经8年了!我想你应该忘了它,因为有几个更好的选择

  • 您可以在或中尝试几乎相同的代码,这两种代码都可以通过和在R中使用。Stan特别重要,因为它使用HCMC,在许多WinBUGS不使用的情况下会收敛

  • 我认为你应该读一本简单的书:来自John K.Kruschke,以便能够自己理解和进行贝叶斯数据分析


  • 最终,我无法使该模型在WinBUGS中正常运行。但是,我能够将该模型移植到STAN,并获得非常接近的匹配。有关STAN代码,请参见下面的内容:

    data { 
    
    
     int<lower=1> N;
      int<lower=1> NS;
      int<lower=1> NT;
    
      cov_matrix[2] prec2;
      matrix[2,2] R;
      vector[2] means;
    
      int<lower=0> bs[NS];
      int<lower=0> ts[NS];
    
      int<lower=0> s[N];
      int<lower=0> t[N];
      int<lower=0> n[N];
      int<lower=0> r[N];
      real<lower=0> dt[N];
      real<lower=0> time[N];
    }
    parameters {
      vector[2] mu[NS];
      vector[2] delta[NS];
      vector[2] dj[NT-1];
      cov_matrix[2] omega;
    } 
    transformed parameters{
      real<lower=0,upper=1> p[N];
      real<lower=0> h[N];
      real nu[N];
      real theta[N];
      vector[2] md[NS];
      vector[2] d[NT];
    
      d[1][1] <- 0;
      d[1][2] <- 0;
      for(j in 2:NT){
        d[j] <- dj[j-1];
      }
      for(k in 1:NS){
        md[k] <- d[ts[k]] - d[bs[k]];
      }
      for(i in 1:N){
        if(t[i] == 1){
          nu[i] <- mu[s[i]][1];
          theta[i] <- mu[s[i]][2];
        }else{
          nu[i] <- mu[s[i]][1] + delta[s[i]][1];
          theta[i] <- mu[s[i]][2] + delta[s[i]][2];
        }
        h[i] <- exp(nu[i] + log(time[i]) * theta[i]);
        p[i] <- 1 - exp(- h[i] * dt[i]);
      }
    }
    model {
      omega ~ inv_wishart(2,R);
      for(j in 1:(NT-1)){
        dj[j] ~ multi_normal(means,prec2);
      }
      for(k in 1:NS){
        delta[k] ~ multi_normal(md[k],omega);
        mu[k] ~ multi_normal(means,prec2);
      }
      for(i in 1:N){
        r[i] ~ binomial(n[i],p[i]);
      }
    }
    generated quantities{
      vector[N] log_lik;
      for (l in 1:N) {
        log_lik[l] <- binomial_log(r[l], n[l], p[l]);
      }
    }
    
    数据{
    int N;
    int-NS;
    int NT;
    cov_矩阵[2]prec2;
    矩阵[2,2]R;
    向量[2]是指;
    int-bs[NS];
    int ts[NS];
    int s[N];
    int t[N];
    int n[n];
    int r[N];
    实dt[N];
    实时[N];
    }
    参数{
    向量[2]μ[NS];
    向量[2]δ[NS];
    向量[2]dj[NT-1];
    cov_矩阵[2]ω;
    } 
    变换参数{
    实p[N];
    实h[N];
    真努[N];
    实θ[N];
    向量[2]md[NS];
    向量[2]d[NT];
    
    d[1][1]你好,谢谢你的评论。事实上,我已经重写了w/rstan模型,它将公布的结果匹配到一个非常小的差异。同意WinBUGS被禁止,希望更多的学者会做出改变。
    data { 
    
    
     int<lower=1> N;
      int<lower=1> NS;
      int<lower=1> NT;
    
      cov_matrix[2] prec2;
      matrix[2,2] R;
      vector[2] means;
    
      int<lower=0> bs[NS];
      int<lower=0> ts[NS];
    
      int<lower=0> s[N];
      int<lower=0> t[N];
      int<lower=0> n[N];
      int<lower=0> r[N];
      real<lower=0> dt[N];
      real<lower=0> time[N];
    }
    parameters {
      vector[2] mu[NS];
      vector[2] delta[NS];
      vector[2] dj[NT-1];
      cov_matrix[2] omega;
    } 
    transformed parameters{
      real<lower=0,upper=1> p[N];
      real<lower=0> h[N];
      real nu[N];
      real theta[N];
      vector[2] md[NS];
      vector[2] d[NT];
    
      d[1][1] <- 0;
      d[1][2] <- 0;
      for(j in 2:NT){
        d[j] <- dj[j-1];
      }
      for(k in 1:NS){
        md[k] <- d[ts[k]] - d[bs[k]];
      }
      for(i in 1:N){
        if(t[i] == 1){
          nu[i] <- mu[s[i]][1];
          theta[i] <- mu[s[i]][2];
        }else{
          nu[i] <- mu[s[i]][1] + delta[s[i]][1];
          theta[i] <- mu[s[i]][2] + delta[s[i]][2];
        }
        h[i] <- exp(nu[i] + log(time[i]) * theta[i]);
        p[i] <- 1 - exp(- h[i] * dt[i]);
      }
    }
    model {
      omega ~ inv_wishart(2,R);
      for(j in 1:(NT-1)){
        dj[j] ~ multi_normal(means,prec2);
      }
      for(k in 1:NS){
        delta[k] ~ multi_normal(md[k],omega);
        mu[k] ~ multi_normal(means,prec2);
      }
      for(i in 1:N){
        r[i] ~ binomial(n[i],p[i]);
      }
    }
    generated quantities{
      vector[N] log_lik;
      for (l in 1:N) {
        log_lik[l] <- binomial_log(r[l], n[l], p[l]);
      }
    }
    
    dataList$R <- matrix(c(0.01,0,0,0.01),nrow=2,ncol=2,byrow=TRUE)
    dataList$prec2 <- matrix(c(10^4,0,0,10^4),nrow=2,ncol=2,byrow=TRUE)