liminfo

JAGS Reference

JAGS BUGS 언어/분포/모니터 레퍼런스

25개 결과

JAGS Reference 소개

JAGS 레퍼런스는 베이지안 통계 모형 작성에 널리 쓰이는 JAGS(Just Another Gibbs Sampler)의 검색 가능한 치트 시트입니다. BUGS 언어 기반 모델 블록 구조, 결정적 노드(<-)와 확률적 노드(~) 정의, for 루프 구문, 그리고 logit, log, probit, cloglog 같은 일반화선형모형 링크 함수를 모두 다룹니다.

이 레퍼런스는 용도별로 정리된 JAGS 확률분포 함수를 상세히 다룹니다. 정밀도 매개변수화(tau = 1/sigma^2)를 사용하는 dnorm, 이항 결과를 위한 dbern과 dbin, 과분산 카운트 데이터를 위한 dpois와 dnegbin, 양수 및 확률 범위 파라미터를 위한 dgamma와 dbeta, Wishart 사전분포를 이용한 다변량 정규분포 dmnorm, 그리고 생존 분석에서 중도절단 데이터를 처리하는 T()와 dinterval까지 포함합니다.

또한 베이지안 선형 회귀, 로지스틱 회귀, 계층적/다수준 모형, 디리클레 사전분포를 활용한 유한 혼합 모형의 완성된 모델 템플릿을 제공합니다. R 인터페이스 섹션에서는 직접 제어가 가능한 rjags, 간편 워크플로우를 위한 R2jags, MCMC 진단(Gelman-Rubin Rhat, 유효 표본 크기, 자기상관)을 위한 coda 패키지, 모델 비교를 위한 DIC, Python 사용자를 위한 pyjags를 모두 다룹니다.

주요 기능

  • model 블록, for 루프, 결정적(<-)과 확률적(~) 노드 정의를 포함한 완전한 BUGS 모델 언어 구문
  • dnorm, dbern, dbin, dpois, dnegbin, dgamma, dbeta, dunif, dt, dmnorm, dmulti, dcat 등 모든 주요 분포 함수와 매개변수화 설명
  • logit, log, probit, cloglog 등 일반화선형모형 링크 함수와 역함수 참조
  • 선형 회귀, 로지스틱 회귀, 계층 모형, 혼합 모형에 바로 쓸 수 있는 모델 템플릿
  • rjags(jags.model, coda.samples), R2jags(jags 함수), coda 진단 도구의 R 인터페이스 명령어
  • 체인 초기값, 번인 기간, 시닝, Rhat 및 ESS를 통한 수렴 평가 등 MCMC 설정 가이드
  • 베이지안 모델 비교를 위한 DIC(이탈도 정보 기준) 계산 방법
  • pyjags를 통한 Python 연동으로 동일한 모델 명세와 사후 샘플링 워크플로우 지원

자주 묻는 질문

JAGS는 무엇이고 Stan이나 WinBUGS와 어떻게 다른가요?

JAGS(Just Another Gibbs Sampler)는 BUGS 모델 언어를 사용하여 깁스 샘플링과 슬라이스 샘플링을 수행하는 베이지안 추론 엔진입니다. 자체 언어와 해밀턴 몬테카를로를 사용하는 Stan과 달리 JAGS는 WinBUGS/OpenBUGS와 거의 동일한 선언적 BUGS 구문을 사용합니다. 크로스플랫폼(Linux/Mac/Windows)이며 GPL 오픈소스 라이선스로 배포됩니다.

JAGS에서 dnorm이 표준편차(sigma) 대신 정밀도(tau)를 쓰는 이유는?

JAGS는 BUGS 관례를 따라 정규분포를 dnorm(mu, tau) 형태로 정의하며, tau = 1/sigma^2입니다. 따라서 dnorm(0, 0.001)은 N(0, 분산=1000)이라는 매우 넓은 사전분포를 의미합니다. 모형에서 sigma를 복원하려면 sigma <- 1/sqrt(tau)라는 결정적 관계를 사용하세요. Stan은 sigma를 직접 사용하므로 혼동에 주의해야 합니다.

JAGS에서 비정보 사전분포는 어떻게 설정하나요?

일반적인 비정보 사전분포로는 회귀 계수에 dnorm(0, 0.001)(정밀도 0.001 = 분산 1000인 매우 넓은 정규분포), 정밀도 파라미터에 dgamma(0.001, 0.001), 표준편차에 dunif(0, 100), 확률 파라미터에 dbeta(1, 1)(0~1 균등분포) 등이 있습니다. Jeffreys 사전분포로 dbeta(0.5, 0.5)도 사용 가능합니다.

R에서 rjags와 R2jags의 차이점은 무엇인가요?

rjags는 jags.model()로 모델을 생성하고 update()로 번인을 실행한 뒤 coda.samples()로 샘플링하는 저수준 제어를 제공합니다. R2jags는 이를 jags() 함수 하나로 통합하여 데이터, 모니터링 파라미터, 반복 횟수, 번인, 시닝을 한 번에 지정할 수 있습니다. 표준 워크플로우에는 R2jags가 간편하고, 커스텀 MCMC 전략에는 rjags가 유연합니다.

JAGS에서 MCMC 수렴을 어떻게 진단하나요?

R의 coda 패키지를 사용합니다. gelman.diag()로 Gelman-Rubin Rhat 통계량(1.0에 가까울수록 수렴), effectiveSize()로 유효 표본 크기(파라미터당 최소 100~400 이상 필요), autocorr.diag()로 자기상관 감쇠를 확인합니다. plot()으로 추적 그림도 시각적으로 점검하세요. 다중 체인 진단을 위해 서로 다른 초기값으로 최소 3개 체인을 실행하는 것이 좋습니다.

JAGS에서 중도절단이나 절단 데이터를 어떻게 처리하나요?

JAGS는 T(하한, 상한) 구문으로 절단 분포를 지원합니다. 예를 들어 y ~ dnorm(mu, tau)T(0,)은 0에서 좌절단된 분포입니다. 구간 중도절단 생존 데이터에는 dinterval 분포를 사용합니다. is.censored[i] ~ dinterval(t[i], c[i])를 선언하고 c[i]를 중도절단 시간으로 설정합니다. 중도절단된 관측치에는 적절한 초기값을 제공해야 합니다.

DIC란 무엇이고 모델 비교에서 어떻게 해석하나요?

DIC(이탈도 정보 기준)는 dic.samples()로 계산하며 Dbar + pD로 구성됩니다. Dbar는 사후 평균 이탈도, pD는 유효 파라미터 수입니다. DIC가 낮을수록 복잡도 페널티를 반영한 더 나은 모형 적합도를 나타냅니다. 일반적으로 5~10 이상의 DIC 차이가 의미 있다고 봅니다. 혼합 모형에서는 DIC가 불안정할 수 있으므로 유사한 구조의 모형 비교에 적합합니다.

R 대신 Python에서 JAGS를 실행할 수 있나요?

네, pyjags 패키지로 Python에서 JAGS를 실행할 수 있습니다. 모델 코드를 문자열로 정의하고, 데이터를 Python 딕셔너리로 전달한 뒤, pyjags.Model()을 호출합니다. 사후 표본은 numpy 배열로 반환됩니다. 먼저 JAGS를 시스템에 설치한 후 pip install pyjags로 패키지를 설치하세요. R 워크플로우와 동일한 구조이나 Python 데이터 구조를 사용합니다.