Skip to content

feat(psychometric): restore Driver p.16 TRAITVARstd trait/trait=1 on main - #268

Open
seonghobae wants to merge 1 commit into
mainfrom
agent/psychometric-trait-var-std-on-main
Open

feat(psychometric): restore Driver p.16 TRAITVARstd trait/trait=1 on main#268
seonghobae wants to merge 1 commit into
mainfrom
agent/psychometric-trait-var-std-on-main

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 26, 2026

Copy link
Copy Markdown
Contributor

Outcome

Restores the executable Driver, Oud, and Voelkle (2017) p. 16 TRAITVARstd scalar on current main after 0ce16e8 dropped the pre-consolidation code while research notes already named the map (register items 81–82).

Head is independent of #267 asymDIFFUSIONstd (open; do not merge). Lands on protected main c7cf34b after #266 analysis-run status HTTP, #265 T0VARstd, #262 T0MEANSstd, #250 asymCINTstd, and #244 discreteCINTstd.

JSS PDF re-opened 2026-08-26T17:45Z from https://www.jstatsoft.org/index.php/jss/article/download/v077i05/1104. Table 2 (p. 12), footnote 4 (p. 16), and §7.1 (pp. 18–19) were read from that PDF in this cycle.

  • Table 2 (p. 12) names TRAITVAR φ_ξ the latent trait variance/covariance and sets it NULL when there is no trait.
  • Section 7.1 names traits the stable between-subject differences (unit-level unobserved heterogeneity) and estimates φ_ξ of the intercepts ξ across individuals. Distinct from indicator-level MANIFESTTRAITVAR.
  • Page 16 prints standardised matrices with the suffix std when appropriate. The printed example on p. 16 is discreteDRIFTstd, not TRAITVARstd.
  • Footnote 4: standardisations use only the relevant variance, not the total. The relevant variance for that named between-subject correlation is TRAITVAR, not free first-occasion T0VAR and not process-dynamics asymDIFFUSION.
  • The 2017-era summary.ctsemFit.R forms TRAITVARstd only when TRAITVAR != 0, as solve(sqrt(diag(TRAITVAR))) %&% TRAITVAR when verbose = TRUE. OpenMx %&% is t(A) %*% B %*% A. Unlike T0VARstd, that formation uses diag(diag(TRAITVAR)) and does not add diag(c(ridging)). The ridge is a T0VAR numerical hack and is not this exact map.
  • Scalar map: trait / trait = 1 after strictly positive TRAITVAR. Form strictly positive trait first, then 1 / √trait, then (1 / √trait) trait (1 / √trait). Zero TRAITVAR skips forming TRAITVARstd in the 2017-era source and fails closed here. TRAITVAR does not require stable a < 0. A non-event clock fails closed. Distinct positive trait recover the same 1.
  • p_0 / p_0 = 1 is T0VARstd and recovers the same number and remains a distinct named quantity. This crate already exports T0VARstd; the refuse names that quantity.
  • t0_b² v is addedT0TIPREDVAR and is extra first-occasion TI variance, not this correlation. This crate does not currently export addedT0TIPREDVAR; the refuse still names that quantity.

Still not a Kalman filter, not a matrix expm, not ESEM estimation, not DSEM, not MGCFA, and not ctsem estimation.

Meredith (1993) remains unread (Unpaywall 2026-08-26T17:20Z: is_oa: false; OpenAlex closed; Springer content/pdf is an HTML stub). Mislevy (1991) remains unread on the same terms (DOI 10.1007/bf02294457; Unpaywall is_oa: false). #84 metric still does not license latent means.

Do not merge without independent non-author APPROVE and exact-head required-check success. Author will not self-approve. Org has only collaborator seonghobae. Do not request Copilot.

Next restore after this slice: MANIFESTTRAITVARstd (register items 83–84), independently of #267.

Verification at this head

  • cargo +1.98.0 test -p psychometric_core --lib — 180 passed
  • cargo +1.98.0 test -p psychometric_core --test multilevel_event_time_recovery_contract --test scientific_claim_boundary_contract standardised_trait_variance — 2 + 1 passed
  • cargo +1.98.0 clippy -p psychometric_core --all-targets -- -D warnings
  • cargo +1.98.0 fmt -p psychometric_core -- --check
  • RUSTDOCFLAGS='-D warnings' cargo +1.98.0 doc -p psychometric_core --no-deps

Contract

  • crate: psychometric_core (not a second invariance crate)
  • map: recover_standardised_trait_variance
  • ADR: 0005

Open in Devin Review

…main

Restore recover_standardised_trait_variance on current main after
0ce16e8 dropped the pre-consolidation code while research notes already
named the map (register items 81–82). Scalar is trait/trait=1 after
strictly positive TRAITVAR. Distinct from T0VARstd and addedT0TIPREDVAR
even when T0VARstd equals 1. No ridge addend.
@coderabbitai

coderabbitai Bot commented Aug 26, 2026

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 53 minutes.

View limit details

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 550049f4-30c1-40d2-917b-a908633d4452

📥 Commits

Reviewing files that changed from the base of the PR and between c7cf34b and ae90cc5.

📒 Files selected for processing (8)
  • CHANGELOG.md
  • crates/psychometric_core/src/error.rs
  • crates/psychometric_core/src/event_time.rs
  • crates/psychometric_core/src/lib.rs
  • crates/psychometric_core/tests/multilevel_event_time_recovery_contract.rs
  • crates/psychometric_core/tests/scientific_claim_boundary_contract.rs
  • docs/adr/0005-posterior-esem-dsem.md
  • docs/research/multilevel-event-time-recovery.md

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no bugs or issues to report.

Open in Devin Review

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant