alterlab-results-transparency

$npx mdskill add AlterLab-IEU/AlterLab-Academic-Skills/alterlab-results-transparency

Enforces complete reporting of every analysis run before any results claim.

  • Prevents selective reporting and cherry-picking in results sections.
  • Orchestrates alterlab-statistical-analysis, alterlab-preregistration-discipline, and alterlab-open-science.
  • Applies a numbered Gate Function to verify assumptions, effect sizes, and deviations.
  • Outputs an Excuse-vs-Reality table and Red-Flags-STOP list for the user.

SKILL.md

.github/skills/alterlab-results-transparencyView on GitHub ↗
---
name: alterlab-results-transparency
description: Enforces results-reporting transparency as a discipline gate built on the Iron Law "NO RESULTS CLAIM WITHOUT REPORTING EVERY ANALYSIS RUN" — a numbered Gate Function (IDENTIFY the claim, LIST every test actually run including the ones that did not "work", CHECK assumptions were reported, CHECK effect size with 95% CI is present, CHECK pre-registration deviations are disclosed, ONLY THEN write the sentence), plus an Excuse-vs-Reality table and Red-Flags-STOP list for selective reporting, cherry-picking, and bare p-values. Use when writing up Results, claiming a finding from a subset of analyses, reporting a p-value without an effect size or confidence interval, dropping outliers post hoc, or omitting analyses that did not pan out. Orchestrates alterlab-statistical-analysis (tests, effect sizes), alterlab-preregistration-discipline (the frozen plan), and alterlab-open-science (TOP, disclosure); it does not run the tests itself. Part of the AlterLab Academic Skills suite.
license: MIT
allowed-tools: Read Bash(python:*)
compatibility: No API key required. Judgment/discipline skill; the optional reporting-gate helper runs locally via `uv run python` (stdlib only).
metadata:
  skill-author: AlterLab
  version: "1.0.0"
---

# Results Transparency — The Reporting Discipline Gate

**Skill type: DISCIPLINE-ENFORCING.** This skill is not a how-to for running
statistics. It is a gate that stands between *analyses you ran* and the
*sentence you are about to write* in the Results section. It exists to stop the
single most common integrity failure in quantitative write-ups: reporting the
analyses that "worked" and quietly dropping the rest.

It **orchestrates**, it does not reimplement:

- **REQUIRED BACKGROUND — `alterlab-statistical-analysis`** runs the tests,
  checks assumptions (its `alterlab-statistical-analysis/scripts/assumption_checks.py`),
  computes effect sizes and CIs, and produces the APA-formatted numbers. This
  skill checks that those outputs are all *present and disclosed* before a claim
  is written.
- **REQUIRED BACKGROUND — `alterlab-preregistration-discipline`** owns the
  frozen plan. This skill checks that confirmatory claims match it and that
  deviations are labelled.
- **`alterlab-open-science`** owns the disclosure mechanics (TOP Guidelines,
  registration links, data/code availability).
- **`alterlab-scientific-thinking`** owns judging evidence *quality*; this skill
  only enforces reporting *completeness*.

---

## The Iron Law

```
NO RESULTS CLAIM WITHOUT REPORTING EVERY ANALYSIS RUN
```

Violating the letter of full reporting is violating the spirit of the science.
"Reporting every analysis" means every test you actually executed against the
data for this hypothesis — including the ones that returned p > .05, the
specification you abandoned, and the outlier rule you tried first. A Results
section is a census of what you did, not a highlight reel of what confirmed you.

---

## When to Use This Skill

Invoke it the moment a results *claim* is being written or defended:

- About to write a sentence in the Results / Findings section.
- Stating "we found that…", "X significantly predicted Y", "there was no effect".
- Reporting a p-value, a coefficient, a group difference, or a correlation.
- Defending a finding drawn from a subset of the analyses that were run.
- Tempted to drop outliers, switch a test, or add a covariate *after* seeing the result.
- Writing the abstract's results sentence or a figure caption that asserts a finding.

If you are *choosing* which test to run, *checking assumptions*, or *computing*
an effect size, that is `alterlab-statistical-analysis` — come back here when you
move from computing numbers to claiming findings.

### Does NOT Trigger — route these elsewhere

| The request is really about… | Route to |
|------------------------------|----------|
| Choosing/running a test, assumption checks, computing effect size or CI | `alterlab-statistical-analysis` |
| Whether the analysis plan was frozen before data; HARKing / optional stopping | `alterlab-preregistration-discipline` |
| Picking the right test *before* seeing the p-value (test-shopping guard) | `alterlab-test-selection-guard` |
| Where/how to disclose: TOP Guidelines, registration link, data/code availability | `alterlab-open-science` |
| Judging evidence *quality* (GRADE, risk of bias, confounding, design validity) | `alterlab-scientific-thinking` |
| Verifying cited references exist / are not fabricated | `alterlab-citation-verifier` |
| Section-by-section peer review and an accept/revise/reject verdict | `alterlab-paper-reviewer` |
| Drafting the full IMRaD manuscript from a finished synthesis | `alterlab-paper-writer` |
| Writing the grant's final/technical report narrative | `alterlab-grant-reporting` |

---

## The Gate Function

Before any results claim is written, run these steps in order. This mirrors the
`verification-before-completion` gate (obra/superpowers): evidence before
assertions, always.

1. **IDENTIFY** — State the exact claim sentence you intend to write.
2. **LIST** — Enumerate *every* test actually run against this hypothesis,
   including the ones that did not "work" (p > .05, abandoned specs, alternative
   exclusion rules). If the list has more entries than the write-up mentions,
   STOP — the gap is selective reporting.
3. **CHECK assumptions reported** — For each reported test, the assumption
   results from `alterlab-statistical-analysis/scripts/assumption_checks.py`
   (normality, homogeneity, linearity, outliers) must appear in the write-up, with
   the remediation taken if any were violated.
4. **CHECK effect size + CI present** — The claim carries an effect size *with a
   95% confidence interval*, not a bare p-value. A p-value alone never clears the
   gate (see the sufficiency table).
5. **CHECK pre-registration deviations disclosed** — Every difference from the
   frozen plan (`alterlab-preregistration-discipline`) is named and labelled
   confirmatory vs. exploratory.
6. **ONLY THEN** — Write the sentence, with the test name, statistic, df, *exact*
   p, effect size + CI, and the confirmatory/exploratory label.

A self-contained checker that enforces steps 2–5 over a small JSON manifest of
the claim is `scripts/reporting_gate.py` (stdlib only; see Quick Start).

### What is sufficient vs. not sufficient

Analogous to the verification-gap table: the left column does **not** clear the
gate; the right column is the actual requirement.

| Looks done (NOT sufficient) | Actual requirement to clear the gate |
|-----------------------------|--------------------------------------|
| "p < .05" | Test name, statistic, **df**, **exact p**, effect size **+ 95% CI** |
| "the effect was significant" | The direction, magnitude (effect size + CI), and the n it rests on |
| Only the significant tests shown | Every test run on this hypothesis, significant or not |
| "assumptions were fine" | The reported normality / homogeneity / linearity / outlier results |
| Results match the paper's story | Results match the **frozen plan**, with deviations labelled exploratory |
| "we removed outliers" | The pre-specified rule, or a sensitivity analysis with and without them |

---

## Excuse vs. Reality

Seeded from the rationalizations that precede selective reporting. When you hear
yourself think the left column, the right column is the truth.

| Excuse | Reality |
|--------|---------|
| "I'll just report the analyses that worked." | The ones that did not work are data. Omitting them is selective reporting — report all planned analyses, significant or not. |
| "It's only a p-value, the effect size is obvious." | A bare p-value is not interpretable. Effect size + 95% CI is mandatory; existence is not magnitude. |
| "We dropped 3 outliers so the test would pass." | Outlier rules must be pre-specified or reported as a sensitivity analysis — not chosen because they flip significance. |
| "The covariate obviously belongs in the model." | A covariate added after seeing the result is a researcher degree of freedom. Pre-specify it or label the model exploratory. |
| "We switched to a non-parametric test, it's more appropriate." | If you switched *after* the parametric test was non-significant, that is test-shopping. Decide before, via `alterlab-test-selection-guard`. |
| "This subgroup is interesting (we didn't predict it)." | Unplanned subgroups are exploratory. Report them as hypothesis-generating, never as confirmatory. |
| "Reporting the failed analyses will confuse readers." | A supplementary table of all analyses run is standard transparency (TOP). Clarity is not a license to hide. |
| "The pre-registration was too rigid; I'm following the scientific spirit." | Iterate in the exploratory section. The confirmatory claim needs the frozen plan. |

---

## Red Flags — STOP

If you catch yourself thinking any of these, STOP. You are about to exploit a
researcher degree of freedom. Either report it in full or label it exploratory.

- "Let me just report the analyses that worked."
- "I'll drop these outliers and rerun before writing it up."
- "The effect is there if I add this one covariate."
- "Let me try a different test — this one isn't quite significant."
- "We can leave the non-significant models out of the Results."
- "This subgroup is interesting, I'll write it as a finding."
- "Close enough to p < .05 — I'll call it a trend and move on."
- "No need to mention we changed the primary outcome."
- "I'll round the p-value down and skip the effect size for now."

**All of these mean: STOP. Run the Gate Function. Report everything, or label it
exploratory.**

---

## Escalation Gate (multiple comparisons / test-shopping)

Mirrors the systematic-debugging "3 failures = wrong approach" rule:

> Ran **3+ tests on the same hypothesis** searching for significance? STOP. This
> is multiple comparisons / test-shopping. Either correct for *all* of them
> (Bonferroni / FDR — via `alterlab-statistical-analysis`) or declare the
> analysis exploratory. Do **not** run test #4 to find p < .05.

---

## Quick Start

```bash
# 1. Build a tiny manifest of the claim and what was actually run (see references).
# 2. Run the gate; non-zero exit = claim is not clear to write.
uv run python skills/methodology/alterlab-results-transparency/scripts/reporting_gate.py claim.json
```

The script is a deterministic transparency linter, not a statistics engine: it
checks that the manifest lists all runs, that an effect size + CI accompany every
reported claim, that assumption results are present, and that deviations are
labelled. It never computes a p-value or an effect size — that is
`alterlab-statistical-analysis`'s job.

---

## Deeper Detail

- `references/gate_function.md` — the full gate walkthrough, the claim-manifest
  schema, and a worked pass/fail example.
- `references/transparency_standards.md` — what a complete Results report
  contains (CONSORT/STROBE results items, TOP Guidelines reporting standards,
  APA results requirements) and how this skill maps onto sibling skills.

## Self-Check Before Reporting

- Did you LIST every test run, or only the ones in the draft?
- Does every claim carry an effect size **+ 95% CI**, not a bare p-value?
- Are the assumption-check results from `alterlab-statistical-analysis` reported?
- Is every deviation from the frozen plan labelled confirmatory vs. exploratory?
- Ran 3+ tests on one hypothesis? Corrected, or declared exploratory?

Part of the AlterLab Academic Skills suite.

More from AlterLab-IEU/AlterLab-Academic-Skills

SkillDescription
alterlab-abm-mesaBuilds agent-based models of social systems with Mesa 3 — the current AgentSet API (model.agents.shuffle_do('step'), auto-assigned unique_id, mandatory super().__init__(seed=...)), cell spaces (mesa.discrete_space OrthogonalMooreGrid / classic mesa.space grids), the DataCollector, batch_run parameter sweeps, and SolaraViz — for emergence, segregation, diffusion, opinion dynamics, and cooperation models. It uses the Mesa 3.x API (the old mesa.time schedulers like RandomActivation are removed) and treats the model as a generative theory to be validated, not just run. Use when the request mentions an agent-based model, Mesa, simulating interacting agents, or emergent macro behavior from micro rules. For discrete-event (queueing/process) simulation prefer alterlab-simpy; for reinforcement learning prefer alterlab-stable-baselines3. Part of the AlterLab Academic Skills suite.
alterlab-academic-careerPrepares academic career documents and professional-development materials for faculty and researchers. Use when drafting academic CVs, research statements, teaching philosophies, diversity statements, faculty-position cover letters, tenure dossiers, promotion narratives, academic portfolios, or mentorship statements, and when planning conference-networking strategy, building academic web presence, setting up ORCID profiles, or understanding impact metrics. Part of the AlterLab Academic Skills suite.
alterlab-accreditation-aolScaffolds program-level Assurance-of-Learning (AoL) documentation for AACSB (2020 Standard 5) and ABET (Criterion 3 Student Outcomes, Criterion 4 Continuous Improvement) accreditation — program learning outcomes / competency goals, curriculum-to-outcome mapping matrices, direct- and indirect-assessment plans, rubric design, and closing-the-loop continuous-improvement narratives — and validates the structure of an outcome-mapping matrix with scripts/aol_matrix.py. Use when the user needs AACSB or ABET assurance-of-learning material, a program-learning-outcomes set, a curriculum/outcome map or coverage matrix, a direct/indirect assessment plan, a closing-the-loop report, or accreditation self-study text. For single-course design or course rubrics prefer alterlab-teaching-design; for post-award grant reports prefer alterlab-grant-reporting. Part of the AlterLab Academic Skills suite.
alterlab-adaptyvSubmits and tracks protein-testing experiments on the Adaptyv Bio Foundry cloud lab (wet-lab validation), and optimizes protein sequences before submission with computational tools (NetSolP, SoluProt, SolubleMPNN, ESM). Use when designing proteins that need wet-lab validation - binding/affinity screening, expression testing, thermostability, or fluorescence assays - or when submitting experiments to the Foundry API, browsing the target catalog, tracking experiment status, retrieving results, or pre-screening sequences for solubility/expression. Triggers on "Adaptyv", "Foundry API", "cloud lab", "biolayer interferometry / BLI", "wet-lab validation". Part of the AlterLab Academic Skills suite.
alterlab-aeonRuns time series machine learning with the aeon library — classification, regression, clustering, forecasting, anomaly detection, segmentation, and similarity search via scikit-learn compatible APIs. Use when working with temporal data, sequential patterns, or time-indexed observations (univariate or multivariate) that need specialized algorithms beyond standard ML approaches. Part of the AlterLab Academic Skills suite.
alterlab-akademik-tesvikComputes the annual Turkish academic-incentive (akademik teşvik) score for Devlet (state) university öğretim elemanı (academic staff) from a classified activity list, applying the verified Akademik Teşvik Ödeneği Yönetmeliği (2018/11834) Faaliyet Hesaplama Tablosu headline puanları (Proje 20, Araştırma 15, Yayın 30, Patent 30, Atıf 30, Tebliğ 20, Ödül 20) with the k (author-count), p (Q1 1/Q2 0.8/Q3 0.5/Q4 0.25), and r (project-role) coefficients via türü puanı = Σ(faaliyet oranları) × headline (MADDE 8/2), then enforcing the per-type headline ceilings, the 100 cap (MADDE 8/3), and the net-30 payment gate (MADDE 10/3) in a deterministic scripts/tesvik_score.py. Use when the user wants to calculate akademik teşvik puanı, check the en az 30 (net-30) threshold, apply TABLO 4 ceilings, or estimate teşvik eligibility; keeps its coefficients separate from doçentlik scoring. For doçentlik point eligibility prefer alterlab-docentlik-eligibility. Part of the AlterLab Academic Skills suite.
alterlab-alpha-vantageAccesses real-time and historical stock market data, forex rates, cryptocurrency prices, commodities, economic indicators, and 50+ technical indicators via the Alpha Vantage API (requires a free API key from alphavantage.co). Use when fetching stock prices (OHLCV), company fundamentals (income statement, balance sheet, cash flow), earnings, options data, market news/sentiment, insider transactions, GDP, CPI, treasury yields, gold/silver/oil prices, Bitcoin/crypto prices, forex exchange rates, or calculating technical indicators (SMA, EMA, MACD, RSI, Bollinger Bands). Part of the AlterLab Academic Skills suite.
alterlab-alphafoldPredict protein 3D structures with AlphaFold2 via ColabFold — MMseqs2-accelerated MSAs, monomer and AlphaFold2-Multimer complex folding, and confidence-based validation (pLDDT, pTM/ipTM, PAE). Use when folding a protein sequence or complex from FASTA, generating a predicted structure with confidence metrics, ranking models, or checking self-consistency of a design. For co-folding a protein WITH a small-molecule ligand or predicting binding affinity prefer alterlab-boltz; for antibody–antigen or one-FASTA multi-entity complexes prefer alterlab-chai; to LOOK UP an already-computed structure prefer alterlab-alphafold-db; for ESM embeddings or inverse folding prefer alterlab-esm. Part of the AlterLab Academic Skills suite.
alterlab-alphafold-dbAccess the AlphaFold DB of 200M+ AI-PREDICTED protein structures — retrieve models by UniProt accession, download PDB/mmCIF files, and analyze prediction confidence metrics (pLDDT, PAE). Use when a UniProt ID needs a computationally predicted 3D structure or when no experimental structure exists, for homology modeling, protein engineering, or structure-based drug discovery; for EXPERIMENTALLY determined structures (X-ray, cryo-EM, NMR) prefer alterlab-pdb, and for protein sequences, annotations, or accession ID mapping prefer alterlab-uniprot instead. Part of the AlterLab Academic Skills suite.
alterlab-anndataBuild, slice, concatenate, read, and write AnnData annotated data matrices (obs, var, X, layers, obsm, uns) — the scverse data STRUCTURE, not an analysis pipeline. Use when creating or wrangling .h5ad/zarr files, managing cell and gene annotations, concatenating batches, or handling layers/obsm/backed-mode; for the QC, normalization, clustering, UMAP, and differential-expression analysis pipeline prefer alterlab-scanpy instead, and for RNA velocity from spliced/unspliced layers prefer alterlab-scvelo instead. Part of the AlterLab Academic Skills suite.