Skip to content

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

Draft
seonghobae wants to merge 2 commits into
mainfrom
agent/psychometric-asymptotes-true-tipredeffect-20260831
Draft

seonghobae wants to merge 2 commits into
mainfrom
agent/psychometric-asymptotes-true-tipredeffect-20260831

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 companion of still-unmerged PR #349 (CINT <- -DRIFT %*% CINT as −a · κ). It branches from origin/main 1bc02f5, does not wait for #349, and is not stacked on draft PR #352. #352 used a different public name (recover_asymptotes_true_time_independent_predictor_effect), reserved register items 106–107 that collide with CINT #349, refused CINT instead of TIPREDEFFECTstd, and edited ARCHITECTURE.md mega-rows. This PR uses recover_asymptotes_true_time_independent_effect, items 108–109, and a standardised-TIPREDEFFECT refuse. Do not close #352 from this PR.

cran/ctsem 2.5.0 summary.ctsemFit.R forms if(asymptotes==TRUE) TIPREDEFFECT <- -DRIFT %*% TIPREDEFFECT immediately after mxobj$TIPREDEFFECT$values and puts that rewrite in the active outlist. Driver, Oud, and Voelkle (2017, Table 2, p. 12; Eq. 1, p. 4; Eq. 3, p. 5; p. 16; JSS PDF re-opened 2026-08-31T15:26Z from https://www.jstatsoft.org/index.php/jss/article/download/v077i05/1104) name B TIPREDEFFECT. Form a first, then negate, then multiply by B. When asymptotes=TRUE the stored TIPREDEFFECT is the asymptotic parameterization Table 2 / §7.2 names asymTIPREDEFFECT -B / a; multiplying by -DRIFT converts that stored value back to original B. −a · (-B / a) = 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 asymTIPREDEFFECT -B / a (0.8), from the finite-interval increment at Δt = 1 (≈ 0.3148), and from TIPREDEFFECTstd B · √v / √p (≈ 0.6325 when v = 1, p = 0.4). Stored -B / a = 0.8 recovers original B 0.4. LeisureTime printed asymTIPREDEFFECT = −1.673 with B = −0.225 reconstructs a and recovers original B; Happiness printed 0.219 with B = 0.549 does the same. Unstandardised B is not this rewrite. asymTIPREDEFFECT is not this rewrite. The finite-interval increment is not this rewrite. TIPREDEFFECTstd is not this rewrite. A non-event clock fails closed.

Meredith (1993) remains unread (Unpaywall historically is_oa: false; Springer content/pdf is an HTML stub). 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.

Plan

Fail-closed scalar recover_asymptotes_true_time_independent_effect(time_independent_effect, log_rate, clock) as −a · B on origin/main, with four refuse helpers (unstandardised B, asymTIPREDEFFECT, discrete increment, TIPREDEFFECTstd), five error variants, register items 108–109, CHANGELOG, ADR 0005, and crate/contract tests. Independent of #349 and #352.

Verification

  • cargo fmt --all
  • cargo clippy -p psychometric_core --all-targets -- -D warnings
  • cargo test -p psychometric_core --lib (194)
  • cargo test -p psychometric_core --test multilevel_event_time_recovery_contract (110)
  • cargo test -p psychometric_core --test scientific_claim_boundary_contract (53)
  • RUSTDOCFLAGS='-D warnings' cargo doc -p psychometric_core --no-deps

Closes #354

Register items 108–109.

Opened by: Grok Build (xAI) on behalf of Seongho Bae.

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

…ECT rewrite

Scalar −a · B from cran/ctsem 2.5.0 summary.ctsemFit.R
if(asymptotes==TRUE) TIPREDEFFECT <- -DRIFT %*% TIPREDEFFECT.
Register items 108–109. Independent of #349 and #352.

Closes #354
@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 #352 in the Driver/ctsem -a * B rewrite, but it also carries distinct public naming/guard/test/doctoring evidence. Do not close either source PR as a duplicate until a current-main Longitudinal Psychometrics landing vehicle compares both exact heads and preserves all unique evidence. The selected vehicle should keep the stronger named-quantity refusal and realistic published-example recovery coverage while removing redundant one-equation product boundaries.

Cargo crate/ADR granularity is implementation provenance, not automatic bounded-context ownership.

…t-20260831

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 f0c8c877); 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 374 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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Recover 2017-era active asymptotes=TRUE TIPREDEFFECT rewrite as −a · B

1 participant