我正在使用WinBUGS来处理网络元分析。代码和数据如下所示。问题是,当我运行代码时,WinBUGS总是返回“变量na未定义”,并且不起作用。
na []表示一次试验中的武器数量。我不知道如何在代码中定义它。实际上在一些代码示例中,其他作者也没有定义它们。有人可以帮帮我吗?非常感谢!
NMA SAE的比率。 对T2DM进行10次治疗
model{ # *** PROGRAM STARTS
for(i in 1:ns){ # LOOP THROUGH STUDIES
w[i,1] <- 0 # adjustment for multi-arm trials is zero for control arm
delta[i,1] <- 0 # treatment effect is zero for control arm
mu[i] ~ dnorm(0,.0001) # vague priors for all trial baselines
for (k in 1:na[i]) { # LOOP THROUGH ARMS
r[i,k] ~ dbin(p[i,k],n[i,k]) # binomial likelihood
logit(p[i,k]) <- mu[i] + delta[i,k] # model for linear predictor
rhat[i,k] <- p[i,k] * n[i,k] # expected value of the numerators
#Deviance contribution
dev[i,k] <- 2 * (r[i,k] * (log(r[i,k])-log(rhat[i,k]))
+ (n[i,k]-r[i,k]) * (log(n[i,k]-r[i,k]) - log(n[i,k]-rhat[i,k]))) }
# summed residual deviance contribution for this trial
resdev[i] <- sum(dev[i,1:na[i]])
for (k in 2:na[i]) { # LOOP THROUGH ARMS
# trial-specific LOR distributions
delta[i,k] ~ dnorm(md[i,k],taud[i,k])
# mean of LOR distributions (with multi-arm trial correction)
md[i,k] <- d[t[i,k]] - d[t[i,1]] + sw[i,k]
# precision of LOR distributions (with multi-arm trial correction)
taud[i,k] <- tau *2*(k-1)/k
# adjustment for multi-arm RCTs
w[i,k] <- (delta[i,k] - d[t[i,k]] + d[t[i,1]])
# cumulative adjustment for multi-arm trials
sw[i,k] <- sum(w[i,1:k-1])/(k-1)
}
}
totresdev <- sum(resdev[]) # Total Residual Deviance
d[1]<-0 # treatment effect is zero for reference treatment
# vague priors for treatment effects
for (k in 2:nt){ d[k] ~ dnorm(0,.0001) }
sd ~ dunif(0,5) # vague prior for between-trial SD
tau <- pow(sd,-2) # between-trial precision = (1/between-trial variance)
# pairwise ORs and LORs for all possible pair-wise comparisons, if nt>2
for (c in 1:(nt-1)) {
for (k in (c+1):nt) {
or[c,k] <- exp(d[k] - d[c])
lor[c,k] <- (d[k]-d[c])
}
}
# ranking on relative scale
for (k in 1:nt) {
rk[k] <- nt+1-rank(d[],k) # assumes events are “good”
# rk[k] <- rank(d[],k) # assumes events are “bad”
best[k] <- equals(rk[k],1) #calculate probability that treat k is best
}
}
# *** PROGRAM ENDS
DATA
#Description of data inputs
#ns = Number of studies
#nt = Number of treatments (including placebo)
#t[,x] = Treatment indicator
#r[,x] = Number achieving response on HAM-D (50% improvement of scores from baseline)
#n[,x]= Number of all randomized patients (ITT)
#na[] = Number of arms in study
list(ns=19, nt=12)
t[,1] r[,1] n[,1] t[,2] r[,2] n[,2] t[,3] r[,3] n[,3] na[]
3 0 76 30 2 72 NA NA NA 2
3 99 1389 23 132 1383 NA NA NA 2
1 6 352 30 2 178 NA NA NA 2
2 6 106 30 3 95 NA NA NA 2
3 49 393 25 18 198 NA NA NA 2
1 20 65 22 10 26 NA NA NA 2
1 1 76 30 3 76 NA NA NA 2
3 7 441 26 1 220 NA NA NA 2
2 1 47 30 0 41 NA NA NA 2
3 10 156 30 9 150 NA NA NA 2
1 4 85 25 5 85 30 4 84 3
3 6 152 30 5 160 NA NA NA 2
18 4 158 21 8 158 NA NA NA 2
1 3 110 30 2 111 NA NA NA 2
3 3 83 30 1 92 NA NA NA 2
1 3 124 22 6 123 30 4 125 3
3 236 1553 23 254 1546 NA NA NA 2
6 5 398 7 6 403 NA NA NA 2
1 64 588 22 73 584 NA NA NA 2
END
我真的需要在本周内修复它。谢谢!
答案 0 :(得分:0)
我不知道问题是否已解决。 你应该加载达达2次。 第一次,加载&#34;列表&#34; 第二次,加载&#34; t [,1] r [,1] n [,1] t [,2] r [,2] n [,2] t [,3] r [,3] n [,3] na []&#34; 然后,它的工作原理。 希望它对你有好处!