Skip to content

feat(psychometric): recover 2017-era commented asymTOTALVAR as p + trait/a² on main - #340

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

feat(psychometric): recover 2017-era commented asymTOTALVAR as p + trait/a² on main#340
seonghobae wants to merge 2 commits into
mainfrom
agent/psychometric-asym-total-var-on-main

Conversation

@seonghobae

Copy link
Copy Markdown
Contributor

Summary

psychometric_core recovers the 2017-era commented-out asymTOTALVAR as the two-term scalar -q / (2 a) + trait / a² on current main.

This is an independent successor of on-main asymDIFFUSION -q / (2 a) and of queued asymTRAITVAR (#330). It does not depend on unpublished crates and is not stacked on #338 or #339. Table 2/3 do not name asymTOTALVAR. 2017-era ctsem summary.ctsemFit.R comments asymTOTALVAR <- asymDIFFUSION then, when TRAITVAR != 0, asymTOTALVAR <- asymDIFFUSION + asymTRAITVAR with asymTRAITVAR <- solve(DRIFT) %*% TRAITVAR %*% t(solve(DRIFT)). Driver, Oud, and Voelkle (2017, Eq. 1, p. 4; Eq. 4, p. 5; Table 2, p. 12; §4.3, p. 9; JSS PDF re-opened 2026-08-31T03:10Z) write dη = (Aη + ξ + Bz + Mx) dt + G dW. The Lyapunov within-subject variance is asymDIFFUSION -q / (2 a). At a stable equilibrium a random intercept in CINT units has process-mean variance trait / a². Form 1 / a first, then square, then multiply by trait, then add asymDIFFUSION. This crate does not currently export recover_asymptotic_trait_variance; form trait / a² inline.

A zero trait and a zero diffusion is exactly zero even if a ≥ 0. a ≥ 0 with a nonzero contribution fails closed. A zero trait keeps asymDIFFUSION. A zero diffusion keeps trait / a². trait + p is §4.3 trait-plus-state and is not this map: Table 2 TRAITVAR is already in process units, while solve(DRIFT) converts random-intercept units. trait / a² is asymTRAITVAR and equals this total when q = 0 and remains a distinct named quantity. -q / (2 a) is asymDIFFUSION and equals this total when trait = 0 and remains a distinct named quantity. Stationary T0VAR trait + p + (B / a)² v keeps TRAITVAR in process units and is not this map. The later commented addedTIPREDVAR addend is not this two-term slice.

Numeric: a = -0.5, trait = 1, q = 0.4p = 0.4, trait / a² = 4, total 4.4. trait + p = 1.4 is the refuse.

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 (closed OA).

Claim boundary

Test plan

  • cargo fmt --all
  • cargo clippy -p psychometric_core --all-targets -- -D warnings
  • cargo test -p psychometric_core
  • RUSTDOCFLAGS='-D warnings' cargo doc -p psychometric_core --no-deps

Do not convert #310. Do not self-approve. Do not merge without independent non-author APPROVE and exact-head required-check success.

…ait/a² on main

2017-era summary.ctsemFit.R comments asymTOTALVAR <- asymDIFFUSION +
asymTRAITVAR with solve(DRIFT) converting random-intercept units.
The scalar two-term map is -q/(2a) + trait/a². Form 1/a first, then
square, then multiply by trait, then add asymDIFFUSION. trait+p is
§4.3 trait-plus-state and is not this map.
@coderabbitai

coderabbitai Bot commented Aug 31, 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

Independent review of exact head f569fa0c9e6e1ce66daac6486e64a99230acd55f (2017-era commented-out asymTOTALVAR as -q/(2a) + trait/a²). Not stacked on #338/#339. Do not convert #310. Author will not self-approve.

@coderabbitai

coderabbitai Bot commented Aug 31, 2026

Copy link
Copy Markdown

@seonghobae I will review PR #340 at exact head f569fa0c9e6e1ce66daac6486e64a99230acd55f. I will evaluate the stated asymTOTALVAR scope independently.

⚠️ 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 80c9dc40); 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 368 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