Skip to content

feat(psychometric): recover 2017-era active asymptotes=TRUE TIPREDEFFECT rewrite on main - #352

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

feat(psychometric): recover 2017-era active asymptotes=TRUE TIPREDEFFECT rewrite on main#352
seonghobae wants to merge 1 commit into
mainfrom
agent/psychometric-asymptotes-true-tipredeffect-on-main

Conversation

@seonghobae

Copy link
Copy Markdown
Contributor

Summary

psychometric_core recovers the 2017-era active asymptotes=TRUE TIPREDEFFECT rewrite as the scalar −a · B on current main.

This is an independent successor of on-main asymTIPREDEFFECT -B z / a and on-main discreteTIPREDEFFECT. It does not depend on unpublished crates and is not stacked on queued #318#349. cran/ctsem 2.5.0 summary.ctsemFit.R forms if(asymptotes==TRUE) TIPREDEFFECT <- -DRIFT %*% mxobj$TIPREDEFFECT$values when n.TIpred > 0. That rewrite is active and is in the outlist. Driver, Oud, and Voelkle (2017, Table 2, p. 12; Eq. 1, p. 4; Eq. 3, p. 5; §7.2, pp. 20–21; p. 16; JSS PDF re-opened 2026-08-31T05:20Z from https://www.jstatsoft.org/index.php/jss/article/download/v077i05/1104) name B TIPREDEFFECT. Form a first, then negate, then multiply by B. The rewrite is the coefficient B, not B z. When asymptotes=TRUE the stored TIPREDEFFECT is the asymptotic parameterization §7.2 names asymTIPREDEFFECT -B / a; multiplying by -DRIFT converts that stored value back to original B. The companion active rewrite CINT <- -DRIFT %*% CINT uses the same operator on a different matrix and is not this coefficient map.

A zero coefficient is exactly zero even if a ≥ 0. a ≥ 0 with a nonzero coefficient fails closed. Numeric: a = −0.5, B = 0.4 recovers 0.2, distinct from unstandardised TIPREDEFFECT (0.4), from unit asymTIPREDEFFECT -B / a (0.8), from discreteTIPREDEFFECT at Δt = 1 (≈ 0.3148), and from Table 2 CINT when κ = B. Stored -B / a = 0.8 recovers original TIPREDEFFECT 0.4. Unstandardised TIPREDEFFECT is not this rewrite. A non-event clock fails closed.

Meredith (1993) remains unread (Unpaywall 2026-08-31T05:10Z: is_oa: false; Springer content/pdf is an HTML stub; escholarship hits are citations). 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 --all
  • cargo clippy -p psychometric_core --all-targets -- -D warnings
  • cargo test -p psychometric_core --lib (189)
  • cargo test -p psychometric_core --test multilevel_event_time_recovery_contract (108)
  • cargo test -p psychometric_core --test scientific_claim_boundary_contract (53)
  • RUSTDOCFLAGS='-D warnings' cargo doc -p psychometric_core --no-deps

Do not merge without independent non-author APPROVE + exact-head required-check success. Do not convert from draft. Do not self-approve.

…ECT rewrite on main

cran/ctsem 2.5.0 summary.ctsemFit.R forms if(asymptotes==TRUE)
TIPREDEFFECT <- -DRIFT %*% mxobj$TIPREDEFFECT$values when n.TIpred > 0.
Scalar -a · B. Form a first, then negate, then multiply by B. The rewrite
is the coefficient B, not Bz. Zero coefficient is exactly zero even if
a >= 0. a >= 0 with a nonzero coefficient fails closed. Numeric a=-0.5,
B=0.4 recovers 0.2. Distinct from unstandardised B, unit asymTIPREDEFFECT
-B/a, discreteTIPREDEFFECT, and Table 2 CINT. JSS PDF re-opened
2026-08-31T05:20Z. Independent on current main. Do not import unpublished
#318-#349 APIs.
@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

Queue-consolidation classification for the current recovery cycle: fold_into_landing_vehicle candidate — Longitudinal Psychometrics.

This PR overlaps #355 in the Driver/ctsem -a * B rewrite, but it is not safe to close either branch as a duplicate from title/equation similarity alone. Preserve this head's unique public naming, refusal guards, tests, doctoring, and documentation before folding into one current-main longitudinal landing vehicle. The eventual authority must compare both exact remote heads and retain the stronger published-example/recovery evidence without carrying unrelated architecture-row churn.

A separate crate or ADR number is not, by itself, a bounded-context boundary. The product boundary is the coherent Longitudinal Psychometrics model/recovery contract.

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