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