2016-11-23 3 views
0

Я пытаюсь отредактировать загруженную модель метаанализа сети с моими собственными данными, она работает нормально, пока я не скомпилирую модель после загрузки моих данных. Winbugs предупреждают, что «использовал неопределенный узел d». Я пытаюсь разобраться, но я потерпел неудачу. Пожалуйста, помогите мне. Модель и мои данные показали следующее.Ошибка Winbug с использованием неопределенного узла d

# Binomial likelihood, logit link, inconsistency model 
# Random effects model 
model{      # *** PROGRAM STARTS 
for(i in 1:ns){    # LOOP THROUGH STUDIES 
    delta[i,1]<-0   # treatment effect is zero in control arm 
    mu[i] ~ dnorm(0,.0001) # vague priors for 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 
#Deviance contribution 
     rhat[i,k] <- p[i,k] * n[i,k] # expected value of the numerators 
     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(d[t[i,1],t[i,k]] ,tau) 
     } 
    } 
totresdev <- sum(resdev[]) # Total Residual Deviance 
for (c in 1:(nt-1)) { # priors for all mean treatment effects 
    for (k in (c+1):nt) { d[c,k] ~ dnorm(0,.0001) } 
    } 
sd ~ dunif(0,5) # vague prior for between-trial standard deviation 
var <- pow(sd,2) # between-trial variance 
tau <- 1/var  # between-trial precision 
} # *** PROGRAM ENDS 


# ns= number of studies; nt=number of treatments 
list(nt=13,ns=17) 
t[,1] t[,2] t[,3] t[,4] r[,1] r[,2] r[,3] r[,4] n[,1] n[,2] n[,3] n[,4] na[] # study 
9 3 7 11 9 8 6 7 20 16 14 15 4 # 1 
9 7 8 NA 117 83 122 NA 229 231 247 NA 3 # 2 
9 3 NA NA 8 3 NA NA 18 13 NA NA 2 # 3 
9 5 NA NA 13 16 NA NA 20 20 NA NA 2 # 4 
9 1 2 NA 105 103 165 NA 226 228 227 NA 3 # 5 
9 2 13 NA 30 67 52 NA 96 200 195 NA 3 # 6 
9 6 NA NA 7 7 NA NA 17 18 NA NA 2 # 7 
7 12 NA NA 5 2 NA NA 14 12 NA NA 2 # 8 
9 7 8 12 14 8 12 8 24 23 21 26 4 # 9 
9 8 NA NA 5 12 NA NA 30 34 NA NA 2 # 10 
9 10 NA NA 3 10 NA NA 25 25 NA NA 2 # 11 
9 3 4 11 12 8 17 8 22 24 25 26 4 # 12 
9 8 NA NA 8 17 NA NA 21 24 NA NA 2 # 13 
1 7 NA NA 9 4 NA NA 15 15 NA NA 2 # 14 
9 1 NA NA 8 1 NA NA 30 29 NA NA 2 # 15 
9 3 11 NA 3 5 0 NA 21 23 8 NA 3 # 16 
9 8 NA NA 13 15 NA NA 19 16 NA NA 2 # 17 





END 
list(d=c(NA, 0,0,0,0,0,0,0,0,0,0,0,0), sd=1) 

ответ

0

я столкнулся с той же проблемой при попытке запустить модель несогласованности, а также, это было действительно раздражает в первом, потому что это было очень трудно определить, где этот вопрос. Фактически, если вы посмотрите на третий блок вашего кода WinBUGS, вы не определили priors для некоторых узлов, таких как d [9,1], d [9,2] ... d [9,8]; это причина, по которой сообщение об ошибке продолжает появляться.

исправление этой проблемы является простым. В модели несогласованности t [, 1] всегда должны быть ниже t [, 2], а t [, 2] всегда должны быть ниже t [, 3] и т. Д.

Надеюсь, это поможет ...