2016-12-15 38 views
1

我試圖按照Hui,Ibrahim和Sinha(1999)提出的方法實施一個具有治癒率的Weibull比例風險模型 - 具有存活分數的新的生存數據貝葉斯模型。但是,我不確定是否可以爲JAGS中的循環定義一個隨機限制。是否可以爲JAGS中的循環定義一個隨機限制?

library(R2OpenBUGS) 
library(rjags) 

set.seed(1234) 
censored <- c(1, 1) 
time_mod <- c(NA, NA) 
time_cens <- c(5, 7) 
tau <- 4 
design_matrix <- rbind(c(1, 0, 0, 0), c(1, 0.2, 0.2, 0.04)) 

jfun <- function() { 

    for(i in 1:nobs) { 
    censored[i] ~ dinterval(time_mod[i], time_cens[i]) 
    time_mod[i] <- ifelse(N[i] == 0, tau, min(Z)) 

    for (k in 1:N[i]){ 
     Z[k] ~ dweib(1, 1) 
    } 

    N[i] ~ dpois(fc[i]) 
    fc[i] <- exp(inprod(design_matrix[i, ], beta)) 

    } 

    beta[1] ~ dnorm(0, 10) 
    beta[2] ~ dnorm(0, 10) 
    beta[3] ~ dnorm(0, 10) 
    beta[4] ~ dnorm(0, 10) 
} 

inits <- function() { 
    time_init <- rep(NA, length(time_mod)) 
    time_init[which(!status)] <- time_cens[which(!status)] + 1 
    out <- list(beta = rnorm(4, 0, 10), 
       time_mod = time_init, 
       N = rpois(length(time_mod), 5)) 
    return(out) 
} 

data_base <- list('time_mod' = time_mod, 'time_cens' = time_cens, 
        'censored' = censored, 'design_matrix' = design_matrix, 
        'tau' = tau, 
        'nobs' = length(time_cens[!is.na(time_cens)])) 


tc1 <- textConnection("jmod", "w") 
write.model(jfun, tc1) 
close(tc1) 

# Calling JAGS 
tc2 <- textConnection(jmod) 
j <- jags.model(tc2, 
       data = data_base, 
       inits = inits(), 
       n.chains = 1, 
       n.adapt = 1000) 

我看到下面的錯誤:

Error in jags.model(tc2, data = data_base, inits = inits(), n.chains = 1, : 
    RUNTIME ERROR: 
Compilation error on line 6. 
Unknown variable N 
Either supply values for this variable with the data 
or define it on the left hand side of a relation. 
+0

只是好奇:BR呢? –

回答

1

我不能完全肯定,但我敢肯定,你不能在一般的BUGS聲明節點的隨機數,所以它不會是一個特定的JAGS的怪癖。

儘管如此,你可以解決這個問題。

由於BUGS是一個說明性語言,而不是程序性的,它足以聲明一個任意但確定性節點數目(比方說「足夠大」),然後只有隨機數他們與關聯一個分佈和觀測數據,剩下的節點是確定性的。

一旦你觀察到的N[i](比方說N.max)的最大值,你可以把它作爲一個參數到JAGS,然後改變你的這段代碼:

for (k in 1:N[i]){ 
    Z[k] ~ dweib(1, 1) 
} 

到這一點:

for (k in 1:N.max){ 
    if (k <= N[i]){ 
    Z[k] ~ dweib(1, 1) 
    } else { 
    Z[k] <- 0 
    } 
} 

我希望這會在你的情況下做到這一點。所以請給出反饋意見。

不用說,如果你有一些不爲零時,觀察到的關聯確定性Z[k]數據,然後所有的地獄破散裏面尖齒...

+1

謝謝。最後,我找到了一個統計解決方案,將我的潛在變量進行整合。 –

+0

很好。至少,你有一個新的竅門來掖着你的袖子。 –

相關問題