R2OpenBUGS:根据中间结果对最终治疗结果进行建模

时间:2012-08-14 15:02:17

标签: r r2winbugs

有人使用R2OpenBUGS吗?我宁愿使用r2winbugs吗? ...

我正在尝试为具有(单个)中间(3个月)结果的患者样本模拟最终(2年)治疗结果(例如成功,死亡,默认或失败)。

R2OpenBUGS在多项式节点上给我一个奇怪的后验,其中两个结果是常数,另外两个结果是相等的,结果的总数大于队列大小。

我做错了什么?提前谢谢了!代码输出低于。

   library(R2OpenBUGS)

    model <- function() { 
      # Prior : distribution of final outcomes for treatment cohort N_tx
      outc[1:4] ~ dmulti(p.outc[],N_tx)
      p.outc[1] <- 164/1369
      p.outc[2] <- 907/1369
      p.outc[3] <- 190/1369
      p.outc[4] <- 108/1369
      # Prior : distribution of intermediate outcome (proxy of final outcome) for each final outcome cohort 
      # (e.g. proportion of patient with final outcome 1 that exhibited the intermediate outcome)
      cr_1 ~ dunif(0.451, 0.609)
      cr_2 ~ dunif(0.730, 0.787)
      cr_3 ~ dunif(0.559, 0.700)
      cr_4 ~ dunif(0.148, 0.312)
      # Probability p of the intermediate outcome given prior distributions
      p <- (outc[1]*cr_1+outc[2]*cr_2+outc[3]*cr_3+outc[4]*cr_4)/N_tx
      # Likelihood function for the number of culture conversions at 3 months among those still on treatment in month 6 (excludes confirmed deaths and defaulters)
      cs ~ dbin(p,N_tx)
    } 

    # N_tx is the number of patients in our cohort 
    N_tx <- 100
    # cs is the number of patient exhibiting the intermediate outcome
    cs <- 80

    data <- list("N_tx", "cs")

    inits <- function() { list(outc=c(round(164/1369*N_tx),
                                      round(907/1369*N_tx),
                                      round(190/1369*N_tx),
                                      round(108/1369*N_tx)),
                               cr_1=87/(87+77), 
                               cr_2=689/(689+218), 
                               cr_3=120/(120+70), 
                               cr_4=24/(24+84))
    }

    params <- c("outc") 

    model.file <- file.path(tempdir(), "model.txt") 
    write.model(model, model.file)

    out <- bugs(data, inits, params, model.file, n.iter=100000,debug=TRUE)

    all(out$summary[,"Rhat"] < 1.1) 

    out$mean["outc"] 
    out$sd["outc"] 

    print(out, digits=5)

以下是一些输出:

> all(out$summary[,"Rhat"] < 1.1) 
[1] TRUE
> 
> out$mean["outc"] 
$outc
[1] 15.53095 66.00000 14.00000 15.53095

> out$sd["outc"] 
$outc
[1] 3.137715 0.000000 0.000000 3.137715

> 
> print(out, digits=5)
Inference for Bugs model at "C:\", 
Current: 3 chains, each with 1e+05 iterations (first 50000 discarded)
Cumulative: n.sims = 150000 iterations saved
             mean      sd     2.5%    25%    50%    75% 97.5%    Rhat  n.eff
outc[1]  15.53095 3.13771 10.00000 13.000 15.000 18.000 22.00 1.00100 130000
outc[2]  66.00000 0.00000 66.00000 66.000 66.000 66.000 66.00 1.00000      1
outc[3]  14.00000 0.00000 14.00000 14.000 14.000 14.000 14.00 1.00000      1
outc[4]  15.53095 3.13771 10.00000 13.000 15.000 18.000 22.00 1.00100 130000
deviance  8.59096 2.23382  5.08097  6.927  8.323  9.963 13.66 1.00102  55000

For each parameter, n.eff is a crude measure of effective sample size,
and Rhat is the potential scale reduction factor (at convergence, Rhat=1).

DIC info (using the rule, pD = var(deviance)/2)
pD = 2.5 and DIC = 11.1
DIC is an estimate of expected predictive error (lower deviance is better).

0 个答案:

没有答案