Statistical Analysis
spacering-net/codeg
Guided statistical analysis for research data - test selection, assumption checking, effect sizes, power analysis, Bayesian alternatives, and APA-formatted reporting.
Bayesian modeling with PyMC 5: priors, likelihood, NUTS/ADVI sampling, diagnostics (R-hat, ESS), LOO/WAIC comparison, prediction.
$ npx skills add jaechang-hits/SciAgent-Skills --skill pymc-bayesian-modeling -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install jaechang-hits/SciAgent-Skills pymc-bayesian-modeling --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/jaechang-hits/SciAgent-Skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/biostatistics/pymc-bayesian-modeling .claude/skills/pymc-bayesian-modeling && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "pymc-bayesian-modeling" agent skill from https://github.com/jaechang-hits/SciAgent-Skills/tree/main/skills/biostatistics/pymc-bayesian-modeling into .claude/skills/pymc-bayesian-modeling/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pymc-bayesian-modeling", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/jaechang-hits/SciAgent-Skills/tree/main/skills/biostatistics/pymc-bayesian-modelingType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add jaechang-hits/SciAgent-Skills --skill pymc-bayesian-modeling -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install jaechang-hits/SciAgent-Skills pymc-bayesian-modeling --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jaechang-hits/SciAgent-Skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/biostatistics/pymc-bayesian-modeling .agents/skills/pymc-bayesian-modeling && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pymc-bayesian-modeling" agent skill from https://github.com/jaechang-hits/SciAgent-Skills/tree/main/skills/biostatistics/pymc-bayesian-modeling into .agents/skills/pymc-bayesian-modeling/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pymc-bayesian-modeling", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jaechang-hits/SciAgent-Skills --skill pymc-bayesian-modeling -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install jaechang-hits/SciAgent-Skills pymc-bayesian-modeling --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jaechang-hits/SciAgent-Skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/biostatistics/pymc-bayesian-modeling .cursor/skills/pymc-bayesian-modeling && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "pymc-bayesian-modeling" agent skill from https://github.com/jaechang-hits/SciAgent-Skills/tree/main/skills/biostatistics/pymc-bayesian-modeling into .cursor/skills/pymc-bayesian-modeling/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pymc-bayesian-modeling", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/jaechang-hits/SciAgent-Skills.git --path skills/biostatistics/pymc-bayesian-modeling--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add jaechang-hits/SciAgent-Skills --skill pymc-bayesian-modeling -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install jaechang-hits/SciAgent-Skills pymc-bayesian-modeling --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jaechang-hits/SciAgent-Skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/biostatistics/pymc-bayesian-modeling .gemini/skills/pymc-bayesian-modeling && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "pymc-bayesian-modeling" agent skill from https://github.com/jaechang-hits/SciAgent-Skills/tree/main/skills/biostatistics/pymc-bayesian-modeling into .gemini/skills/pymc-bayesian-modeling/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pymc-bayesian-modeling", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install jaechang-hits/SciAgent-Skills pymc-bayesian-modelingInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add jaechang-hits/SciAgent-Skills --skill pymc-bayesian-modeling -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/jaechang-hits/SciAgent-Skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/biostatistics/pymc-bayesian-modeling .github/skills/pymc-bayesian-modeling && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "pymc-bayesian-modeling" agent skill from https://github.com/jaechang-hits/SciAgent-Skills/tree/main/skills/biostatistics/pymc-bayesian-modeling into .github/skills/pymc-bayesian-modeling/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pymc-bayesian-modeling", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jaechang-hits/SciAgent-Skills --skill pymc-bayesian-modeling -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install jaechang-hits/SciAgent-Skills pymc-bayesian-modeling --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jaechang-hits/SciAgent-Skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/biostatistics/pymc-bayesian-modeling .opencode/skills/pymc-bayesian-modeling && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "pymc-bayesian-modeling" agent skill from https://github.com/jaechang-hits/SciAgent-Skills/tree/main/skills/biostatistics/pymc-bayesian-modeling into .opencode/skills/pymc-bayesian-modeling/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pymc-bayesian-modeling", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
pymc-bayesian-modelingBayesian modeling with PyMC 5: priors, likelihood, NUTS/ADVI sampling, diagnostics (R-hat, ESS), LOO/WAIC comparison, prediction.
Pymc Bayesian Modeling is an agent skill from jaechang-hits/SciAgent-Skills. Bayesian modeling with PyMC 5: priors, likelihood, NUTS/ADVI sampling, diagnostics (R-hat, ESS), LOO/WAIC comparison, prediction. Hierarchical, logistic, GP variants; predictive checks.
Its SKILL.md is about 5.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files, including reference files (for example `references/advanced_workflows.md` and `references/distributions_inference.md`).
It sits in Data & Analytics, covering Statistics. It works with PyMC. The repository describes itself as: 197 bioinformatics & life science skills for Claude Code and AI agents — BixBench 92.0% accuracy. RNA-seq, single-cell, drug discovery, proteomics, and more. Powers OmicsHorizon. The licence is Apache-2.0.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 82c862c. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
pipFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
pymc.iogithub.compython.arviz.orgbayesiancomputationbook.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Pymc Bayesian Modeling loads about 5.7k tokens when it runs, and up to ~12k if it reads all its reference files. Until then it costs about 52 tokens; SKILL.md has 1,628 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from jaechang-hits/SciAgent-Skills at commit 82c862c, republished under its Apache-2.0 licence (© jaechang-hits). 1,628 words, ~5,717 tokens.
.claude/skills/pymc-bayesian-modeling/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.PyMC is a Python library for Bayesian statistical modeling and probabilistic programming. It provides an expressive syntax for defining probabilistic models and efficient inference via MCMC (NUTS) and variational methods (ADVI). This skill covers the full Bayesian modeling cycle from model specification through diagnostics, comparison, and prediction.
pymc >= 5.0, arviz, numpy, matplotlibpip install pymc arviz numpy matplotlib
# Optional: JAX backend for GPU acceleration
pip install pymc[jax]import pymc as pm
import arviz as az
import numpy as np
# Simulate data
np.random.seed(42)
X = np.random.randn(100)
y = 2.5 + 1.3 * X + np.random.randn(100) * 0.5
# Build and fit model
with pm.Model() as model:
alpha = pm.Normal("alpha", mu=0, sigma=5)
beta = pm.Normal("beta", mu=0, sigma=5)
sigma = pm.HalfNormal("sigma", sigma=1)
mu = alpha + beta * X
y_obs = pm.Normal("y_obs", mu=mu, sigma=sigma, observed=y)
idata = pm.sample(1000, tune=1000, chains=4, random_seed=42)
print(az.summary(idata, var_names=["alpha", "beta", "sigma"]))
# Expected: alpha ~ 2.5, beta ~ 1.3, sigma ~ 0.5Standardize continuous predictors for better sampling efficiency. Use named coordinates for readable models and ArviZ integration.
import pymc as pm
import arviz as az
import numpy as np
# Load data
X = np.random.randn(200, 3) # 200 obs, 3 predictors
y = X @ np.array([1.0, -0.5, 0.3]) + np.random.randn(200) * 0.8
# Standardize predictors
X_mean, X_std = X.mean(axis=0), X.std(axis=0)
X_scaled = (X - X_mean) / X_std
# Define coordinates for named dimensions
coords = {
"predictors": ["var1", "var2", "var3"],
"obs_id": np.arange(len(y)),
}
print(f"Data shape: X={X_scaled.shape}, y={y.shape}")Specify the model structure inside a pm.Model() context. Use weakly informative priors, dims for named dimensions, and HalfNormal or Exponential for scale parameters.
with pm.Model(coords=coords) as model:
# Priors — weakly informative, not flat
alpha = pm.Normal("alpha", mu=0, sigma=1)
beta = pm.Normal("beta", mu=0, sigma=1, dims="predictors")
sigma = pm.HalfNormal("sigma", sigma=1)
# Linear predictor
mu = alpha + pm.math.dot(X_scaled, beta)
# Likelihood
y_obs = pm.Normal("y_obs", mu=mu, sigma=sigma, observed=y, dims="obs_id")
# Inspect model variables
print(model.basic_RVs) # Lists: [alpha, beta, sigma, y_obs]Validate that priors produce plausible data ranges before fitting. Adjust priors if simulated data is unreasonable.
with model:
prior_pred = pm.sample_prior_predictive(samples=1000, random_seed=42)
# Check prior-implied data range
prior_y = prior_pred.prior_predictive["y_obs"].values.flatten()
print(f"Prior predictive range: [{prior_y.min():.1f}, {prior_y.max():.1f}]")
print(f"Observed data range: [{y.min():.1f}, {y.max():.1f}]")
az.plot_ppc(prior_pred, group="prior", num_pp_samples=100)Run NUTS sampling with multiple chains. Include log_likelihood=True if you plan model comparison later.
with model:
idata = pm.sample(
draws=2000,
tune=1000,
chains=4,
target_accept=0.9,
random_seed=42,
idata_kwargs={"log_likelihood": True},
)
print(f"Posterior shape: {idata.posterior['beta'].shape}")
# Expected: (4 chains, 2000 draws, 3 predictors)Check convergence before interpreting results. All three diagnostics (R-hat, ESS, divergences) must pass.
# Summary with convergence diagnostics
summary = az.summary(idata, var_names=["alpha", "beta", "sigma"])
print(summary[["mean", "sd", "hdi_3%", "hdi_97%", "r_hat", "ess_bulk"]])
# R-hat convergence check
bad_rhat = summary[summary["r_hat"] > 1.01]
if len(bad_rhat) > 0:
print(f"WARNING: {len(bad_rhat)} parameters with R-hat > 1.01")
print(bad_rhat[["r_hat"]])
# Effective sample size check
low_ess = summary[summary["ess_bulk"] < 400]
if len(low_ess) > 0:
print(f"WARNING: {len(low_ess)} parameters with ESS < 400")
# Divergence check
n_div = idata.sample_stats.diverging.sum().item()
total = len(idata.posterior.draw) * len(idata.posterior.chain)
print(f"Divergences: {n_div}/{total} ({n_div / total * 100:.2f}%)")
# Visual diagnostics — trace plots and rank plots
az.plot_trace(idata, var_names=["alpha", "beta", "sigma"])
az.plot_rank(idata, var_names=["alpha", "beta", "sigma"])Validate model fit by comparing simulated data from the posterior to observed data.
with model:
pm.sample_posterior_predictive(idata, extend_inferencedata=True, random_seed=42)
az.plot_ppc(idata, num_pp_samples=100)
# Blue = observed data, grey = posterior simulations
# Systematic deviations indicate model misspecificationUse LOO-CV or WAIC to compare candidate models. Lower information criterion is better.
# Fit multiple models with log_likelihood=True, then compare
# Example: compare linear vs a second model
idatas = {"linear": idata} # add more fitted models here
comparison = az.compare(idatas, ic="loo")
print(comparison[["rank", "elpd_loo", "p_loo", "d_loo", "weight"]])
# Check LOO reliability via Pareto-k diagnostics
loo_result = az.loo(idata, pointwise=True)
high_k = (loo_result.pareto_k > 0.7).sum().item()
print(f"Observations with Pareto-k > 0.7: {high_k}")
# Interpretation: Dloo < 2 = similar models; Dloo > 10 = strong evidence
az.plot_compare(comparison)Produce posterior predictions for new data with full uncertainty propagation.
X_new = np.array([[0.5, -1.0, 0.2]])
X_new_scaled = (X_new - X_mean) / X_std
with model:
pm.set_data({"X_scaled": X_new_scaled})
post_pred = pm.sample_posterior_predictive(
idata.posterior, var_names=["y_obs"], random_seed=42
)
y_pred = post_pred.posterior_predictive["y_obs"]
print(f"Predicted mean: {y_pred.mean().item():.3f}")
print(f"94% HDI: {az.hdi(y_pred, hdi_prob=0.94).values}")| Parameter | Default | Range / Options | Effect |
|---|---|---|---|
draws | 1000 | 500-10000 | Number of posterior samples per chain |
tune | 1000 | 500-5000 | Warmup iterations (discarded); increase for complex posteriors |
chains | 4 | 2-8 | Number of independent chains; minimum 4 for reliable R-hat |
cores | all CPUs | 1-N | Parallel chains; set equal to chains for full parallelism |
target_accept | 0.8 | 0.8-0.99 | NUTS acceptance rate; increase to reduce divergences |
init | "auto" | "adapt_diag", "jitter+adapt_diag", "advi" | Initialization strategy for sampler |
random_seed | None | any int | Seed for reproducibility |
idata_kwargs | {} | {"log_likelihood": True} | Store log-likelihood for LOO/WAIC model comparison |
method (pm.fit) | "advi" | "advi", "fullrank_advi", "svgd" | Variational inference algorithm |
n (pm.fit) | 10000 | 5000-100000 | VI optimization iterations |
samples (prior pred) | 500 | 100-5000 | Prior predictive samples for validation |
| Distribution | Use When | Key Parameters |
|---|---|---|
Normal(mu, sigma) | Unbounded real-valued parameter (standardized data) | mu: center, sigma: spread |
HalfNormal(sigma) | Scale/standard deviation parameter (positive) | sigma: spread of positive half |
Exponential(lam) | Scale parameter, alternative to HalfNormal | lam: rate (1/mean) |
StudentT(nu, mu, sigma) | Robust alternative to Normal (outlier-resistant) | nu: degrees of freedom (<10 = heavier tails) |
Beta(alpha, beta) | Probability or proportion in [0,1] | alpha=beta=2: weakly informative |
Gamma(alpha, beta) | Positive parameter (rate, concentration) | alpha: shape, beta: rate |
LogNormal(mu, sigma) | Positive parameter with multiplicative effects | mu, sigma: of underlying Normal |
LKJCorr(n, eta) | Correlation matrix prior | eta=1: uniform; eta>1: prefer identity |
Dirichlet(a) | Probability vector (sums to 1) | a: concentration; uniform if all equal |
Bernoulli(p / logit_p) | Binary outcome likelihood | Use logit_p for numerical stability |
Poisson(mu) | Count data (equidispersed) | mu: rate; use NegBinomial if overdispersed |
NegativeBinomial(mu, alpha) | Overdispersed count data | alpha: dispersion (smaller = more overdispersion) |
| Metric | Threshold | Interpretation | Action if Failed |
|---|---|---|---|
| R-hat | < 1.01 | Chains converged | Run longer chains; check multimodality |
| ESS bulk | > 400 | Sufficient independent samples | Increase draws; reparameterize |
| ESS tail | > 400 | Reliable tail estimates | Increase draws |
| Divergences | 0 | NUTS explored successfully | Increase target_accept; non-centered param. |
| Pareto-k (LOO) | < 0.7 | LOO estimate reliable | Use WAIC or k-fold CV |
| Max tree depth | < 10 | No trajectory truncation | Reparameterize or increase max_treedepth |
| Problem Type | Recipe | Likelihood | Key Feature |
|---|---|---|---|
| Grouped/nested data | Hierarchical Model | Normal (varies) | Non-centered parameterization, partial pooling |
| Binary outcome | Logistic Regression | Bernoulli | logit_p link function |
| Nonlinear/spatial | Gaussian Process | Normal | Kernel-based covariance, flexible shape |
| Count data | (use Poisson in Workflow) | Poisson / NegBinomial | Log link; NegBinomial for overdispersion |
| Time series | (see references) | AR / GaussianRandomWalk | Autoregressive coefficients |
| Mixture/clustering | (see references) | Mixture / NormalMixture | Component weights via Dirichlet |
When to use: data has natural grouping (patients within hospitals, students within schools). Non-centered parameterization avoids divergences from funnel geometry.
import pymc as pm
import arviz as az
import numpy as np
n_groups, n_per_group = 5, 30
group_idx = np.repeat(np.arange(n_groups), n_per_group)
group_names = [f"group_{i}" for i in range(n_groups)]
# Simulated grouped data
true_alphas = np.random.normal(3.0, 1.5, n_groups)
y_obs = np.random.normal(true_alphas[group_idx], 0.5)
with pm.Model(coords={"groups": group_names}) as hierarchical_model:
# Hyperpriors (population level)
mu_alpha = pm.Normal("mu_alpha", mu=0, sigma=5)
sigma_alpha = pm.HalfNormal("sigma_alpha", sigma=2)
# Non-centered parameterization
alpha_offset = pm.Normal("alpha_offset", mu=0, sigma=1, dims="groups")
alpha = pm.Deterministic(
"alpha", mu_alpha + sigma_alpha * alpha_offset, dims="groups"
)
# Observation level
sigma = pm.HalfNormal("sigma", sigma=1)
y = pm.Normal("y", mu=alpha[group_idx], sigma=sigma, observed=y_obs)
idata_hier = pm.sample(2000, tune=1000, target_accept=0.95, random_seed=42)
print(az.summary(idata_hier, var_names=["mu_alpha", "sigma_alpha", "alpha", "sigma"]))When to use: binary outcome variable (success/failure, disease/healthy). Use logit_p for numerical stability instead of computing probabilities directly.
import pymc as pm
import arviz as az
import numpy as np
# Simulated binary outcome
np.random.seed(42)
n, p = 200, 3
X_lr = np.random.randn(n, p)
true_beta = np.array([1.0, -0.5, 0.3])
prob = 1 / (1 + np.exp(-(0.2 + X_lr @ true_beta)))
y_binary = np.random.binomial(1, prob)
with pm.Model() as logistic_model:
alpha = pm.Normal("alpha", mu=0, sigma=2)
beta = pm.Normal("beta", mu=0, sigma=2, shape=p)
logit_p = alpha + pm.math.dot(X_lr, beta)
y = pm.Bernoulli("y", logit_p=logit_p, observed=y_binary)
idata_logit = pm.sample(2000, tune=1000, target_accept=0.9, random_seed=42)
summary = az.summary(idata_logit, var_names=["alpha", "beta"])
print(summary[["mean", "sd", "hdi_3%", "hdi_97%"]])
# Odds ratios
beta_samples = idata_logit.posterior["beta"].values.reshape(-1, p)
print(f"Odds ratios (median): {np.median(np.exp(beta_samples), axis=0)}")When to use: modeling unknown nonlinear functions, spatial data, or smooth latent processes. Computationally expensive for n > 1000; consider sparse approximations for larger datasets.
import pymc as pm
import arviz as az
import numpy as np
# Simulated nonlinear data
np.random.seed(42)
X_gp = np.sort(np.random.uniform(0, 10, 60))[:, None]
y_gp = np.sin(X_gp[:, 0]) + np.random.randn(60) * 0.3
with pm.Model() as gp_model:
# GP hyperparameters
ls = pm.Gamma("lengthscale", alpha=2, beta=1)
eta = pm.HalfNormal("amplitude", sigma=2)
sigma_noise = pm.HalfNormal("noise", sigma=0.5)
# Covariance function
cov = eta**2 * pm.gp.cov.Matern52(1, ls=ls)
gp = pm.gp.Marginal(cov_func=cov)
# Marginal likelihood
y_ = gp.marginal_likelihood("y", X=X_gp, y=y_gp, sigma=sigma_noise)
idata_gp = pm.sample(1000, tune=1000, target_accept=0.9, random_seed=42)
# Predict on new points
X_new_gp = np.linspace(0, 10, 100)[:, None]
with gp_model:
f_pred = gp.conditional("f_pred", X_new_gp)
pred_samples = pm.sample_posterior_predictive(idata_gp, var_names=["f_pred"])
print(f"GP predictions shape: {pred_samples.posterior_predictive['f_pred'].shape}")az.plot_trace) -- chain mixing visualization; healthy chains look like "fuzzy caterpillars"az.summary) -- mean, SD, HDI, R-hat, ESS per parameteraz.plot_ppc) -- simulated vs observed data distributionsaz.plot_forest) -- coefficient estimates with credible intervalsaz.compare) -- ranked models with LOO/WAIC, weights, warningsaz.plot_rank) -- uniform histograms indicate good mixingaz.plot_energy) -- HMC energy transition diagnosticsidata.to_netcdf("results.nc")) -- serialized results for later analysis| Problem | Cause | Solution |
|---|---|---|
| Divergent transitions | Posterior geometry difficult for NUTS (funnels, ridges) | Increase target_accept=0.95; use non-centered parameterization; add stronger priors |
| Low ESS (< 400) | High autocorrelation between samples | Increase draws=5000; reparameterize to reduce correlation; try QR decomposition for correlated predictors |
| R-hat > 1.01 | Chains have not converged | Increase tune=2000, draws=5000; check for multimodality; initialize with ADVI |
| Slow sampling | Complex posterior or large dataset | Use ADVI for initialization; reduce model complexity; increase cores; try JAX backend |
| Pareto-k > 0.7 in LOO | Influential observations affecting LOO estimate | Use WAIC instead; investigate influential points; consider k-fold CV |
| Hit max tree depth | Model geometry requires long trajectories | Reparameterize model; increase max_treedepth parameter |
SamplingError at start | Poor initialization | Try init="adapt_diag" or init="jitter+adapt_diag"; provide initvals via MAP |
| Biased posterior (prior dominates) | Priors too strong relative to data | Weaken priors (increase sigma); check prior predictive; verify data is correctly passed |
ValueError: logp = -inf | Parameter hit impossible region | Check data for NaN/Inf; ensure positive params use HalfNormal/Gamma; verify likelihood matches data type |
offset ~ Normal(0,1); param = mu + sigma * offset instead of param ~ Normal(mu, sigma).log_likelihood=True when fitting if you plan to compare models via LOO or WAIC.dims instead of shape for named dimensions -- integrates with ArviZ for labeled summaries and subsetting.idata.to_netcdf("results.nc") for reproducibility and later re-analysis.Two reference files provide deeper detail for on-demand consultation:
references/distributions_inference.md -- Distribution catalog organized by category (continuous, discrete, multivariate, mixture, time series, special/modifiers) with full parameter signatures, support, and common uses. Sampling and inference methods (NUTS, Metropolis, Slice, CompoundStep, SMC, ADVI, fullrank ADVI, SVGD, MAP) with code examples and a method selection guide table. Reparameterization tricks (non-centered, QR decomposition) with code.
Covers: consolidated from original references/distributions.md (320 lines) and references/sampling_inference.md (424 lines).
Relocated inline: core distribution selection guide table (Key Concepts), diagnostic threshold table (Key Concepts), basic ADVI usage (Recipe: Variational Inference in original, covered in references here).
Omitted: shape broadcasting examples (trivial NumPy-style shape=5), basic dims usage (covered in Workflow Step 2), prior predictive sampling (covered in Workflow Step 3).
references/advanced_workflows.md -- Model comparison workflow (LOO, WAIC, Pareto-k reliability checks, model averaging with weighted predictions), comprehensive diagnostic report generation (trace plots, rank plots, autocorrelation, energy, ESS evolution), prior-posterior comparison patterns, data preparation best practices (standardization, centering, missing data imputation), prior selection guidelines (weakly informative vs informative with domain knowledge), named dimensions (dims) usage with xarray subsetting, save/load patterns (NetCDF, pickle). Mixture model pattern.
Covers: consolidated from original references/workflows.md (526 lines).
Relocated inline: core diagnostic checking logic (Workflow Step 5), model comparison basics (Workflow Step 7), prior predictive check (Workflow Step 3), linear/logistic/hierarchical model code (Recipes).
Omitted: complete monolithic workflow template (redundant with 8-step Workflow section).
Original references/ (3 files):
distributions.md (320 lines) -> consolidated with sampling_inference.md into new references/distributions_inference.mdsampling_inference.md (424 lines) -> consolidated with distributions.md into new references/distributions_inference.mdworkflows.md (526 lines) -> migrated as new references/advanced_workflows.mdOriginal scripts/ (2 files):
model_diagnostics.py (350 lines) -> check_diagnostics() logic (R-hat, ESS, divergences, tree depth checks) inlined in Workflow Step 5; create_diagnostic_report() plot generation patterns described in Expected Outputs and referenced in references/advanced_workflows.md; compare_prior_posterior() utility covered in references/advanced_workflows.mdmodel_comparison.py (387 lines) -> compare_models() and check_loo_reliability() patterns inlined in Workflow Step 7 (using az.compare and az.loo directly); model_averaging() pattern covered in references/advanced_workflows.md; cross_validation_comparison() guidance covered in references/advanced_workflows.md; plot_model_comparison() is a thin wrapper around az.plot_compare (inlined in Step 7)y ~ x1 + x2 syntax); simpler API for standard GLMs© jaechang-hits, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 2 other files (references) in skills/biostatistics/pymc-bayesian-modeling of jaechang-hits/SciAgent-Skills.
Open the folder on GitHubat commit 82c862c
We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in jaechang-hits/SciAgent-Skills, which our catalogue first saw on October 7, 2026.
Pymc Bayesian Modeling next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Pymc Bayesian Modeling this skilljaechang-hits/SciAgent-Skills | 374 | 1 repos | ~5.7k | Automated safety check: Pass | Apache-2.0 | |
| Statistical Analysisspacering-net/codeg | 3.9k | 3 repos | ~5k | Automated safety check: Pass | MIT | |
| Bayesian Workflowbrycewang-stanford/Auto-Empirical-Research-Skills | 4.6k | — | ~3.5k | Automated safety check: Pass | MIT | |
| PyMC Bayesian Modelingdavila7/claude-code-templates | 33k | 11 repos | ~3.9k | Automated safety check: Pass | MIT | |
| Bayesian Estimationbrycewang-stanford/Auto-Empirical-Research-Skills | 4.6k | — | ~3.4k | Automated safety check: Pass | Custom licence | |
| Bayesian Cognitive Model BuilderNeuroAIHub/BrainPilot | 1.1k | — | ~5.6k | Automated safety check: Pass | AGPL-3.0 |
spacering-net/codeg
Guided statistical analysis for research data - test selection, assumption checking, effect sizes, power analysis, Bayesian alternatives, and APA-formatted reporting.
brycewang-stanford/Auto-Empirical-Research-Skills
Opinionated Bayesian modeling workflow with PyMC and ArviZ. An agent skill from brycewang-stanford/Auto-Empirical-Research-Skills.
davila7/claude-code-templates
Builds, fits, checks and compares Bayesian models in PyMC, from priors and NUTS sampling to variational inference, LOO and WAIC comparison, and diagnostics.
brycewang-stanford/Auto-Empirical-Research-Skills
This skill covers Bayesian estimation and inference in quantitative social science.
NeuroAIHub/BrainPilot
Domain-validated guidance for building hierarchical Bayesian cognitive models with Stan/PyMC: prior specification, model structure, MCMC diagnostics, and posterior predictive checks
vercel/next.js
Benchmark React or Next.js changes on Vercel Sandbox VMs with paired A/B statistics: react PR/commit vs base, or Next.js PR/commit vs base, measured end-to-end through the bench/render-pipeline app…
jaechang-hits/SciAgent-Skills
NEB-IRC activation energy pipeline for reaction barriers using GFN2-xTB and pysisyphus.
jaechang-hits/SciAgent-Skills
3Dmol.js WebGL molecular visualization emitted as self-contained HTML.
jaechang-hits/SciAgent-Skills
Constraint-based (COBRA) analysis of genome-scale metabolic models: FBA, FVA, knockouts, flux sampling, production envelopes, gapfilling, media optimization.
jaechang-hits/SciAgent-Skills
Read, write, and edit ChemDraw CDX/CDXML files with RDKit's rdkit.Chem.rdChemDraw plus direct XML editing, always paired with a rendered PNG.
jaechang-hits/SciAgent-Skills
Programmatic PubMed access via NCBI E-utilities REST API. An agent skill from jaechang-hits/SciAgent-Skills.
jaechang-hits/SciAgent-Skills
Scaffold a new SciAgent-Skills entry. An agent skill from jaechang-hits/SciAgent-Skills.
Works with
Categories
Bayesian modeling with PyMC 5: priors, likelihood, NUTS/ADVI sampling, diagnostics (R-hat, ESS), LOO/WAIC comparison, prediction. Pymc Bayesian Modeling is an agent skill from jaechang-hits/SciAgent-Skills. Bayesian modeling with PyMC 5: priors, likelihood, NUTS/ADVI sampling, diagnostics (R-hat, ESS), LOO/WAIC comparison, prediction.
Pymc Bayesian Modeling fits situations like: tasks that involve Statistics.
Run `npx skills add jaechang-hits/SciAgent-Skills --skill pymc-bayesian-modeling -a claude-code`. Or copy the skill folder (skills/biostatistics/pymc-bayesian-modeling in jaechang-hits/SciAgent-Skills) into .claude/skills/pymc-bayesian-modeling in your project. Claude Code loads it when a task matches its description.
Run `npx skills add jaechang-hits/SciAgent-Skills --skill pymc-bayesian-modeling -a codex`. Or copy the skill folder (skills/biostatistics/pymc-bayesian-modeling in jaechang-hits/SciAgent-Skills) into .agents/skills/pymc-bayesian-modeling in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jaechang-hits/SciAgent-Skills --skill pymc-bayesian-modeling -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pymc-bayesian-modeling, .gemini/skills/pymc-bayesian-modeling, .github/skills/pymc-bayesian-modeling and .opencode/skills/pymc-bayesian-modeling in your project.
Going by SKILL.md and its folder, Pymc Bayesian Modeling needs the command-line tools its instructions call (pip). Our summary lists: Python 3.
SKILL.md names 4 domains. As links in the text: pymc.io, github.com, python.arviz.org and bayesiancomputationbook.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Pymc Bayesian Modeling is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.7k tokens (SKILL.md is roughly 23k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 6.2k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Pymc Bayesian Modeling: Statistical Analysis (spacering-net/codeg, 3.9k stars), Bayesian Workflow (brycewang-stanford/Auto-Empirical-Research-Skills, 4.6k stars), PyMC Bayesian Modeling (davila7/claude-code-templates, 33k stars) and Bayesian Estimation (brycewang-stanford/Auto-Empirical-Research-Skills, 4.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
jaechang-hits (a GitHub user) maintains it in jaechang-hits/SciAgent-Skills, which has 374 GitHub stars. The repository holds 169 skills in this directory. The repository was last updated on September 29, 2026.
Source: jaechang-hits/SciAgent-Skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.