Data Analysis Pipeline
Generate, execute, and verify analysis scripts across R, Python, Stata, and Julia.
Modes
| Mode |
What it does |
Phases |
| EDA |
Exploratory data analysis only |
1–2 |
| Estimation |
Estimation + publication output (requires locked design) |
1, 3–4 |
| Full |
Complete pipeline |
1–5 |
Default: Full. Detect mode from user request or ask if ambiguous.
When to Use
- "Analyse this data" / "Run EDA on this CSV" / "Estimate the model"
- "Generate results tables" / "Create publication figures"
- Any task requiring data → script → output pipeline
When NOT to Use
- Experimental design or power analysis →
experiment-design
- Generating synthetic data for testing →
synthetic-data
- Auditing identification strategy →
causal-design
- Proofreading or compiling the paper →
proofread, latex
Shared References
- Method probing questions:
shared/method-probing-questions.md — ask before running any analysis
- Validation tiers:
shared/validation-tiers.md — declare tier before examining results
- Escalation protocol:
shared/escalation-protocol.md — escalate when methodology answers are vague
- Distribution diagnostics:
shared/distribution-diagnostics.md — mandatory DV checks before model selection
- Engagement-stratified sampling:
shared/engagement-stratified-sampling.md — stratify by engagement tiers for social media data
- Inter-coder reliability:
shared/intercoder-reliability.md — per-category reliability for content analysis and LLM annotation
Workflow
Phase 1: Setup
- Detect project structure: Read
CLAUDE.md, check for data/, code/, paper/ directories.
- Detect language: Check existing scripts, user preference, or ask. Read
shared/multi-language-conventions.md for the chosen language's conventions.
- Locate data: Find datasets in
data/raw/ or data/processed/. Never modify data/raw/ (per data-sensitivity rule). For social-media datasets, follow shared/engagement-stratified-sampling.md when constructing analysis samples.
- Confirm validation tier per
shared/validation-tiers.md. Tier dictates claim-strength language allowed in Phase 4 outputs and how strict the locked-design gate (step 5) is enforced.
- Check for locked design: Look for analysis plan in
log/plans/, .context/project-recap.md, or MEMORY.md estimand registry. If running Estimation or Full mode and no design exists, stop and warn: "No locked research design found. Run experiment-design or causal-design first, or confirm the specification before proceeding." Use shared/method-probing-questions.md to probe gaps if the user pushes back on the gate.
Phase 2: Exploratory Data Analysis
Generate and execute an EDA script that produces:
- Data overview: dimensions, types, missingness summary
- Univariate distributions: histograms/density for continuous, bar charts for categorical
- Bivariate relationships: correlation matrix, key scatterplots, cross-tabulations
- Outlier detection: box plots, IQR-based flags
- Distribution diagnostics (mandatory): run
distribution_diagnostics() from shared/distribution-diagnostics.md on every DV and key IVs. Report skewness, zero proportion, overdispersion, and model recommendation. Flag if OLS is inappropriate.
- Balance tables (if treatment variable identified): pre-treatment covariate balance
Output routing:
- Exploratory figures →
output/figures/ (not paper/figures/)
- Summary statistics →
output/tables/ as .csv
- EDA script →
code/01_eda.R (or .py/.do/.jl)
EDA mode stops here.
Phase 3: Estimation
Gate check: Verify the research design is locked before proceeding. The specification (estimand, identifying assumptions, main model) must be documented. This enforces the design-before-results rule. If the user resists the gate, follow shared/escalation-protocol.md — escalate rather than accommodate. For analyses involving human or LLM coding (content analysis, annotation), require per-category reliability per shared/intercoder-reliability.md before estimation.
Generate estimation script(s) covering:
- Main specification — as defined in the locked design
- Robustness checks — pre-committed alternatives (different SEs, controls, subsamples)
- Diagnostics — specification-appropriate tests (first-stage F for IV, parallel trends for DiD, bandwidth sensitivity for RDD)
Read references/estimation-recipes.md for language-specific estimation patterns.
Output:
- Estimation script →
code/02_estimation.R (or equivalent)
- Coefficient estimates →
output/results/ as .rds/.pkl/.dta for downstream table generation
Phase 4: Publication Output
Generate publication-ready tables and figures. Read shared/publication-output.md for format standards and references/table-formatting.md for language-specific recipes.
- Main results table — booktabs three-line format, exported as
.tex to paper/tables/
- Robustness tables — same format, appendix naming convention
- Publication figures — coefficient plots, event study plots, mechanism figures →
paper/figures/ as PDF
- Inline statistics — export
\newcommand definitions for key numbers referenced in text
Critical rule: All numbers in .tex files must come from generated files via \input{}. Never hard-code results (per no-hardcoded-results rule). Scripts in code/, outputs in paper/ (per overleaf-separation rule).
Output script → code/03_tables_figures.R (or equivalent)
Phase 5: Save & Review
- Verify outputs exist: Check all expected files in
paper/tables/ and paper/figures/
- Run the
code-review agent on all generated scripts (auto-invoke via skill-routing mechanism)
- Log the analysis: Record what was done, which scripts were created, which outputs were generated
- Suggest next steps: compilation with
latex, or additional analyses
Script Structure
Every generated script follows this header template:
# ============================================================
# Script: [filename]
# Purpose: [one-line description]
# Inputs: [list of input files]
# Outputs: [list of output files]
# Dependencies: [packages used]
# Author: [from git config]
# Date: [today]
# ============================================================
Cross-References
| Resource |
When read |
shared/multi-language-conventions.md |
Phase 1 (language setup) |
shared/publication-output.md |
Phase 4 (table/figure format) |
references/estimation-recipes.md |
Phase 3 (estimation code patterns) |
references/econ-visualisation.md |
Phase 2 & 4 (economics figure/table conventions) |
references/table-formatting.md |
Phase 4 (language-specific table export) |
references/language-conventions.md |
Phase 1 (additional language notes) |
design-before-results rule |
Phase 3 gate check |
data-sensitivity rule |
Phase 1 (data access) |
no-hardcoded-results rule |
Phase 4 (output routing) |
overleaf-separation rule |
Phase 4 (file placement) |
the code-review agent |
Phase 5 (auto-invoked) |
experiment-design skill |
Suggested if no design exists |
causal-design skill |
Suggested if no design exists |
econ-plots skill |
Economics-specific figures |
r-econometrics skill |
R-specific estimation |
econ-data skill |
Data download from public APIs |
1---2name: data-analysis3description: Deliver an end-to-end analysis pipeline: EDA, estimation, or publication output. Use when the user requests an end-to-end analysis pipeline: EDA, estimation, or publication output.4---56# Data Analysis Pipeline78> Generate, execute, and verify analysis scripts across R, Python, Stata, and Julia.910## Modes1112| Mode | What it does | Phases |13|------|-------------|--------|14| **EDA** | Exploratory data analysis only | 1–2 |15| **Estimation** | Estimation + publication output (requires locked design) | 1, 3–4 |16| **Full** | Complete pipeline | 1–5 |1718Default: **Full**. Detect mode from user request or ask if ambiguous.1920## When to Use2122- "Analyse this data" / "Run EDA on this CSV" / "Estimate the model"23- "Generate results tables" / "Create publication figures"24- Any task requiring data → script → output pipeline2526## When NOT to Use2728- Experimental design or power analysis → `experiment-design`29- Generating synthetic data for testing → `synthetic-data`30- Auditing identification strategy → `causal-design`31- Proofreading or compiling the paper → `proofread`, `latex`3233## Shared References3435- Method probing questions: `shared/method-probing-questions.md` — ask before running any analysis36- Validation tiers: `shared/validation-tiers.md` — declare tier before examining results37- Escalation protocol: `shared/escalation-protocol.md` — escalate when methodology answers are vague38- Distribution diagnostics: `shared/distribution-diagnostics.md` — mandatory DV checks before model selection39- Engagement-stratified sampling: `shared/engagement-stratified-sampling.md` — stratify by engagement tiers for social media data40- Inter-coder reliability: `shared/intercoder-reliability.md` — per-category reliability for content analysis and LLM annotation4142## Workflow4344### Phase 1: Setup45461. **Detect project structure:** Read `CLAUDE.md`, check for `data/`, `code/`, `paper/` directories.472. **Detect language:** Check existing scripts, user preference, or ask. Read `shared/multi-language-conventions.md` for the chosen language's conventions.483. **Locate data:** Find datasets in `data/raw/` or `data/processed/`. **Never modify `data/raw/`** (per `data-sensitivity` rule). For social-media datasets, follow [`shared/engagement-stratified-sampling.md`](../shared/engagement-stratified-sampling.md) when constructing analysis samples.494. **Confirm validation tier** per [`shared/validation-tiers.md`](../shared/validation-tiers.md). Tier dictates claim-strength language allowed in Phase 4 outputs and how strict the locked-design gate (step 5) is enforced.505. **Check for locked design:** Look for analysis plan in `log/plans/`, `.context/project-recap.md`, or `MEMORY.md` estimand registry. If running Estimation or Full mode and no design exists, **stop and warn:** "No locked research design found. Run `experiment-design` or `causal-design` first, or confirm the specification before proceeding." Use [`shared/method-probing-questions.md`](../shared/method-probing-questions.md) to probe gaps if the user pushes back on the gate.5152### Phase 2: Exploratory Data Analysis5354Generate and execute an EDA script that produces:55561. **Data overview:** dimensions, types, missingness summary572. **Univariate distributions:** histograms/density for continuous, bar charts for categorical583. **Bivariate relationships:** correlation matrix, key scatterplots, cross-tabulations594. **Outlier detection:** box plots, IQR-based flags605. **Distribution diagnostics** (mandatory): run `distribution_diagnostics()` from `shared/distribution-diagnostics.md` on every DV and key IVs. Report skewness, zero proportion, overdispersion, and model recommendation. Flag if OLS is inappropriate.616. **Balance tables** (if treatment variable identified): pre-treatment covariate balance6263**Output routing:**64- Exploratory figures → `output/figures/` (not `paper/figures/`)65- Summary statistics → `output/tables/` as `.csv`66- EDA script → `code/01_eda.R` (or `.py`/`.do`/`.jl`)6768**EDA mode stops here.**6970### Phase 3: Estimation7172**Gate check:** Verify the research design is locked before proceeding. The specification (estimand, identifying assumptions, main model) must be documented. This enforces the `design-before-results` rule. If the user resists the gate, follow [`shared/escalation-protocol.md`](../shared/escalation-protocol.md) — escalate rather than accommodate. For analyses involving human or LLM coding (content analysis, annotation), require per-category reliability per [`shared/intercoder-reliability.md`](../shared/intercoder-reliability.md) before estimation.7374Generate estimation script(s) covering:75761. **Main specification** — as defined in the locked design772. **Robustness checks** — pre-committed alternatives (different SEs, controls, subsamples)783. **Diagnostics** — specification-appropriate tests (first-stage F for IV, parallel trends for DiD, bandwidth sensitivity for RDD)7980Read `references/estimation-recipes.md` for language-specific estimation patterns.8182**Output:**83- Estimation script → `code/02_estimation.R` (or equivalent)84- Coefficient estimates → `output/results/` as `.rds`/`.pkl`/`.dta` for downstream table generation8586### Phase 4: Publication Output8788Generate publication-ready tables and figures. Read `shared/publication-output.md` for format standards and `references/table-formatting.md` for language-specific recipes.89901. **Main results table** — booktabs three-line format, exported as `.tex` to `paper/tables/`912. **Robustness tables** — same format, appendix naming convention923. **Publication figures** — coefficient plots, event study plots, mechanism figures → `paper/figures/` as PDF934. **Inline statistics** — export `\newcommand` definitions for key numbers referenced in text9495**Critical rule:** All numbers in `.tex` files must come from generated files via `\input{}`. **Never hard-code results** (per `no-hardcoded-results` rule). Scripts in `code/`, outputs in `paper/` (per `overleaf-separation` rule).9697**Output script** → `code/03_tables_figures.R` (or equivalent)9899### Phase 5: Save & Review1001011. **Verify outputs exist:** Check all expected files in `paper/tables/` and `paper/figures/`1022. **Run the `code-review` agent** on all generated scripts (auto-invoke via skill-routing mechanism)1033. **Log the analysis:** Record what was done, which scripts were created, which outputs were generated1044. **Suggest next steps:** compilation with `latex`, or additional analyses105106## Script Structure107108Every generated script follows this header template:109110```111# ============================================================112# Script: [filename]113# Purpose: [one-line description]114# Inputs: [list of input files]115# Outputs: [list of output files]116# Dependencies: [packages used]117# Author: [from git config]118# Date: [today]119# ============================================================120```121122## Cross-References123124| Resource | When read |125|----------|-----------|126| `shared/multi-language-conventions.md` | Phase 1 (language setup) |127| `shared/publication-output.md` | Phase 4 (table/figure format) |128| `references/estimation-recipes.md` | Phase 3 (estimation code patterns) |129| `references/econ-visualisation.md` | Phase 2 & 4 (economics figure/table conventions) |130| `references/table-formatting.md` | Phase 4 (language-specific table export) |131| `references/language-conventions.md` | Phase 1 (additional language notes) |132| `design-before-results` rule | Phase 3 gate check |133| `data-sensitivity` rule | Phase 1 (data access) |134| `no-hardcoded-results` rule | Phase 4 (output routing) |135| `overleaf-separation` rule | Phase 4 (file placement) |136| the `code-review` agent | Phase 5 (auto-invoked) |137| `experiment-design` skill | Suggested if no design exists |138| `causal-design` skill | Suggested if no design exists |139| `econ-plots` skill | Economics-specific figures |140| `r-econometrics` skill | R-specific estimation |141| `econ-data` skill | Data download from public APIs |