{"id":46171705,"url":"https://github.com/shravanngoswamii/mcmcvisualizer","last_synced_at":"2026-05-01T22:01:36.997Z","repository":{"id":341280384,"uuid":"1169151995","full_name":"shravanngoswamii/MCMCVisualizer","owner":"shravanngoswamii","description":"Parse, analyze, and export MCMC sampling data in JavaScript or TypeScript. Zero dependencies, works in browser and Node.js.","archived":false,"fork":false,"pushed_at":"2026-04-26T09:50:13.000Z","size":6373,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-26T11:26:04.349Z","etag":null,"topics":["mcmc","mcmc-analysis","statistics"],"latest_commit_sha":null,"homepage":"https://shravangoswami.com/MCMCVisualizer/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/shravanngoswamii.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-28T08:51:53.000Z","updated_at":"2026-04-26T09:53:12.000Z","dependencies_parsed_at":null,"dependency_job_id":"2d7f3a53-ac84-45ed-9215-fcd81e8b566f","html_url":"https://github.com/shravanngoswamii/MCMCVisualizer","commit_stats":null,"previous_names":["shravanngoswamii/mcmcvisualizer"],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/shravanngoswamii/MCMCVisualizer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shravanngoswamii%2FMCMCVisualizer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shravanngoswamii%2FMCMCVisualizer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shravanngoswamii%2FMCMCVisualizer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shravanngoswamii%2FMCMCVisualizer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shravanngoswamii","download_url":"https://codeload.github.com/shravanngoswamii/MCMCVisualizer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shravanngoswamii%2FMCMCVisualizer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32514340,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"online","status_checked_at":"2026-05-01T02:00:05.856Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["mcmc","mcmc-analysis","statistics"],"created_at":"2026-03-02T15:53:29.252Z","updated_at":"2026-05-01T22:01:36.953Z","avatar_url":"https://github.com/shravanngoswamii.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# mcmc-visualizer\n\nParse, analyze, plot, and export MCMC sampling data in JavaScript/TypeScript. Zero runtime dependencies, works in browser and Node.js.\n\n## Supported Formats\n\n| Format | Read | Write |\n|--------|------|-------|\n| Turing.jl CSV (long) | yes | — |\n| Turing.jl CSV (wide) | yes | — |\n| Stan CSV | yes | — |\n| MCMCChains.jl JSON | yes | — |\n| ArviZ JSON | yes | — |\n| Generic JSON | yes | yes |\n| Raw arrays | yes | — |\n\n## Install\n\n```bash\nnpm install mcmc-visualizer\n```\n\n## Quick Start\n\n```typescript\nimport { fromTuringCSV, fromStanCSV, fromAutoDetect } from 'mcmc-visualizer';\n\n// Parse from a CSV string\nconst data = fromTuringCSV(csvText);\n\n// Or auto-detect the format\nconst data2 = fromAutoDetect(csvText);\n\n// Get variable names and chain names\nconsole.log(data.variableNames); // ['alpha', 'beta', 'sigma']\nconsole.log(data.chainNames);    // ['chain#1', 'chain#2']\n\n// Get draws for a specific variable and chain\nconst draws = data.getDraws('alpha', 'chain#1'); // Float64Array\n\n// Get all draws across chains\nconst allDraws = data.getAllDraws('alpha'); // Float64Array\n\n// Compute full summary table\nconst summary = data.summary();\n// [{ variable, mean, stdev, mcse, ess, bulkEss, tailEss, rhat, splitRhat, geweke, quantiles, hdi90, ... }, ...]\n\n// Per-chain stats\nconst seqStats = data.sequenceStats('alpha', 'chain#1');\n// { mean, stdev, ess, essPerDraw, mcse, skewness, excessKurtosis, autocorrelation, count }\n```\n\n## Diagnostics\n\nBuilt-in MCMC diagnostics with no dependencies:\n\n- **ESS** (Effective Sample Size) via FFT-based autocorrelation\n- **Bulk ESS / Tail ESS** for robust convergence checks\n- **R-hat** (Gelman-Rubin convergence diagnostic)\n- **Split R-hat** for split-chain convergence checks\n- **MCSE** (Monte Carlo standard error)\n- **Geweke z-score / p-value**\n- **Autocorrelation** at all lags\n- **HDI** (Highest Density Interval)\n- **Skewness / Excess Kurtosis**\n- **Quantiles** (5%, 25%, 50%, 75%, 95%)\n\n```typescript\nimport { computeESS, computeRhat, computeHDI, computeMCSE } from 'mcmc-visualizer';\n\nconst { ess, autocorrelation } = computeESS(new Float64Array([...]));\nconst rhat = computeRhat([chain1, chain2], 'rank');\nconst [lo, hi] = computeHDI(new Float64Array([...]), 0.9);\nconst mcse = computeMCSE(new Float64Array([...]));\n```\n\n## Export\n\n```typescript\nimport { toJSON } from 'mcmc-visualizer';\n\nconst json = toJSON(data);\n// Output: { \"chain#1\": { \"mu\": [1.2, 1.3, ...], \"sigma\": [...] }, \"chain#2\": { ... } }\n```\n\nThis format is readable by `fromChainArrays()` after `JSON.parse()`.\n\n## Data Manipulation\n\n```typescript\n// Discard warmup (first 500 draws)\nconst postWarmup = data.slice(500);\n\n// Keep only specific chains\nconst chain1Only = data.filterChains(['chain#1']);\n\n// Keep only specific variables\nconst subset = data.filterVariables(['alpha', 'beta']);\n```\n\n## Construct from Arrays\n\n```typescript\nimport { fromChainArrays } from 'mcmc-visualizer';\n\nconst data = fromChainArrays({\n  'chain#1': { alpha: [1.5, 2.3, 1.8], beta: [0.5, 0.7, 0.6] },\n  'chain#2': { alpha: [1.6, 2.4, 1.7], beta: [0.45, 0.65, 0.55] },\n});\n```\n\n## Stan CSV (Multiple Files)\n\nStan outputs one CSV file per chain:\n\n```typescript\nimport { fromStanCSVFiles } from 'mcmc-visualizer';\n\nconst data = fromStanCSVFiles([chain1Text, chain2Text, chain3Text]);\n```\n\n## Browser Usage\n\nWorks directly in the browser with any bundler or via CDN:\n\n```html\n\u003cinput type=\"file\" id=\"upload\" accept=\".csv\" multiple /\u003e\n\u003cscript type=\"module\"\u003e\n  import { fromAutoDetect } from 'mcmc-visualizer';\n\n  document.getElementById('upload').addEventListener('change', async (e) =\u003e {\n    const text = await e.target.files[0].text();\n    const data = fromAutoDetect(text);\n    console.table(data.summary());\n  });\n\u003c/script\u003e\n```\n\n## API\n\n### Factory Functions\n\n| Function | Description |\n|----------|-------------|\n| `fromTuringCSV(text)` | Parse Turing.jl CSV (long or wide format) |\n| `fromStanCSV(text)` | Parse a single Stan CSV file |\n| `fromStanCSVFiles(files)` | Parse multiple Stan CSV files as separate chains |\n| `fromMCMCChainsJSON(text)` | Parse MCMCChains.jl JSON export |\n| `fromArviZJSON(input)` | Parse ArviZ JSON (posterior group only) |\n| `fromAutoDetect(text)` | Auto-detect format and parse |\n| `fromChainArrays(data)` | Construct from `{ chain: { var: number[] } }` |\n\n### InferenceData\n\n| Method | Returns |\n|--------|---------|\n| `.getDraws(variable, chain?)` | `Float64Array` |\n| `.getAllDraws(variable)` | `Float64Array` (concatenated across chains) |\n| `.sequenceStats(variable, chain)` | `SequenceStats` |\n| `.variableStats(variable)` | `VariableStats` |\n| `.summary()` | `VariableSummary[]` |\n| `.slice(start, end?)` | `InferenceData` |\n| `.filterChains(names)` | `InferenceData` |\n| `.filterVariables(names)` | `InferenceData` |\n\n### Export\n\n| Function | Description |\n|----------|-------------|\n| `toJSON(data)` | Serialize to `{ chain: { var: number[] } }` JSON string |\n| `detectFormat(text)` | Detect file format: `'turing-csv' \\| 'stan-csv' \\| 'mcmcchains-json' \\| 'unknown'` |\n\n### Standalone Stats\n\n| Function | Description |\n|----------|-------------|\n| `computeESS(chain)` | FFT-based effective sample size |\n| `computeEssBulk(chains)` | Rank-normalized bulk ESS |\n| `computeEssTail(chains)` | Tail ESS |\n| `computeRhat(chains, kind?)` | Rank-normalized R-hat (`'rank' \\| 'bulk' \\| 'tail' \\| 'basic'`) |\n| `computeSplitRhat(chains)` | Split-chain R-hat |\n| `computeMCSE(chain)` | Monte Carlo standard error |\n| `computeMCSEMultiChain(chains)` | Multi-chain MCSE via bulk ESS |\n| `computeGeweke(chain)` | Geweke z-score and p-value |\n| `computeMean(arr)` | Arithmetic mean |\n| `computeStdev(arr)` | Standard deviation |\n| `computeSkewness(arr)` | Standardized third moment |\n| `computeExcessKurtosis(arr)` | Standardized fourth moment minus 3 |\n| `computeQuantiles(arr)` | 5/25/50/75/95th percentiles |\n| `computeHDI(arr, mass?)` | Highest density interval |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshravanngoswamii%2Fmcmcvisualizer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshravanngoswamii%2Fmcmcvisualizer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshravanngoswamii%2Fmcmcvisualizer/lists"}