Skip to content

Decide whether WR_t → NW_{t+1} belongs in the lagged DAG (and refresh the stale d-separation asset) #428

Description

@frankbuckley

Note

Drafted by a LLM-based AI tool (Claude Code/Opus 4.8).

The decision

Does WR_t → NW_{t+1} — prior word reading feeding subsequent nonword reading — belong in dag/dag-language-reading-lagged.dagitty? This is a team decision, not a build, and it is the item that gates whether the strongest descriptive signal in notes/202607241600-findings-word-reading-bands.md has any identified estimand behind it at all. Nothing downstream can be specified until it is settled, so it is recorded here as its own issue rather than inside a model-building one.

Why it is open

The lagged graph currently contains WR_t → { TE, TR, PA, RW, LS }_{t+1} and no NW. Any WR → NW coupling estimated on the graph as it stands is therefore the total lagged effect routed through letter sounds and blending — and conditioning on those, as several candidate adjustment sets do, simultaneously blocks the paths being sought and opens colliders. A machine-searched minimal sufficient set for the coupling on the current graph runs to 8 nodes on the randomised transition and 12 post-crossover, which is unfittable at n ≈ 54 regardless of what one thinks of the estimand.

Evidence for adding the edge. Among children scoring zero on nonword reading at t1, 2 of 20 (10%) in the bottom word-reading half had moved off the floor by t2 against 10 of 16 (62%) in the top half. It holds inside both arms (immediate 18% vs 80%; wait-list 0% vs 33%), and arm is balanced across the bands (14/11 vs 13/12) as randomisation implies — the t1 split is pre-randomisation, so arm cannot confound it. This is the Roch & Jarrold (2012) WR → NW pattern for children with Down syndrome (doi:10.1016/j.jcomdis.2011.11.001) visible descriptively in this cohort. The mechanism is not exotic: a growing sight-word lexicon supplies the orthographic-phonological mappings a child then generalises to unfamiliar strings.

Evidence against. The committed graph already routes reading's influence on nonword reading through letter sounds and blending, and if that were the whole story it should be visible on those legs — where it mostly is not. The descriptive WR → LS contrast is flat but censored (by t3 the top word-reading half sits at a median 28 of 32 letter sounds with 11% at ceiling, so it cannot gain), so that leg is uninformative rather than null; lcsm-082's prior-reading → blending-change coupling is +0.055 (89% CrI −0.036 to +0.147, P = 0.835), suggestive at best. So the "it must already be visible upstream" argument is weaker than it looks, but it has not been ruled out either.

There is also a measurement reading worth putting on the table before any edge is drawn: NW is a 6-item task floored at zero for 72 / 64 / 52 / 40% of children at t1–t4, so "moving off the floor" is a one-item event. The 62%-vs-10% contrast is a floor-exit contrast, and a graph edge is a strong response to it.

What to do once it is settled

If the edge is adopted: add WR_t → NW_{t+1} to dag/dag-language-reading-lagged.dagitty; extend the REVERSE edge list in tests/test_lagged_dag_adjustment_sets.py (which currently carries the corrected five-edge list including LS); re-derive the minimal sufficient sets for the affected couplings against the amended graph; and record whether the resulting set is fittable at this sample size before anything is specified as a model. Sweep the DAG-dependent families for adjustment sets that change, in the #247 idiom.

If it is rejected: record the rationale as a dated notes/ decision entry in the same form as notes/202607241240-decision-drop-vocabulary-letter-sound-analyses.md, so the descriptive result has a standing explanation rather than being re-raised each time someone reads the bands note. The framing to use is the one the note lands on: the floor-exit contrast is real, but under the committed graph it is a total lagged effect through letter sounds and blending plus shared latent general ability, not a direct edge.

Second, smaller item — a stale archived asset

notes/assets/202607141030-lagged-dsep-checks.py has a REVERSE list of ["TE", "TR", "PA", "RW"], missing the WR_t → LS_{t+1} edge added on 2026-07-17, so re-running it today builds a graph the DAG no longer matches. The CI guard is finetests/test_lagged_dag_adjustment_sets.py carries the corrected five-edge list and test_unroll_slices_mirror_the_dagitty_template asserts the unroll matches the parsed template — so nothing published is wrong; only the archived reproducible record attached to notes/202607141030-time-lagged-model-designs.md went stale. Either refresh its edge list or replace it with a pointer to the test that supersedes it. Worth doing in the same pass as this decision, since whoever re-derives the sets will be in exactly that code.

Acceptance criteria

  • Decision recorded (adopt / reject) with its rationale, in a dated notes/ entry.
  • If adopted: dag/dag-language-reading-lagged.dagitty amended, tests/test_lagged_dag_adjustment_sets.py REVERSE list extended, minimal sufficient sets re-derived and their fittability at n ≈ 54 stated explicitly.
  • If adopted: DAG-dependent families swept for changed adjustment sets (Re-derive gain/level-factor upstream adjustments; sweep remaining DAG-dependent families #247 idiom); if rejected: no model changes, decision note only.
  • notes/assets/202607141030-lagged-dsep-checks.py refreshed or replaced by a pointer to the superseding test.
  • notes/202607241600-findings-word-reading-bands.md updated with the outcome.
  • ruff check src/, npm run format:check, npm run spellcheck pass.

Related

Raised by notes/202607241600-findings-word-reading-bands.md (pass 3 and "What would be worth building", first item). Graph and design context: notes/202607131200-time-lagged-dag.md, notes/202607141030-time-lagged-model-designs.md, #250 (lagged DAG workstream, closed), #251 (2026-07-10 DAG revision, closed), #247 (adjustment-set re-derivation, closed). Companion follow-ups from the same pair of notes: #421 and #404.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions