Skip to content

feat(psychometric): recover Driver p.16 TDPREDMEANSstd on main - #338

Draft
seonghobae wants to merge 2 commits into
mainfrom
agent/psychometric-tdpred-means-std-on-main
Draft

feat(psychometric): recover Driver p.16 TDPREDMEANSstd on main#338
seonghobae wants to merge 2 commits into
mainfrom
agent/psychometric-tdpred-means-std-on-main

Conversation

@seonghobae

Copy link
Copy Markdown
Contributor

Summary

psychometric_core recovers the Driver, Oud, and Voelkle (2017, p. 16) scalar TDPREDMEANSstd as μ_x / √v after strictly positive TDPREDVAR v.

This is an independent successor of queued TDPREDVARstd (#335) and discreteTDPREDEFFECTstd (#337). It does not depend on those unpublished crates. Table 2 names TDPREDMEANS the n.TDpred × Tpoints × 1 matrix of free means of time-dependent predictors and names TDPREDVAR the Cholesky of time-dependent predictor variance. Page 16 prints standardised matrices with the suffix std when appropriate. The printed example on p. 16 is discreteDRIFTstd, not TDPREDMEANSstd. Footnote 4 standardises using only the relevant variance, not the total. The relevant variance for that named predictor mean is TDPREDVAR v, not process-dynamics asymDIFFUSION -q / (2 a).

CRAN-era ctsem summary.ctsemFit.R comments out TDPREDVAR / TDPREDVARstd and does not form a TDPREDMEANSstd matrix. Page 22 does not report standardised TDPRED estimates when there is no modeled predictor variance. This crate therefore owns the footnote-4 standardisation of that named mean after a modeled v.

JSS PDF re-opened 2026-08-31T03:00Z from https://www.jstatsoft.org/index.php/jss/article/download/v077i05/1104.

Map

Form strictly positive v first, then divide μ_x by √v:

TDPREDMEANSstd = μ_x / √v

A zero mean is exactly zero. Overflow of the ratio fails closed.

Claim boundary

  • Unstandardised TDPREDMEANS μ_x is defined for a zero predictor variance and is not TDPREDMEANSstd.
  • TDPREDVARstd v / v = 1 recovers the same number when μ_x = √v and remains a distinct named quantity. This crate does not currently export TDPREDVARstd; the refuse still names that quantity.
  • μ_x / √asymDIFFUSION uses process-dynamics variance and is not this predictor map.

Event time only. Zero v has no positive SD and fails closed. TDPREDMEANS does not require stable a < 0. Negative means remain valid signed locations.

Still not a Kalman filter, not a matrix expm, not ESEM estimation, not DSEM, and not ctsem estimation.

Meredith (1993) remains unread (Unpaywall historically is_oa: false; Springer content/pdf is an HTML stub). Mislevy (1991, Psychometrika, 56, 177–196) remains unread on the same terms (DOI 10.1007/bf02294457).

Verification

  • cargo test -p psychometric_core (full crate, including the new unit, recovery, and claim-boundary tests)
  • cargo clippy -p psychometric_core --all-targets -- -D warnings
  • cargo fmt -p psychometric_core -- --check
  • RUSTDOCFLAGS='-D warnings' cargo doc -p psychometric_core --no-deps

Do not merge without independent non-author APPROVE and exact-head required-check success. Do not convert #310. Do not self-approve.

Recover the scalar footnote-4 map μ_x / √v after strictly positive
TDPREDVAR. Unstandardised TDPREDMEANS, TDPREDVARstd v/v=1, and
μ_x / √asymDIFFUSION remain distinct named quantities. Event time
only; v=0 fails closed; a<0 is not required. The 2017-era source
comments out TDPREDVAR/TDPREDVARstd and does not form TDPREDMEANSstd.
@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

Independent review requested on exact head 26e163a714886cb35dda4ee779328c2f059f7e6e. Do not self-approve. Do not merge without independent non-author APPROVE and exact-head required-check success.

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 31, 2026

Copy link
Copy Markdown

@seonghobae: I will review pull request #338 at exact head 26e163a714886cb35dda4ee779328c2f059f7e6e. I will not self-approve or merge it.

⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

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 82b02ccc); 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 368 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

Labels

enhancement New feature or request priority: medium

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant