2011-08-03 5 views
3

저는 JAGS에 익숙하지 않고 중단 된 데이터에 대해 dinterval()이 JAGS에서 작동하는 방식을 이해하려고합니다. 나는 각각의 데이터 포인트 (실제 값이 아님)에 대해서만 상한선과 하한선을 가진 거친 데이터를 모델링하고있다.간격 검열 데이터에 대한 dinterval()?

일부 상위 및 하위 경계를 각 지점에 대해 : 여기에 내가이 일을해야한다고 생각하는 방법의 간단한 예입니다

> head(lim) 
     L  U 
[1,] 14.98266 15.68029 
[2,] 21.21827 21.91590 
[3,] 18.34953 19.04716 
[4,] 19.00186 19.69949 
[5,] 15.39891 16.09654 
[6,] 17.81705 18.51468 

데이터가 공통으로 정상적인에서 오는 가정 모델을 (쓰기 함수) 평균과 분산 다음 들쭉날쭉 대한

playmodel <- function(){ 
      for (i in 1:50){ 
       is.censored[i] ~ dinterval(t[i], lim[i,]) 
       t[i] ~ dnorm(mu,tau) 
       } 
      mu ~ dnorm(0,.001) 
      tau ~ dgamma(.01,.01) 
      } 
      filename <- "toymod.bug" 
      write.model(toymod,filename) 

의 일부 기능과 할당 전화 :

data <- list("lim"=lim) 
inits <- list(mu=rnorm(1),tau=rgamma(1,.01,.01),t=as.vector(apply(lim,1,mean))) 
#last part is to ensure the starting value is between the upper and lower limit 
#each chain will start at the same place for t but this is just for this case 
params <- c("mu","tau") 

그리고 모델을 실행하십시오 :

playmodel.jags <- jags(data,inits, params, model.file="toymod.bug", n.chains=3, 
        n.iter=50000,n.burnin=30000, n.thin=1, DIC=TRUE, 
        working.directory=NULL,refresh = 50000/50, progress.bar = "text") 

실행하면 어떻게됩니까?

1) 무, 내 예상은 그것이 실행되지 않습니다 15

2)해야 할 때를 잘 주위 0 놓을 경우 DIC = TRUE :

error: "Error in jags.samples(model, variable.names, n.iter, thin, type = "trace", : Failed to set trace monitor for node deviance

내가 어리석은 일을하고 있어요 확신하고 누군가가 나를 궤도에 올려 놓는 것을 도울 수 있다면 고맙겠습니다.

서면으로

, 모델이 어떤 결과를 관찰하지 않습니다

+1

또한 I 모델을 OpenBUGS에서 I (Lower, Upper) 함수를 사용하여 모델링하면 제대로 작동하는 것 같습니다. – scottyaz

+0

우리 중 얼마나 많은 사람들이 통계 물리학을 사용하는지 잘 모르겠습니다. 이것은 stats.stackexchange.com의 교차 게시가 좋은 아이디어 일 수있는 몇 가지 상황 중 하나 일 수 있습니다. 또는 패키지 작성자에게 연락하거나 패키지 메일 링리스트가 있는지 확인할 수 있습니다. –

답변

2

다음은 마틴 플러머의 응답이다. 아마 정말 빠르게 움직이는 것을 보셨을 것입니다. 이것은 이전 샘플링에서 포워드 샘플링이기 때문입니다. 이것이 mu에 대한 사후 평균이 이전 평균 인 0과 같은 이유입니다. 변수 이름 "is.censored"는 생존 분석에서 발견 된 좌파 또는 우축의 데이터에 적합하지만 문제에는 적합하지 않습니다. 그래서 나는 그것을 "y"로 이름을 바꿀 것입니다. 만약

y[j] ~ dinterval(t[j], lim[j,]) 

및 LIM [J] 두 열의 다음 Y [j]가 구간 검열 데이터 모델 세 가지 값

y[j] = 0 if t[j] <= lim[j,1] 
y[j] = 1 if lim[j,1] < t[j] <= lim[j,2] 
y[j] = 2 if lim[j,2] < t[j] 

걸릴 수를 가지고있는 경우, Y [J]를 제공해야 모델의 데이터로 귀하의 경우, t [j]가 항상 lim [j, 1]과 lim [j, 2] 사이에 있다는 것을 알고 있으므로 데이터가 있어야합니다.

data <- list("lim"=lim, "y"=rep(1,nrow(lim))) 

DIC의 문제점은 상당히 깊습니다. 모델에 결과 데이터가 없기 때문에 편차가 정의되지 않습니다. 그러나 결과 데이터를 제공하더라도 원하는 편차 통계 (pD 포함)를 얻을 수는 없습니다. 편차는 0이 될 것이고 "jags"기능은 pD를위한 겔만 휴리스틱 스 (gelman heuristic)로 되돌아 갈 것입니다. (이것을 쓰지 않았으므로 설명하지 말라는 뜻입니다.) 또한 0이 될 것입니다. 당신이 정말로 원하는 가능성은

p(lim[j,1] < t[j] <= lim[j,2] | mu, tau) 

입니다 그러나 장애가 있었던 경우는 당신에게 항상 1 DIC의 "초점"입니다 잘못

p(y[j] | t[j]) 

을주고있다. WinBUGS가 이런 상황에서 무엇을하는지 모르겠습니다. 아마도 그것은 검열 된 변수에 대한 특별한 규칙을 가지고있을 것입니다.