Skip to content

feat(psychometric): recover Driver Eq. 5 of T0TOTALVAR as λ² (t0_trait² · trait + p_0) + θ - #328

Draft
seonghobae wants to merge 2 commits into
mainfrom
agent/psychometric-eq5-t0-total-var-on-main
Draft

feat(psychometric): recover Driver Eq. 5 of T0TOTALVAR as λ² (t0_trait² · trait + p_0) + θ#328
seonghobae wants to merge 2 commits into
mainfrom
agent/psychometric-eq5-t0-total-var-on-main

Conversation

@seonghobae

Copy link
Copy Markdown
Contributor

One atomic recover on current main (6444a81). Driver, Oud, and Voelkle (2017, Eq. 5, p. 5; Table 2, p. 12 TRAITVAR / T0VAR / LAMBDA / MANIFESTVAR; §7.1, pp. 18–19; 2017-era summary.ctsemFit.R lines 322–339; JSS PDF re-opened 2026-08-30T20:06Z from https://www.jstatsoft.org/index.php/jss/article/download/v077i05/1104).

Map. 2017-era source forms T0TRAITVAR <- T0TRAITEFFECT %*% TRAITVAR %*% t(T0TRAITEFFECT) then T0TOTALVAR <- T0TRAITVAR + T0VAR. Equation 5 of that total, with MANIFESTTRAITVAR zero, is λ² (t0_trait² · trait + p_0) + θ. Form extra first, then add free T0VAR, then recover_manifest_observed_variance(λ, total, θ). Do not form λ² first. This crate does not export recover_initial_total_variance; form extra and the sum inline.

Fail closed. trait < 0 or p_0 < 0 fails closed. Non-event clock fails closed. Zero extra, zero p_0, or zero loading is exactly θ. Free T0TRAITEFFECT and free T0VAR do not require stable a < 0.

Distinct from unstandardised T0TOTALVAR extra + p_0 (unpublished #324), T0TOTALVARstd total / total = 1 (unpublished #326), Eq. 5 of free T0VAR λ² p_0 + θ, Eq. 5 of T0TRAITVAR λ² extra + θ (unpublished #321), and MANIFESTVAR θ. Also distinct from §4.3 predetermined first-occasion observed variance λ²(trait + p_0 + (B / a)² v) + θ + ψ, which uses raw TRAITVAR not the T0TRAITEFFECT quadratic. Does not implement unstd T0TOTALVAR or T0TOTALVARstd.

Independent of sibling psychometric PRs #327, #326, #325, #324, #322, #321, #320, #319, #318, #317, #316, #315/#272, #314, #313, #312, #311, #310, #309, #308, #307, #306, #305, #304, #303, #302, #300, #299. Does not reuse their branches.

Nine files: event_time.rs, error.rs, lib.rs, scientific_claim_boundary_contract.rs, multilevel_event_time_recovery_contract.rs, ADR 0005, CHANGELOG, CLAUDE.md, research notes (CONTRIBUTING requires the docs slice).

Local verification on fab63b3: cargo fmt -- --check; cargo clippy -p psychometric_core --all-targets -- -D warnings; cargo test -p psychometric_core --lib 188 passed; cargo test -p psychometric_core --test scientific_claim_boundary_contract 53 passed; cargo test -p psychometric_core --test multilevel_event_time_recovery_contract 108 passed.

Still not a Kalman filter, not a matrix expm, not ESEM estimation, not DSEM, and not ctsem estimation. Meredith (1993) and Mislevy (1991) remain unread.

Do not merge without independent non-author APPROVE plus exact-head required-check success.

…t² · trait + p_0) + θ

One named Driver quantity on current main. Form extra then add free T0VAR
inline, then recover_manifest_observed_variance. Independent of unpublished
#324 recover_initial_total_variance and of #326 T0TOTALVARstd.
@coderabbitai

coderabbitai Bot commented Aug 30, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

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.

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 30, 2026

Copy link
Copy Markdown
⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Resolve the CHANGELOG.md append conflict by keeping both entries.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@seonghobae

Copy link
Copy Markdown
Contributor Author

Restack on protected main (a243f18)

Non-force merge of origin/main (merge commit 42ed97b6); the only conflict was the CHANGELOG.md append, both entries kept.

Local evidence on the pushed head (toolchain 1.98.0): cargo test -p psychometric_core 366 passed / 0 failed, clippy -D warnings clean, cargo fmt --all --check clean, documentation/workspace/docstring contracts PASS, git diff --check clean.

🤖 Generated with Claude Code

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

Labels

enhancement New feature or request priority: medium

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant