Skip to content

feat(psychometric): recover Driver p.16 TIPREDVARstd after positive TIPREDVAR - #211

Draft
seonghobae wants to merge 4 commits into
agent/psychometric-standardised-manifest-variancefrom
agent/psychometric-standardised-time-independent-predictor-variance
Draft

feat(psychometric): recover Driver p.16 TIPREDVARstd after positive TIPREDVAR#211
seonghobae wants to merge 4 commits into
agent/psychometric-standardised-manifest-variancefrom
agent/psychometric-standardised-time-independent-predictor-variance

Conversation

@seonghobae

Copy link
Copy Markdown
Contributor

Stacked on #210 (MANIFESTVARstd). Next licensed 2017-era summary.ctsemFit.R std after the measurement-side matrices is TIPREDVARstd (predictor covariance; not addedTIPREDVAR).

Driver, Oud, and Voelkle (2017, Table 2, p. 12 TIPREDVAR; p. 16 suffix std; footnote 4; JSS PDF re-opened 2026-08-23T22:53Z) name TIPREDVAR the variance/covariance of time-independent predictors. The 2017-era source forms TIPREDVARstd whenever verbose = TRUE and n.TIpred > 0:

TIPREDVARdiag <- diag(diag(TIPREDVAR), n.TIpred) + diag(c(ridging), n.TIpred)
TIPREDVARstd <- solve(sqrt(TIPREDVARdiag)) %&% TIPREDVAR

OpenMx %&% is t(A) %*% B %*% A. Unlike TRAITVARstd, the 2017-era source does add diag(c(ridging), n.TIpred). The default ridging = FALSE adds 0, not 0.0001; that ridge is a numerical hack and is not this exact map. The 2017-era source assigns dimnames(TIPREDVARstd) to TIpredNames; that assignment matches the n.TIpred × n.TIpred matrix and is this map. Scalar map after strictly positive TIPREDVAR is v / v = 1.

Recovery

  • recover_standardised_time_independent_predictor_variance(v, clock) forms strictly positive v, then 1/√v, then the quadratic.
  • Distinct positive v recover the same 1 (to_bits equal).
  • Zero TIPREDVAR fails closed. Unlike TRAITVAR / MANIFESTTRAITVAR, the 2017-era source does not skip forming TIPREDVARstd when v = 0; solve(sqrt(0)) fails.
  • Non-event clock fails closed.
  • TIPREDVAR does not require a < 0.

Claim boundary

  • Unstandardised TIPREDVAR is not TIPREDVARstd.
  • MANIFESTVARstd is not TIPREDVARstd even when both equal 1 (measurement error vs predictor covariance).
  • Section 7.2 addedTIPREDVAR (B / a)² v is extra process variance, not TIPREDVARstd.

Meredith (1993) and Mislevy (1991) remain closed (Unpaywall re-checked this cycle: is_oa: false, 0 locations).

Do not merge without an independent APPROVE plus exact-head required-check success. Do not self-approve. Do not request Copilot.

…IPREDVAR

Map time-independent predictor TIPREDVAR through 2017-era
summary.ctsemFit.R as solve(sqrt(diag(TIPREDVAR))) %&%
TIPREDVAR after strictly positive v. OpenMx %&% is
t(A)%*%B%*%A; unlike TRAITVARstd the 2017-era source adds ridging
and the default ridge is 0. dimnames are TIpredNames. The scalar
correlation is v/v = 1. Zero v makes solve(sqrt(0)) fail and
fails closed. Refuse unstandardised TIPREDVAR, MANIFESTVARstd
even when both equal 1, and addedTIPREDVAR. TIPREDVAR does not
require a<0.
@coderabbitai

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

opencode-agent and others added 2 commits August 24, 2026 13:53
…ical form

- Cover the delegated non-finite coefficient propagation region of the
  standardised asymptotic effect recovery.
- Re-run the pinned rustfmt so import ordering and wrapped signatures
  match the repository's canonical formatting.
@seonghobae

Copy link
Copy Markdown
Contributor Author

Maintainer Verification — exact head cc281b57af46b0f6af497a33b837e20954d44428

  • Scope: fail-closed numerical edge coverage for event-time psychometric recovery; no production migration or dependency change.
  • Local toolchain: Rust 1.97.1; branch coverage used nightly-2026-08-01.
  • Verification: cargo fmt --all -- --check; workspace check/test; clippy; nextest; doctests; rustdoc; cargo deny check; Python quality coverage; workspace/docstring/documentation contracts — PASS.
  • Coverage: authored LCOV 4906/4906 (100%); branch 1842/1842 (100%).
  • Exact-head hosted state: this head was pushed normally after revalidating the prior remote head; no hosted check run had been published at comment time, so hosted evidence is not claimed as passed.
  • Review state: PR remains Draft and has no qualifying approval; no merge or bypass is authorized.
  • Decision: WAIT_AND_REMEDIATE until exact-head hosted checks and independent review are available.

…ve asymDIFFUSION (#212)

* feat(psychometric): recover Driver p.16 asymDIFFUSIONstd after positive asymDIFFUSION

Recover the 2017-era correlation of within-subject variance after
strictly positive Lyapunov p = -q/(2a). Distinct from DIFFUSIONstd -2a
and from TIPREDVARstd even when both equal 1.

* fix(psychometric): preserve standardised diffusion parity
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