2016-07-10 3 views
0

알려진 매개 변수를 사용하여 모델에서 데이터를 생성하기위한 도구로 JAGS를 오용 할 수 있습니까? 시뮬레이션 연구를하고 R에서 개발 한 모델의 힘을 테스트하기 위해 미리 정의 된 모델에서 데이터 포인트를 샘플링해야합니다.JAGS/r2jags에서 데이터 시뮬레이션

불행히도 모델은 다소 까다 롭습니다 (AR 및 VAR 구성 요소가있는 계층 구조) R에서 직접 데이터를 시뮬레이트 할 수 없었습니다. 인터넷 검색 중에블록을 사용하여 JAGS에서 데이터가 생성 된 blog post을 찾았습니다. 이 게시물에서 저자는 JAGS에서 직접 모델을 추정 한 것입니다. R에 모델이 있으므로 model{} 블록이 없으면 데이터를 다시 R로 전송하고 싶습니다. 이것이 가능한가? 승리

보다도,

+0

예를 들어'y.sim [i] ~ dnorm (mu, sigma^-2)'를 실행하고'y.sim'을 모니터링하십시오. – jbaums

+0

어디에서 발생합니까? 데이터 모델 블록에서? – winwin

답변

2

이 방법으로 데이터를 생성하는 데이터 블록을 사용해야 할 특별한 이유가 없다 - 모델 블록은 그냥 간단하게 고정을 기반으로 데이터를 생성하는 '역'에서 작업 할 수는 매개 변수. 매개 변수를 JAGS의 '데이터'로 지정하고 시뮬레이션 된 데이터 포인트를 모니터링하십시오 (데이터 세트가 필요한만큼 반복 실행 - 1 일 수도 있음).

원칙적으로 데이터 또는 모델 블록 (또는 둘 모두의 조합)을 사용하여 데이터를 시뮬레이션 할 수 있지만 JAGS의 모델 블록 (단순하지만 관련이없는 모델 임에도 불구하고)이 필요합니다. 달리기. 예를 들어, 다음은 일부 데이터를 시뮬레이션하기 위해 상기 데이터 블록을 사용

txtstring <- ' 
data{ 
    for(i in 1:N){ 
     Simulated[i] ~ dpois(i) 
    } 
} 

model{ 
    fake <- 0 
} 
#monitor# Simulated 
#data# N 
' 


library('runjags') 

N <- 10 
Simulated <- coda::as.mcmc(run.jags(txtstring, sample=1, n.chains=1, summarise=FALSE)) 
Simulated 

유일한 차이는 모델 블록에 업데이트되는 반면, 데이터 블록 (시뮬레이션의 시작) 번만 갱신된다는 것이다 각 반복. 이 경우 우리는 단지 1 개의 샘플을 취하므로 중요하지 않습니다. 그러나 동일한 JAGS 실행 내에서 시뮬레이션 된 데이터를 여러 번 구현하려면 모델 블록에 코드를 넣어야합니다. [데이터 블록과 모델 블록 사이에는 다른 차이점이있을 수 있지만 나는 어떤 생각도 할 수 없다].

JAGS에서 다른 형식으로 데이터를 가져 오므로 (모니터링되는 데이터 내의 모든 배열의 인덱스를 나타내는 단일 벡터), 일부 legwork을 목록으로 다시 가져와야 할 수도 있습니다 벡터/배열/무엇이든 R. 편집 : R2jags이 유틸리티를 제공하지 않는 한 - 나는 그 패키지를 사용하지 않기 때문에 잘 모르겠습니다.

+0

감사합니다. 그 대답은 제가 찾고있는 대답이었습니다. – winwin

+2

마지막 점과 관련하여 [jagstools 패키지] (https://github.com/johnbaums/jagstools)의'rearray'는 모니터링되는 다차원 배열을 다시 배열로 변환합니다. – jbaums

관련 문제