Skip to main content

bugs-fundamentals

Foundational knowledge for writing BUGS/JAGS models including precision parameterization, declarative syntax, distributions, and R integration. Use when creating or reviewing BUGS/JAGS models.

معلومات المصدر

المستودع
choxos/BiostatAgent
آخر نشاط في المصدر
١٠ يناير ٢٠٢٦ في ١٨:٤٨
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
١٢
التفرعات
١

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
bugs-fundamentals
description
Foundational knowledge for writing BUGS/JAGS models including precision parameterization, declarative syntax, distributions, and R integration. Use when creating or reviewing BUGS/JAGS models.
# BUGS/JAGS Fundamentals ## When to Use This Skill - Writing new WinBUGS or JAGS models - Understanding BUGS declarative syntax - Converting between BUGS and Stan - Integrating with R via R2jags or R2WinBUGS ## Model Structure BUGS uses a **single declarative block** where order doesn't matter: ``` model { # Likelihood (order doesn't matter) for (i in 1:N) { y[i] ~ dnorm(mu[i], tau) mu[i] <- alpha + beta * x[i] } # Priors alpha ~ dnorm(0, 0.001) beta ~ dnorm(0, 0.001) tau ~ dgamma(0.001, 0.001) # Derived quantities sigma <- 1 / sqrt(tau) } ``` ## CRITICAL: Precision Parameterization **BUGS uses PRECISION (tau = 1/variance), NOT standard deviation:** | Distribution | BUGS Syntax | Meaning | |-------------|-------------|---------| | Normal | `dnorm(mu, tau)` | tau = 1/sigma² | | MVN | `dmnorm(mu[], Omega[,])` | Omega = inverse(Sigma) | ### Converting SD ↔ Precision ``` # Precision from SD tau <- pow(sigma, -2) # SD from precision sigma <- 1 / sqrt(tau) ``` ## Distribution Reference ### Continuous (All use precision!) ``` y ~ dnorm(mu, tau) # Normal: tau = 1/sigma² y ~ dlnorm(mu, tau) # Log-normal (log-scale) y ~ dt(mu, tau, df) # Student-t y ~ dunif(lower, upper) # Uniform y ~ dgamma(shape, rate) # Gamma y ~ dbeta(a, b) # Beta y ~ dexp(lambda) # Exponential (rate) y ~ dweib(shape, lambda) # Weibull y ~ ddexp(mu, tau) # Double exponential ``` ### Discrete ``` y ~ dbern(p) # Bernoulli y ~ dbin(p, n) # Binomial (p first!) y ~ dpois(lambda) # Poisson y ~ dnegbin(p, r) # Negative binomial y ~ dcat(p[]) # Categorical y ~ dmulti(p[], n) # Multinomial ``` ### Multivariate ``` y[1:K] ~ dmnorm(mu[], Omega[,]) # MVN (precision matrix!) Omega[1:K,1:K] ~ dwish(R[,], df) # Wishart (for precision) p[1:K] ~ ddirch(alpha[]) # Dirichlet ``` ## Syntax Essentials ### Stochastic vs Deterministic ``` # Stochastic (random variable) y ~ dnorm(mu, tau) # Deterministic (function) mu <- alpha + beta * x ``` ### Loops ``` for (i in 1:N) { y[i] ~ dnorm(mu[i], tau) } ``` ### Truncation (JAGS) ``` y ~ dnorm(mu, tau) T(lower, upper) y ~ dnorm(mu, tau) T(0, ) # Lower only ``` ### Logical Functions (JAGS) ``` ind <- step(y - threshold) # 1 if y >= threshold eq <- equals(y, 0) # 1 if y == 0 ``` ## Common Priors ``` # Vague normal (variance = 1000) alpha ~ dnorm(0, 0.001) # Half-Cauchy on SD (via uniform) sigma ~ dunif(0, 100) tau <- pow(sigma, -2) # Vague gamma on precision tau ~ dgamma(0.001, 0.001) # Correlation matrix Omega ~ dwish(I[,], K + 1) ``` ## R Integration ### R2jags (Recommended) ```r library(R2jags) jags.data <- list(N = 100, y = y, x = x) jags.params <- c("alpha", "beta", "sigma") jags.inits <- function() { list(alpha = 0, beta = 0, tau = 1) } fit <- jags( data = jags.data, inits = jags.inits, parameters.to.save = jags.params, model.file = "model.txt", n.chains = 4, n.iter = 10000, n.burnin = 5000 ) print(fit) fit$BUGSoutput$summary ``` ### R2WinBUGS (Windows) ```r library(R2WinBUGS) fit <- bugs( data = bugs.data, inits = bugs.inits, parameters.to.save = bugs.params, model.file = "model.txt", n.chains = 3, n.iter = 10000, bugs.directory = "C:/WinBUGS14/" ) ``` ## Key Differences from Stan | Feature | BUGS/JAGS | Stan | |---------|-----------|------| | Normal | `dnorm(mu, tau)` precision | `normal(mu, sigma)` SD | | MVN | `dmnorm(mu, Omega)` precision | `multi_normal(mu, Sigma)` cov | | Syntax | Declarative (DAG) | Imperative (sequential) | | Blocks | Single model{} | 7 optional blocks | | Sampling | Gibbs + Metropolis | HMC/NUTS | | Discrete | Direct sampling | Marginalization required | ## Common Errors 1. **Using SD instead of precision**: `dnorm(0, 1)` means variance=1, NOT SD=1 2. **Wrong binomial order**: `dbin(p, n)` not `dbin(n, p)` 3. **Missing initial values**: Provide inits for complex models 4. **Invalid parent values**: Check for NA/NaN in data
عرض على GitHub