feat(psychometric): recover Eq. 5 of 2017-era active asymptotes=TRUE DIFFUSION rewrite on main - #366
Draft
seonghobae wants to merge 1 commit into
Draft
Conversation
…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.
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: trueThanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
psychometric_corerecovers Equation 5 of the 2017-era activeasymptotes=TRUEDIFFUSIONrewrite as the scalarλ² (−2 a · q)withθ = 0andψ = 0on current main after0ce16e8dropped the pre-consolidation code.This is an independent successor of queued latent
asymptotes=TRUEDIFFUSIONrewrite−2 a · q(#357). It does not depend on unpublished crates and is not stacked on that PR. Do not import unpublished#357helpers. cran/ctsem 2.5.0summary.ctsemFit.RformsDRIFTHATCH <- (DRIFT %x% I) + (I %x% DRIFT)and thenif(asymptotes==TRUE) DIFFUSION <- matrix(-DRIFTHATCH %*% OpenMx::rvectorize(DIFFUSION), nrow=n.latent, ncol=n.latent)immediately aftermxEval(DIFFUSION, mxobj, compute=TRUE)and puts that rewrite in the activeoutlist. For one latent the Kronecker sum is2 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) writey_i(t) = τ + Λ η_i(t) + ε_i(t)withε ~ N(0, Θ)andτ_i ~ N(μ_τ, Ψ_τ). Form2 afirst, then negate, then multiply byq, 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 ≥ 0with a nonzero diffusion fails closed. Numeric:a = −0.25,q = 0.4,λ = 2recovers rewrite extra0.2and Eq. 50.8. Unstandardisedλ² q = 1.6is not that map.λ² pof storedasymDIFFUSIONp = 0.8is3.2and is not that map. The latent rewrite−2 a · qis notVar(y).MANIFESTVARθis not this extra. A non-event clock fails closed.Meredith (1993) remains unread (Springer
content/pdfis an HTML stub; Unpaywall historicallyis_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 matrixexpm, not ESEM estimation, not DSEM, and not ctsem estimation.Verification
cargo fmtof changed files exceptlib.rs(never rustfmtlib.rs; it reorders types after functions)cargo clippy -p psychometric_core --all-targets -- -D warningscargo 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-depsDo 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.