WinBUGS возвращает переменную na, которая не определена. Как это исправить?

Я использую WinBUGS для метаанализа сети. Код и данные перечислены ниже. Проблема в том, что когда я запускаю код, WinBUGS всегда возвращает «переменная na не определена» и не работает.

na[] означает количество рук в одном испытании. Я не знаю, как определить это в коде. На самом деле в некоторых примерах кода другие авторы тоже их не определяли. Кто-нибудь может мне помочь? Очень признателен!

Скорость NMA для SAE. 10 процедур для СД2

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

Мне действительно нужно исправить это в течение этой недели. Спасибо!


person JustinMS    schedule 28.05.2014    source источник
comment
Не похоже, что вы используете R. Похоже, вы работаете непосредственно в WinBUGS. Вы написали код модели или получили код модели в его текущем состоянии?   -  person Mark Miller    schedule 28.05.2014
comment
Да Марк. Я использую его непосредственно в WinBUGS с его текущим состоянием. У вас есть идея решить проблему?   -  person JustinMS    schedule 28.05.2014
comment
Я всегда вызываю OpenBUGS или JAGS через R. Я практически никогда не использую WinBUGS напрямую. Если бы был включен полный код для R, я мог бы помочь.   -  person Mark Miller    schedule 28.05.2014
comment
WinBUGS и OpenBUGS - это почти одно и то же. Код точно такой же. Но я не пробовал это через R. Я просто попробовал WinBUGS и OpenBUGS, и у меня возникла проблема.   -  person JustinMS    schedule 28.05.2014
comment
Привет, Марк, я переписал свои коды на R, но все еще сталкиваюсь с некоторыми новыми проблемами. Пожалуйста, проверьте это: stackoverflow.com/questions/24009206/   -  person JustinMS    schedule 03.06.2014
comment
Не могли бы вы дать мне несколько советов по отладке R?   -  person JustinMS    schedule 03.06.2014


Ответы (1)


Я не знаю, проблема решена или нет. Вы должны загрузить дада 2 раза. первый раз загрузите «список», второй раз загрузите «t[,1] r[,1] n[,1] t[,2] r[,2] n[,2] t[,3] r [,3] n[,3] na[]", то это работает. Надеюсь, это принесет вам пользу!

person user5874183    schedule 02.02.2016
comment
Спасибо! Проблема была решена, но ваш ответ дает лучшее решение. - person JustinMS; 16.08.2018