Skip to content

feat(psychometric): recover Driver p.16 MANIFESTTRAITVARstd after positive Ψ_τ - #208

Draft
seonghobae wants to merge 2 commits into
agent/psychometric-standardised-trait-variancefrom
agent/psychometric-standardised-manifest-trait-variance
Draft

feat(psychometric): recover Driver p.16 MANIFESTTRAITVARstd after positive Ψ_τ#208
seonghobae wants to merge 2 commits into
agent/psychometric-standardised-trait-variancefrom
agent/psychometric-standardised-manifest-trait-variance

Conversation

@seonghobae

Copy link
Copy Markdown
Contributor

Stacked on #207 (TRAITVARstd). Next licensed 2017-era summary.ctsemFit.R std after the trait matrices is MANIFESTTRAITVARstd.

Driver, Oud, and Voelkle (2017, Table 2, p. 12 MANIFESTTRAITVAR Ψ_τ; §7.1, p. 19; p. 16 suffix std; footnote 4; JSS PDF re-opened 2026-08-23T22:28Z) name manifest traits stable individual differences in indicator levels, distinct from process-level TRAITVAR. The 2017-era source forms MANIFESTTRAITVARstd only when MANIFESTTRAITVAR != 0:

MANIFESTTRAITVARdiag <- diag(diag(MANIFESTTRAITVAR), n.manifest) + diag(c(ridging), n.manifest)
MANIFESTTRAITVARstd <- solve(sqrt(MANIFESTTRAITVARdiag)) %&% MANIFESTTRAITVAR

OpenMx %&% is t(A) %*% B %*% A. Unlike TRAITVARstd, the 2017-era source does add diag(c(ridging)). The default ridging = FALSE adds 0, not 0.0001; that ridge is a numerical hack and is not this exact map. Scalar map after strictly positive MANIFESTTRAITVAR is ψ / ψ = 1.

Recovery

  • recover_standardised_manifest_trait_variance(ψ, clock) forms strictly positive ψ, then 1/√ψ, then the quadratic.
  • Distinct positive ψ recover the same 1 (to_bits equal).
  • Zero MANIFESTTRAITVAR fails closed (2017-era source skips forming MANIFESTTRAITVARstd).
  • Non-event clock fails closed.
  • MANIFESTTRAITVAR does not require a < 0.

Claim boundary

  • Unstandardised MANIFESTTRAITVAR is not MANIFESTTRAITVARstd.
  • TRAITVARstd is not MANIFESTTRAITVARstd even when both equal 1 (process-level vs indicator-level).
  • MANIFESTVAR θ is not MANIFESTTRAITVARstd.

Meredith (1993) and Mislevy (1991) remain closed (Unpaywall 2026-08-23T22:21Z: 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.

…itive Ψ_τ

Map indicator-level MANIFESTTRAITVAR through 2017-era
summary.ctsemFit.R as solve(sqrt(diag(MANIFESTTRAITVAR))) %&%
MANIFESTTRAITVAR after strictly positive ψ. OpenMx %&% is
t(A)%*%B%*%A; unlike TRAITVARstd the 2017-era source adds ridging
and the default ridge is 0. The scalar correlation is ψ/ψ = 1.
Refuse unstandardised MANIFESTTRAITVAR, TRAITVARstd even when both
equal 1, and MANIFESTVAR. MANIFESTTRAITVAR 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.

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