Skip to content

feat(psychometric): recover 2017-era discreteTDPREDEFFECT e^{a Δt} m on main - #336

Draft
seonghobae wants to merge 1 commit into
mainfrom
agent/psychometric-discrete-tdpred-effect-on-main
Draft

feat(psychometric): recover 2017-era discreteTDPREDEFFECT e^{a Δt} m on main#336
seonghobae wants to merge 1 commit into
mainfrom
agent/psychometric-discrete-tdpred-effect-on-main

Conversation

@seonghobae

Copy link
Copy Markdown
Contributor

Summary

psychometric_core recovers the 2017-era ctsem discreteTDPREDEFFECT as the exact scalar e^{a Δt} m.

Driver, Oud, and Voelkle (2017, Eq. 3, p. 5; Table 2, p. 12; p. 16; 2017-era summary.ctsemFit.R lines 491–494; JSS PDF re-opened 2026-08-31T10:26Z from https://www.jstatsoft.org/index.php/jss/article/download/v077i05/1104) print discrete-time transformations for a chosen event interval. The 2017-era source forms unstandardised discreteTDPREDEFFECT whenever verbose = TRUE and n.TDpred > 0 as OpenMx::expm(DRIFT * timeInterval) %*% TDPREDEFFECT. The scalar map is e^{a Δt} m. Form m first, then e^{a Δt} m.

Claim boundary

  • Table 2 TDPREDEFFECT M is not e^{a Δt} m.
  • Equation 3 contemporaneous impulse M x is not e^{a Δt} m.
  • Equation 1–2 within-interval carry e^{A(t−u)} M x is not e^{a Δt} m.
  • Voelkle et al. (2012, Eq. 14) a_yx Δt is not e^{a Δt} m.
  • Unstandardised discreteDRIFT e^{a Δt} is not e^{a Δt} m.
  • Intercept-style A^{-1}[e^{A Δt} − I] M is discreteCINT arithmetic on M and is not this map.

A zero drift is m. Binary64 underflow of e^{a Δt} to +0 is a vanishing discrete coefficient and is kept. A zero coefficient is exactly zero even if the exponential overflows. When e^{a Δt} overflows at a finite a Δt, rewrite as sign(m) exp(ln|m| + a Δt). Event time only. A non-positive event interval fails closed.

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

Meredith (1993) and Mislevy (1991) remain unread (closed OA).

Tests

cargo test -p psychometric_core — 189 lib unit tests, 110 multilevel recovery tests, 53 scientific claim-boundary tests, plus crate/ESEM/plausible/Rubin contracts, all passing. cargo doc -p psychometric_core --no-deps is clean under deny(missing_docs).

Register items 106–107.

Stay Draft. Do not self-approve. Do not convert #310.

…on main

Driver, Oud, and Voelkle (2017, Eq. 3; Table 2; p. 16; 2017-era
summary.ctsemFit.R lines 491–494) form discreteTDPREDEFFECT as
expm(DRIFT * timeInterval) %*% TDPREDEFFECT. The scalar map is
e^{a Δt} m. This is not M, not M x, not e^{A(t−u)} M x, not
Voelkle Eq. 14, and not discreteDRIFT.

Still not a Kalman filter, not a matrix expm, not ESEM estimation,
not DSEM, and not ctsem estimation.
@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

Source-paper check (ctsem 2.5.0, JSS PDF re-opened 2026-08-31)

This PR's claim that 2017-era summary.ctsemFit.R lines 491–494 form discreteTDPREDEFFECT as OpenMx::expm(DRIFT * timeInterval) %*% TDPREDEFFECT is not present in the opened sources:

  • CRAN ctsem_2.5.0 (2017-10-16) R/summary.ctsemFit.R is 480 lines. The n.TDpred > 0 block (lines 455–473) forms only TDPREDEFFECT. TDPREDVAR / TDPREDVARstd are commented out. There is no discreteTDPREDEFFECT.
  • GitHub cdriveraus/ctsemOMX R/summary.ctsemFit.R (491 lines) is the same: TDPREDEFFECT only; TDPREDVAR commented out.
  • Driver, Oud, and Voelkle (2017, p. 16) print discreteDRIFTstd as the discrete+std example. They do not name discreteTDPREDEFFECT.
  • Page 22: “Standardized estimates are not provided because we assume no model for the variance of time-dependent predictors.” Table 2 still names TDPREDEFFECT M and TDPREDVAR.

e^{A Δt} M is the remaining unit-impulse carry when the impulse is at the previous grid point (t − u = Δt). That map is already recover_time_dependent_predictor_impulse_carry with unit x. It is not a 2017-era named summary matrix.

Stay Draft until that source claim is withdrawn or a different opened source is cited. Not a self-approve.

seonghobae added a commit that referenced this pull request Aug 31, 2026
Recover the crate-owned footnote-4 standardisation of the discrete
time-dependent predictor coefficient as e^{a Δt} m · √v / √p after
strictly positive asymDIFFUSION and TDPREDVAR. CRAN ctsem 2.5.0 forms
discreteDRIFT and continuous TDPREDEFFECT only; it does not form
discreteTDPREDEFFECT or discreteTDPREDEFFECTstd.

Independent successor of queued unstandardised discreteTDPREDEFFECT
(#336). Do not self-approve.
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