Skip to content

feat(psychometric): recover Eq. 5 of 2017-era active asymptotes=TRUE DIFFUSION rewrite on main - #366

Draft
seonghobae wants to merge 1 commit into
mainfrom
agent/psychometric-eq5-asymptotes-true-diffusion-on-main
Draft

feat(psychometric): recover Eq. 5 of 2017-era active asymptotes=TRUE DIFFUSION rewrite on main#366
seonghobae wants to merge 1 commit into
mainfrom
agent/psychometric-eq5-asymptotes-true-diffusion-on-main

Conversation

@seonghobae

Copy link
Copy Markdown
Contributor

Summary

psychometric_core recovers Equation 5 of the 2017-era active asymptotes=TRUE DIFFUSION rewrite as the scalar λ² (−2 a · q) with θ = 0 and ψ = 0 on current main after 0ce16e8 dropped the pre-consolidation code.

This is an independent successor of queued latent asymptotes=TRUE DIFFUSION rewrite −2 a · q (#357). It does not depend on unpublished crates and is not stacked on that PR. Do not import unpublished #357 helpers. cran/ctsem 2.5.0 summary.ctsemFit.R forms DRIFTHATCH <- (DRIFT %x% I) + (I %x% DRIFT) and then if(asymptotes==TRUE) DIFFUSION <- matrix(-DRIFTHATCH %*% OpenMx::rvectorize(DIFFUSION), nrow=n.latent, ncol=n.latent) immediately after mxEval(DIFFUSION, mxobj, compute=TRUE) and puts that rewrite in the active outlist. For one latent the Kronecker sum is 2 a, so the scalar rewrite is −2 a · q. Driver, Oud, and Voelkle (2017, Eq. 5, p. 5; Table 2, p. 12; Eq. 4, p. 5; p. 16; JSS PDF re-opened 2026-08-31T09:50Z from https://www.jstatsoft.org/index.php/jss/article/download/v077i05/1104) write y_i(t) = τ + Λ η_i(t) + ε_i(t) with ε ~ N(0, Θ) and τ_i ~ N(μ_τ, Ψ_τ). Form 2 a first, then negate, then multiply by q, then (λ extra) λ. Do not form λ² first.

A zero loading or zero extra is exactly zero. A zero diffusion is exactly zero even if a ≥ 0. a ≥ 0 with a nonzero diffusion fails closed. Numeric: a = −0.25, q = 0.4, λ = 2 recovers rewrite extra 0.2 and Eq. 5 0.8. Unstandardised λ² q = 1.6 is not that map. λ² p of stored asymDIFFUSION p = 0.8 is 3.2 and is not that map. The latent rewrite −2 a · q is not Var(y). MANIFESTVAR θ is not this extra. A non-event clock fails closed.

Meredith (1993) remains unread (Springer content/pdf is an HTML stub; Unpaywall historically is_oa: false). Mislevy (1991, Psychometrika, 56, 177–196, DOI 10.1007/bf02294457) remains unread on the same terms. Still not a Kalman filter, not a matrix expm, not ESEM estimation, not DSEM, and not ctsem estimation.

Verification

  • cargo fmt of changed files except lib.rs (never rustfmt lib.rs; it reorders types after functions)
  • cargo clippy -p psychometric_core --all-targets -- -D warnings
  • cargo test -p psychometric_core --lib (190 passed)
  • cargo test -p psychometric_core --test multilevel_event_time_recovery_contract (110 passed)
  • cargo test -p psychometric_core --test scientific_claim_boundary_contract (53 passed)
  • RUSTDOCFLAGS='-D warnings' cargo doc -p psychometric_core --no-deps

Do not self-approve. Do not request Copilot. Independent non-author review is required. Do not merge without independent non-author APPROVE + exact-head required-check success. Queued/pending/skipped/cancelled/stale/predecessor-head is non-passing.

…DIFFUSION rewrite on main

Independent of unpublished #357. Scalar λ²(−2a·q) with θ=0, ψ=0. Form 2a, negate, multiply by q, then (λ extra)λ. Zero q is 0 even if a≥0. a≥0 with nonzero q fails closed.
@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.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant