{"id":51146821,"url":"https://github.com/mikhaeelatefrizk/affect-labeling-review","last_synced_at":"2026-06-26T03:03:51.122Z","repository":{"id":356914824,"uuid":"1221949447","full_name":"mikhaeelatefrizk/affect-labeling-review","owner":"mikhaeelatefrizk","description":"Systematic review and meta-analysis of affect labeling (Lieberman et al. 2007 paradigm). Pre-registered protocol, real random-effects meta-analysis (k=9), PRISMA 2020, RoB 2 / ROBINS-I, ~14,000-word manuscript. Open data and code.","archived":false,"fork":false,"pushed_at":"2026-05-27T14:35:30.000Z","size":3951,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-27T16:21:24.486Z","etag":null,"topics":["affect-labeling","amygdala","clinical-psychology","emotion-regulation","meta-analysis","neuroscience","open-science","prefrontal-cortex","preregistration","prisma-2020","psychology","psychophysiology","replication-crisis","skin-conductance","systematic-review"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mikhaeelatefrizk.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":".zenodo.json","notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-26T22:09:05.000Z","updated_at":"2026-05-27T14:36:24.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/mikhaeelatefrizk/affect-labeling-review","commit_stats":null,"previous_names":["mikhaeelatefrizk/affect-labeling-review"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/mikhaeelatefrizk/affect-labeling-review","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mikhaeelatefrizk%2Faffect-labeling-review","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mikhaeelatefrizk%2Faffect-labeling-review/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mikhaeelatefrizk%2Faffect-labeling-review/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mikhaeelatefrizk%2Faffect-labeling-review/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mikhaeelatefrizk","download_url":"https://codeload.github.com/mikhaeelatefrizk/affect-labeling-review/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mikhaeelatefrizk%2Faffect-labeling-review/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34801046,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-26T02:00:06.560Z","response_time":106,"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":["affect-labeling","amygdala","clinical-psychology","emotion-regulation","meta-analysis","neuroscience","open-science","prefrontal-cortex","preregistration","prisma-2020","psychology","psychophysiology","replication-crisis","skin-conductance","systematic-review"],"created_at":"2026-06-26T03:03:50.097Z","updated_at":"2026-06-26T03:03:51.109Z","avatar_url":"https://github.com/mikhaeelatefrizk.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Putting feelings into words: a systematic review and meta-analysis of affect labeling\n\n[![License: code MIT](https://img.shields.io/badge/code-MIT-blue.svg)](LICENSE-CODE)\n[![License: manuscript CC-BY-4.0](https://img.shields.io/badge/manuscript-CC--BY--4.0-lightgrey.svg)](LICENSE-MANUSCRIPT)\n[![License: data CC-BY-4.0](https://img.shields.io/badge/data-CC--BY--4.0-lightgrey.svg)](LICENSE-DATA)\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.20109595.svg)](https://doi.org/10.5281/zenodo.20109595)\n[![Cite this repository](https://img.shields.io/badge/cite-CITATION.cff-green.svg)](CITATION.cff)\n[![ORCID](https://img.shields.io/badge/ORCID-0009--0006--1069--9558-A6CE39?logo=orcid\u0026logoColor=white)](https://orcid.org/0009-0006-1069-9558)\n\nThis repository is the full open-research package for a pre-registered (PROSPERO) systematic review and random-effects meta-analysis of **affect labeling** — the psychological and neuroscientific phenomenon, originating in Lieberman et al. (2007), in which putting feelings into words attenuates emotional responses.\n\n\u003e **Status: Preprint / working paper. Not yet peer-reviewed.** All findings are provisional and subject to revision pending external review.\n\n## Headline result\n\nRandom-effects meta-analysis of nine peripheral-physiology effect sizes from seven independent studies:\n\n- **Pooled Hedges' g = −0.43, 95% CI [−0.68, −0.18], p \u003c .001**\n- 95% prediction interval [−1.13, +0.27] **crosses zero**\n- I² = 48.3%, τ² = 0.070\n\nPre-specified lab-stratified moderator analysis:\n\n- **UCLA Lieberman/Craske axis only:** g = **−0.74**, 95% CI [−1.02, −0.47], k = 5, I² = 0%\n- **Independent laboratories only:** g = **−0.13**, 95% CI [−0.41, +0.14], k = 4, I² = 27.8% — non-significant; CI crosses zero\n\nThe 0.61 g-unit gap between lab strata is larger than most moderators in the published literature and is consistent with structural author non-independence rather than incidental variation.\n\n## For data scientists and ML researchers\n\nThe screening corpus is published as a labeled dataset suitable for training and evaluating AI-assisted SLR screening systems (see [`data/screening/`](data/screening/)). Quick orientation:\n\n| You want… | File | Note |\n|-----------|------|------|\n| The 100 included papers (positive class) | `data/screening/included_papers.csv` | Generated from `references.bib` + manuscript |\n| The candidate corpus (~1,800 papers) with `included` 0/1 labels | `data/screening/derived_screening_log.csv` | **The training file.** Re-derived from PubMed using the pre-registered query |\n| The pre-registered query and search strategy | [`data/searches/search_strategy.md`](data/searches/search_strategy.md) | PRISMA-S compliant |\n| The exclusion-reason taxonomy | [`data/exclusion_reason_codebook.md`](data/exclusion_reason_codebook.md) | The 6 full-text exclusion codes used in the original review |\n| Aggregate PRISMA counts | [`prisma/prisma_counts.csv`](prisma/prisma_counts.csv) | Structured form of the published flow |\n\n**Important honesty up front.** The derived screening log is a *re-derivation*, not the original per-paper screening record (which was not preserved in shareable form). It collapses the title/abstract vs. full-text decision distinction into a single binary label, and exclusion reasons are aggregated rather than per-paper. See [`data/screening/README.md`](data/screening/README.md) for the full caveats.\n\n## Data Availability\n\nAll data needed to reproduce, re-analyze, or extend this review is in this repository under [`LICENSE-DATA`](LICENSE-DATA) (CC-BY-4.0). No external archive is currently used; the [`.zenodo.json`](.zenodo.json) configures a DOI mint on the next tagged release.\n\n| Layer | Where | Source of truth? |\n|-------|-------|------------------|\n| Manuscript and figures | `manuscript/`, `figures/` | Yes |\n| Pre-registration | `prereg/PROSPERO_preregistration.md` | Yes (canonical inclusion/exclusion criteria) |\n| PRISMA flow and counts | `prisma/prisma_counts.csv` (structured), `prisma/prisma_counts.txt` (legacy) | Yes |\n| Effect sizes | `meta-analysis/extracted_effect_sizes.csv` | Yes |\n| Risk-of-bias assessments | `supplementary/risk_of_bias.csv` | Yes |\n| Search strategy | `data/searches/` | Yes (restructured from PROSPERO) |\n| Included papers list | `data/screening/included_papers.csv` | Derived from `references.bib` + manuscript |\n| Candidate corpus + labels | `data/screening/derived_screening_log.csv` | Derived from PubMed re-query |\n\n**What is *not* available.** The original per-paper screening decisions (1,571 title/abstract decisions and 282 full-text decisions) were not preserved in a shareable form. Derived labels are the closest reproducible substitute. See [`data/screening/README.md`](data/screening/README.md).\n\n## Documentation guide\n\nThis repository ships with extended documentation under [`docs/`](docs/) for readers who want to *use* the package — not just cite it. Pick your path:\n\n| You are… | Start here |\n|---|---|\n| Anyone with a quick question (year filter? where's the included list?) | [`docs/faq.md`](docs/faq.md) |\n| A reader who wants the gist | [`README.md`](README.md) (this file) → [`manuscript/manuscript.md`](manuscript/manuscript.md) |\n| A peer reviewer or thesis committee | [`prisma/PRISMA_2020_checklist.md`](prisma/PRISMA_2020_checklist.md) → [`supplementary/risk_of_bias_explanation.md`](supplementary/risk_of_bias_explanation.md) → [`docs/methodology-deep-dive.md`](docs/methodology-deep-dive.md) |\n| A reproducer | [`docs/reproducibility-guide.md`](docs/reproducibility-guide.md) → run `make all` → [`docs/troubleshooting.md`](docs/troubleshooting.md) if anything fails |\n| An ML / NLP researcher building a screening model | [`docs/for-ml-researchers.md`](docs/for-ml-researchers.md) → [`data/screening/derived_screening_log.csv`](data/screening/derived_screening_log.csv) |\n| A master's student building an AI screening pipeline | [`docs/for-masters-students.md`](docs/for-masters-students.md) → [`docs/for-ml-researchers.md`](docs/for-ml-researchers.md) |\n| Someone unfamiliar with SLR terminology | [`docs/glossary.md`](docs/glossary.md) (5 minutes) |\n| Someone wanting to contribute back | [`docs/extending-the-corpus.md`](docs/extending-the-corpus.md) → [`CONTRIBUTING.md`](CONTRIBUTING.md) |\n| A search-strategy peer reviewer | [`data/searches/PRISMA-S_checklist.md`](data/searches/PRISMA-S_checklist.md) |\n\n## Repository structure\n\n```\naffect-labeling-review/\n├── README.md                              ← this file\n├── CHANGELOG.md                           ← versioned change history\n├── LICENSE                                ← multi-license pointer\n├── LICENSE-CODE                           ← MIT (source files)\n├── LICENSE-MANUSCRIPT                     ← CC-BY-4.0 (manuscript + figures)\n├── LICENSE-DATA                           ← CC-BY-4.0 (data files)\n├── CITATION.cff                           ← machine-readable citation\n├── .zenodo.json                           ← DOI metadata (Zenodo)\n├── CONTRIBUTING.md                        ← how to report errata, propose corrections\n├── CODE_OF_CONDUCT.md                     ← Contributor Covenant 2.1\n├── SECURITY.md                            ← vulnerability disclosure policy\n├── .editorconfig                          ← cross-editor code-style consistency\n├── Makefile                               ← reproducibility entry point — run `make all`\n├── requirements.txt                       ← pinned Python deps\n├── environment.yml                        ← conda alternative\n├── references.bib                         ← BibTeX for all references\n│\n├── manuscript/                            ← the manuscript and its README\n│   └── manuscript.md                      ← full ~14,000-word paper\n│\n├── prereg/                                ← pre-registration\n│   └── PROSPERO_preregistration.md        ← PROSPERO-compatible structured protocol\n│\n├── meta-analysis/                         ← random-effects meta-analysis\n│   ├── run_meta_analysis.py               ← analysis code\n│   ├── extracted_effect_sizes.csv         ← effect-size dataset (canonical)\n│   ├── leave_one_out.csv                  ← LOO sensitivity output\n│   └── results_summary.txt                ← plain-text summary\n│\n├── prisma/                                ← PRISMA 2020 flow + reporting\n│   ├── build_prisma.py                    ← PRISMA flow generator\n│   ├── prisma_counts.csv                  ← structured counts (canonical)\n│   ├── prisma_counts.txt                  ← legacy human-readable counts\n│   └── PRISMA_2020_checklist.md           ← 27-item reporting checklist\n│\n├── supplementary/                         ← risk-of-bias artifacts\n│   ├── risk_of_bias.csv                   ← RoB 2 / ROBINS-I judgments\n│   ├── build_rob_figure.py                ← traffic-light figure code\n│   └── risk_of_bias_explanation.md        ← per-study rationale narrative\n│\n├── data/                                  ← labeled datasets (CC-BY-4.0)\n│   ├── README.md                          ← dataset index + data dictionary\n│   ├── exclusion_reason_codebook.md       ← 6 full-text exclusion codes\n│   ├── QUALITY_REPORT.md                  ← canonical-vs-derived comparison\n│   ├── searches/                          ← PRISMA-S search strategy\n│   │   ├── search_strategy.md/.csv        ← canonical query, dates, hits\n│   │   └── PRISMA-S_checklist.md          ← 16-item search-reporting checklist\n│   └── screening/                         ← screening log (schema, template, derived)\n│       ├── screening_log.schema.json      ← JSON Schema 2020-12\n│       ├── screening_log.template.csv     ← empty template + 1 example row\n│       ├── included_papers.csv            ← 22 confidently-identifiable of 100 includes\n│       ├── all_references.csv             ← every references.bib entry + confirmed-include flag + manuscript-mention count\n│       ├── derived_corpus.csv             ← 3,892 PubMed-derived records\n│       └── derived_screening_log.csv      ← labelled corpus (PU framing)\n│\n├── scripts/                               ← derivation + validation tooling\n│   ├── extract_included_list.py           ← parse references.bib → included_papers.csv\n│   ├── build_derived_corpus.py            ← re-query PubMed → derived_corpus.csv\n│   ├── build_derived_screening_log.py     ← join → derived_screening_log.csv\n│   ├── build_quality_report.py            ← QUALITY_REPORT.md\n│   └── validate_screening_log.py          ← schema + reconciliation check\n│\n├── docs/                                  ← extended documentation for reproducers and reusers\n│   ├── README.md                          ← reading orders + table of contents\n│   ├── faq.md                             ← year filter, where's the included list, how to label a re-run corpus\n│   ├── reproducibility-guide.md           ← clone → byte-identical outputs\n│   ├── for-ml-researchers.md              ← detailed PU-learning guide\n│   ├── for-masters-students.md            ← concrete onboarding letter for ML-screening thesis work\n│   ├── methodology-deep-dive.md           ← analytic-choice justifications\n│   ├── glossary.md                        ← ~50 SLR / meta-analysis / ML terms\n│   ├── troubleshooting.md                 ← top 10 reproducer issues + fixes\n│   └── extending-the-corpus.md            ← second-coder + database-broadening guide\n│\n├── figures/                               ← rendered outputs (PNG + PDF)\n│   ├── prisma_flow.png / .pdf             ← PRISMA 2020 flow diagram\n│   ├── rob_summary.png / .pdf             ← risk-of-bias traffic light\n│   ├── forest_plot.png / .pdf             ← random-effects forest plot\n│   └── funnel_plot.png / .pdf             ← funnel plot\n│\n└── .github/\n    ├── workflows/ci.yml                   ← reproducibility CI (runs on every push + PR)\n    ├── ISSUE_TEMPLATE/                    ← erratum, repro, data-correction forms\n    └── PULL_REQUEST_TEMPLATE.md\n```\n\nEvery directory has a `README.md` orienting you to its contents and regeneration command.\n\n## Reproducing the analyses\n\n```bash\ngit clone https://github.com/mikhaeelatefrizk/affect-labeling-review.git\ncd affect-labeling-review\nmake install       # pinned Python deps (Python 3.11)\nmake all           # regenerate every output: figures, counts, derived dataset\nmake verify        # assert outputs match the committed versions\n```\n\nWithout `make` (Windows without WSL):\n\n```powershell\npip install -r requirements.txt\npython meta-analysis/run_meta_analysis.py\npython prisma/build_prisma.py\npython supplementary/build_rob_figure.py\npython scripts/extract_included_list.py\npython scripts/build_derived_corpus.py\npython scripts/build_derived_screening_log.py\npython scripts/build_quality_report.py\npython scripts/validate_screening_log.py\n```\n\n`make all` from a fresh clone with the pinned dependency set (Python 3.11.x, see [`requirements.txt`](requirements.txt)) reproduces every output byte-for-byte. Drift on a different version stack is reported but not necessarily an error — see [`Makefile`](Makefile) target `sha` for a SHA-256 receipt.\n\n## Re-deriving the screening corpus\n\n`make derive` re-queries PubMed via the NCBI E-utilities API using the pre-registered Boolean query, fetches each candidate's metadata, joins against the included-papers list, and writes the labeled corpus to `data/screening/derived_screening_log.csv`. The whole derivation is deterministic given a PubMed snapshot.\n\nBecause PubMed continues to grow, today's hit count will exceed the canonical 1,842 records reported in the original PRISMA flow. This drift is reported in [`data/QUALITY_REPORT.md`](data/QUALITY_REPORT.md) (regenerated by `make quality`) and is informational, not error.\n\n## What's verified, what's flagged\n\nThe reference list was verified against PubMed, the journal of record, and where available the original published PDFs. **Five citations were corrected** during verification, and **one fabricated reference was removed**:\n\n- Removed: Isaacowitz \u0026 Eldesouky (2024) — could not be located in any database; closest real entity is a 2023 conference symposium.\n- Corrected: \"Wong et al. (2022)\" → Plaisted, Waite, \u0026 Creswell (2022), *Behaviour Research and Therapy*, 148, 103997. This is a key **null finding** and the only adequately powered adolescent RCT.\n- Corrected: Vlasenko et al. (2021) coauthors → Vlasenko, V. V., Rogers, E. G., \u0026 Waugh, C. E. (Wake Forest).\n- Corrected: Vives et al. (2021) title → \"Foreign Language Processing Undermines Affect Labeling.\"\n- Corrected: Givon, Meiran, \u0026 Goldenberg (2025) for the *Trends in Cognitive Sciences* piece (was misattributed).\n- Several DOIs and article numbers corrected.\n\nThe Burklund et al. (2024) PTSD pilot trial is flagged for a **commercial conflict of interest**: the lead author is an independent contractor at NeuroGen Technologies Inc., a private company developing affect-labeling-based PTSD interventions. This disclosure is also reflected in the risk-of-bias assessment as \"high.\"\n\n## Limitations explicitly acknowledged in the manuscript\n\n1. Many original fMRI studies did not report d or g, precluding fully harmonized quantitative synthesis without re-analysis of original data.\n2. Single-laboratory concentration in the affect labeling fMRI literature limits independence of the supportive evidence base; addressed by lab-stratified moderator analysis but the underlying problem requires direct multisite replication.\n3. The dissociation between physiological and self-report measures means effect-size estimates depend on outcome choice in ways flagged but not fully resolved.\n4. The meta-analysis includes nine effect sizes from seven studies — adequate for detecting a moderate pooled effect but underpowered for many moderator analyses.\n5. Inclusion criteria excluded studies in non-English without translation.\n6. **Screening was performed by a single coder.** Inter-rater agreement statistics are not available. The derived screening log (`data/screening/derived_screening_log.csv`) reproduces a binary label per paper from public sources, but the original per-paper screening decisions and exclusion reasons were not preserved.\n\n## How to cite\n\nThe canonical citation is in [`CITATION.cff`](CITATION.cff) (machine-readable). Plain text:\n\n```\nWahba, M. A. R. (2026). Putting feelings into words: A systematic review\nand meta-analysis of affect labeling (v1.0.0).\nZenodo. https://doi.org/10.5281/zenodo.20109595\n```\n\nThe repository has a permanent Zenodo DOI: [10.5281/zenodo.20109595](https://doi.org/10.5281/zenodo.20109595). GitHub also renders a \"Cite this repository\" button on the project page using `CITATION.cff`.\n\n## License\n\nThree licenses by content category:\n\n- **Code** (`*.py`, `Makefile`, CI configs, schemas): MIT — see [`LICENSE-CODE`](LICENSE-CODE).\n- **Manuscript and figures**: CC-BY-4.0 — see [`LICENSE-MANUSCRIPT`](LICENSE-MANUSCRIPT).\n- **Data files**: CC-BY-4.0 — see [`LICENSE-DATA`](LICENSE-DATA).\n\nSee [`LICENSE`](LICENSE) for the at-a-glance map.\n\n## Contributing\n\nErrata, reproducibility issues, and data corrections are welcome. See [`CONTRIBUTING.md`](CONTRIBUTING.md) for the workflow and the issue templates under [`.github/ISSUE_TEMPLATE/`](.github/ISSUE_TEMPLATE/).\n\n## Contact\n\nOpen an issue on this repository, or use the email in [`CITATION.cff`](CITATION.cff) for matters that aren't suitable for a public issue. ORCID: [0009-0006-1069-9558](https://orcid.org/0009-0006-1069-9558).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmikhaeelatefrizk%2Faffect-labeling-review","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmikhaeelatefrizk%2Faffect-labeling-review","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmikhaeelatefrizk%2Faffect-labeling-review/lists"}