From e6730d959d49683c5a854091ac2208e285a44fca Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sun, 30 Aug 2026 21:04:50 +0000 Subject: [PATCH] =?UTF-8?q?feat(psychometric):=20recover=20Driver=20Eq.=20?= =?UTF-8?q?5=20of=20T0TOTALVAR=20after=20addedT0TIPREDVAR=20with=20=CF=88?= =?UTF-8?q?=20as=20=CE=BB=C2=B2=20(t0=5Ftrait=C2=B2=20=C2=B7=20trait=20+?= =?UTF-8?q?=20p=5F0=20+=20t0=5Fb=C2=B2=20v)=20+=20=CE=B8=20+=20=CF=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit One named Driver quantity on current main. Form extra then add free T0VAR, then form t0_b² v inline, then recover_manifest_trait_plus_state_observed_variance. Independent of unpublished #329 recover_initial_total_observed_variance_with_time_independent_predictor, #328 recover_initial_total_observed_variance, #326 T0TOTALVARstd, and #325 Eq. 5 of addedT0TIPREDVAR. --- CHANGELOG.md | 2 + CLAUDE.md | 2 +- crates/psychometric_core/src/error.rs | 70 +++ crates/psychometric_core/src/event_time.rs | 566 +++++++++++++++++- crates/psychometric_core/src/lib.rs | 23 + ...multilevel_event_time_recovery_contract.rs | 171 +++++- .../scientific_claim_boundary_contract.rs | 110 +++- docs/adr/0005-posterior-esem-dsem.md | 1 + .../multilevel-event-time-recovery.md | 8 +- 9 files changed, 921 insertions(+), 32 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 062a69412..5b610fcba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,8 @@ All notable changes to TEPP are documented here. The format follows Keep a Chang ## [Unreleased] +- `psychometric_core` recovers Driver Eq. 5 of 2017-era `T0TOTALVAR` after `addedT0TIPREDVAR` with nonzero `MANIFESTTRAITVAR` as `λ² (t0_trait² · trait + p_0 + t0_b² v) + θ + ψ` on event time (`recover_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait`), refusing the latent total, Eq. 5 of that total without `ψ`, `MANIFESTVAR` `θ`, `MANIFESTTRAITVAR` `ψ`, and `T0TOTALVARstd`. + - `event_core` adds bounded Allen interval-consistency classification, atomic path-consistency closure, contradiction/resource refusals, and an explicit dependency-error fallback without claiming unrestricted global satisfiability. - `psychometric_core` recovers the Driver, Oud, and Voelkle (2017, Table 2, p. 12 `MANIFESTTRAITVAR`; §7.1, p. 19; p. 16 `MANIFESTTRAITVARstd`; footnote 4; 2017-era ctsem `summary.ctsemFit.R`; JSS PDF re-opened 2026-08-27T14:20Z from https://www.jstatsoft.org/index.php/jss/article/download/v077i05/1104) scalar standardised manifest-trait variance on current main after `0ce16e8` dropped the pre-consolidation code while research notes already named the map (register items 83–84). Table 2 names `MANIFESTTRAITVAR` `Ψ_τ` the additional time-invariant variance-covariance on the measurement level and sets it `NULL` when there is no manifest trait. Equation 5 writes `Γ ~ N(τ, Ψ)` and names that covariance the manifest traits. Section 7.1 names manifest traits stable individual differences in indicator levels, distinct from process-level `TRAITVAR` `φ_ξ`. Page 16 prints standardised matrices with the suffix `std` when appropriate. The printed example on p. 16 is `discreteDRIFTstd`, not `MANIFESTTRAITVARstd`. Footnote 4 standardises using only the relevant variance, not the total. The relevant variance for that named indicator-level correlation is `MANIFESTTRAITVAR`, not process-level `TRAITVAR` and not residual `MANIFESTVAR` `θ`. The 2017-era source forms `MANIFESTTRAITVARstd` only when `MANIFESTTRAITVAR != 0`, as `solve(sqrt(diag(MANIFESTTRAITVAR) + ridging)) %&% MANIFESTTRAITVAR` when `verbose = TRUE`. OpenMx `%&%` is `t(A) %*% B %*% A`. Unlike `TRAITVARstd`, that formation adds `diag(c(ridging), n.manifest)`. The default `ridging = FALSE` adds 0, not `0.0001`; that ridge is a numerical hack and is not this exact map. The scalar correlation is `ψ / ψ = 1` after strictly positive `MANIFESTTRAITVAR`. Form strictly positive `ψ` first, then `1 / √ψ`, then `(1 / √ψ) ψ (1 / √ψ)`. Unstandardised `MANIFESTTRAITVAR` is defined for a zero trait; standardised `MANIFESTTRAITVAR` is not. Zero `MANIFESTTRAITVAR` skips forming `MANIFESTTRAITVARstd` in the 2017-era source and fails closed here. Indicator-level trait variance is an event-time structural quantity, so a non-event clock fails closed. `MANIFESTTRAITVAR` does not require stable `a < 0`. Distinct positive `ψ` recover the same 1. `trait / trait = 1` is `TRAITVARstd` and recovers the same number and remains a distinct named quantity. `θ` is `MANIFESTVAR` and is measurement error, not this correlation. Meredith (1993) remains unread (web search 2026-08-27T14:20Z: Springer/Cambridge Core paywalled; 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`). Still not a Kalman filter, not a matrix `expm`, not ESEM estimation, not DSEM, and not ctsem estimation. diff --git a/CLAUDE.md b/CLAUDE.md index 339692cf0..8ef2948b4 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -15,7 +15,7 @@ Read and follow `AGENTS.md` before changing this repository. The repository-wide - Do not remove repeated report language with global stopword lists or use TF-IDF/BM25 as inferential weights. Model template, section, copied-text, style, modality, and corpus-background sources explicitly. - Do not treat raw topic proportions as ordinary Euclidean indicators. Use logistic-normal coordinates or valid log-ratio coordinates and propagate posterior uncertainty into ESEM/DSEM. - Do not treat metric/weak invariance as a latent-mean license. Strong (equal loading and intercept) or strict is required; `#84` `metric` licenses shared metric meaning only. Putnick and Bornstein (2016, PMC5145197 opened 2026-08-19T22:15Z) require scalar invariance before latent-mean comparison; residual invariance is not a prerequisite. Two-observation series have no residual degrees of freedom (`ordinary_least_squares_fit` returns residual variance `0`) and cap at strong/scalar; they still license means. This is two-group OLS, not MGCFA. Meredith (1993) names remain unread labels (Unpaywall/OpenAlex 2026-08-25T11:32Z: closed). -- Do not use the difference quotient as a continuous-time rate. The scalar map is `a = ln(φ) / Δt` on event time. Discrete lags from unequal event intervals are not one coefficient; remap them through that log-rate. Binary64 `exp(a Δt) = 0` is not a discrete lag. A constant predictor's discrete effect is Voelkle et al. (2012, Eq. 12), evaluated as `a_yx (expm1(z) / a_xx)` with `z = a_xx Δt` so a finite result is not lost when `z` overflows to `-∞` or when `a_yx Δt` overflows. When `expm1(z)` overflows at a finite `z`, rewrite in log space; a zero continuous effect is exactly zero; an overflowing `a_yx/a_xx` rewrite term fails closed. The first-order product is the underflow limit of that equation, not the general constant-predictor discrete effect. A time-varying predictor whose sampling interval equals its constancy interval uses Voelkle et al. (2012, Eq. 14): `b* = a_yx Δt`. Unmatched intervals fail closed (Oud & Jansen, 2000, unread). Discrete process noise is Driver et al. (2017, Eq. 3): `Q_Δt = 0.5 q (expm1(z) / a)` with `z = 2 (a Δt)` and `q = G G⊤ ≥ 0`; do not form `2 a` first; `a = 0` and `z → 0` recover `q Δt`; a zero diffusion is exactly zero; an overflowing rewrite scale `0.5 q / a` fails closed; this is not a Kalman filter. `Q_Δt` is `cov(η_t | η_{t-1})`, not `Var(η_t)`. The lagged covariance is `exp(a Δt) p` and the unconditional variance is `exp(2 a Δt) p + Q_Δt` (Driver et al., 2017, Eq. 3–4, pp. 4–5; JSS has no numbered §2.2). A zero diffusion whose `2 (a Δt)` overflows to `+∞` is not a finite `Var(η_t)`. The stationary within-subject variance is the `Δt → ∞` limit of Eq. 4: `-q / (2 a)` for stable `a < 0` (JSS p. 16 `asymDIFFUSION`; §4.3). When `2 a` is finite, form `q / -(2 a)` so `q / a` overflow does not lose a finite result (`q = MAX`, `a = -0.75` → `MAX / 1.5`). When `2 a` overflows, form `(q / a) * -0.5`. Do not form `0.5 q` first (`q = from_bits(1)` underflows). `a ≥ 0` has no finite stationary variance. Finite-interval `Q_Δt` is not that limit. Trait-plus-state variance is `trait + state` and lagged covariance is `trait + exp(a Δt) p` (Driver et al., 2017, §4.3, p. 9). Trait variance is not process noise and not `asymDIFFUSION`. Evolving the summed variance as if it were all state is not that map. This is not RI-CLPM. Observed-indicator variance is `λ² Var(η) + θ` when `MANIFESTTRAITVAR` is zero and `λ² Var(η) + θ + ψ` otherwise (Driver et al., 2017, Eq. 5, p. 5; Table 2, p. 12). Lagged observed covariance is `λ² cov(η_t, η_{t-1}) + ψ`; `MANIFESTVAR` does not enter. Observed-indicator mean is `τ + λ μ` (Driver et al., 2017, Eq. 5; Table 2, p. 12). `MANIFESTMEANS` is `τ`, not `E(y)`. `E(η)` is not `E(y)`. `CINT` is not `MANIFESTMEANS`. `T0MEANS` is not `E(y)`. The discrete latent mean is `μ_t = exp(a Δt) μ_0 + (exp(a Δt) − 1)/a κ` (Driver et al., 2017, Eq. 3, p. 4; Table 2, p. 12). `T0MEANS` is not `μ_t`. `CINT` is not that discrete increment. A zero drift is `κ Δt`. Underflow of `exp(a Δt)` to `+0` drops the carried `T0MEANS` and keeps `−κ / a`. The evolved observed mean is `τ + λ μ_t` (Driver et al., 2017, Eq. 5 of that Eq. 3 map). The first-occasion map `τ + λ μ_0` is not `E(y_t)`. `μ_t` is not `E(y_t)`. The contemporaneous time-dependent predictor impulse is `m x` (Driver et al., 2017, Eq. 3 fourth summand; Table 2 `TDPREDEFFECT` is `M`). Form `μ_t` first, then add `m x`. `TDPREDEFFECT` is not `CINT`. `M x` is not `A^{-1}[e^{A Δt} − I] B z` and is not Voelkle et al. (2012, Eq. 14). The §7.2 level-change form is not that impulse. The observed mean of that contemporaneous impulse is `τ + λ(μ_t + m x)` (Driver et al., 2017, Eq. 5 of the Eq. 3 fourth-summand composition). The evolved map `τ + λ μ_t` is not that observed mean. The carry map `τ + λ(μ_t + e^{a(t−u)} m x)` is not that observed mean when `u ≠ t`. The evolved-plus-impulse latent mean is not `E(y_t)`. The time-independent predictor increment is `A^{-1}[e^{A Δt} − I] B z` (Driver et al., 2017, Eq. 3 second summand; Table 2 `TIPREDEFFECT` is `B`). Form `B z` first, then the discrete intercept map. A zero drift is `B z Δt`. `TIPREDEFFECT` is `B`, not that discrete increment. `A^{-1}[e^{A Δt} − I] B z` is not `CINT`, not `M x`, and not Voelkle et al. (2012, Eq. 14). The observed mean of that increment is `τ + λ(μ_t + A^{-1}[e^{A Δt} − I] B z)` (Driver et al., 2017, Eq. 5 of the Eq. 3 printed addend after the `T0MEANS` carry and the `CINT` increment). The evolved map `τ + λ μ_t` is not that observed mean. The contemporaneous map `τ + λ(μ_t + m x)` is not that observed mean. The carry map `τ + λ(μ_t + e^{a(t−u)} m x)` is not that observed mean when `u ≠ t`. The evolved-plus-increment latent mean is not `E(y_t)`. The within-interval time-dependent impulse carry is `e^{A(t−u)} M x` for `t0 < u < t` (Driver et al., 2017, Eq. 1–2 Green-function integral of Eq. 2; §7.2 dissipation). Form `m x` first, then `e^{a(t−u)} m x`. A zero drift is `m x` with no dissipation. Underflow of `e^{a(t−u)}` to `+0` is vanishing dissipation and is kept. `e^{A(t−u)} M x` is not the contemporaneous Dirac, not `CINT`, not `TIPREDEFFECT`, and not Voelkle et al. (2012, Eq. 14). An impulse at `u = t` is the contemporaneous map. An impulse at `u ≤ t0` is already in `η(t0)`. The observed mean of that carry is `τ + λ(μ_t + e^{a(t−u)} m x)` (Driver et al., 2017, Eq. 5 of the Eq. 1–2 carried latent mean). The evolved map `τ + λ μ_t` is not that observed mean. The contemporaneous map `τ + λ(μ_t + m x)` is not that observed mean when `u ≠ t`. `MANIFESTMEANS` is not `E(y_t)`. The carried latent mean is not `E(y_t)`. The first-occasion time-independent predictor shift is `t0_b z` (Driver et al., 2017, Table 3 `T0TIPREDEFFECT`; Eq. 3 first summand). Form `t0_b z` first, then `e^{a Δt} t0_b z`. Form `μ_t` first, then add that carry. A zero drift is `t0_b z`. Underflow of `e^{a Δt}` to `+0` is a vanishing carry of the first-occasion shift and is kept. `t0_b z` is not `A^{-1}[e^{A Δt} − I] B z`, not `CINT`, and not `M x`. `e^{A Δt} t0_b z` is not `t0_b z`. `T0TIPREDEFFECT` is the coefficient, not the shift. The observed mean of that first-occasion carry is `τ + λ(μ_t + e^{a Δt} t0_b z)` (Driver et al., 2017, Eq. 5 of the Table 3 / Eq. 3 first-summand composition). The evolved map `τ + λ μ_t` is not that observed mean. The process-increment map `τ + λ(μ_t + A^{-1}[e^{A Δt} − I] B z)` is not that observed mean. The contemporaneous map `τ + λ(μ_t + m x)` is not that observed mean. The impulse-carry map `τ + λ(μ_t + e^{a(t−u)} m x)` is not that observed mean when `u ≠ t0`. The evolved-plus-carry latent mean is not `E(y_t)`. The first-occasion time-dependent predictor shift is `t0_m x0` (Driver et al., 2017, Table 3 `T0TDPREDEFFECT`; Eq. 3 first summand; JSS PDF re-opened 2026-08-20T19:10Z). Form `t0_m x0` first, then `e^{a Δt} t0_m x0`. Form `μ_t` first, then add that carry. A zero drift is `t0_m x0`. Underflow of `e^{a Δt}` to `+0` is a vanishing carry of the first-occasion shift and is kept. `t0_m x0` is not `M x`, not `e^{A(t−u)} M x` for `t0 < u < t`, not `t0_b z`, not `A^{-1}[e^{A Δt} − I] B z`, and not `CINT`. `e^{A Δt} t0_m x0` is not `t0_m x0`. `T0TDPREDEFFECT` is the coefficient, not the shift. An impulse at `u ≤ t0` that used `M` is already in `η(t0)` as `TDPREDEFFECT`, not as `T0TDPREDEFFECT`. The observed mean of that first-occasion TD carry is `τ + λ(μ_t + e^{a Δt} t0_m x0)` (Driver et al., 2017, Eq. 5 of the Table 3 / Eq. 3 first-summand TD composition; JSS PDF re-opened 2026-08-20T19:07Z). The evolved map `τ + λ μ_t` is not that observed mean. The process-increment map `τ + λ(μ_t + A^{-1}[e^{A Δt} − I] B z)` is not that observed mean. The contemporaneous map `τ + λ(μ_t + m x)` is not that observed mean. The impulse-carry map `τ + λ(μ_t + e^{a(t−u)} m x)` is not that observed mean when `u ≠ t0`. The first-occasion TI map `τ + λ(μ_t + e^{a Δt} t0_b z)` is not that observed mean. The evolved-plus-carry latent mean is not `E(y_t)`. The lasting level-change `CINT` is `κ = −a m x` (Driver et al., 2017, §7.2, pp. 20–21; JSS PDF re-opened 2026-08-20T19:45Z). Form `m x` first, then multiply by `−a`. Stable `a < 0` is required so `−κ / a = m x` is an equilibrium offset. `a ≥ 0` cannot hold a new process mean. `−a m x` is not the dissipating Dirac `m x`, not a free `CINT`, and not `A^{-1}[e^{A Δt} − I] B z`. The extra near-zero-drift latent process also named in §7.2 is a different specification and is not this `CINT` setting. Equation 3 maps that intercept as `(1 − e^{a Δt}) m x` (JSS PDF re-opened 2026-08-20T19:50Z). Form the level-change `CINT` first, then the discrete intercept map. Underflow of `e^{a Δt}` to `+0` keeps `m x`. `(1 − e^{a Δt}) m x` is not `m x`, not `κ`, and not `A^{-1}[e^{A Δt} − I] B z`. The printed §7.2 lasting level change is an extra near-zero-drift latent process (Driver et al., 2017, §7.2, pp. 22–23; JSS PDF re-opened 2026-08-20T23:10Z). `T0MEANS`, `CINT`, `T0VAR`, `DIFFUSION`, and `TRAITVAR` of that process are fixed to 0; `TDPREDEFFECT` on it is fixed to 1; its `DRIFT` diagonal is very close to 0 (printed example `−0.000001`; precisely 0 causes computational problems); the original process is driven by the `DRIFT` coupling `a_{ηξ}`. After a unit identification impulse the scalar contribution is `a_{ηξ} x (e^{ε Δt} − e^{a Δt}) / (ε − a)` (`ε = a` is `a_{ηξ} x Δt e^{a Δt}`). Form `a_{ηξ} x` first. A zero coupling or zero predictor is exactly zero. `ε ≥ 0` fails closed. That contribution is not `κ = −a m x`, not `(1 − e^{a Δt}) m x`, and not the dissipating Dirac `m x`. The observed mean of that extra-process contribution is `τ + λ(μ_t + a_{ηξ} x (e^{ε Δt} − e^{a Δt}) / (ε − a))` (Driver et al., 2017, Eq. 5 of that §7.2 contribution; JSS PDF re-opened 2026-08-21T06:12Z). The extra process has `LAMBDA` 0 and is not an observed indicator. Original indicators load on the original process after the `DRIFT` coupling. The evolved map `τ + λ μ_t` is not that observed mean. The contemporaneous map `τ + λ(μ_t + m x)` is not that observed mean. The contribution is not `E(y_t)`. The evolved-plus-contribution latent mean is not `E(y_t)`. `T0TDPREDEFFECT` on the extra process begins at `t = 0` and uses `Δt = t − t0` for both the original-process evolution and the extra drive. `TDPREDEFFECT` after `t0` uses `t − u` with `t0 < u < t` for the extra drive while `μ_t` still uses `Δt`. The observed mean of that after-t0 extra-process contribution is `τ + λ(μ_t + a_{ηξ} x (e^{ε(t−u)} − e^{a(t−u)}) / (ε − a))` (Driver et al., 2017, Eq. 5 of that §7.2 after-t0 contribution; JSS PDF re-opened 2026-08-21T06:32Z). The first-occasion extra-process observed mean is not that observed mean when `u ≠ t0`. The impulse-carry map `τ + λ(μ_t + e^{a(t−u)} m x)` is a Dirac on the original process and is not that `DRIFT` drive. An impulse at `u = t0` or `u = t` is not interior. The asymptotic time-independent predictor effect is `-B z / a` (Driver et al., 2017, §7.2, pp. 20–21; JSS PDF opened 2026-08-21T13:08Z). Form `B z` first, then divide by `-a`. Stable `a < 0` is required. `a ≥ 0` cannot hold a finite process-mean change. `-B z / a` is not the coefficient `B`, not `A^{-1}[e^{A Δt} − I] B z`, not `CINT`, and not `M x`. The asymptotic time-independent predictor variance is `(B / a)² v` (Driver et al., 2017, §7.2, pp. 20–21 `addedTIPREDVAR`). Form the unit asymptotic effect first, then square, then multiply by `v`. `(B / a)² v` is not `TRAITVAR`, not `asymDIFFUSION`, and not `-B z / a`. The asymptotic continuous intercept is `-κ / a` (Driver et al., 2017, Table 2, p. 12 `asymCINT`; Eq. 3 as `Δt → ∞`; JSS PDF opened 2026-08-21T16:13Z). Form `κ` first, then divide by `-a`. Stable `a < 0` is required. `-κ / a` is not `κ`, not `A^{-1}[e^{A Δt} − I] κ`, not `T0MEANS`, and not `-B z / a`. The p. 16 stationary `T0MEANS` constraint is `-κ / a + −B z / a`. Form the intercept contribution first, then include the TI extra effect, then add. That constrained first-occasion mean is not free `T0MEANS`, not `asymCINT` alone, not `asymTIPREDEFFECT` alone, and not the finite-interval discrete latent mean. Equation 5 of that constrained mean is `τ + λ(−κ / a + −B z / a)` (Driver et al., 2017, §4.3, pp. 9–10; Eq. 5, p. 5; JSS PDF re-opened 2026-08-21T20:07Z). Form the stationary latent mean first, then `τ + λ` of that mean. `τ + λ μ_0` for free `T0MEANS` is not that composition. `τ + λ(−κ / a)` is not that composition when `B z ≠ 0`. `τ + λ μ_t` is not that composition. `MANIFESTMEANS` is not `E(y_0)`. The constrained latent mean is not `E(y_0)`. The p. 16 constrained first-occasion variance `trait + −q / (2 a) + (B / a)² v` is not free `T0VAR`, not `asymDIFFUSION` alone, not `TRAITVAR` alone, not `addedTIPREDVAR` alone, and not the finite-interval discrete latent variance. Eq. 5 of that constrained variance is `λ²(trait + −q / (2 a) + (B / a)² v) + θ + ψ` (JSS PDF re-opened 2026-08-22T03:20Z; form the stationary latent variance first, then `λ² p + θ + ψ`; `λ² p_0` is not that observed variance; `λ²(−q / (2 a)) + θ` is not that observed variance when `TRAITVAR` or `addedTIPREDVAR` is nonzero; `MANIFESTVAR` is not `Var(y_0)`; the constrained latent variance is not `Var(y_0)`). The lagged covariance of that constrained process is `trait + e^{a Δt}(−q / (2 a)) + (B / a)² v` (Driver et al., 2017, Eq. 3–4 of §4.3 / p. 16 `T0VAR`; JSS PDF re-opened 2026-08-22T19:13Z). Trait and `addedTIPREDVAR` do not decay with `e^{a Δt}`. Contemporaneous `T0VAR` is not that lagged map. Decaying the constrained total as if it were all state is not that lagged map. Equation 5 of that lagged covariance is `λ²(trait + e^{a Δt}(−q / (2 a)) + (B / a)² v) + ψ`. `Θ` does not enter. Contemporaneous `Var(y_0)` is not that lagged observed covariance. The lagged latent covariance is not that observed covariance. The later-occasion variance of that constrained process is `trait + e^{2 a Δt}(−q / (2 a)) + Q_Δt + (B / a)² v` (Driver et al., 2017, Eq. 3–4 of §4.3 / p. 16 `T0VAR`; JSS PDF re-opened 2026-08-22T23:12Z). Trait and `addedTIPREDVAR` do not enter `Q_Δt`. Under stationarity that composition equals contemporaneous `T0VAR`. Evolving the constrained total as if it were all state is not that later map. The lagged covariance omits `Q_Δt` and is not that later map. `Q_Δt` is not that later map. Equation 5 of that later-occasion variance is `λ²(trait + e^{2 a Δt}(−q / (2 a)) + Q_Δt + (B / a)² v) + θ + ψ`. The lagged observed covariance omits `Q_Δt` and `θ`. `MANIFESTVAR` is not `Var(y_t)`. The later-occasion latent variance is not `Var(y_t)`. The later-occasion variance of §4.3 predetermined `T0VAR` is `trait + e^{2 a Δt} p_0 + Q_Δt + (B / a)² v` (Driver et al., 2017, Eq. 3–4 of §4.3 predetermined first occasion; JSS PDF re-opened 2026-08-23T05:12Z). Trait and `addedTIPREDVAR` do not enter `Q_Δt`. Free `T0VAR` `p_0` is not that later map. Setting `p_0 = −q / (2 a)` recovers the stationary later-occasion map. Stationary later variance uses `−q / (2 a)` in place of `p_0` and is not that later map when `p_0` is free. Evolving `trait + p_0 + (B / a)² v` as if it were all state is not that later map. As `Δt → ∞` with stable `a < 0` the composition approaches contemporaneous stationary `T0VAR`. As `Δt → 0+` the composition approaches `trait + p_0 + (B / a)² v`. Nonzero diffusion with `a ≥ 0` is a growing process and is kept. Equation 5 of that predetermined later-occasion variance is `λ²(trait + e^{2 a Δt} p_0 + Q_Δt + (B / a)² v) + θ + ψ`. `MANIFESTVAR` is not `Var(y_t)`. The predetermined later-occasion latent variance is not `Var(y_t)`. Stationary later observed variance is not that observed variance when `p_0` is free. The lagged covariance of §4.3 predetermined `T0VAR` is `trait + e^{a Δt} p_0 + (B / a)² v` (Driver et al., 2017, Eq. 3–4 of §4.3 predetermined first occasion; JSS PDF re-opened 2026-08-23T09:04Z). Trait and `addedTIPREDVAR` do not decay with `e^{a Δt}`. Free `T0VAR` `p_0` is not that lagged map. Setting `p_0 = −q / (2 a)` recovers the stationary lagged map. Stationary lagged covariance uses `−q / (2 a)` in place of `p_0` and is not that lagged map when `p_0` is free. Evolving `trait + p_0 + (B / a)² v` as if it were all state is not that lagged map. Later-occasion variance includes `Q_Δt` and is not that lagged map. As `Δt → ∞` with stable `a < 0` the state term vanishes. As `Δt → 0+` the composition approaches `trait + p_0 + (B / a)² v`. Equation 5 of that predetermined lagged covariance is `λ²(trait + e^{a Δt} p_0 + (B / a)² v) + ψ`. `MANIFESTVAR` does not enter. The predetermined lagged latent covariance is not that observed covariance. Predetermined later observed variance includes `Q_Δt` and `θ` and is not that lagged observed covariance. Stationary lagged observed covariance is not that observed covariance when `p_0` is free. The predetermined first-occasion variance of §4.3 predetermined `T0VAR` is `trait + p_0 + (B / a)² v`. Free `p_0` is not that map. Stationary first-occasion variance uses `−q / (2 a)` in place of `p_0` and is not that map when `p_0` is free. Lagged covariance decays the state and is not that map. Later-occasion variance includes `Q_Δt` and is not that map. Equation 5 of that predetermined first-occasion variance is `λ²(trait + p_0 + (B / a)² v) + θ + ψ`. `MANIFESTVAR` is not that first-occasion observed variance. The predetermined first-occasion latent variance is not that observed variance. Stationary first-occasion observed variance is not that observed variance when `p_0` is free. Predetermined later observed variance includes `Q_Δt` and is not that first-occasion observed variance. Later-start lagged covariance of predetermined `T0VAR` is `trait + e^{a s}(e^{2 a u} p_0 + Q_u) + (B / a)² v` (Driver et al., 2017, §4.3 `startoffset`; Eq. 4; JSS PDF re-opened 2026-08-23T10:27Z). First-occasion lagged omits `e^{a s} Q_u`. Later-occasion variance does not lag. Stationary lagged uses `−q / (2 a)`. Decaying the later total is not that map. Equation 5 of that later-start lagged covariance is `λ²` of it plus `ψ`. Independent `ε_t` does not enter. First-occasion lagged observed omits `e^{a s} Q_u`. Predetermined later observed variance includes `Q_u` and `θ` and is not that later-start lagged observed covariance. Later-start later-occasion variance of predetermined `T0VAR` is `trait + e^{2 a s}(e^{2 a u} p_0 + Q_u) + Q_s + (B / a)² v` (Driver et al., 2017, §4.3 `startoffset`; Eq. 3–4 Chapman–Kolmogorov `Q_{u+s} = e^{2 a s} Q_u + Q_s`; JSS PDF re-opened 2026-08-23T11:05Z). Later-occasion variance at `u` omits `Q_s`. Later-start lagged covariance omits `Q_s`. Stationary later uses `−q / (2 a)`. Evolving the later total as if it were all state is not that map. Ignoring `startoffset` omits `e^{2 a s} Q_u`. Equation 5 of that later-start later-occasion variance is `λ²` of it plus `θ + ψ`. `MANIFESTVAR` is not that observed variance. Page 16 `discreteDRIFTstd` is `e^{a Δt}` after strictly positive `asymDIFFUSION` `-q / (2 a)` (Driver et al., 2017, p. 16; footnote 4; §7.1; JSS PDF re-opened 2026-08-23T11:40Z). Unstandardised `e^{a Δt}` is defined for growing `a ≥ 0` and for zero diffusion and is not `discreteDRIFTstd`. The §7.1 trait-plus-state autocorrelation `(trait + e^{a Δt} p + added) / (trait + p + added)` uses `TRAITVAR` and is not `discreteDRIFTstd`. `TRAITVAR` is not the standardisation variance. Page 16 `discreteDIFFUSIONstd` is `Q_Δt / (−q / (2 a))` after strictly positive `asymDIFFUSION` `-q / (2 a)` (Driver et al., 2017, p. 16; Eq. 4; footnote 4; JSS PDF re-opened 2026-08-23T13:06Z). Unstandardised `Q_Δt` is defined for growing `a ≥ 0` and for zero diffusion and is not `discreteDIFFUSIONstd`. The continuous standardisation `−2 a` is not `discreteDIFFUSIONstd`. `Q_Δt / (trait + p + added)` uses `TRAITVAR` and is not `discreteDIFFUSIONstd`. `TRAITVAR` is not the standardisation variance. Page 16 `DIFFUSIONstd` is `q / (−q / (2 a)) = −2 a` after strictly positive `asymDIFFUSION` `-q / (2 a)` (Driver et al., 2017, p. 16; Eq. 4; footnote 4; JSS PDF re-opened 2026-08-23T13:20Z). Unstandardised `q` is defined for growing `a ≥ 0` and for zero diffusion and is not `DIFFUSIONstd`. The discrete standardisation `Q_Δt / (−q / (2 a))` depends on `Δt` and is not `DIFFUSIONstd`. `q / (trait + p + added)` uses `TRAITVAR` and is not `DIFFUSIONstd`. `TRAITVAR` is not the standardisation variance. Page 16 `DRIFTstd` is the continuous auto-effect after strictly positive `asymDIFFUSION` `-q / (2 a)` (Driver et al., 2017, p. 16; Eq. 1; footnote 4; JSS PDF re-opened 2026-08-23T13:28Z). Unstandardised `a` is defined for growing `a ≥ 0` and for zero diffusion and is not `DRIFTstd`. The discrete standardisation `e^{a Δt}` depends on the event interval and is not `DRIFTstd`. `a p / (trait + p + added)` uses `TRAITVAR` and is not `DRIFTstd`. `TRAITVAR` is not the standardisation variance. Page 16 `asymTIPREDEFFECTstd` is `(-B / a) · √v / √(-q / (2 a))` after strictly positive `asymDIFFUSION` `-q / (2 a)` and strictly positive predictor variance `v` (Driver et al., 2017, p. 16; §7.2; footnote 4; JSS PDF re-opened 2026-08-23T14:25Z). Unstandardised `-B / a` is defined for a zero coefficient and for zero predictor variance and is not `asymTIPREDEFFECTstd`. The finite-interval standardisation `A^{-1}[e^{A Δt} − I] B · √v / √p` depends on the event interval and is not `asymTIPREDEFFECTstd`. `(-B / a) · √v / √(trait + p + added)` uses `TRAITVAR` and is not `asymTIPREDEFFECTstd`. `TRAITVAR` is not the standardisation variance. Page 16 `TIPREDEFFECTstd` is `B · √v / √(-q / (2 a))` after strictly positive `asymDIFFUSION` `-q / (2 a)` and strictly positive predictor variance `v` (Driver et al., 2017, p. 16; §7.2; footnote 4; JSS PDF re-opened 2026-08-23T16:21Z). Unstandardised `B` is defined for a zero coefficient and for zero predictor variance and is not `TIPREDEFFECTstd`. The asymptotic standardisation `(-B / a) · √v / √p` is the total change and is not `TIPREDEFFECTstd`. The finite-interval standardisation `A^{-1}[e^{A Δt} − I] B · √v / √p` depends on the event interval and is not `TIPREDEFFECTstd`. `B · √v / √(trait + p + added)` uses `TRAITVAR` and is not `TIPREDEFFECTstd`. `TRAITVAR` is not the standardisation variance. Page 16 / Table 3 `T0TIPREDEFFECTstd` is `t0_b · √v / √p_0` after strictly positive free `T0VAR` `p_0` and strictly positive predictor variance `v` (Driver et al., 2017, Table 3, p. 13; p. 16; footnote 4; 2017-era ctsem `summary.ctsemFit.R`; JSS PDF re-opened 2026-08-23T17:20Z). The affected variance is free first-occasion `T0VAR`, not `asymDIFFUSION`. Unstandardised `t0_b` is defined for a zero coefficient and for zero predictor variance and is not `T0TIPREDEFFECTstd`. `TIPREDEFFECTstd` `B · √v / √(-q / (2 a))` is the continuous coefficient and is not `T0TIPREDEFFECTstd`. `asymTIPREDEFFECTstd` `(-B / a) · √v / √p` is the total change and is not `T0TIPREDEFFECTstd`. `t0_b · √v / √(trait + p_0 + added)` uses `TRAITVAR` and is not `T0TIPREDEFFECTstd`. `TRAITVAR` is not the standardisation variance. 2017-era `addedT0TIPREDVAR` is `t0_b² v` after a first-occasion time-independent predictor (Driver et al., 2017, Table 3, p. 13; p. 16; §7.2; 2017-era ctsem `summary.ctsemFit.R`; JSS PDF re-opened 2026-08-23T18:20Z). Form `t0_b` first, then square, then multiply by `v`. A zero coefficient or zero predictor variance is exactly zero. Free `T0TIPREDEFFECT` does not require `a < 0`. `(B / a)² v` is `addedTIPREDVAR` and is not this first-occasion map. `t0_b · √v / √p_0` is `T0TIPREDEFFECTstd` and is not this variance. Free `T0VAR` is not this extra TI variance. `TRAITVAR` is not this extra TI variance. Equation 5 of 2017-era `addedT0TIPREDVAR` is `λ² t0_b² v` (Driver et al., 2017, Eq. 5, p. 5; Table 3, p. 13; Table 2, p. 12; 2017-era ctsem `summary.ctsemFit.R`; JSS PDF re-opened 2026-08-23T19:10Z). Form `t0_b² v` first, then `(λ extra) λ` with `θ = 0`. A zero loading or zero extra is exactly zero. `t0_b² v` is the latent extra, not the observed extra. `λ² p_0 + θ` is first-occasion observed variance, not this extra. `λ² (B / a)² v` is Eq. 5 of `addedTIPREDVAR`, not this first-occasion observed extra. `MANIFESTVAR` `θ` is not this extra. Equation 5 of §7.2 `addedTIPREDVAR` is `λ² (B / a)² v` (Driver et al., 2017, Eq. 5, p. 5; Table 2, p. 12; §7.2, pp. 20–21; 2017-era ctsem `summary.ctsemFit.R`; JSS PDF re-opened 2026-08-23T19:23Z). Form `(B / a)² v` first, then `(λ extra) λ` with `θ = 0`. A zero loading or zero extra is exactly zero. Lasting asymptotic extra requires `a < 0`. `(B / a)² v` is the latent extra, not the observed extra. `λ² t0_b² v` is first-occasion extra observed TI variance, not this extra. `λ² p + θ` is stationary observed variance, not this extra. `MANIFESTVAR` `θ` is not this extra. Page 16 `TDPREDEFFECTstd` is `m · √v / √(-q / (2 a))` after strictly positive `asymDIFFUSION` and strictly positive time-dependent predictor variance. Unstandardised `M` is not `TDPREDEFFECTstd`. `TIPREDEFFECTstd` is not `TDPREDEFFECTstd` even when `M = B`. intercept-style `A^{-1}[e^{A Δt} − I] M · √v / √p` is not `TDPREDEFFECTstd`. `m · √v / √(trait + p + added)` uses `TRAITVAR` and is not `TDPREDEFFECTstd`. Table 3 / p. 16 `T0TDPREDEFFECTstd` is `t0_m · √v / √p_0` after strictly positive free `T0VAR` and strictly positive TD predictor variance. Unstandardised `t0_m` is not `T0TDPREDEFFECTstd`. `TDPREDEFFECTstd` uses `asymDIFFUSION` and is not `T0TDPREDEFFECTstd`. `T0TIPREDEFFECTstd` is not `T0TDPREDEFFECTstd` even when `t0_m = t0_b`. `t0_m · √v / √(trait + p_0 + added)` uses `TRAITVAR` and is not `T0TDPREDEFFECTstd`. Free `T0VAR` does not require `a < 0`. Page 16 `T0VARstd` is `p_0 / p_0 = 1` after strictly positive free `T0VAR` (`solve(sqrt(diag(T0VAR))) %&% T0VAR`; OpenMx `%&%` is `t(A) %*% B %*% A`; the default ridge is 0). Unstandardised `T0VAR` is not `T0VARstd`. `T0TDPREDEFFECTstd` is not `T0VARstd`. `addedT0TIPREDVAR` is not `T0VARstd`. Page 16 `TRAITVARstd` is `trait / trait = 1` after strictly positive `TRAITVAR` (`solve(sqrt(diag(TRAITVAR))) %&% TRAITVAR`; OpenMx `%&%` is `t(A) %*% B %*% A`; no ridge addend). Unstandardised `TRAITVAR` is not `TRAITVARstd`. `T0VARstd` is not `TRAITVARstd` even when both equal 1. `addedT0TIPREDVAR` is not `TRAITVARstd`. Page 16 `MANIFESTTRAITVARstd` is `ψ / ψ = 1` after strictly positive `MANIFESTTRAITVAR` (`solve(sqrt(diag(MANIFESTTRAITVAR))) %&% MANIFESTTRAITVAR`; OpenMx `%&%` is `t(A) %*% B %*% A`; 2017-era source adds ridging; default ridge is 0). Unstandardised `MANIFESTTRAITVAR` is not `MANIFESTTRAITVARstd`. `TRAITVARstd` is not `MANIFESTTRAITVARstd` even when both equal 1. `MANIFESTVAR` is not `MANIFESTTRAITVARstd`. Page 16 `MANIFESTVARstd` is `θ / θ = 1` after strictly positive `MANIFESTVAR` (`solve(sqrt(diag(MANIFESTVAR))) %&% MANIFESTVAR`; OpenMx `%&%` is `t(A) %*% B %*% A`; 2017-era source adds ridging; default ridge is 0; 2017-era `dimnames` assignment to `latentNames` is a source bug). Unstandardised `MANIFESTVAR` is not `MANIFESTVARstd`. `MANIFESTTRAITVARstd` is not `MANIFESTVARstd` even when both equal 1. Equation 5 `Var(y)` is not `MANIFESTVARstd`. Page 16 `TIPREDVARstd` is `v / v = 1` after strictly positive `TIPREDVAR` (`solve(sqrt(diag(TIPREDVAR))) %&% TIPREDVAR`; OpenMx `%&%` is `t(A) %*% B %*% A`; 2017-era source adds ridging; default ridge is 0; `dimnames` are `TIpredNames`). Unstandardised `TIPREDVAR` is not `TIPREDVARstd`. `MANIFESTVARstd` is not `TIPREDVARstd` even when both equal 1. Section 7.2 `addedTIPREDVAR` is not `TIPREDVARstd`. Page 16 `asymDIFFUSIONstd` is `p / p = 1` after strictly positive `asymDIFFUSION` (`solve(sqrt(diag(asymDIFFUSION))) %&% asymDIFFUSION`; OpenMx `%&%` is `t(A) %*% B %*% A`; 2017-era source adds ridging; default ridge is 0; `dimnames` are `latentNames`). Unstandardised `asymDIFFUSION` is not `asymDIFFUSIONstd`. `TIPREDVARstd` is not `asymDIFFUSIONstd` even when both equal 1. `DIFFUSIONstd` `−2 a` is not `asymDIFFUSIONstd`. Page 16 `discreteCINTstd` is `A^{-1}[e^{A Δt} − I] κ / √p` after strictly positive `asymDIFFUSION`. Unstandardised `discreteCINT` is not `discreteCINTstd`. `κ / √p` is not `discreteCINTstd`. `(-κ / a) / √p` is not `discreteCINTstd`. `asymCINTstd` is `(-κ / a) / √p` after strictly positive `asymDIFFUSION`. Unstandardised `asymCINT` is not `asymCINTstd`. `κ / √p` is not `asymCINTstd`. `discreteCINTstd` is not `asymCINTstd`. `T0MEANSstd` is `μ_0 / √p_0` after strictly positive free `T0VAR`. Unstandardised `T0MEANS` is not `T0MEANSstd`. `T0VARstd` is not `T0MEANSstd`. `μ_0 / √asymDIFFUSION` is not `T0MEANSstd`. Page 16 `MANIFESTMEANSstd` is `τ / √θ` after strictly positive `MANIFESTVAR`. Unstandardised `MANIFESTMEANS` is not `MANIFESTMEANSstd`. `MANIFESTVARstd` is not `MANIFESTMEANSstd`. `τ / √(λ² Var(η) + θ)` is not `MANIFESTMEANSstd`. Page 16 `CINTstd` is `κ / √p` after strictly positive `asymDIFFUSION`. Unstandardised `CINT` is not `CINTstd`. `asymCINTstd` is not `CINTstd`. `discreteCINTstd` is not `CINTstd`. `κ / √(trait + p + added)` is not `CINTstd`. Evolving from that stationary start with `CINT` and `TIPREDEFFECT` stays at the stationary mean. Equation 1 is the latent SDE, not the measurement model. Form `(λ p) λ` then add `θ`, then add `ψ`. `MANIFESTVAR` is `Θ`, not `Var(y)`. `MANIFESTTRAITVAR` is `Ψ_τ`, not `Θ`. `TRAITVAR` is latent and scaled by `λ²`. `Var(η)` is not `Var(y)`. +- Do not use the difference quotient as a continuous-time rate. The scalar map is `a = ln(φ) / Δt` on event time. Discrete lags from unequal event intervals are not one coefficient; remap them through that log-rate. Binary64 `exp(a Δt) = 0` is not a discrete lag. A constant predictor's discrete effect is Voelkle et al. (2012, Eq. 12), evaluated as `a_yx (expm1(z) / a_xx)` with `z = a_xx Δt` so a finite result is not lost when `z` overflows to `-∞` or when `a_yx Δt` overflows. When `expm1(z)` overflows at a finite `z`, rewrite in log space; a zero continuous effect is exactly zero; an overflowing `a_yx/a_xx` rewrite term fails closed. The first-order product is the underflow limit of that equation, not the general constant-predictor discrete effect. A time-varying predictor whose sampling interval equals its constancy interval uses Voelkle et al. (2012, Eq. 14): `b* = a_yx Δt`. Unmatched intervals fail closed (Oud & Jansen, 2000, unread). Discrete process noise is Driver et al. (2017, Eq. 3): `Q_Δt = 0.5 q (expm1(z) / a)` with `z = 2 (a Δt)` and `q = G G⊤ ≥ 0`; do not form `2 a` first; `a = 0` and `z → 0` recover `q Δt`; a zero diffusion is exactly zero; an overflowing rewrite scale `0.5 q / a` fails closed; this is not a Kalman filter. `Q_Δt` is `cov(η_t | η_{t-1})`, not `Var(η_t)`. The lagged covariance is `exp(a Δt) p` and the unconditional variance is `exp(2 a Δt) p + Q_Δt` (Driver et al., 2017, Eq. 3–4, pp. 4–5; JSS has no numbered §2.2). A zero diffusion whose `2 (a Δt)` overflows to `+∞` is not a finite `Var(η_t)`. The stationary within-subject variance is the `Δt → ∞` limit of Eq. 4: `-q / (2 a)` for stable `a < 0` (JSS p. 16 `asymDIFFUSION`; §4.3). When `2 a` is finite, form `q / -(2 a)` so `q / a` overflow does not lose a finite result (`q = MAX`, `a = -0.75` → `MAX / 1.5`). When `2 a` overflows, form `(q / a) * -0.5`. Do not form `0.5 q` first (`q = from_bits(1)` underflows). `a ≥ 0` has no finite stationary variance. Finite-interval `Q_Δt` is not that limit. Trait-plus-state variance is `trait + state` and lagged covariance is `trait + exp(a Δt) p` (Driver et al., 2017, §4.3, p. 9). Trait variance is not process noise and not `asymDIFFUSION`. Evolving the summed variance as if it were all state is not that map. This is not RI-CLPM. Observed-indicator variance is `λ² Var(η) + θ` when `MANIFESTTRAITVAR` is zero and `λ² Var(η) + θ + ψ` otherwise (Driver et al., 2017, Eq. 5, p. 5; Table 2, p. 12). Lagged observed covariance is `λ² cov(η_t, η_{t-1}) + ψ`; `MANIFESTVAR` does not enter. Observed-indicator mean is `τ + λ μ` (Driver et al., 2017, Eq. 5; Table 2, p. 12). `MANIFESTMEANS` is `τ`, not `E(y)`. `E(η)` is not `E(y)`. `CINT` is not `MANIFESTMEANS`. `T0MEANS` is not `E(y)`. The discrete latent mean is `μ_t = exp(a Δt) μ_0 + (exp(a Δt) − 1)/a κ` (Driver et al., 2017, Eq. 3, p. 4; Table 2, p. 12). `T0MEANS` is not `μ_t`. `CINT` is not that discrete increment. A zero drift is `κ Δt`. Underflow of `exp(a Δt)` to `+0` drops the carried `T0MEANS` and keeps `−κ / a`. The evolved observed mean is `τ + λ μ_t` (Driver et al., 2017, Eq. 5 of that Eq. 3 map). The first-occasion map `τ + λ μ_0` is not `E(y_t)`. `μ_t` is not `E(y_t)`. The contemporaneous time-dependent predictor impulse is `m x` (Driver et al., 2017, Eq. 3 fourth summand; Table 2 `TDPREDEFFECT` is `M`). Form `μ_t` first, then add `m x`. `TDPREDEFFECT` is not `CINT`. `M x` is not `A^{-1}[e^{A Δt} − I] B z` and is not Voelkle et al. (2012, Eq. 14). The §7.2 level-change form is not that impulse. The observed mean of that contemporaneous impulse is `τ + λ(μ_t + m x)` (Driver et al., 2017, Eq. 5 of the Eq. 3 fourth-summand composition). The evolved map `τ + λ μ_t` is not that observed mean. The carry map `τ + λ(μ_t + e^{a(t−u)} m x)` is not that observed mean when `u ≠ t`. The evolved-plus-impulse latent mean is not `E(y_t)`. The time-independent predictor increment is `A^{-1}[e^{A Δt} − I] B z` (Driver et al., 2017, Eq. 3 second summand; Table 2 `TIPREDEFFECT` is `B`). Form `B z` first, then the discrete intercept map. A zero drift is `B z Δt`. `TIPREDEFFECT` is `B`, not that discrete increment. `A^{-1}[e^{A Δt} − I] B z` is not `CINT`, not `M x`, and not Voelkle et al. (2012, Eq. 14). The observed mean of that increment is `τ + λ(μ_t + A^{-1}[e^{A Δt} − I] B z)` (Driver et al., 2017, Eq. 5 of the Eq. 3 printed addend after the `T0MEANS` carry and the `CINT` increment). The evolved map `τ + λ μ_t` is not that observed mean. The contemporaneous map `τ + λ(μ_t + m x)` is not that observed mean. The carry map `τ + λ(μ_t + e^{a(t−u)} m x)` is not that observed mean when `u ≠ t`. The evolved-plus-increment latent mean is not `E(y_t)`. The within-interval time-dependent impulse carry is `e^{A(t−u)} M x` for `t0 < u < t` (Driver et al., 2017, Eq. 1–2 Green-function integral of Eq. 2; §7.2 dissipation). Form `m x` first, then `e^{a(t−u)} m x`. A zero drift is `m x` with no dissipation. Underflow of `e^{a(t−u)}` to `+0` is vanishing dissipation and is kept. `e^{A(t−u)} M x` is not the contemporaneous Dirac, not `CINT`, not `TIPREDEFFECT`, and not Voelkle et al. (2012, Eq. 14). An impulse at `u = t` is the contemporaneous map. An impulse at `u ≤ t0` is already in `η(t0)`. The observed mean of that carry is `τ + λ(μ_t + e^{a(t−u)} m x)` (Driver et al., 2017, Eq. 5 of the Eq. 1–2 carried latent mean). The evolved map `τ + λ μ_t` is not that observed mean. The contemporaneous map `τ + λ(μ_t + m x)` is not that observed mean when `u ≠ t`. `MANIFESTMEANS` is not `E(y_t)`. The carried latent mean is not `E(y_t)`. The first-occasion time-independent predictor shift is `t0_b z` (Driver et al., 2017, Table 3 `T0TIPREDEFFECT`; Eq. 3 first summand). Form `t0_b z` first, then `e^{a Δt} t0_b z`. Form `μ_t` first, then add that carry. A zero drift is `t0_b z`. Underflow of `e^{a Δt}` to `+0` is a vanishing carry of the first-occasion shift and is kept. `t0_b z` is not `A^{-1}[e^{A Δt} − I] B z`, not `CINT`, and not `M x`. `e^{A Δt} t0_b z` is not `t0_b z`. `T0TIPREDEFFECT` is the coefficient, not the shift. The observed mean of that first-occasion carry is `τ + λ(μ_t + e^{a Δt} t0_b z)` (Driver et al., 2017, Eq. 5 of the Table 3 / Eq. 3 first-summand composition). The evolved map `τ + λ μ_t` is not that observed mean. The process-increment map `τ + λ(μ_t + A^{-1}[e^{A Δt} − I] B z)` is not that observed mean. The contemporaneous map `τ + λ(μ_t + m x)` is not that observed mean. The impulse-carry map `τ + λ(μ_t + e^{a(t−u)} m x)` is not that observed mean when `u ≠ t0`. The evolved-plus-carry latent mean is not `E(y_t)`. The first-occasion time-dependent predictor shift is `t0_m x0` (Driver et al., 2017, Table 3 `T0TDPREDEFFECT`; Eq. 3 first summand; JSS PDF re-opened 2026-08-20T19:10Z). Form `t0_m x0` first, then `e^{a Δt} t0_m x0`. Form `μ_t` first, then add that carry. A zero drift is `t0_m x0`. Underflow of `e^{a Δt}` to `+0` is a vanishing carry of the first-occasion shift and is kept. `t0_m x0` is not `M x`, not `e^{A(t−u)} M x` for `t0 < u < t`, not `t0_b z`, not `A^{-1}[e^{A Δt} − I] B z`, and not `CINT`. `e^{A Δt} t0_m x0` is not `t0_m x0`. `T0TDPREDEFFECT` is the coefficient, not the shift. An impulse at `u ≤ t0` that used `M` is already in `η(t0)` as `TDPREDEFFECT`, not as `T0TDPREDEFFECT`. The observed mean of that first-occasion TD carry is `τ + λ(μ_t + e^{a Δt} t0_m x0)` (Driver et al., 2017, Eq. 5 of the Table 3 / Eq. 3 first-summand TD composition; JSS PDF re-opened 2026-08-20T19:07Z). The evolved map `τ + λ μ_t` is not that observed mean. The process-increment map `τ + λ(μ_t + A^{-1}[e^{A Δt} − I] B z)` is not that observed mean. The contemporaneous map `τ + λ(μ_t + m x)` is not that observed mean. The impulse-carry map `τ + λ(μ_t + e^{a(t−u)} m x)` is not that observed mean when `u ≠ t0`. The first-occasion TI map `τ + λ(μ_t + e^{a Δt} t0_b z)` is not that observed mean. The evolved-plus-carry latent mean is not `E(y_t)`. The lasting level-change `CINT` is `κ = −a m x` (Driver et al., 2017, §7.2, pp. 20–21; JSS PDF re-opened 2026-08-20T19:45Z). Form `m x` first, then multiply by `−a`. Stable `a < 0` is required so `−κ / a = m x` is an equilibrium offset. `a ≥ 0` cannot hold a new process mean. `−a m x` is not the dissipating Dirac `m x`, not a free `CINT`, and not `A^{-1}[e^{A Δt} − I] B z`. The extra near-zero-drift latent process also named in §7.2 is a different specification and is not this `CINT` setting. Equation 3 maps that intercept as `(1 − e^{a Δt}) m x` (JSS PDF re-opened 2026-08-20T19:50Z). Form the level-change `CINT` first, then the discrete intercept map. Underflow of `e^{a Δt}` to `+0` keeps `m x`. `(1 − e^{a Δt}) m x` is not `m x`, not `κ`, and not `A^{-1}[e^{A Δt} − I] B z`. The printed §7.2 lasting level change is an extra near-zero-drift latent process (Driver et al., 2017, §7.2, pp. 22–23; JSS PDF re-opened 2026-08-20T23:10Z). `T0MEANS`, `CINT`, `T0VAR`, `DIFFUSION`, and `TRAITVAR` of that process are fixed to 0; `TDPREDEFFECT` on it is fixed to 1; its `DRIFT` diagonal is very close to 0 (printed example `−0.000001`; precisely 0 causes computational problems); the original process is driven by the `DRIFT` coupling `a_{ηξ}`. After a unit identification impulse the scalar contribution is `a_{ηξ} x (e^{ε Δt} − e^{a Δt}) / (ε − a)` (`ε = a` is `a_{ηξ} x Δt e^{a Δt}`). Form `a_{ηξ} x` first. A zero coupling or zero predictor is exactly zero. `ε ≥ 0` fails closed. That contribution is not `κ = −a m x`, not `(1 − e^{a Δt}) m x`, and not the dissipating Dirac `m x`. The observed mean of that extra-process contribution is `τ + λ(μ_t + a_{ηξ} x (e^{ε Δt} − e^{a Δt}) / (ε − a))` (Driver et al., 2017, Eq. 5 of that §7.2 contribution; JSS PDF re-opened 2026-08-21T06:12Z). The extra process has `LAMBDA` 0 and is not an observed indicator. Original indicators load on the original process after the `DRIFT` coupling. The evolved map `τ + λ μ_t` is not that observed mean. The contemporaneous map `τ + λ(μ_t + m x)` is not that observed mean. The contribution is not `E(y_t)`. The evolved-plus-contribution latent mean is not `E(y_t)`. `T0TDPREDEFFECT` on the extra process begins at `t = 0` and uses `Δt = t − t0` for both the original-process evolution and the extra drive. `TDPREDEFFECT` after `t0` uses `t − u` with `t0 < u < t` for the extra drive while `μ_t` still uses `Δt`. The observed mean of that after-t0 extra-process contribution is `τ + λ(μ_t + a_{ηξ} x (e^{ε(t−u)} − e^{a(t−u)}) / (ε − a))` (Driver et al., 2017, Eq. 5 of that §7.2 after-t0 contribution; JSS PDF re-opened 2026-08-21T06:32Z). The first-occasion extra-process observed mean is not that observed mean when `u ≠ t0`. The impulse-carry map `τ + λ(μ_t + e^{a(t−u)} m x)` is a Dirac on the original process and is not that `DRIFT` drive. An impulse at `u = t0` or `u = t` is not interior. The asymptotic time-independent predictor effect is `-B z / a` (Driver et al., 2017, §7.2, pp. 20–21; JSS PDF opened 2026-08-21T13:08Z). Form `B z` first, then divide by `-a`. Stable `a < 0` is required. `a ≥ 0` cannot hold a finite process-mean change. `-B z / a` is not the coefficient `B`, not `A^{-1}[e^{A Δt} − I] B z`, not `CINT`, and not `M x`. The asymptotic time-independent predictor variance is `(B / a)² v` (Driver et al., 2017, §7.2, pp. 20–21 `addedTIPREDVAR`). Form the unit asymptotic effect first, then square, then multiply by `v`. `(B / a)² v` is not `TRAITVAR`, not `asymDIFFUSION`, and not `-B z / a`. The asymptotic continuous intercept is `-κ / a` (Driver et al., 2017, Table 2, p. 12 `asymCINT`; Eq. 3 as `Δt → ∞`; JSS PDF opened 2026-08-21T16:13Z). Form `κ` first, then divide by `-a`. Stable `a < 0` is required. `-κ / a` is not `κ`, not `A^{-1}[e^{A Δt} − I] κ`, not `T0MEANS`, and not `-B z / a`. The p. 16 stationary `T0MEANS` constraint is `-κ / a + −B z / a`. Form the intercept contribution first, then include the TI extra effect, then add. That constrained first-occasion mean is not free `T0MEANS`, not `asymCINT` alone, not `asymTIPREDEFFECT` alone, and not the finite-interval discrete latent mean. Equation 5 of that constrained mean is `τ + λ(−κ / a + −B z / a)` (Driver et al., 2017, §4.3, pp. 9–10; Eq. 5, p. 5; JSS PDF re-opened 2026-08-21T20:07Z). Form the stationary latent mean first, then `τ + λ` of that mean. `τ + λ μ_0` for free `T0MEANS` is not that composition. `τ + λ(−κ / a)` is not that composition when `B z ≠ 0`. `τ + λ μ_t` is not that composition. `MANIFESTMEANS` is not `E(y_0)`. The constrained latent mean is not `E(y_0)`. The p. 16 constrained first-occasion variance `trait + −q / (2 a) + (B / a)² v` is not free `T0VAR`, not `asymDIFFUSION` alone, not `TRAITVAR` alone, not `addedTIPREDVAR` alone, and not the finite-interval discrete latent variance. Eq. 5 of that constrained variance is `λ²(trait + −q / (2 a) + (B / a)² v) + θ + ψ` (JSS PDF re-opened 2026-08-22T03:20Z; form the stationary latent variance first, then `λ² p + θ + ψ`; `λ² p_0` is not that observed variance; `λ²(−q / (2 a)) + θ` is not that observed variance when `TRAITVAR` or `addedTIPREDVAR` is nonzero; `MANIFESTVAR` is not `Var(y_0)`; the constrained latent variance is not `Var(y_0)`). The lagged covariance of that constrained process is `trait + e^{a Δt}(−q / (2 a)) + (B / a)² v` (Driver et al., 2017, Eq. 3–4 of §4.3 / p. 16 `T0VAR`; JSS PDF re-opened 2026-08-22T19:13Z). Trait and `addedTIPREDVAR` do not decay with `e^{a Δt}`. Contemporaneous `T0VAR` is not that lagged map. Decaying the constrained total as if it were all state is not that lagged map. Equation 5 of that lagged covariance is `λ²(trait + e^{a Δt}(−q / (2 a)) + (B / a)² v) + ψ`. `Θ` does not enter. Contemporaneous `Var(y_0)` is not that lagged observed covariance. The lagged latent covariance is not that observed covariance. The later-occasion variance of that constrained process is `trait + e^{2 a Δt}(−q / (2 a)) + Q_Δt + (B / a)² v` (Driver et al., 2017, Eq. 3–4 of §4.3 / p. 16 `T0VAR`; JSS PDF re-opened 2026-08-22T23:12Z). Trait and `addedTIPREDVAR` do not enter `Q_Δt`. Under stationarity that composition equals contemporaneous `T0VAR`. Evolving the constrained total as if it were all state is not that later map. The lagged covariance omits `Q_Δt` and is not that later map. `Q_Δt` is not that later map. Equation 5 of that later-occasion variance is `λ²(trait + e^{2 a Δt}(−q / (2 a)) + Q_Δt + (B / a)² v) + θ + ψ`. The lagged observed covariance omits `Q_Δt` and `θ`. `MANIFESTVAR` is not `Var(y_t)`. The later-occasion latent variance is not `Var(y_t)`. The later-occasion variance of §4.3 predetermined `T0VAR` is `trait + e^{2 a Δt} p_0 + Q_Δt + (B / a)² v` (Driver et al., 2017, Eq. 3–4 of §4.3 predetermined first occasion; JSS PDF re-opened 2026-08-23T05:12Z). Trait and `addedTIPREDVAR` do not enter `Q_Δt`. Free `T0VAR` `p_0` is not that later map. Setting `p_0 = −q / (2 a)` recovers the stationary later-occasion map. Stationary later variance uses `−q / (2 a)` in place of `p_0` and is not that later map when `p_0` is free. Evolving `trait + p_0 + (B / a)² v` as if it were all state is not that later map. As `Δt → ∞` with stable `a < 0` the composition approaches contemporaneous stationary `T0VAR`. As `Δt → 0+` the composition approaches `trait + p_0 + (B / a)² v`. Nonzero diffusion with `a ≥ 0` is a growing process and is kept. Equation 5 of that predetermined later-occasion variance is `λ²(trait + e^{2 a Δt} p_0 + Q_Δt + (B / a)² v) + θ + ψ`. `MANIFESTVAR` is not `Var(y_t)`. The predetermined later-occasion latent variance is not `Var(y_t)`. Stationary later observed variance is not that observed variance when `p_0` is free. The lagged covariance of §4.3 predetermined `T0VAR` is `trait + e^{a Δt} p_0 + (B / a)² v` (Driver et al., 2017, Eq. 3–4 of §4.3 predetermined first occasion; JSS PDF re-opened 2026-08-23T09:04Z). Trait and `addedTIPREDVAR` do not decay with `e^{a Δt}`. Free `T0VAR` `p_0` is not that lagged map. Setting `p_0 = −q / (2 a)` recovers the stationary lagged map. Stationary lagged covariance uses `−q / (2 a)` in place of `p_0` and is not that lagged map when `p_0` is free. Evolving `trait + p_0 + (B / a)² v` as if it were all state is not that lagged map. Later-occasion variance includes `Q_Δt` and is not that lagged map. As `Δt → ∞` with stable `a < 0` the state term vanishes. As `Δt → 0+` the composition approaches `trait + p_0 + (B / a)² v`. Equation 5 of that predetermined lagged covariance is `λ²(trait + e^{a Δt} p_0 + (B / a)² v) + ψ`. `MANIFESTVAR` does not enter. The predetermined lagged latent covariance is not that observed covariance. Predetermined later observed variance includes `Q_Δt` and `θ` and is not that lagged observed covariance. Stationary lagged observed covariance is not that observed covariance when `p_0` is free. The predetermined first-occasion variance of §4.3 predetermined `T0VAR` is `trait + p_0 + (B / a)² v`. Free `p_0` is not that map. Stationary first-occasion variance uses `−q / (2 a)` in place of `p_0` and is not that map when `p_0` is free. Lagged covariance decays the state and is not that map. Later-occasion variance includes `Q_Δt` and is not that map. Equation 5 of that predetermined first-occasion variance is `λ²(trait + p_0 + (B / a)² v) + θ + ψ`. `MANIFESTVAR` is not that first-occasion observed variance. The predetermined first-occasion latent variance is not that observed variance. Stationary first-occasion observed variance is not that observed variance when `p_0` is free. Predetermined later observed variance includes `Q_Δt` and is not that first-occasion observed variance. Later-start lagged covariance of predetermined `T0VAR` is `trait + e^{a s}(e^{2 a u} p_0 + Q_u) + (B / a)² v` (Driver et al., 2017, §4.3 `startoffset`; Eq. 4; JSS PDF re-opened 2026-08-23T10:27Z). First-occasion lagged omits `e^{a s} Q_u`. Later-occasion variance does not lag. Stationary lagged uses `−q / (2 a)`. Decaying the later total is not that map. Equation 5 of that later-start lagged covariance is `λ²` of it plus `ψ`. Independent `ε_t` does not enter. First-occasion lagged observed omits `e^{a s} Q_u`. Predetermined later observed variance includes `Q_u` and `θ` and is not that later-start lagged observed covariance. Later-start later-occasion variance of predetermined `T0VAR` is `trait + e^{2 a s}(e^{2 a u} p_0 + Q_u) + Q_s + (B / a)² v` (Driver et al., 2017, §4.3 `startoffset`; Eq. 3–4 Chapman–Kolmogorov `Q_{u+s} = e^{2 a s} Q_u + Q_s`; JSS PDF re-opened 2026-08-23T11:05Z). Later-occasion variance at `u` omits `Q_s`. Later-start lagged covariance omits `Q_s`. Stationary later uses `−q / (2 a)`. Evolving the later total as if it were all state is not that map. Ignoring `startoffset` omits `e^{2 a s} Q_u`. Equation 5 of that later-start later-occasion variance is `λ²` of it plus `θ + ψ`. `MANIFESTVAR` is not that observed variance. Page 16 `discreteDRIFTstd` is `e^{a Δt}` after strictly positive `asymDIFFUSION` `-q / (2 a)` (Driver et al., 2017, p. 16; footnote 4; §7.1; JSS PDF re-opened 2026-08-23T11:40Z). Unstandardised `e^{a Δt}` is defined for growing `a ≥ 0` and for zero diffusion and is not `discreteDRIFTstd`. The §7.1 trait-plus-state autocorrelation `(trait + e^{a Δt} p + added) / (trait + p + added)` uses `TRAITVAR` and is not `discreteDRIFTstd`. `TRAITVAR` is not the standardisation variance. Page 16 `discreteDIFFUSIONstd` is `Q_Δt / (−q / (2 a))` after strictly positive `asymDIFFUSION` `-q / (2 a)` (Driver et al., 2017, p. 16; Eq. 4; footnote 4; JSS PDF re-opened 2026-08-23T13:06Z). Unstandardised `Q_Δt` is defined for growing `a ≥ 0` and for zero diffusion and is not `discreteDIFFUSIONstd`. The continuous standardisation `−2 a` is not `discreteDIFFUSIONstd`. `Q_Δt / (trait + p + added)` uses `TRAITVAR` and is not `discreteDIFFUSIONstd`. `TRAITVAR` is not the standardisation variance. Page 16 `DIFFUSIONstd` is `q / (−q / (2 a)) = −2 a` after strictly positive `asymDIFFUSION` `-q / (2 a)` (Driver et al., 2017, p. 16; Eq. 4; footnote 4; JSS PDF re-opened 2026-08-23T13:20Z). Unstandardised `q` is defined for growing `a ≥ 0` and for zero diffusion and is not `DIFFUSIONstd`. The discrete standardisation `Q_Δt / (−q / (2 a))` depends on `Δt` and is not `DIFFUSIONstd`. `q / (trait + p + added)` uses `TRAITVAR` and is not `DIFFUSIONstd`. `TRAITVAR` is not the standardisation variance. Page 16 `DRIFTstd` is the continuous auto-effect after strictly positive `asymDIFFUSION` `-q / (2 a)` (Driver et al., 2017, p. 16; Eq. 1; footnote 4; JSS PDF re-opened 2026-08-23T13:28Z). Unstandardised `a` is defined for growing `a ≥ 0` and for zero diffusion and is not `DRIFTstd`. The discrete standardisation `e^{a Δt}` depends on the event interval and is not `DRIFTstd`. `a p / (trait + p + added)` uses `TRAITVAR` and is not `DRIFTstd`. `TRAITVAR` is not the standardisation variance. Page 16 `asymTIPREDEFFECTstd` is `(-B / a) · √v / √(-q / (2 a))` after strictly positive `asymDIFFUSION` `-q / (2 a)` and strictly positive predictor variance `v` (Driver et al., 2017, p. 16; §7.2; footnote 4; JSS PDF re-opened 2026-08-23T14:25Z). Unstandardised `-B / a` is defined for a zero coefficient and for zero predictor variance and is not `asymTIPREDEFFECTstd`. The finite-interval standardisation `A^{-1}[e^{A Δt} − I] B · √v / √p` depends on the event interval and is not `asymTIPREDEFFECTstd`. `(-B / a) · √v / √(trait + p + added)` uses `TRAITVAR` and is not `asymTIPREDEFFECTstd`. `TRAITVAR` is not the standardisation variance. Page 16 `TIPREDEFFECTstd` is `B · √v / √(-q / (2 a))` after strictly positive `asymDIFFUSION` `-q / (2 a)` and strictly positive predictor variance `v` (Driver et al., 2017, p. 16; §7.2; footnote 4; JSS PDF re-opened 2026-08-23T16:21Z). Unstandardised `B` is defined for a zero coefficient and for zero predictor variance and is not `TIPREDEFFECTstd`. The asymptotic standardisation `(-B / a) · √v / √p` is the total change and is not `TIPREDEFFECTstd`. The finite-interval standardisation `A^{-1}[e^{A Δt} − I] B · √v / √p` depends on the event interval and is not `TIPREDEFFECTstd`. `B · √v / √(trait + p + added)` uses `TRAITVAR` and is not `TIPREDEFFECTstd`. `TRAITVAR` is not the standardisation variance. Page 16 / Table 3 `T0TIPREDEFFECTstd` is `t0_b · √v / √p_0` after strictly positive free `T0VAR` `p_0` and strictly positive predictor variance `v` (Driver et al., 2017, Table 3, p. 13; p. 16; footnote 4; 2017-era ctsem `summary.ctsemFit.R`; JSS PDF re-opened 2026-08-23T17:20Z). The affected variance is free first-occasion `T0VAR`, not `asymDIFFUSION`. Unstandardised `t0_b` is defined for a zero coefficient and for zero predictor variance and is not `T0TIPREDEFFECTstd`. `TIPREDEFFECTstd` `B · √v / √(-q / (2 a))` is the continuous coefficient and is not `T0TIPREDEFFECTstd`. `asymTIPREDEFFECTstd` `(-B / a) · √v / √p` is the total change and is not `T0TIPREDEFFECTstd`. `t0_b · √v / √(trait + p_0 + added)` uses `TRAITVAR` and is not `T0TIPREDEFFECTstd`. `TRAITVAR` is not the standardisation variance. 2017-era `addedT0TIPREDVAR` is `t0_b² v` after a first-occasion time-independent predictor (Driver et al., 2017, Table 3, p. 13; p. 16; §7.2; 2017-era ctsem `summary.ctsemFit.R`; JSS PDF re-opened 2026-08-23T18:20Z). Form `t0_b` first, then square, then multiply by `v`. A zero coefficient or zero predictor variance is exactly zero. Free `T0TIPREDEFFECT` does not require `a < 0`. `(B / a)² v` is `addedTIPREDVAR` and is not this first-occasion map. `t0_b · √v / √p_0` is `T0TIPREDEFFECTstd` and is not this variance. Free `T0VAR` is not this extra TI variance. `TRAITVAR` is not this extra TI variance. Equation 5 of 2017-era `addedT0TIPREDVAR` is `λ² t0_b² v` (Driver et al., 2017, Eq. 5, p. 5; Table 3, p. 13; Table 2, p. 12; 2017-era ctsem `summary.ctsemFit.R`; JSS PDF re-opened 2026-08-23T19:10Z). Form `t0_b² v` first, then `(λ extra) λ` with `θ = 0`. A zero loading or zero extra is exactly zero. `t0_b² v` is the latent extra, not the observed extra. `λ² p_0 + θ` is first-occasion observed variance, not this extra. `λ² (B / a)² v` is Eq. 5 of `addedTIPREDVAR`, not this first-occasion observed extra. `MANIFESTVAR` `θ` is not this extra. Equation 5 of §7.2 `addedTIPREDVAR` is `λ² (B / a)² v` (Driver et al., 2017, Eq. 5, p. 5; Table 2, p. 12; §7.2, pp. 20–21; 2017-era ctsem `summary.ctsemFit.R`; JSS PDF re-opened 2026-08-23T19:23Z). Form `(B / a)² v` first, then `(λ extra) λ` with `θ = 0`. A zero loading or zero extra is exactly zero. Lasting asymptotic extra requires `a < 0`. `(B / a)² v` is the latent extra, not the observed extra. `λ² t0_b² v` is first-occasion extra observed TI variance, not this extra. `λ² p + θ` is stationary observed variance, not this extra. `MANIFESTVAR` `θ` is not this extra. Page 16 `TDPREDEFFECTstd` is `m · √v / √(-q / (2 a))` after strictly positive `asymDIFFUSION` and strictly positive time-dependent predictor variance. Unstandardised `M` is not `TDPREDEFFECTstd`. `TIPREDEFFECTstd` is not `TDPREDEFFECTstd` even when `M = B`. intercept-style `A^{-1}[e^{A Δt} − I] M · √v / √p` is not `TDPREDEFFECTstd`. `m · √v / √(trait + p + added)` uses `TRAITVAR` and is not `TDPREDEFFECTstd`. Table 3 / p. 16 `T0TDPREDEFFECTstd` is `t0_m · √v / √p_0` after strictly positive free `T0VAR` and strictly positive TD predictor variance. Unstandardised `t0_m` is not `T0TDPREDEFFECTstd`. `TDPREDEFFECTstd` uses `asymDIFFUSION` and is not `T0TDPREDEFFECTstd`. `T0TIPREDEFFECTstd` is not `T0TDPREDEFFECTstd` even when `t0_m = t0_b`. `t0_m · √v / √(trait + p_0 + added)` uses `TRAITVAR` and is not `T0TDPREDEFFECTstd`. Free `T0VAR` does not require `a < 0`. Page 16 `T0VARstd` is `p_0 / p_0 = 1` after strictly positive free `T0VAR` (`solve(sqrt(diag(T0VAR))) %&% T0VAR`; OpenMx `%&%` is `t(A) %*% B %*% A`; the default ridge is 0). Unstandardised `T0VAR` is not `T0VARstd`. `T0TDPREDEFFECTstd` is not `T0VARstd`. `addedT0TIPREDVAR` is not `T0VARstd`. Page 16 `TRAITVARstd` is `trait / trait = 1` after strictly positive `TRAITVAR` (`solve(sqrt(diag(TRAITVAR))) %&% TRAITVAR`; OpenMx `%&%` is `t(A) %*% B %*% A`; no ridge addend). Unstandardised `TRAITVAR` is not `TRAITVARstd`. `T0VARstd` is not `TRAITVARstd` even when both equal 1. `addedT0TIPREDVAR` is not `TRAITVARstd`. Page 16 `MANIFESTTRAITVARstd` is `ψ / ψ = 1` after strictly positive `MANIFESTTRAITVAR` (`solve(sqrt(diag(MANIFESTTRAITVAR))) %&% MANIFESTTRAITVAR`; OpenMx `%&%` is `t(A) %*% B %*% A`; 2017-era source adds ridging; default ridge is 0). Unstandardised `MANIFESTTRAITVAR` is not `MANIFESTTRAITVARstd`. `TRAITVARstd` is not `MANIFESTTRAITVARstd` even when both equal 1. `MANIFESTVAR` is not `MANIFESTTRAITVARstd`. Page 16 `MANIFESTVARstd` is `θ / θ = 1` after strictly positive `MANIFESTVAR` (`solve(sqrt(diag(MANIFESTVAR))) %&% MANIFESTVAR`; OpenMx `%&%` is `t(A) %*% B %*% A`; 2017-era source adds ridging; default ridge is 0; 2017-era `dimnames` assignment to `latentNames` is a source bug). Unstandardised `MANIFESTVAR` is not `MANIFESTVARstd`. `MANIFESTTRAITVARstd` is not `MANIFESTVARstd` even when both equal 1. Equation 5 `Var(y)` is not `MANIFESTVARstd`. Page 16 `TIPREDVARstd` is `v / v = 1` after strictly positive `TIPREDVAR` (`solve(sqrt(diag(TIPREDVAR))) %&% TIPREDVAR`; OpenMx `%&%` is `t(A) %*% B %*% A`; 2017-era source adds ridging; default ridge is 0; `dimnames` are `TIpredNames`). Unstandardised `TIPREDVAR` is not `TIPREDVARstd`. `MANIFESTVARstd` is not `TIPREDVARstd` even when both equal 1. Section 7.2 `addedTIPREDVAR` is not `TIPREDVARstd`. Page 16 `asymDIFFUSIONstd` is `p / p = 1` after strictly positive `asymDIFFUSION` (`solve(sqrt(diag(asymDIFFUSION))) %&% asymDIFFUSION`; OpenMx `%&%` is `t(A) %*% B %*% A`; 2017-era source adds ridging; default ridge is 0; `dimnames` are `latentNames`). Unstandardised `asymDIFFUSION` is not `asymDIFFUSIONstd`. `TIPREDVARstd` is not `asymDIFFUSIONstd` even when both equal 1. `DIFFUSIONstd` `−2 a` is not `asymDIFFUSIONstd`. Page 16 `discreteCINTstd` is `A^{-1}[e^{A Δt} − I] κ / √p` after strictly positive `asymDIFFUSION`. Unstandardised `discreteCINT` is not `discreteCINTstd`. `κ / √p` is not `discreteCINTstd`. `(-κ / a) / √p` is not `discreteCINTstd`. `asymCINTstd` is `(-κ / a) / √p` after strictly positive `asymDIFFUSION`. Unstandardised `asymCINT` is not `asymCINTstd`. `κ / √p` is not `asymCINTstd`. `discreteCINTstd` is not `asymCINTstd`. `T0MEANSstd` is `μ_0 / √p_0` after strictly positive free `T0VAR`. Unstandardised `T0MEANS` is not `T0MEANSstd`. `T0VARstd` is not `T0MEANSstd`. `μ_0 / √asymDIFFUSION` is not `T0MEANSstd`. Page 16 `MANIFESTMEANSstd` is `τ / √θ` after strictly positive `MANIFESTVAR`. Unstandardised `MANIFESTMEANS` is not `MANIFESTMEANSstd`. `MANIFESTVARstd` is not `MANIFESTMEANSstd`. `τ / √(λ² Var(η) + θ)` is not `MANIFESTMEANSstd`. Page 16 `CINTstd` is `κ / √p` after strictly positive `asymDIFFUSION`. Unstandardised `CINT` is not `CINTstd`. `asymCINTstd` is not `CINTstd`. `discreteCINTstd` is not `CINTstd`. `κ / √(trait + p + added)` is not `CINTstd`. Evolving from that stationary start with `CINT` and `TIPREDEFFECT` stays at the stationary mean. Equation 1 is the latent SDE, not the measurement model. Form `(λ p) λ` then add `θ`, then add `ψ`. `MANIFESTVAR` is `Θ`, not `Var(y)`. `MANIFESTTRAITVAR` is `Ψ_τ`, not `Θ`. `TRAITVAR` is latent and scaled by `λ²`. `Var(η)` is not `Var(y)`. Equation 5 of 2017-era `T0TOTALVAR` after `addedT0TIPREDVAR` with nonzero `MANIFESTTRAITVAR` is `λ² (t0_trait² · trait + p_0 + t0_b² v) + θ + ψ` (Driver et al., 2017, Eq. 5, p. 5; Table 2, p. 12; Table 3, p. 13; 2017-era `summary.ctsemFit.R` lines 322–339 then 437–442; JSS PDF re-opened 2026-08-30T20:56Z). Form extra first, then add free `p_0`, then form `t0_b² v`, then add, then `(λ total) λ + θ + ψ`. A zero extra, a zero `p_0`, a zero TI extra, or a zero loading is exactly `θ + ψ` when the remaining latent terms are zero. A zero manifest trait is exactly `λ² (extra + p_0 + ti_extra) + θ`. The latent total `extra + p_0 + ti_extra` is not that observed map. `λ² (extra + p_0 + ti_extra) + θ` omits `ψ`. `λ² t0_b² v + θ + ψ` omits trait extra and free `T0VAR`. `MANIFESTVAR` `θ` is not that observed total. `MANIFESTTRAITVAR` `ψ` is not that observed total. `T0TOTALVARstd` is not that map. Section 4.3 predetermined first-occasion observed variance uses raw `TRAITVAR` plus `(B / a)² v` and is not that map. - Separate cluster means before within-unit lag. CWC plus an event-time lag is not DSEM. Subtracting the person-specific mean from a raw autoregressive series does not isolate the lagged within-person effect (Curran & Bauer, 2011, pp. 607–608); already-centered residuals with irregular event intervals use the exact scalar map. - Do not treat the CWC cluster-mean coefficient as the between-cluster effect. It is the contextual effect `between − within` (Enders & Tofighi, 2007, Table 2, pp. 124–127). - Never use future-available evidence in historical model fits. diff --git a/crates/psychometric_core/src/error.rs b/crates/psychometric_core/src/error.rs index 4ab2695e0..8da4e4e93 100644 --- a/crates/psychometric_core/src/error.rs +++ b/crates/psychometric_core/src/error.rs @@ -710,6 +710,31 @@ pub enum PsychometricError { /// `MANIFESTVARstd`. `λ² Var(η) + θ` is `Var(y)`, not the /// correlation form of `Θ`. ObservedVarianceIsNotStandardisedManifestVariance, + /// Driver Eq. 5 of 2017-era `T0TOTALVAR` after `addedT0TIPREDVAR` + /// with nonzero `MANIFESTTRAITVAR` was treated as the latent + /// total. Observed total + /// `λ² (t0_trait² · trait + p_0 + t0_b² v) + θ + ψ` is not + /// `extra + p_0 + ti_extra`. + InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotLatentTotal, + /// Driver Eq. 5 of 2017-era `T0TOTALVAR` after `addedT0TIPREDVAR` + /// with nonzero `MANIFESTTRAITVAR` was treated as Eq. 5 of that + /// total without `ψ`. Omitting `MANIFESTTRAITVAR` is not the + /// observed total when the intercept random effect is present. + InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotObservedVarianceWithoutManifestTrait, + /// Driver Eq. 5 of 2017-era `T0TOTALVAR` after `addedT0TIPREDVAR` + /// with nonzero `MANIFESTTRAITVAR` was treated as `MANIFESTVAR` + /// `θ`. Measurement error is not the observed composition. + InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotMeasurementError, + /// Driver Eq. 5 of 2017-era `T0TOTALVAR` after `addedT0TIPREDVAR` + /// with nonzero `MANIFESTTRAITVAR` was treated as + /// `MANIFESTTRAITVAR` `ψ`. Manifest-trait variance is an addend, + /// not the observed total. + InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotManifestTraitVariance, + /// Driver Eq. 5 of 2017-era `T0TOTALVAR` after `addedT0TIPREDVAR` + /// with nonzero `MANIFESTTRAITVAR` was treated as 2017-era + /// `T0TOTALVARstd`. Observed total variance is not the + /// correlation form `total / total = 1`. + InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotStandardisedInitialTotalVariance, } impl fmt::Display for PsychometricError { @@ -1235,6 +1260,21 @@ impl fmt::Display for PsychometricError { Self::ObservedVarianceIsNotStandardisedManifestVariance => { "observed-indicator variance is not standardised measurement-error variance" } + Self::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotLatentTotal => { + "initial total observed variance with time-independent predictor and manifest trait is not the latent total" + } + Self::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotObservedVarianceWithoutManifestTrait => { + "initial total observed variance with time-independent predictor and manifest trait is not observed variance without manifest trait" + } + Self::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotMeasurementError => { + "initial total observed variance with time-independent predictor and manifest trait is not measurement-error variance" + } + Self::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotManifestTraitVariance => { + "initial total observed variance with time-independent predictor and manifest trait is not manifest-trait variance" + } + Self::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotStandardisedInitialTotalVariance => { + "initial total observed variance with time-independent predictor and manifest trait is not standardised initial total variance" + } }; formatter.write_str(message) } @@ -2073,4 +2113,34 @@ mod tests { "measurement error is not standardised manifest-trait variance" ); } + + #[test] + fn initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_boundary_messages_are_stable( + ) { + assert_eq!( + PsychometricError::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotLatentTotal + .to_string(), + "initial total observed variance with time-independent predictor and manifest trait is not the latent total" + ); + assert_eq!( + PsychometricError::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotObservedVarianceWithoutManifestTrait + .to_string(), + "initial total observed variance with time-independent predictor and manifest trait is not observed variance without manifest trait" + ); + assert_eq!( + PsychometricError::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotMeasurementError + .to_string(), + "initial total observed variance with time-independent predictor and manifest trait is not measurement-error variance" + ); + assert_eq!( + PsychometricError::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotManifestTraitVariance + .to_string(), + "initial total observed variance with time-independent predictor and manifest trait is not manifest-trait variance" + ); + assert_eq!( + PsychometricError::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotStandardisedInitialTotalVariance + .to_string(), + "initial total observed variance with time-independent predictor and manifest trait is not standardised initial total variance" + ); + } } diff --git a/crates/psychometric_core/src/event_time.rs b/crates/psychometric_core/src/event_time.rs index a29bc5c18..f505fc573 100644 --- a/crates/psychometric_core/src/event_time.rs +++ b/crates/psychometric_core/src/event_time.rs @@ -188,7 +188,19 @@ //! `τ + λ(μ_t + a_{ηξ} x (e^{ε(t−u)} − e^{a(t−u)}) / (ε − a))` (the //! first-occasion extra-process observed mean is not that observed //! mean when `u ≠ t0`; `e^{a(t−u)} m x` is a Dirac on the original -//! process, not this `DRIFT` drive). The JSS article +//! process, not this `DRIFT` drive). Equation 5 of 2017-era +//! `T0TOTALVAR` after `addedT0TIPREDVAR` with nonzero +//! `MANIFESTTRAITVAR` is +//! `λ² (t0_trait² · trait + p_0 + t0_b² v) + θ + ψ` (Eq. 5, p. 5; +//! Table 2, p. 12; Table 3, p. 13; 2017-era +//! `summary.ctsemFit.R` lines 322–339 then 437–442; JSS PDF +//! re-opened 2026-08-30T20:56Z). Form extra first, then add free +//! `T0VAR`, then form `t0_b² v`, then add, then `(λ total) λ + θ` +//! plus `ψ`. The latent total is not that observed map. +//! `λ² (extra + p_0 + ti_extra) + θ` omits `ψ`. `MANIFESTVAR` `θ` +//! is not that composition. `MANIFESTTRAITVAR` `ψ` is not that +//! composition. +//! The JSS article //! has no numbered §2.2 (2.1 is Continuous time and SEM; §3 follows). //! The difference quotient `(x(t+Δt) − x(t)) / Δt` (their //! Eqs. 3–4) is refused. This is not DSEM and not a matrix `expm`. @@ -6795,6 +6807,205 @@ pub fn recover_irregular_centered_residual_log_rate( require_finite(sum / count) } +/// Exact scalar Eq. 5 of 2017-era `T0TOTALVAR` after +/// `addedT0TIPREDVAR` with nonzero `MANIFESTTRAITVAR`. +/// +/// Driver, Oud, and Voelkle (2017, Eq. 5, p. 5; Table 2, p. 12 +/// `TRAITVAR` / `T0VAR` / `LAMBDA` / `MANIFESTVAR` / +/// `MANIFESTTRAITVAR`; Table 3, p. 13 `T0TIPREDEFFECT`; 2017-era +/// `summary.ctsemFit.R` lines 322–339 then 437–442; JSS PDF +/// re-opened 2026-08-30T20:56Z) form +/// `T0TRAITVAR <- T0TRAITEFFECT %*% TRAITVAR %*% t(T0TRAITEFFECT)`, +/// then `T0TOTALVAR <- T0TRAITVAR + T0VAR`, then +/// `addedT0TIPREDVAR <- T0TIPREDEFFECT %*% TIPREDVAR %*% t(T0TIPREDEFFECT)`, +/// then the commented update +/// `T0TOTALVAR <- addedT0TIPREDVAR + T0TOTALVAR`. Equation 5 of +/// that composed total with `τ_i ~ N(μ_τ, Ψ_τ)` is +/// `λ² (t0_trait² · trait + p_0 + t0_b² v) + θ + ψ`. Form extra +/// first, then add free `T0VAR`, then form `t0_b² v` inline, then +/// add, then +/// [`recover_manifest_trait_plus_state_observed_variance`]. Do not +/// form `λ²` first. This crate does not export +/// `recover_initial_total_observed_variance` or +/// `recover_initial_total_observed_variance_with_time_independent_predictor`; +/// form extra, the process sum, and the TI extra inline. A zero +/// extra, a zero `p_0`, a zero TI extra, or a zero loading is +/// exactly `θ + ψ` when the remaining latent terms are zero. A +/// zero manifest trait is exactly +/// `λ² (extra + p_0 + ti_extra) + θ`. `trait < 0`, `p_0 < 0`, +/// `v < 0`, or `ψ < 0` fails closed. +/// A non-event clock fails closed. Free `T0TRAITEFFECT` / +/// `T0VAR` / `T0TIPREDEFFECT` / `MANIFESTTRAITVAR` do not require +/// stable `a < 0`. An overflowing product or sum fails closed. +/// This is not a Kalman filter, not ESEM estimation, and not +/// ctsem estimation. +/// +/// # Errors +/// +/// Returns [`PsychometricError::EventTimeRequired`] for a +/// non-event clock and [`PsychometricError::InvalidNumericInput`] +/// when an input is non-finite, a variance is negative, or a +/// product or sum overflows. +#[allow(clippy::too_many_arguments)] +pub fn recover_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait( + loading: f64, + initial_trait_effect: f64, + trait_variance: f64, + initial_variance: f64, + initial_time_independent_effect: f64, + predictor_variance: f64, + measurement_error_variance: f64, + manifest_trait_variance: f64, + clock: LagClock, +) -> Result { + if !clock.admits_structural_lag() { + return Err(PsychometricError::EventTimeRequired); + } + if !initial_trait_effect.is_finite() + || !trait_variance.is_finite() + || !initial_variance.is_finite() + || !initial_time_independent_effect.is_finite() + || !predictor_variance.is_finite() + || trait_variance < 0.0 + || initial_variance < 0.0 + || predictor_variance < 0.0 + { + return Err(PsychometricError::InvalidNumericInput); + } + let extra = if initial_trait_effect == 0.0 || trait_variance == 0.0 { + 0.0 + } else { + let squared = require_finite(initial_trait_effect * initial_trait_effect)?; + require_finite(squared * trait_variance)? + }; + let with_process = require_finite(extra + initial_variance)?; + let ti_extra = if initial_time_independent_effect == 0.0 || predictor_variance == 0.0 { + 0.0 + } else { + let squared = + require_finite(initial_time_independent_effect * initial_time_independent_effect)?; + require_finite(squared * predictor_variance)? + }; + let total = require_finite(with_process + ti_extra)?; + recover_manifest_trait_plus_state_observed_variance( + loading, + total, + measurement_error_variance, + manifest_trait_variance, + ) +} + +/// Refuse treating Eq. 5 of 2017-era `T0TOTALVAR` after +/// `addedT0TIPREDVAR` with `ψ` as the latent total. +/// +/// `λ² (t0_trait² · trait + p_0 + t0_b² v) + θ + ψ` is the +/// observed composition. `t0_trait² · trait + p_0 + t0_b² v` is +/// the latent total. Equal numbers when `λ = 1`, `θ = 0`, and +/// `ψ = 0` are still distinct named quantities. +/// +/// # Errors +/// +/// Always returns +/// [`PsychometricError::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotLatentTotal`]. +pub fn refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_latent_total( + initial_total_observed_variance: f64, + latent_total: f64, +) -> Result { + let _ = (initial_total_observed_variance, latent_total); + Err( + PsychometricError::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotLatentTotal, + ) +} + +/// Refuse treating Eq. 5 of 2017-era `T0TOTALVAR` after +/// `addedT0TIPREDVAR` with `ψ` as that observed total without `ψ`. +/// +/// `λ² (t0_trait² · trait + p_0 + t0_b² v) + θ + ψ` includes +/// `MANIFESTTRAITVAR`. `λ² (t0_trait² · trait + p_0 + t0_b² v) + θ` +/// omits it. Equal numbers when `ψ = 0` are still distinct +/// named quantities. +/// +/// # Errors +/// +/// Always returns +/// [`PsychometricError::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotObservedVarianceWithoutManifestTrait`]. +pub fn refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_observed_variance_without_manifest_trait( + initial_total_observed_variance: f64, + observed_variance_without_manifest_trait: f64, +) -> Result { + let _ = ( + initial_total_observed_variance, + observed_variance_without_manifest_trait, + ); + Err( + PsychometricError::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotObservedVarianceWithoutManifestTrait, + ) +} + +/// Refuse treating Eq. 5 of 2017-era `T0TOTALVAR` after +/// `addedT0TIPREDVAR` with `ψ` as `MANIFESTVAR`. +/// +/// `λ² (t0_trait² · trait + p_0 + t0_b² v) + θ + ψ` is the +/// observed composition. Table 2 names `MANIFESTVAR` as `Θ`. +/// +/// # Errors +/// +/// Always returns +/// [`PsychometricError::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotMeasurementError`]. +pub fn refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_measurement_error( + initial_total_observed_variance: f64, + measurement_error_variance: f64, +) -> Result { + let _ = (initial_total_observed_variance, measurement_error_variance); + Err( + PsychometricError::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotMeasurementError, + ) +} + +/// Refuse treating Eq. 5 of 2017-era `T0TOTALVAR` after +/// `addedT0TIPREDVAR` with `ψ` as `MANIFESTTRAITVAR`. +/// +/// `λ² (t0_trait² · trait + p_0 + t0_b² v) + θ + ψ` is the +/// observed composition. Table 2 names `MANIFESTTRAITVAR` as +/// `Ψ_τ`, an addend, not `Var(y)`. +/// +/// # Errors +/// +/// Always returns +/// [`PsychometricError::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotManifestTraitVariance`]. +pub fn refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_manifest_trait_variance( + initial_total_observed_variance: f64, + manifest_trait_variance: f64, +) -> Result { + let _ = (initial_total_observed_variance, manifest_trait_variance); + Err( + PsychometricError::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotManifestTraitVariance, + ) +} + +/// Refuse treating Eq. 5 of 2017-era `T0TOTALVAR` after +/// `addedT0TIPREDVAR` with `ψ` as 2017-era `T0TOTALVARstd`. +/// +/// Observed total variance is not the correlation form +/// `total / total = 1`. +/// +/// # Errors +/// +/// Always returns +/// [`PsychometricError::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotStandardisedInitialTotalVariance`]. +pub fn refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_standardised_initial_total_variance( + initial_total_observed_variance: f64, + standardised_initial_total_variance: f64, +) -> Result { + let _ = ( + initial_total_observed_variance, + standardised_initial_total_variance, + ); + Err( + PsychometricError::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotStandardisedInitialTotalVariance, + ) +} + /// Least-squares scalar log-rate for already-formed residual pairs. /// /// Pair-wise logs initialize Newton. This helper is crate-visible so overflow @@ -6853,8 +7064,8 @@ pub(crate) fn fit_scalar_log_rate(pairs: &[(f64, f64, f64)]) -> Result recovered); + let doubled_psi = recover_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait( + loading, + effect, + trait_variance, + initial_variance, + ti_effect, + predictor_variance, + measurement_error, + 0.6, + LagClock::EventTime, + ) + .expect("larger psi"); + assert!(doubled_psi > recovered); + assert_eq!( + recover_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait( + 0.0, + effect, + trait_variance, + initial_variance, + ti_effect, + predictor_variance, + measurement_error, + manifest_trait, + LagClock::EventTime + ) + .expect("zero loading") + .to_bits(), + (measurement_error + manifest_trait).to_bits() + ); + assert_eq!( + recover_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait( + loading, + 0.0, + trait_variance, + 0.0, + 0.0, + predictor_variance, + measurement_error, + manifest_trait, + LagClock::EventTime + ) + .expect("zero extras and p_0") + .to_bits(), + (measurement_error + manifest_trait).to_bits() + ); + let without_psi = recover_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait( + loading, + effect, + trait_variance, + initial_variance, + ti_effect, + predictor_variance, + measurement_error, + 0.0, + LagClock::EventTime, + ) + .expect("zero psi"); + let without_psi_expected = + recover_manifest_observed_variance(loading, total, measurement_error) + .expect("λ² total + θ"); + assert_eq!(without_psi.to_bits(), without_psi_expected.to_bits()); + let scaled = recover_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait( + 1e308, + 1.0, + 1e-308, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + LagClock::EventTime, + ) + .expect("scale extra"); + assert!((scaled - 1e308).abs() / 1e308 < 1e-15); + assert!(!(1e308_f64 * 1e308_f64).is_finite()); + assert_eq!( + recover_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait( + loading, + effect, + trait_variance, + initial_variance, + ti_effect, + predictor_variance, + measurement_error, + manifest_trait, + LagClock::SystemTime + ), + Err(PsychometricError::EventTimeRequired) + ); + assert_eq!( + recover_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait( + loading, + effect, + -0.8, + initial_variance, + ti_effect, + predictor_variance, + measurement_error, + manifest_trait, + LagClock::EventTime + ), + Err(PsychometricError::InvalidNumericInput) + ); + assert_eq!( + recover_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait( + loading, + effect, + trait_variance, + -1.6, + ti_effect, + predictor_variance, + measurement_error, + manifest_trait, + LagClock::EventTime + ), + Err(PsychometricError::InvalidNumericInput) + ); + assert_eq!( + recover_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait( + loading, + effect, + trait_variance, + initial_variance, + ti_effect, + -2.5, + measurement_error, + manifest_trait, + LagClock::EventTime + ), + Err(PsychometricError::InvalidNumericInput) + ); + assert_eq!( + recover_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait( + loading, + effect, + trait_variance, + initial_variance, + ti_effect, + predictor_variance, + measurement_error, + -0.3, + LagClock::EventTime + ), + Err(PsychometricError::InvalidNumericInput) + ); + assert_eq!( + recover_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait( + 1e308, + 1.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + LagClock::EventTime + ), + Err(PsychometricError::InvalidNumericInput) + ); + assert_eq!( + recover_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait( + loading, + 1e200, + 1.0, + 1.0, + 0.0, + 1.0, + measurement_error, + manifest_trait, + LagClock::EventTime + ), + Err(PsychometricError::InvalidNumericInput) + ); + assert_eq!( + recover_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait( + loading, + 0.0, + 1.0, + 1.0, + 1e200, + 1.0, + measurement_error, + manifest_trait, + LagClock::EventTime + ), + Err(PsychometricError::InvalidNumericInput) + ); + assert_eq!( + recover_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait( + loading, + f64::NAN, + trait_variance, + initial_variance, + ti_effect, + predictor_variance, + measurement_error, + manifest_trait, + LagClock::EventTime + ), + Err(PsychometricError::InvalidNumericInput) + ); + assert_eq!( + recover_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait( + loading, + effect, + trait_variance, + initial_variance, + f64::INFINITY, + predictor_variance, + measurement_error, + manifest_trait, + LagClock::EventTime + ), + Err(PsychometricError::InvalidNumericInput) + ); + assert_eq!( + refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_latent_total( + recovered, total + ), + Err( + PsychometricError::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotLatentTotal + ) + ); + assert_eq!( + refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_observed_variance_without_manifest_trait( + recovered, + without_psi_expected + ), + Err( + PsychometricError::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotObservedVarianceWithoutManifestTrait + ) + ); + assert_eq!( + refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_measurement_error( + recovered, + measurement_error + ), + Err( + PsychometricError::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotMeasurementError + ) + ); + assert_eq!( + refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_manifest_trait_variance( + recovered, + manifest_trait + ), + Err( + PsychometricError::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotManifestTraitVariance + ) + ); + assert_eq!( + refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_standardised_initial_total_variance( + recovered, 1.0 + ), + Err( + PsychometricError::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotStandardisedInitialTotalVariance + ) + ); + } } diff --git a/crates/psychometric_core/src/lib.rs b/crates/psychometric_core/src/lib.rs index c081a63f6..a5accd180 100644 --- a/crates/psychometric_core/src/lib.rs +++ b/crates/psychometric_core/src/lib.rs @@ -261,6 +261,17 @@ //! correlation; zero `MANIFESTTRAITVAR` fails closed; a non-event //! clock fails closed; `MANIFESTTRAITVAR` does not require `a < 0`; //! JSS PDF re-opened 2026-08-27T14:20Z), +//! recovers the Driver Eq. 5 of 2017-era `T0TOTALVAR` after +//! `addedT0TIPREDVAR` with nonzero `MANIFESTTRAITVAR` as +//! `λ² (t0_trait² · trait + p_0 + t0_b² v) + θ + ψ` (Eq. 5, p. 5; +//! Table 2, p. 12; Table 3, p. 13; 2017-era `summary.ctsemFit.R` +//! lines 322–339 then 437–442; form extra first, then add free +//! `T0VAR`, then form `t0_b² v`, then add, then `(λ total) λ + θ` +//! plus `ψ`; the latent total is not that observed map; +//! `λ² (extra + p_0 + ti_extra) + θ` omits `ψ`; `MANIFESTVAR` `θ` +//! is not that composition; `MANIFESTTRAITVAR` `ψ` is not that +//! composition; `T0TOTALVARstd` is not that map; JSS PDF re-opened +//! 2026-08-30T20:56Z), //! and refuses //! latent-mean comparison below strong invariance. @@ -379,6 +390,8 @@ pub use event_time::recover_initial_time_dependent_predictor_effect; pub use event_time::recover_initial_time_independent_predictor_carry; /// Exact scalar first-occasion `T0TIPREDEFFECT` shift `t0_b z`. pub use event_time::recover_initial_time_independent_predictor_effect; +/// Exact scalar Eq. 5 of 2017-era `T0TOTALVAR` after `addedT0TIPREDVAR` with `ψ`. +pub use event_time::recover_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait; /// Mean exact log-rate on already-centered irregular residuals. pub use event_time::recover_irregular_centered_residual_log_rate; /// Exact scalar §7.2 level-change `CINT` `κ = −a m x`. @@ -572,6 +585,16 @@ pub use event_time::refuse_initial_time_independent_effect_as_time_dependent_imp pub use event_time::refuse_initial_time_independent_observed_mean_as_initial_time_dependent_observed_mean; /// Refuse treating 2017-era `addedT0TIPREDVAR` as p. 16 `TRAITVARstd`. pub use event_time::refuse_initial_time_independent_variance_as_standardised_trait_variance; +/// Refuse treating Eq. 5 of `T0TOTALVAR` after `addedT0TIPREDVAR` with `ψ` as the latent total. +pub use event_time::refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_latent_total; +/// Refuse treating Eq. 5 of `T0TOTALVAR` after `addedT0TIPREDVAR` with `ψ` as `MANIFESTTRAITVAR`. +pub use event_time::refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_manifest_trait_variance; +/// Refuse treating Eq. 5 of `T0TOTALVAR` after `addedT0TIPREDVAR` with `ψ` as `MANIFESTVAR`. +pub use event_time::refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_measurement_error; +/// Refuse treating Eq. 5 of `T0TOTALVAR` after `addedT0TIPREDVAR` with `ψ` as that map without `ψ`. +pub use event_time::refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_observed_variance_without_manifest_trait; +/// Refuse treating Eq. 5 of `T0TOTALVAR` after `addedT0TIPREDVAR` with `ψ` as `T0TOTALVARstd`. +pub use event_time::refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_standardised_initial_total_variance; /// Refuse treating Driver Eq. 3–4 lagged latent covariance as `cov(y_t, y_{t-1})`. pub use event_time::refuse_latent_lagged_covariance_as_observed_covariance; /// Refuse treating Driver Eq. 5 latent mean as `E(y)`. diff --git a/crates/psychometric_core/tests/multilevel_event_time_recovery_contract.rs b/crates/psychometric_core/tests/multilevel_event_time_recovery_contract.rs index 1c0027f44..3f6cc25bf 100644 --- a/crates/psychometric_core/tests/multilevel_event_time_recovery_contract.rs +++ b/crates/psychometric_core/tests/multilevel_event_time_recovery_contract.rs @@ -2,10 +2,8 @@ #![allow(clippy::cast_precision_loss)] use psychometric_core::{ - ClusteredEventScore, ClusteredScore, EventOccasion, IndicatorKind, LagClock, - LaggedWithinResidual, PsychometricError, map_discrete_lag_across_event_intervals, - ordinary_least_squares_slope, recover_asymptotic_continuous_intercept, - recover_asymptotic_time_independent_predictor_effect, + map_discrete_lag_across_event_intervals, ordinary_least_squares_slope, + recover_asymptotic_continuous_intercept, recover_asymptotic_time_independent_predictor_effect, recover_asymptotic_time_independent_predictor_variance, recover_cluster_mean_within_between_slopes, recover_discrete_constant_predictor_effect, recover_discrete_continuous_intercept_effect, recover_discrete_lag_from_log_rate, @@ -28,6 +26,7 @@ use psychometric_core::{ recover_initial_time_dependent_predictor_effect, recover_initial_time_independent_predictor_carry, recover_initial_time_independent_predictor_effect, + recover_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait, recover_irregular_centered_residual_log_rate, recover_kish_weighted_slope, recover_level_change_continuous_intercept, recover_level_change_discrete_increment, recover_level_change_extra_process_contribution, @@ -104,6 +103,11 @@ use psychometric_core::{ refuse_initial_time_independent_effect_as_time_dependent_impulse, refuse_initial_time_independent_observed_mean_as_initial_time_dependent_observed_mean, refuse_initial_time_independent_variance_as_standardised_trait_variance, + refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_latent_total, + refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_manifest_trait_variance, + refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_measurement_error, + refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_observed_variance_without_manifest_trait, + refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_standardised_initial_total_variance, refuse_latent_lagged_covariance_as_observed_covariance, refuse_latent_mean_as_observed_mean, refuse_latent_variance_as_observed_variance, refuse_level_change_extra_process_as_impulse, refuse_level_change_extra_process_as_increment, refuse_level_change_extra_process_as_intercept, @@ -164,7 +168,9 @@ use psychometric_core::{ refuse_unmatched_time_varying_predictor_interval, refuse_unstandardised_manifest_trait_variance_as_standardised_manifest_trait_variance, refuse_unstandardised_manifest_variance_as_standardised_manifest_variance, - refuse_unstandardised_trait_variance_as_standardised_trait_variance, + refuse_unstandardised_trait_variance_as_standardised_trait_variance, ClusteredEventScore, + ClusteredScore, EventOccasion, IndicatorKind, LagClock, LaggedWithinResidual, + PsychometricError, }; fn rmse(truth: &[f64], recovered: &[f64]) -> f64 { @@ -2239,8 +2245,8 @@ fn discrete_observed_mean_with_initial_time_independent_predictor_is_not_impulse } #[test] -fn discrete_observed_mean_with_initial_time_independent_predictor_refuses_evolved_process_impulse_and_carry() - { +fn discrete_observed_mean_with_initial_time_independent_predictor_refuses_evolved_process_impulse_and_carry( +) { let loading = 2.0_f64; let drift = -0.5_f64; let delta = 2.0_f64; @@ -2394,8 +2400,8 @@ fn discrete_observed_mean_with_initial_time_independent_predictor_zero_loading_i } #[test] -fn discrete_observed_mean_with_initial_time_independent_predictor_refuses_overflow_and_non_event_clocks() - { +fn discrete_observed_mean_with_initial_time_independent_predictor_refuses_overflow_and_non_event_clocks( +) { assert_eq!( recover_discrete_observed_mean_with_initial_time_independent_predictor( 1e308, @@ -3326,8 +3332,8 @@ fn discrete_observed_mean_with_initial_time_dependent_predictor_is_not_impulse_o #[test] #[allow(clippy::too_many_lines)] -fn discrete_observed_mean_with_initial_time_dependent_predictor_refuses_evolved_process_impulse_and_carry() - { +fn discrete_observed_mean_with_initial_time_dependent_predictor_refuses_evolved_process_impulse_and_carry( +) { let loading = 2.0_f64; let drift = -0.5_f64; let delta = 2.0_f64; @@ -3500,8 +3506,8 @@ fn discrete_observed_mean_with_initial_time_dependent_predictor_zero_loading_is_ } #[test] -fn discrete_observed_mean_with_initial_time_dependent_predictor_refuses_overflow_and_non_event_clocks() - { +fn discrete_observed_mean_with_initial_time_dependent_predictor_refuses_overflow_and_non_event_clocks( +) { assert_eq!( recover_discrete_observed_mean_with_initial_time_dependent_predictor( 1e308, @@ -6540,3 +6546,142 @@ fn manifest_variance_std_clock_path_is_runtime_opaque() { Err(PsychometricError::EventTimeRequired) ); } + +#[test] +#[allow(clippy::too_many_lines)] +fn initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_recovers_eq5_on_event_time( +) { + let loading = 2.0_f64; + let effect = 0.5_f64; + let trait_variance = 0.8_f64; + let initial_variance = 1.6_f64; + let ti_effect = 0.4_f64; + let predictor_variance = 2.5_f64; + let measurement_error = 0.1_f64; + let manifest_trait = 0.3_f64; + let extra = effect * effect * trait_variance; + let ti_extra = ti_effect * ti_effect * predictor_variance; + let total = extra + initial_variance + ti_extra; + let recovered = + recover_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait( + loading, + effect, + trait_variance, + initial_variance, + ti_effect, + predictor_variance, + measurement_error, + manifest_trait, + LagClock::EventTime, + ) + .expect("eq5 T0TOTALVAR + addedT0TIPREDVAR + psi"); + assert!( + (recovered - (loading * loading * total + measurement_error + manifest_trait)).abs() < 1e-15, + "Driver et al. (2017, Eq. 5 of 2017-era T0TOTALVAR after addedT0TIPREDVAR with MANIFESTTRAITVAR): λ² (t0_trait² · trait + p_0 + t0_b² v) + θ + ψ" + ); + let signed = + recover_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait( + loading, + -effect, + trait_variance, + initial_variance, + -ti_effect, + predictor_variance, + measurement_error, + manifest_trait, + LagClock::EventTime, + ) + .expect("signed effects"); + assert_eq!(signed.to_bits(), recovered.to_bits()); + assert_eq!( + recover_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait( + 0.0, + effect, + trait_variance, + initial_variance, + ti_effect, + predictor_variance, + measurement_error, + manifest_trait, + LagClock::EventTime + ) + .expect("zero loading") + .to_bits(), + (measurement_error + manifest_trait).to_bits() + ); + let without_psi = recover_manifest_observed_variance(loading, total, measurement_error) + .expect("λ² total + θ"); + assert_eq!( + recover_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait( + loading, + effect, + trait_variance, + initial_variance, + ti_effect, + predictor_variance, + measurement_error, + 0.0, + LagClock::EventTime + ) + .expect("zero psi") + .to_bits(), + without_psi.to_bits() + ); + assert_eq!( + recover_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait( + loading, + effect, + trait_variance, + initial_variance, + ti_effect, + predictor_variance, + measurement_error, + manifest_trait, + LagClock::AssertionTime + ), + Err(PsychometricError::EventTimeRequired) + ); + assert_eq!( + refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_latent_total( + recovered, total + ), + Err( + PsychometricError::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotLatentTotal + ) + ); + assert_eq!( + refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_observed_variance_without_manifest_trait( + recovered, + without_psi + ), + Err( + PsychometricError::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotObservedVarianceWithoutManifestTrait + ) + ); + assert_eq!( + refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_measurement_error( + recovered, + measurement_error + ), + Err( + PsychometricError::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotMeasurementError + ) + ); + assert_eq!( + refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_manifest_trait_variance( + recovered, + manifest_trait + ), + Err( + PsychometricError::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotManifestTraitVariance + ) + ); + assert_eq!( + refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_standardised_initial_total_variance( + recovered, 1.0 + ), + Err( + PsychometricError::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotStandardisedInitialTotalVariance + ) + ); +} diff --git a/crates/psychometric_core/tests/scientific_claim_boundary_contract.rs b/crates/psychometric_core/tests/scientific_claim_boundary_contract.rs index 6ccf7f38b..c3e9fc223 100644 --- a/crates/psychometric_core/tests/scientific_claim_boundary_contract.rs +++ b/crates/psychometric_core/tests/scientific_claim_boundary_contract.rs @@ -1,7 +1,6 @@ //! Scientific claim boundaries for compositional coordinates and posterior draws. use psychometric_core::{ - ClusteredEventScore, ClusteredScore, IndicatorKind, LagClock, LaggedWithinResidual, ordinary_least_squares_slope, posterior_draw_point_estimate_mean, recover_asymptotic_continuous_intercept, recover_asymptotic_time_independent_predictor_effect, recover_asymptotic_time_independent_predictor_variance, @@ -24,6 +23,7 @@ use psychometric_core::{ recover_initial_time_dependent_predictor_effect, recover_initial_time_independent_predictor_carry, recover_initial_time_independent_predictor_effect, + recover_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait, recover_irregular_centered_residual_log_rate, recover_level_change_continuous_intercept, recover_level_change_discrete_increment, recover_level_change_extra_process_contribution, recover_level_change_extra_process_contribution_after, recover_loading_point_estimate_mean, @@ -103,6 +103,11 @@ use psychometric_core::{ refuse_initial_time_independent_effect_as_time_dependent_impulse, refuse_initial_time_independent_observed_mean_as_initial_time_dependent_observed_mean, refuse_initial_time_independent_variance_as_standardised_trait_variance, + refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_latent_total, + refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_manifest_trait_variance, + refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_measurement_error, + refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_observed_variance_without_manifest_trait, + refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_standardised_initial_total_variance, refuse_latent_lagged_covariance_as_observed_covariance, refuse_latent_mean_as_observed_mean, refuse_latent_variance_as_observed_variance, refuse_level_change_extra_process_as_impulse, refuse_level_change_extra_process_as_increment, refuse_level_change_extra_process_as_intercept, @@ -181,6 +186,7 @@ use psychometric_core::{ refuse_unstandardised_manifest_variance_as_standardised_manifest_variance, refuse_unstandardised_trait_variance_as_standardised_trait_variance, refuse_within_subject_scaled_initial_latent_mean_as_standardised_initial_latent_mean, + ClusteredEventScore, ClusteredScore, IndicatorKind, LagClock, LaggedWithinResidual, }; #[test] @@ -3782,3 +3788,105 @@ fn standardised_manifest_variance_is_not_unstandardised_traitstd_or_observed_var ) ); } + +#[test] +#[allow(clippy::too_many_lines)] +fn initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_is_not_latent_total_or_measurement_error( +) { + let loading = 2.0_f64; + let effect = 0.5_f64; + let trait_variance = 0.8_f64; + let initial_variance = 1.6_f64; + let ti_effect = 0.4_f64; + let predictor_variance = 2.5_f64; + let measurement_error = 0.1_f64; + let manifest_trait = 0.3_f64; + let extra = effect * effect * trait_variance; + let ti_extra = ti_effect * ti_effect * predictor_variance; + let total = extra + initial_variance + ti_extra; + let recovered = + recover_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait( + loading, + effect, + trait_variance, + initial_variance, + ti_effect, + predictor_variance, + measurement_error, + manifest_trait, + LagClock::EventTime, + ) + .expect("eq5 T0TOTALVAR + addedT0TIPREDVAR + psi"); + let expected = loading * loading * total + measurement_error + manifest_trait; + assert!( + (recovered - expected).abs() < 1e-15, + "Driver et al. (2017, Eq. 5 of 2017-era T0TOTALVAR after addedT0TIPREDVAR with MANIFESTTRAITVAR): λ² (t0_trait² · trait + p_0 + t0_b² v) + θ + ψ" + ); + assert!( + (total - recovered).abs() > 1e-9, + "Driver et al. (2017, 2017-era T0TOTALVAR after addedT0TIPREDVAR): extra+p_0+ti_extra is not λ²(extra+p_0+ti_extra)+θ+ψ" + ); + let without_psi = recover_manifest_observed_variance(loading, total, measurement_error) + .expect("λ² total + θ"); + assert!( + (without_psi - recovered).abs() > 1e-9, + "omitting ψ is not Eq. 5 with MANIFESTTRAITVAR" + ); + assert_eq!( + recover_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait( + loading, + effect, + trait_variance, + initial_variance, + ti_effect, + predictor_variance, + measurement_error, + manifest_trait, + LagClock::DocumentTime + ), + Err(psychometric_core::PsychometricError::EventTimeRequired) + ); + assert_eq!( + refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_latent_total( + recovered, total + ), + Err( + psychometric_core::PsychometricError::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotLatentTotal + ) + ); + assert_eq!( + refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_observed_variance_without_manifest_trait( + recovered, + without_psi + ), + Err( + psychometric_core::PsychometricError::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotObservedVarianceWithoutManifestTrait + ) + ); + assert_eq!( + refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_measurement_error( + recovered, + measurement_error + ), + Err( + psychometric_core::PsychometricError::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotMeasurementError + ) + ); + assert_eq!( + refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_manifest_trait_variance( + recovered, + manifest_trait + ), + Err( + psychometric_core::PsychometricError::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotManifestTraitVariance + ) + ); + assert_eq!( + refuse_initial_total_observed_variance_with_time_independent_predictor_and_manifest_trait_as_standardised_initial_total_variance( + recovered, 1.0 + ), + Err( + psychometric_core::PsychometricError::InitialTotalObservedVarianceWithTimeIndependentPredictorAndManifestTraitIsNotStandardisedInitialTotalVariance + ) + ); +} diff --git a/docs/adr/0005-posterior-esem-dsem.md b/docs/adr/0005-posterior-esem-dsem.md index ee1e6cf0d..bf494d303 100644 --- a/docs/adr/0005-posterior-esem-dsem.md +++ b/docs/adr/0005-posterior-esem-dsem.md @@ -37,6 +37,7 @@ The executable standardised-initial-variance slice recovers Driver et al. (2017, The executable standardised-asymptotic-diffusion slice recovers Driver et al. (2017, p. 16 `asymDIFFUSIONstd`) as `p / p = 1` after strictly positive `asymDIFFUSION` `p = −q / (2 a)` (footnote 4; 2017-era `summary.ctsemFit.R` `solve(sqrt(diag(asymDIFFUSION))) %&% asymDIFFUSION`; JSS PDF re-opened 2026-08-26T17:20Z). Unstandardised `p` is defined for a zero process and is not that map. `p_0 / p_0 = 1` is the named `T0VARstd` first-occasion correlation and is not `asymDIFFUSIONstd` even when both equal 1. `q / p = −2 a` is the named `DIFFUSIONstd` continuous-diffusion ratio and is not this correlation. `v / v = 1` is the named `TIPREDVARstd` predictor correlation and is not this map even when both equal 1. Zero `q` and `a ≥ 0` fail closed. This is not ctsem estimation. The executable standardised-manifest-trait-variance slice recovers Driver et al. (2017, p. 16 `MANIFESTTRAITVARstd`) as `ψ / ψ = 1` after strictly positive `MANIFESTTRAITVAR` (Table 2 `Ψ_τ`; §7.1, p. 19; footnote 4; 2017-era `summary.ctsemFit.R` `solve(sqrt(diag(MANIFESTTRAITVAR) + ridging)) %&% MANIFESTTRAITVAR`; JSS PDF re-opened 2026-08-27T14:20Z). Unstandardised `ψ` is defined for a zero manifest trait and is not that map. `trait / trait = 1` is the named `TRAITVARstd` process-level correlation and is not `MANIFESTTRAITVARstd` even when both equal 1. `θ` is `MANIFESTVAR` and is not that correlation. `MANIFESTTRAITVAR` does not require `a < 0`. This is not ctsem estimation. The executable standardised-manifest-variance slice recovers Driver et al. (2017, p. 16 `MANIFESTVARstd`) as `θ / θ = 1` after strictly positive `MANIFESTVAR` (Table 2 measurement-error Cholesky; Eq. 5 `ε ~ N(0, Θ)`; footnote 4; 2017-era `summary.ctsemFit.R` `solve(sqrt(diag(MANIFESTVAR) + ridging)) %&% MANIFESTVAR`; default ridge 0; JSS PDF re-opened 2026-08-27T14:25Z). Unstandardised `θ` is defined for a zero residual and is not that map. `ψ / ψ = 1` is `MANIFESTTRAITVARstd` and is not `MANIFESTVARstd` even when both equal 1. `MANIFESTVAR` does not require `a < 0`. +The executable Eq. 5 of 2017-era `T0TOTALVAR` after `addedT0TIPREDVAR` with nonzero `MANIFESTTRAITVAR` slice recovers `λ² (t0_trait² · trait + p_0 + t0_b² v) + θ + ψ` on event time (Eq. 5, p. 5; Table 2, p. 12; Table 3, p. 13; 2017-era `summary.ctsemFit.R` lines 322–339 then 437–442; JSS PDF re-opened 2026-08-30T20:56Z). Form extra first, then add free `T0VAR`, then form `t0_b² v`, then add, then `λ² total + θ + ψ`. The latent total is not that observed map. `λ² (extra + p_0 + ti_extra) + θ` omits `ψ`. `MANIFESTVAR` `θ` is not this composition. `MANIFESTTRAITVAR` `ψ` is not this composition. `T0TOTALVARstd` is not this map. This is not ctsem estimation. The executable standardised-trait-variance slice recovers Driver et al. (2017, p. 16 `TRAITVARstd`) as `trait / trait = 1` after strictly positive `TRAITVAR` (Table 2 `φ_ξ`; §7.1; footnote 4; 2017-era `summary.ctsemFit.R` `solve(sqrt(diag(TRAITVAR))) %&% TRAITVAR`; JSS PDF re-opened 2026-08-26T17:45Z). Unlike `T0VARstd` there is no ridge addend. Unstandardised `TRAITVAR` is defined for a zero trait and is not that map. `p_0 / p_0 = 1` is the named `T0VARstd` first-occasion correlation and is not `TRAITVARstd` even when both equal 1. `t0_b² v` is `addedT0TIPREDVAR` and is not this correlation. Zero `TRAITVAR` and a non-event clock fail closed. `TRAITVAR` does not require `a < 0`. This is not ctsem estimation. diff --git a/docs/research/multilevel-event-time-recovery.md b/docs/research/multilevel-event-time-recovery.md index 3701dcb4b..4ca66a133 100644 --- a/docs/research/multilevel-event-time-recovery.md +++ b/docs/research/multilevel-event-time-recovery.md @@ -108,11 +108,13 @@ This slice stays inside `psychometric_core`. It does not add a second invariance 102. refuse unmatched sampling and constancy intervals for a time-varying predictor (Oud & Jansen, 2000, unread); 103. refuse the difference quotient as a continuous-time rate; 104. apply the same event-time map to CWC residuals (still not DSEM); -105. map already-centered lagged residuals with irregular event intervals without re-centering (Curran & Bauer, 2011, pp. 607–608). +105. map already-centered lagged residuals with irregular event intervals without re-centering (Curran & Bauer, 2011, pp. 607–608); +106. recover the exact scalar Eq. 5 of 2017-era `T0TOTALVAR` after `addedT0TIPREDVAR` with nonzero `MANIFESTTRAITVAR` as `λ² (t0_trait² · trait + p_0 + t0_b² v) + θ + ψ` (Driver et al., 2017, Eq. 5, p. 5; Table 2, p. 12; Table 3, p. 13; 2017-era ctsem `summary.ctsemFit.R` lines 322–339 then 437–442; JSS PDF re-opened 2026-08-30T20:56Z; form extra first, then add free `T0VAR`, then form `t0_b² v`, then add, then `λ² total + θ + ψ`; a zero extra, a zero `p_0`, a zero TI extra, or a zero loading is exactly `θ + ψ` when the remaining latent terms are zero; a zero manifest trait is exactly `λ² (extra + p_0 + ti_extra) + θ`; `trait < 0`, `p_0 < 0`, `v < 0`, or `ψ < 0` fails closed; a non-event clock fails closed; free `T0TRAITEFFECT` / `T0VAR` / `T0TIPREDEFFECT` / `MANIFESTTRAITVAR` do not require `a < 0`); +107. refuse treating that observed total as the latent total `extra + p_0 + ti_extra`, as Eq. 5 of that total without `ψ`, as `MANIFESTVAR` `θ`, as `MANIFESTTRAITVAR` `ψ`, or as `T0TOTALVARstd` `total / total = 1`. ## Claim boundary -This is two-level OLS and a noiseless scalar continuous-time map. It is not DSEM, not RI-CLPM, not a random-effects sampler, not a Kalman filter, and not a matrix `expm` implementation. The CWC cluster-mean coefficient is the **contextual** effect, not the between-cluster effect. Discrete lags from different event intervals are not one coefficient. Equation 14 is not Equation 12. Discrete process noise \(Q_{\Delta t}\) is not the continuous diffusion \(GG^{\top}\). \(Q_{\Delta t}\) is the conditional residual variance, not \(\operatorname{Var}(\eta_{t})\). Finite-interval \(Q_{\Delta t}\) is not the stationary within-subject variance. Trait variance is not process noise and not the stationary within-subject variance. Measurement-error variance is not the observed-indicator variance. Latent variance is not the observed-indicator variance. Manifest means are not the observed-indicator mean. The latent mean is not the observed-indicator mean. The continuous intercept is not the manifest mean. The first-occasion latent mean is not the evolved latent mean. The continuous intercept is not the discrete mean increment. The first-occasion observed mean is not the evolved observed mean. The contemporaneous `TDPREDEFFECT` impulse is not the continuous intercept, not the time-independent discrete effect, and not Voelkle et al. (2012, Eq. 14). The time-independent `TIPREDEFFECT` increment is not the continuous intercept, not the contemporaneous impulse, not Voelkle et al. (2012, Eq. 14), and not the coefficient `B`. The within-interval `TDPREDEFFECT` carry `e^{A(t−u)} M x` for `t0 < u < t` is not the contemporaneous Dirac, not `CINT`, not `TIPREDEFFECT`, and not Voelkle et al. (2012, Eq. 14). The evolved observed mean `τ + λ μ_t` is not the contemporaneous-impulse observed mean `τ + λ(μ_t + m x)`. The contemporaneous composition `τ + λ(μ_t + m x)` is not the impulse-carry observed mean `τ + λ(μ_t + e^{a(t−u)} m x)` when `u ≠ t`. The evolved observed mean `τ + λ μ_t` is not the impulse-carry observed mean. The carried latent mean is not `E(y_t)`. The evolved-plus-impulse latent mean is not `E(y_t)`. The evolved observed mean `τ + λ μ_t` is not the time-independent-predictor observed mean `τ + λ(μ_t + A^{-1}[e^{A Δt} − I] B z)`. The contemporaneous composition `τ + λ(μ_t + m x)` is not that time-independent-predictor observed mean. The impulse-carry composition `τ + λ(μ_t + e^{a(t−u)} m x)` is not that time-independent-predictor observed mean when `u ≠ t`. The evolved-plus-increment latent mean is not `E(y_t)`. The Table 3 first-occasion `T0TIPREDEFFECT` shift `t0_b z` is not the Eq. 3 process increment `A^{-1}[e^{A Δt} − I] B z`, not `κ`, and not `M x`. The Eq. 3 first-summand carry `e^{A Δt} t0_b z` is not `t0_b z` and is not that process increment. `T0TIPREDEFFECT` is the coefficient, not the first-occasion shift. The evolved observed mean `τ + λ μ_t` is not the first-occasion TI-predictor observed mean `τ + λ(μ_t + e^{a Δt} t0_b z)`. The process-increment composition `τ + λ(μ_t + A^{-1}[e^{A Δt} − I] B z)` is not that first-occasion observed mean. The contemporaneous composition `τ + λ(μ_t + m x)` is not that first-occasion observed mean. The impulse-carry composition `τ + λ(μ_t + e^{a(t−u)} m x)` is not that first-occasion observed mean when `u ≠ t0`. The evolved-plus-T0TIPRED latent mean is not `E(y_t)`. The Table 3 first-occasion `T0TDPREDEFFECT` shift `t0_m x0` is not `M x`, not `e^{A(t−u)} M x` for `t0 < u < t`, not `t0_b z`, not `A^{-1}[e^{A Δt} − I] B z`, and not `κ`. The Eq. 3 first-summand carry `e^{A Δt} t0_m x0` is not `t0_m x0` and is not that within-interval impulse carry. `T0TDPREDEFFECT` is the coefficient, not the first-occasion shift. An impulse at `u ≤ t0` that used `M` is already in `η(t0)` as `TDPREDEFFECT`, not as `T0TDPREDEFFECT`. The evolved observed mean `τ + λ μ_t` is not the first-occasion TD-predictor observed mean `τ + λ(μ_t + e^{a Δt} t0_m x0)`. The process-increment composition `τ + λ(μ_t + A^{-1}[e^{A Δt} − I] B z)` is not that first-occasion TD observed mean. The contemporaneous composition `τ + λ(μ_t + m x)` is not that first-occasion TD observed mean. The impulse-carry composition `τ + λ(μ_t + e^{a(t−u)} m x)` is not that first-occasion TD observed mean when `u ≠ t0`. The first-occasion TI composition `τ + λ(μ_t + e^{a Δt} t0_b z)` is not that first-occasion TD observed mean. Same numbers as `T0TIPREDEFFECT` yield the same product; Table 3 names a different matrix. The evolved-plus-T0TDPRED latent mean is not `E(y_t)`. The §7.2 level-change `CINT` `κ = −a m x` is not the dissipating Dirac `m x`, not a free `CINT`, and not `A^{-1}[e^{A Δt} − I] B z`. Lasting level change via that `CINT` setting requires `a < 0`. The extra near-zero-drift latent process also named in §7.2 is a different specification and is not that `CINT` setting. The Eq. 3 increment of that setting `(1 − e^{a Δt}) m x` is not the dissipating Dirac `m x`, not `κ`, and not `A^{-1}[e^{A Δt} − I] B z`. Underflow of `e^{a Δt}` to `+0` keeps the equilibrium offset `m x`. The §7.2 extra-process contribution `a_{ηξ} x (e^{ε Δt} − e^{a Δt}) / (ε − a)` is not `κ = −a m x`, not `(1 − e^{a Δt}) m x`, and not the dissipating Dirac `m x`. Lasting level change via that extra process requires `ε < 0`. Precisely `ε = 0` causes computational problems in the printed specification. The extra-process observed mean `τ + λ(μ_t + a_{ηξ} x (e^{ε Δt} − e^{a Δt}) / (ε − a))` is not `τ + λ μ_t`, not `τ + λ(μ_t + m x)`, not the contribution, and not the evolved-plus-contribution latent mean. The extra process has `LAMBDA` 0 and is not an observed indicator. `T0TDPREDEFFECT` on the extra process uses `Δt = t − t0` for both the original-process evolution and the extra drive. `TDPREDEFFECT` after `t0` uses `t − u` with `t0 < u < t` for the extra drive while `μ_t` still uses `Δt`. The after-t0 extra-process observed mean is not the first-occasion extra-process observed mean when `u ≠ t0`. The impulse-carry `e^{a(t−u)} m x` is a Dirac on the original process and is not that `DRIFT` drive. The §7.2 `asymTIPREDEFFECT` `-B z / a` is the expected total change in process means given a time-independent predictor. It is not the coefficient `B`, not the finite-interval increment `A^{-1}[e^{A Δt} − I] B z`, not `CINT`, and not `M x`. Lasting asymptotic change via that map requires `a < 0`. The §7.2 `addedTIPREDVAR` `(B / a)² v` is the stable between-subject variance accounted for by that predictor. It is not `TRAITVAR`, not `asymDIFFUSION`, and not `-B z / a`. Table 2 `asymCINT` `-κ / a` is the intercept contribution to the stationary process mean. It is not `κ`, not the finite-interval increment `A^{-1}[e^{A Δt} − I] κ`, not `T0MEANS`, and not `-B z / a`. Lasting asymptotic intercept change via that map requires `a < 0`. Page 16 notes that a `T0MEANS` stationarity constraint includes time-independent predictors; that composition is not this intercept-only map. The p. 16 constrained first-occasion mean `-κ / a + −B z / a` is not free `T0MEANS`, not `asymCINT` alone, not `asymTIPREDEFFECT` alone, and not the finite-interval discrete latent mean. Equation 5 of that constrained mean `τ + λ(−κ / a + −B z / a)` is not `τ + λ μ_0`, not `τ + λ(−κ / a)` when `B z ≠ 0`, not `τ + λ μ_t`, not `MANIFESTMEANS`, and not the constrained latent mean. The p. 16 constrained first-occasion variance `trait + −q / (2 a) + (B / a)² v` is not free `T0VAR`, not `asymDIFFUSION` alone, not `TRAITVAR` alone, not `addedTIPREDVAR` alone, and not the finite-interval discrete latent variance. Equation 5 of that constrained variance `λ²(trait + −q / (2 a) + (B / a)² v) + θ + ψ` is not `λ² p_0 + θ`, not `λ²(−q / (2 a)) + θ` when `TRAITVAR` or `addedTIPREDVAR` is nonzero, not `λ² Var(η_t) + θ` when the first occasion is constrained, not `MANIFESTVAR`, and not the constrained latent variance. The lagged covariance of that constrained process `trait + e^{a Δt}(−q / (2 a)) + (B / a)² v` is not contemporaneous `T0VAR`, not `e^{a Δt}` of the constrained total, and not `trait + e^{a Δt} p` when `addedTIPREDVAR` is nonzero. Trait variance and `addedTIPREDVAR` do not decay with `e^{a Δt}`. Equation 5 of that lagged covariance `λ²(trait + e^{a Δt}(−q / (2 a)) + (B / a)² v) + ψ` is not `θ`, not contemporaneous `Var(y_0)`, and not the lagged latent covariance. Independent measurement error does not enter lagged observed covariance. The later-occasion variance of that constrained process `trait + e^{2 a Δt}(−q / (2 a)) + Q_Δt + (B / a)² v` equals contemporaneous `T0VAR` under stationarity and is not the lagged covariance, not `e^{2 a Δt}` of the constrained total plus `Q_Δt`, and not `Q_Δt` alone. Trait variance and `addedTIPREDVAR` do not enter `Q_Δt`. Equation 5 of that later-occasion variance `λ²(trait + e^{2 a Δt}(−q / (2 a)) + Q_Δt + (B / a)² v) + θ + ψ` is not `θ`, not lagged `cov(y_t, y_{t-1})`, and not the later-occasion latent variance. The later-occasion variance of §4.3 predetermined `T0VAR` `trait + e^{2 a Δt} p_0 + Q_Δt + (B / a)² v` is not stationary later-occasion variance when `p_0` is free, not `e^{2 a Δt}` of `trait + p_0 + (B / a)² v` plus `Q_Δt`, and not free `p_0`. Trait variance and `addedTIPREDVAR` do not enter `Q_Δt`. Setting `p_0 = −q / (2 a)` recovers the stationary later-occasion map. As `Δt → ∞` with stable `a < 0` the composition approaches contemporaneous stationary `T0VAR`. Nonzero diffusion with `a ≥ 0` is a growing process and is kept. Equation 5 of that predetermined later-occasion variance `λ²(trait + e^{2 a Δt} p_0 + Q_Δt + (B / a)² v) + θ + ψ` is not `θ`, not the predetermined later-occasion latent variance, and not stationary later-occasion observed variance when `p_0` is free. The lagged covariance of §4.3 predetermined `T0VAR` `trait + e^{a Δt} p_0 + (B / a)² v` is not stationary lagged covariance when `p_0` is free, not later-occasion variance, not `e^{a Δt}` of `trait + p_0 + (B / a)² v`, and not free `p_0`. Trait variance and `addedTIPREDVAR` do not decay with `e^{a Δt}`. Setting `p_0 = −q / (2 a)` recovers the stationary lagged map. As `Δt → ∞` with stable `a < 0` the state term vanishes. A zero-diffusion carry with `a ≥ 0` is `e^{a Δt} p_0` and is kept. Equation 5 of that predetermined lagged covariance `λ²(trait + e^{a Δt} p_0 + (B / a)² v) + ψ` is not `θ`, not the predetermined lagged latent covariance, not predetermined later observed variance, and not stationary lagged observed covariance when `p_0` is free. Independent measurement error does not enter lagged observed covariance. The first-occasion variance of §4.3 predetermined `T0VAR` `trait + p_0 + (B / a)² v` is not stationary first-occasion variance when `p_0` is free, not free `p_0`, not lagged covariance, and not later-occasion variance. Trait variance and `addedTIPREDVAR` do not decay and do not enter `Q_Δt`. Setting `p_0 = −q / (2 a)` recovers the stationary first-occasion map. As `Δt → 0+` the lagged and later maps approach this composition. Trait-only variance does not require a stable drift. Equation 5 of that predetermined first-occasion variance `λ²(trait + p_0 + (B / a)² v) + θ + ψ` is not `θ`, not the predetermined first-occasion latent variance, not stationary first-occasion observed variance, and not predetermined later observed variance when `p_0` is free. The later-start lagged covariance of §4.3 predetermined `T0VAR` `trait + e^{a s}(e^{2 a u} p_0 + Q_u) + (B / a)² v` is not first-occasion lagged covariance when `u > 0`, not later-occasion variance, not stationary lagged covariance when `p_0` is free, and not `e^{a s}` of the later total. Trait variance and `addedTIPREDVAR` do not decay with `e^{a s}`. Setting `p_0 = −q / (2 a)` recovers the stationary lagged map. As `u → 0+` the composition approaches first-occasion lagged covariance. As `s → 0+` the composition approaches later-occasion variance at `u`. Nonzero diffusion with `a ≥ 0` is a growing process and is kept. Equation 5 of that later-start lagged covariance `λ²(trait + e^{a s}(e^{2 a u} p_0 + Q_u) + (B / a)² v) + ψ` is not `θ`, not the later-start lagged latent covariance, not first-occasion lagged observed covariance, not predetermined later observed variance, and not stationary lagged observed covariance when `p_0` is free. Independent measurement error does not enter lagged observed covariance. The later-start later-occasion variance of §4.3 predetermined `T0VAR` `trait + e^{2 a s}(e^{2 a u} p_0 + Q_u) + Q_s + (B / a)² v` is not later-occasion variance at `u` when `s > 0`, not later-start lagged covariance, not stationary later-occasion variance when `p_0` is free, not `e^{2 a s}` of the later total plus `Q_s`, and not later-occasion variance over the lag interval alone when `u > 0`. Trait variance and `addedTIPREDVAR` do not enter `Q_s`. Chapman–Kolmogorov writes `Q_{u+s} = e^{2 a s} Q_u + Q_s`. Setting `p_0 = −q / (2 a)` recovers the stationary later-occasion map. As `u → 0+` the composition approaches later-occasion variance over `s`. As `s → 0+` the composition approaches later-occasion variance at `u`. Nonzero diffusion with `a ≥ 0` is a growing process and is kept. Equation 5 of that later-start later-occasion variance `λ²(trait + e^{2 a s}(e^{2 a u} p_0 + Q_u) + Q_s + (B / a)² v) + θ + ψ` is not `θ`, not the later-start later-occasion latent variance, not predetermined later observed variance, not later-start lagged observed covariance, and not stationary later-occasion observed variance when `p_0` is free. Page 16 `discreteDRIFTstd` is `e^{a Δt}` after strictly positive `asymDIFFUSION` `-q / (2 a)` (footnote 4: standardise `DRIFT` using only within-subject variance, not the total). Unstandardised `e^{a Δt}` is defined for growing `a ≥ 0` and for zero diffusion and is not `discreteDRIFTstd`. The §7.1 trait-plus-state autocorrelation `(trait + e^{a Δt} p + added) / (trait + p + added)` uses `TRAITVAR` and is not `discreteDRIFTstd`. `TRAITVAR` is not the standardisation variance. Page 16 `discreteDIFFUSIONstd` is `Q_Δt / (−q / (2 a))` after strictly positive `asymDIFFUSION` `-q / (2 a)` (footnote 4: standardise process noise using only within-subject variance, not the total). Unstandardised `Q_Δt` is defined for growing `a ≥ 0` and for zero diffusion and is not `discreteDIFFUSIONstd`. The continuous standardisation `q / (−q / (2 a)) = −2 a` is not `discreteDIFFUSIONstd`. `Q_Δt / (trait + p + added)` uses `TRAITVAR` and is not `discreteDIFFUSIONstd`. `TRAITVAR` is not the standardisation variance. Page 16 `DIFFUSIONstd` is `q / (−q / (2 a))` after strictly positive `asymDIFFUSION` `-q / (2 a)` (footnote 4: standardise process noise using only within-subject variance, not the total). Unstandardised `q` is defined for growing `a ≥ 0` and for zero diffusion and is not `DIFFUSIONstd`. The discrete standardisation `Q_Δt / (−q / (2 a)) = 1 − exp(2 a Δt)` depends on the event interval and is not `DIFFUSIONstd`. `q / (trait + p + added)` uses `TRAITVAR` and is not `DIFFUSIONstd`. `TRAITVAR` is not the standardisation variance. Page 16 `DRIFTstd` is the continuous auto-effect after strictly positive `asymDIFFUSION` `-q / (2 a)` (footnote 4: standardise `DRIFT` using only within-subject variance, not the total). Unstandardised `a` is defined for growing `a ≥ 0` and for zero diffusion and is not `DRIFTstd`. The discrete standardisation `e^{a Δt}` depends on the event interval and is not `DRIFTstd`. `a p / (trait + p + added)` uses `TRAITVAR` and is not `DRIFTstd`. `TRAITVAR` is not the standardisation variance. Page 16 `asymTIPREDEFFECTstd` is `(-B / a) · √v / √(-q / (2 a))` after strictly positive `asymDIFFUSION` `-q / (2 a)` and strictly positive predictor variance `v` (footnote 4: standardise using only the relevant variance, not the total; the affecting variance is `TIPREDVAR`; the affected variance is `asymDIFFUSION`). Unstandardised `-B / a` is defined for a zero coefficient and for zero predictor variance and is not `asymTIPREDEFFECTstd`. The finite-interval standardisation `A^{-1}[e^{A Δt} − I] B · √v / √p` depends on the event interval and is not `asymTIPREDEFFECTstd`. `(-B / a) · √v / √(trait + p + added)` uses `TRAITVAR` and is not `asymTIPREDEFFECTstd`. `TRAITVAR` is not the standardisation variance. Page 16 `TIPREDEFFECTstd` is `B · √v / √(-q / (2 a))` after strictly positive `asymDIFFUSION` `-q / (2 a)` and strictly positive predictor variance `v` (footnote 4: standardise using only the relevant variance, not the total; the affecting variance is `TIPREDVAR`; the affected variance is `asymDIFFUSION`). Unstandardised `B` is defined for a zero coefficient and for zero predictor variance and is not `TIPREDEFFECTstd`. The asymptotic standardisation `(-B / a) · √v / √p` is the total change and is not `TIPREDEFFECTstd`. The finite-interval standardisation `A^{-1}[e^{A Δt} − I] B · √v / √p` depends on the event interval and is not `TIPREDEFFECTstd`. `B · √v / √(trait + p + added)` uses `TRAITVAR` and is not `TIPREDEFFECTstd`. `TRAITVAR` is not the standardisation variance. Table 3 / p. 16 `T0TIPREDEFFECTstd` is `t0_b · √v / √p_0` after strictly positive free `T0VAR` `p_0` and strictly positive predictor variance `v` (footnote 4: standardise using only the relevant variance, not the total; the affecting variance is `TIPREDVAR`; the affected variance is free `T0VAR`, not `asymDIFFUSION`). Unstandardised `t0_b` is defined for a zero coefficient and for zero predictor variance and is not `T0TIPREDEFFECTstd`. `TIPREDEFFECTstd` `B · √v / √(-q / (2 a))` uses `asymDIFFUSION` and is not `T0TIPREDEFFECTstd`. `asymTIPREDEFFECTstd` `(-B / a) · √v / √p` is the total change and is not `T0TIPREDEFFECTstd`. `t0_b · √v / √(trait + p_0 + added)` uses `TRAITVAR` and is not `T0TIPREDEFFECTstd`. `TRAITVAR` is not the standardisation variance. 2017-era `addedT0TIPREDVAR` is `t0_b² v` (`T0TIPREDEFFECT %*% TIPREDVAR %*% t(T0TIPREDEFFECT)` immediately after `T0TIPREDEFFECTstd`). A zero coefficient or zero predictor variance is exactly zero. Free `T0TIPREDEFFECT` does not require `a < 0`. `(B / a)² v` is `addedTIPREDVAR` and is not this first-occasion map. `t0_b · √v / √p_0` is `T0TIPREDEFFECTstd` and is not this variance. Free `T0VAR` is not this extra TI variance. `TRAITVAR` is not this extra TI variance. Equation 5 of 2017-era `addedT0TIPREDVAR` is `λ² t0_b² v`. Form `t0_b² v` first, then `(λ extra) λ` with `θ = 0`. A zero loading or zero extra is exactly zero. `t0_b² v` is the latent extra, not the observed extra. `λ² p_0 + θ` is first-occasion observed variance, not this extra. `λ² (B / a)² v` is Eq. 5 of `addedTIPREDVAR`, not this first-occasion observed extra. `MANIFESTVAR` `θ` is not this extra. Equation 5 of §7.2 `addedTIPREDVAR` is `λ² (B / a)² v`. Form `(B / a)² v` first, then `(λ extra) λ` with `θ = 0`. A zero loading or zero extra is exactly zero. Lasting asymptotic extra requires `a < 0`. `(B / a)² v` is the latent extra, not the observed extra. `λ² t0_b² v` is first-occasion extra observed TI variance, not this extra. `λ² p + θ` is stationary observed variance, not this extra. `MANIFESTVAR` `θ` is not this extra. Page 16 `TDPREDEFFECTstd` is `m · √v / √(-q / (2 a))` after strictly positive `asymDIFFUSION` `-q / (2 a)` and strictly positive time-dependent predictor variance `v` (footnote 4: standardise using only the relevant variance, not the total; the affecting variance is the TD predictor; the affected variance is `asymDIFFUSION`). Unstandardised `M` is defined for a zero coefficient and for zero predictor variance and is not `TDPREDEFFECTstd`. `TIPREDEFFECTstd` `B · √v / √p` is a different named matrix even when `M = B`. The finite-interval intercept-style standardisation `A^{-1}[e^{A Δt} − I] M · √v / √p` depends on the event interval and is not `TDPREDEFFECTstd`. `m · √v / √(trait + p + added)` uses `TRAITVAR` and is not `TDPREDEFFECTstd`. `TRAITVAR` is not the standardisation variance. Table 3 / p. 16 `T0TDPREDEFFECTstd` is `t0_m · √v / √p_0` after strictly positive free `T0VAR` `p_0` and strictly positive time-dependent predictor variance `v` (footnote 4: standardise using only the relevant variance, not the total; the affecting variance is the TD predictor, not `TIPREDVAR`; the affected variance is free `T0VAR`, not `asymDIFFUSION`). Unstandardised `t0_m` is defined for a zero coefficient and for zero predictor variance and is not `T0TDPREDEFFECTstd`. `TDPREDEFFECTstd` `m · √v / √(-q / (2 a))` uses `asymDIFFUSION` and is not `T0TDPREDEFFECTstd`. `T0TIPREDEFFECTstd` `t0_b · √v / √p_0` is a different named matrix even when `t0_m = t0_b`. `t0_m · √v / √(trait + p_0 + added)` uses `TRAITVAR` and is not `T0TDPREDEFFECTstd`. `TRAITVAR` is not the standardisation variance. Free `T0VAR` does not require `a < 0`. Page 16 `T0VARstd` is the correlation form `solve(sqrt(diag(T0VAR))) %&% T0VAR` after strictly positive free `T0VAR` `p_0` (2017-era `summary.ctsemFit.R`; OpenMx `%&%` is `t(A) %*% B %*% A`; the default ridge is 0; the scalar map is `p_0 / p_0 = 1`). Unstandardised `T0VAR` is defined for a zero first-occasion variance and is not `T0VARstd`. Zero `p_0` fails closed. Distinct positive `p_0` recover the same 1. `T0TDPREDEFFECTstd` `t0_m · √v / √p_0` depends on `p_0` and is not `T0VARstd`. `addedT0TIPREDVAR` `t0_b² v` is extra TI variance, not this correlation. `TRAITVAR` is not the standardisation variance. Page 16 `TRAITVARstd` is the correlation form `solve(sqrt(diag(TRAITVAR))) %&% TRAITVAR` after strictly positive `TRAITVAR` (2017-era `summary.ctsemFit.R` forms it only when `TRAITVAR != 0`; OpenMx `%&%` is `t(A) %*% B %*% A`; unlike `T0VARstd` there is no ridge addend; the scalar map is `trait / trait = 1`). Unstandardised `TRAITVAR` is defined for a zero trait and is not `TRAITVARstd`. Zero `TRAITVAR` fails closed. Distinct positive `trait` recover the same 1. `T0VARstd` `p_0 / p_0 = 1` recovers the same number and remains a distinct named quantity. `addedT0TIPREDVAR` `t0_b² v` is extra TI variance, not this correlation. `TRAITVAR` does not require `a < 0`. Page 16 `MANIFESTTRAITVARstd` is the correlation form `solve(sqrt(diag(MANIFESTTRAITVAR))) %&% MANIFESTTRAITVAR` after strictly positive `MANIFESTTRAITVAR` (2017-era `summary.ctsemFit.R` forms it only when `MANIFESTTRAITVAR != 0`; OpenMx `%&%` is `t(A) %*% B %*% A`; unlike `TRAITVARstd` the 2017-era source adds ridging; the default ridge is 0; the scalar map is `ψ / ψ = 1`). Unstandardised `MANIFESTTRAITVAR` is defined for a zero trait and is not `MANIFESTTRAITVARstd`. Zero `MANIFESTTRAITVAR` fails closed. Distinct positive `ψ` recover the same 1. `TRAITVARstd` `trait / trait = 1` recovers the same number and remains a distinct named quantity. `MANIFESTVAR` `θ` is measurement error, not this correlation. `MANIFESTTRAITVAR` does not require `a < 0`. Page 16 `MANIFESTVARstd` is the correlation form `solve(sqrt(diag(MANIFESTVAR))) %&% MANIFESTVAR` after strictly positive `MANIFESTVAR` (2017-era `summary.ctsemFit.R` forms it whenever `verbose = TRUE`; OpenMx `%&%` is `t(A) %*% B %*% A`; unlike `TRAITVARstd` the 2017-era source adds ridging; the default ridge is 0; the 2017-era `dimnames` assignment to `latentNames` is a source bug; the scalar map is `θ / θ = 1`). Unstandardised `MANIFESTVAR` is defined for a zero residual and is not `MANIFESTVARstd`. Zero `MANIFESTVAR` makes `solve(sqrt(0))` fail and fails closed. Distinct positive `θ` recover the same 1. `MANIFESTTRAITVARstd` `ψ / ψ = 1` recovers the same number and remains a distinct named quantity. Equation 5 `λ² Var(η) + θ` is `Var(y)`, not this correlation. `MANIFESTVAR` does not require `a < 0`. Page 16 `TIPREDVARstd` is the correlation form `solve(sqrt(diag(TIPREDVAR))) %&% TIPREDVAR` after strictly positive `TIPREDVAR` (2017-era `summary.ctsemFit.R` forms it whenever `verbose = TRUE` and `n.TIpred > 0`; OpenMx `%&%` is `t(A) %*% B %*% A`; unlike `TRAITVARstd` the 2017-era source adds ridging; the default ridge is 0; `dimnames` are `TIpredNames`; the scalar map is `v / v = 1`). Unstandardised `TIPREDVAR` is defined for a zero predictor and is not `TIPREDVARstd`. Zero `TIPREDVAR` makes `solve(sqrt(0))` fail and fails closed. Distinct positive `v` recover the same 1. `MANIFESTVARstd` `θ / θ = 1` recovers the same number and remains a distinct named quantity. Section 7.2 `addedTIPREDVAR` `(B / a)² v` is extra process variance, not this correlation. `TIPREDVAR` does not require `a < 0`. Page 16 `asymDIFFUSIONstd` is the correlation form `solve(sqrt(diag(asymDIFFUSION))) %&% asymDIFFUSION` after strictly positive `asymDIFFUSION` `-q / (2 a)` (2017-era `summary.ctsemFit.R` forms it whenever `verbose = TRUE`; OpenMx `%&%` is `t(A) %*% B %*% A`; the 2017-era source adds ridging; the default ridge is 0; `dimnames` are `latentNames`; the scalar map is `p / p = 1`). Unstandardised `asymDIFFUSION` is defined for a zero process and is not `asymDIFFUSIONstd`. Zero `q` makes `solve(sqrt(0))` fail and fails closed. Distinct positive `p` recover the same 1. `TIPREDVARstd` `v / v = 1` recovers the same number and remains a distinct named quantity. `DIFFUSIONstd` `q / p = −2 a` is the continuous-diffusion ratio, not this correlation. Lasting `asymDIFFUSION` requires `a < 0`. Page 16 `discreteCINTstd` is `A^{-1}[e^{A Δt} − I] κ / √p` after strictly positive `asymDIFFUSION` `-q / (2 a)` (2017-era `summary.ctsemFit.R` forms unstandardised `discreteCINT` whenever `verbose = TRUE` as `solve(DRIFT) %*% (discreteDRIFT − I) %*% CINT`; that source does not form a `discreteCINTstd` matrix; the scalar map is the footnote 4 standardisation of that named discrete intercept). Unstandardised `discreteCINT` is defined for growing `a ≥ 0` and for zero diffusion and is not `discreteCINTstd`. Zero `q` has no positive process SD and fails closed. `κ / √p` does not depend on `Δt` and is not this finite-interval map. `(-κ / a) / √p` is the standardised asymptotic intercept and is not this map. Lasting `asymDIFFUSION` requires `a < 0`. Page 16 `asymCINTstd` is `(-κ / a) / √p` after strictly positive `asymDIFFUSION` `-q / (2 a)` (2017-era `summary.ctsemFit.R` forms unstandardised `asymCINT` whenever `verbose = TRUE` as `-solve(DRIFT) %*% CINT`; that source does not form an `asymCINTstd` matrix; the scalar map is the footnote 4 standardisation of that named asymptotic intercept). Unstandardised `asymCINT` is defined for a zero process and is not `asymCINTstd`. Zero `q` has no positive process SD and fails closed. `κ / √p` is the continuous intercept standardisation and is not this total-change map. `A^{-1}[e^{A Δt} − I] κ / √p` depends on the event interval and is not this `Δt → ∞` map. Lasting `asymDIFFUSION` requires `a < 0`. Page 16 `T0MEANSstd` is `μ_0 / √p_0` after strictly positive free `T0VAR` `p_0` (2017-era `summary.ctsemFit.R` forms unstandardised `T0MEANS` and does not form a `T0MEANSstd` matrix; the scalar map is the footnote 4 standardisation of that named first-occasion mean; relevant variance is free `T0VAR`, not `asymDIFFUSION`). Unstandardised `T0MEANS` is defined for a zero first-occasion variance and is not `T0MEANSstd`. Zero `p_0` has no positive SD and fails closed. `T0VARstd` `p_0 / p_0 = 1` recovers the same number when `μ_0 = √p_0` and remains a distinct named quantity. `μ_0 / √asymDIFFUSION` uses process-dynamics variance and is not this first-occasion map. Free `T0MEANS` does not require `a < 0`. Page 16 `MANIFESTMEANSstd` is `τ / √θ` after strictly positive `MANIFESTVAR` `θ` (2017-era `summary.ctsemFit.R` forms unstandardised `MANIFESTMEANS` and does not form a `MANIFESTMEANSstd` matrix; the scalar map is the footnote 4 standardisation of that named measurement intercept; relevant variance is residual `MANIFESTVAR`, not total observed `Var(y)`). Unstandardised `MANIFESTMEANS` is defined for a zero residual and is not `MANIFESTMEANSstd`. Zero `θ` has no positive SD and fails closed. `MANIFESTVARstd` `θ / θ = 1` recovers the same number when `τ = √θ` and remains a distinct named quantity. `τ / √(λ² Var(η) + θ)` uses total observed variance and is not this residual map. `MANIFESTMEANS` does not require `a < 0`. +This is two-level OLS and a noiseless scalar continuous-time map. It is not DSEM, not RI-CLPM, not a random-effects sampler, not a Kalman filter, and not a matrix `expm` implementation. The CWC cluster-mean coefficient is the **contextual** effect, not the between-cluster effect. Discrete lags from different event intervals are not one coefficient. Equation 14 is not Equation 12. Discrete process noise \(Q_{\Delta t}\) is not the continuous diffusion \(GG^{\top}\). \(Q_{\Delta t}\) is the conditional residual variance, not \(\operatorname{Var}(\eta_{t})\). Finite-interval \(Q_{\Delta t}\) is not the stationary within-subject variance. Trait variance is not process noise and not the stationary within-subject variance. Measurement-error variance is not the observed-indicator variance. Latent variance is not the observed-indicator variance. Manifest means are not the observed-indicator mean. The latent mean is not the observed-indicator mean. The continuous intercept is not the manifest mean. The first-occasion latent mean is not the evolved latent mean. The continuous intercept is not the discrete mean increment. The first-occasion observed mean is not the evolved observed mean. The contemporaneous `TDPREDEFFECT` impulse is not the continuous intercept, not the time-independent discrete effect, and not Voelkle et al. (2012, Eq. 14). The time-independent `TIPREDEFFECT` increment is not the continuous intercept, not the contemporaneous impulse, not Voelkle et al. (2012, Eq. 14), and not the coefficient `B`. The within-interval `TDPREDEFFECT` carry `e^{A(t−u)} M x` for `t0 < u < t` is not the contemporaneous Dirac, not `CINT`, not `TIPREDEFFECT`, and not Voelkle et al. (2012, Eq. 14). The evolved observed mean `τ + λ μ_t` is not the contemporaneous-impulse observed mean `τ + λ(μ_t + m x)`. The contemporaneous composition `τ + λ(μ_t + m x)` is not the impulse-carry observed mean `τ + λ(μ_t + e^{a(t−u)} m x)` when `u ≠ t`. The evolved observed mean `τ + λ μ_t` is not the impulse-carry observed mean. The carried latent mean is not `E(y_t)`. The evolved-plus-impulse latent mean is not `E(y_t)`. The evolved observed mean `τ + λ μ_t` is not the time-independent-predictor observed mean `τ + λ(μ_t + A^{-1}[e^{A Δt} − I] B z)`. The contemporaneous composition `τ + λ(μ_t + m x)` is not that time-independent-predictor observed mean. The impulse-carry composition `τ + λ(μ_t + e^{a(t−u)} m x)` is not that time-independent-predictor observed mean when `u ≠ t`. The evolved-plus-increment latent mean is not `E(y_t)`. The Table 3 first-occasion `T0TIPREDEFFECT` shift `t0_b z` is not the Eq. 3 process increment `A^{-1}[e^{A Δt} − I] B z`, not `κ`, and not `M x`. The Eq. 3 first-summand carry `e^{A Δt} t0_b z` is not `t0_b z` and is not that process increment. `T0TIPREDEFFECT` is the coefficient, not the first-occasion shift. The evolved observed mean `τ + λ μ_t` is not the first-occasion TI-predictor observed mean `τ + λ(μ_t + e^{a Δt} t0_b z)`. The process-increment composition `τ + λ(μ_t + A^{-1}[e^{A Δt} − I] B z)` is not that first-occasion observed mean. The contemporaneous composition `τ + λ(μ_t + m x)` is not that first-occasion observed mean. The impulse-carry composition `τ + λ(μ_t + e^{a(t−u)} m x)` is not that first-occasion observed mean when `u ≠ t0`. The evolved-plus-T0TIPRED latent mean is not `E(y_t)`. The Table 3 first-occasion `T0TDPREDEFFECT` shift `t0_m x0` is not `M x`, not `e^{A(t−u)} M x` for `t0 < u < t`, not `t0_b z`, not `A^{-1}[e^{A Δt} − I] B z`, and not `κ`. The Eq. 3 first-summand carry `e^{A Δt} t0_m x0` is not `t0_m x0` and is not that within-interval impulse carry. `T0TDPREDEFFECT` is the coefficient, not the first-occasion shift. An impulse at `u ≤ t0` that used `M` is already in `η(t0)` as `TDPREDEFFECT`, not as `T0TDPREDEFFECT`. The evolved observed mean `τ + λ μ_t` is not the first-occasion TD-predictor observed mean `τ + λ(μ_t + e^{a Δt} t0_m x0)`. The process-increment composition `τ + λ(μ_t + A^{-1}[e^{A Δt} − I] B z)` is not that first-occasion TD observed mean. The contemporaneous composition `τ + λ(μ_t + m x)` is not that first-occasion TD observed mean. The impulse-carry composition `τ + λ(μ_t + e^{a(t−u)} m x)` is not that first-occasion TD observed mean when `u ≠ t0`. The first-occasion TI composition `τ + λ(μ_t + e^{a Δt} t0_b z)` is not that first-occasion TD observed mean. Same numbers as `T0TIPREDEFFECT` yield the same product; Table 3 names a different matrix. The evolved-plus-T0TDPRED latent mean is not `E(y_t)`. The §7.2 level-change `CINT` `κ = −a m x` is not the dissipating Dirac `m x`, not a free `CINT`, and not `A^{-1}[e^{A Δt} − I] B z`. Lasting level change via that `CINT` setting requires `a < 0`. The extra near-zero-drift latent process also named in §7.2 is a different specification and is not that `CINT` setting. The Eq. 3 increment of that setting `(1 − e^{a Δt}) m x` is not the dissipating Dirac `m x`, not `κ`, and not `A^{-1}[e^{A Δt} − I] B z`. Underflow of `e^{a Δt}` to `+0` keeps the equilibrium offset `m x`. The §7.2 extra-process contribution `a_{ηξ} x (e^{ε Δt} − e^{a Δt}) / (ε − a)` is not `κ = −a m x`, not `(1 − e^{a Δt}) m x`, and not the dissipating Dirac `m x`. Lasting level change via that extra process requires `ε < 0`. Precisely `ε = 0` causes computational problems in the printed specification. The extra-process observed mean `τ + λ(μ_t + a_{ηξ} x (e^{ε Δt} − e^{a Δt}) / (ε − a))` is not `τ + λ μ_t`, not `τ + λ(μ_t + m x)`, not the contribution, and not the evolved-plus-contribution latent mean. The extra process has `LAMBDA` 0 and is not an observed indicator. `T0TDPREDEFFECT` on the extra process uses `Δt = t − t0` for both the original-process evolution and the extra drive. `TDPREDEFFECT` after `t0` uses `t − u` with `t0 < u < t` for the extra drive while `μ_t` still uses `Δt`. The after-t0 extra-process observed mean is not the first-occasion extra-process observed mean when `u ≠ t0`. The impulse-carry `e^{a(t−u)} m x` is a Dirac on the original process and is not that `DRIFT` drive. The §7.2 `asymTIPREDEFFECT` `-B z / a` is the expected total change in process means given a time-independent predictor. It is not the coefficient `B`, not the finite-interval increment `A^{-1}[e^{A Δt} − I] B z`, not `CINT`, and not `M x`. Lasting asymptotic change via that map requires `a < 0`. The §7.2 `addedTIPREDVAR` `(B / a)² v` is the stable between-subject variance accounted for by that predictor. It is not `TRAITVAR`, not `asymDIFFUSION`, and not `-B z / a`. Table 2 `asymCINT` `-κ / a` is the intercept contribution to the stationary process mean. It is not `κ`, not the finite-interval increment `A^{-1}[e^{A Δt} − I] κ`, not `T0MEANS`, and not `-B z / a`. Lasting asymptotic intercept change via that map requires `a < 0`. Page 16 notes that a `T0MEANS` stationarity constraint includes time-independent predictors; that composition is not this intercept-only map. The p. 16 constrained first-occasion mean `-κ / a + −B z / a` is not free `T0MEANS`, not `asymCINT` alone, not `asymTIPREDEFFECT` alone, and not the finite-interval discrete latent mean. Equation 5 of that constrained mean `τ + λ(−κ / a + −B z / a)` is not `τ + λ μ_0`, not `τ + λ(−κ / a)` when `B z ≠ 0`, not `τ + λ μ_t`, not `MANIFESTMEANS`, and not the constrained latent mean. The p. 16 constrained first-occasion variance `trait + −q / (2 a) + (B / a)² v` is not free `T0VAR`, not `asymDIFFUSION` alone, not `TRAITVAR` alone, not `addedTIPREDVAR` alone, and not the finite-interval discrete latent variance. Equation 5 of that constrained variance `λ²(trait + −q / (2 a) + (B / a)² v) + θ + ψ` is not `λ² p_0 + θ`, not `λ²(−q / (2 a)) + θ` when `TRAITVAR` or `addedTIPREDVAR` is nonzero, not `λ² Var(η_t) + θ` when the first occasion is constrained, not `MANIFESTVAR`, and not the constrained latent variance. The lagged covariance of that constrained process `trait + e^{a Δt}(−q / (2 a)) + (B / a)² v` is not contemporaneous `T0VAR`, not `e^{a Δt}` of the constrained total, and not `trait + e^{a Δt} p` when `addedTIPREDVAR` is nonzero. Trait variance and `addedTIPREDVAR` do not decay with `e^{a Δt}`. Equation 5 of that lagged covariance `λ²(trait + e^{a Δt}(−q / (2 a)) + (B / a)² v) + ψ` is not `θ`, not contemporaneous `Var(y_0)`, and not the lagged latent covariance. Independent measurement error does not enter lagged observed covariance. The later-occasion variance of that constrained process `trait + e^{2 a Δt}(−q / (2 a)) + Q_Δt + (B / a)² v` equals contemporaneous `T0VAR` under stationarity and is not the lagged covariance, not `e^{2 a Δt}` of the constrained total plus `Q_Δt`, and not `Q_Δt` alone. Trait variance and `addedTIPREDVAR` do not enter `Q_Δt`. Equation 5 of that later-occasion variance `λ²(trait + e^{2 a Δt}(−q / (2 a)) + Q_Δt + (B / a)² v) + θ + ψ` is not `θ`, not lagged `cov(y_t, y_{t-1})`, and not the later-occasion latent variance. The later-occasion variance of §4.3 predetermined `T0VAR` `trait + e^{2 a Δt} p_0 + Q_Δt + (B / a)² v` is not stationary later-occasion variance when `p_0` is free, not `e^{2 a Δt}` of `trait + p_0 + (B / a)² v` plus `Q_Δt`, and not free `p_0`. Trait variance and `addedTIPREDVAR` do not enter `Q_Δt`. Setting `p_0 = −q / (2 a)` recovers the stationary later-occasion map. As `Δt → ∞` with stable `a < 0` the composition approaches contemporaneous stationary `T0VAR`. Nonzero diffusion with `a ≥ 0` is a growing process and is kept. Equation 5 of that predetermined later-occasion variance `λ²(trait + e^{2 a Δt} p_0 + Q_Δt + (B / a)² v) + θ + ψ` is not `θ`, not the predetermined later-occasion latent variance, and not stationary later-occasion observed variance when `p_0` is free. The lagged covariance of §4.3 predetermined `T0VAR` `trait + e^{a Δt} p_0 + (B / a)² v` is not stationary lagged covariance when `p_0` is free, not later-occasion variance, not `e^{a Δt}` of `trait + p_0 + (B / a)² v`, and not free `p_0`. Trait variance and `addedTIPREDVAR` do not decay with `e^{a Δt}`. Setting `p_0 = −q / (2 a)` recovers the stationary lagged map. As `Δt → ∞` with stable `a < 0` the state term vanishes. A zero-diffusion carry with `a ≥ 0` is `e^{a Δt} p_0` and is kept. Equation 5 of that predetermined lagged covariance `λ²(trait + e^{a Δt} p_0 + (B / a)² v) + ψ` is not `θ`, not the predetermined lagged latent covariance, not predetermined later observed variance, and not stationary lagged observed covariance when `p_0` is free. Independent measurement error does not enter lagged observed covariance. The first-occasion variance of §4.3 predetermined `T0VAR` `trait + p_0 + (B / a)² v` is not stationary first-occasion variance when `p_0` is free, not free `p_0`, not lagged covariance, and not later-occasion variance. Trait variance and `addedTIPREDVAR` do not decay and do not enter `Q_Δt`. Setting `p_0 = −q / (2 a)` recovers the stationary first-occasion map. As `Δt → 0+` the lagged and later maps approach this composition. Trait-only variance does not require a stable drift. Equation 5 of that predetermined first-occasion variance `λ²(trait + p_0 + (B / a)² v) + θ + ψ` is not `θ`, not the predetermined first-occasion latent variance, not stationary first-occasion observed variance, and not predetermined later observed variance when `p_0` is free. The later-start lagged covariance of §4.3 predetermined `T0VAR` `trait + e^{a s}(e^{2 a u} p_0 + Q_u) + (B / a)² v` is not first-occasion lagged covariance when `u > 0`, not later-occasion variance, not stationary lagged covariance when `p_0` is free, and not `e^{a s}` of the later total. Trait variance and `addedTIPREDVAR` do not decay with `e^{a s}`. Setting `p_0 = −q / (2 a)` recovers the stationary lagged map. As `u → 0+` the composition approaches first-occasion lagged covariance. As `s → 0+` the composition approaches later-occasion variance at `u`. Nonzero diffusion with `a ≥ 0` is a growing process and is kept. Equation 5 of that later-start lagged covariance `λ²(trait + e^{a s}(e^{2 a u} p_0 + Q_u) + (B / a)² v) + ψ` is not `θ`, not the later-start lagged latent covariance, not first-occasion lagged observed covariance, not predetermined later observed variance, and not stationary lagged observed covariance when `p_0` is free. Independent measurement error does not enter lagged observed covariance. The later-start later-occasion variance of §4.3 predetermined `T0VAR` `trait + e^{2 a s}(e^{2 a u} p_0 + Q_u) + Q_s + (B / a)² v` is not later-occasion variance at `u` when `s > 0`, not later-start lagged covariance, not stationary later-occasion variance when `p_0` is free, not `e^{2 a s}` of the later total plus `Q_s`, and not later-occasion variance over the lag interval alone when `u > 0`. Trait variance and `addedTIPREDVAR` do not enter `Q_s`. Chapman–Kolmogorov writes `Q_{u+s} = e^{2 a s} Q_u + Q_s`. Setting `p_0 = −q / (2 a)` recovers the stationary later-occasion map. As `u → 0+` the composition approaches later-occasion variance over `s`. As `s → 0+` the composition approaches later-occasion variance at `u`. Nonzero diffusion with `a ≥ 0` is a growing process and is kept. Equation 5 of that later-start later-occasion variance `λ²(trait + e^{2 a s}(e^{2 a u} p_0 + Q_u) + Q_s + (B / a)² v) + θ + ψ` is not `θ`, not the later-start later-occasion latent variance, not predetermined later observed variance, not later-start lagged observed covariance, and not stationary later-occasion observed variance when `p_0` is free. Page 16 `discreteDRIFTstd` is `e^{a Δt}` after strictly positive `asymDIFFUSION` `-q / (2 a)` (footnote 4: standardise `DRIFT` using only within-subject variance, not the total). Unstandardised `e^{a Δt}` is defined for growing `a ≥ 0` and for zero diffusion and is not `discreteDRIFTstd`. The §7.1 trait-plus-state autocorrelation `(trait + e^{a Δt} p + added) / (trait + p + added)` uses `TRAITVAR` and is not `discreteDRIFTstd`. `TRAITVAR` is not the standardisation variance. Page 16 `discreteDIFFUSIONstd` is `Q_Δt / (−q / (2 a))` after strictly positive `asymDIFFUSION` `-q / (2 a)` (footnote 4: standardise process noise using only within-subject variance, not the total). Unstandardised `Q_Δt` is defined for growing `a ≥ 0` and for zero diffusion and is not `discreteDIFFUSIONstd`. The continuous standardisation `q / (−q / (2 a)) = −2 a` is not `discreteDIFFUSIONstd`. `Q_Δt / (trait + p + added)` uses `TRAITVAR` and is not `discreteDIFFUSIONstd`. `TRAITVAR` is not the standardisation variance. Page 16 `DIFFUSIONstd` is `q / (−q / (2 a))` after strictly positive `asymDIFFUSION` `-q / (2 a)` (footnote 4: standardise process noise using only within-subject variance, not the total). Unstandardised `q` is defined for growing `a ≥ 0` and for zero diffusion and is not `DIFFUSIONstd`. The discrete standardisation `Q_Δt / (−q / (2 a)) = 1 − exp(2 a Δt)` depends on the event interval and is not `DIFFUSIONstd`. `q / (trait + p + added)` uses `TRAITVAR` and is not `DIFFUSIONstd`. `TRAITVAR` is not the standardisation variance. Page 16 `DRIFTstd` is the continuous auto-effect after strictly positive `asymDIFFUSION` `-q / (2 a)` (footnote 4: standardise `DRIFT` using only within-subject variance, not the total). Unstandardised `a` is defined for growing `a ≥ 0` and for zero diffusion and is not `DRIFTstd`. The discrete standardisation `e^{a Δt}` depends on the event interval and is not `DRIFTstd`. `a p / (trait + p + added)` uses `TRAITVAR` and is not `DRIFTstd`. `TRAITVAR` is not the standardisation variance. Page 16 `asymTIPREDEFFECTstd` is `(-B / a) · √v / √(-q / (2 a))` after strictly positive `asymDIFFUSION` `-q / (2 a)` and strictly positive predictor variance `v` (footnote 4: standardise using only the relevant variance, not the total; the affecting variance is `TIPREDVAR`; the affected variance is `asymDIFFUSION`). Unstandardised `-B / a` is defined for a zero coefficient and for zero predictor variance and is not `asymTIPREDEFFECTstd`. The finite-interval standardisation `A^{-1}[e^{A Δt} − I] B · √v / √p` depends on the event interval and is not `asymTIPREDEFFECTstd`. `(-B / a) · √v / √(trait + p + added)` uses `TRAITVAR` and is not `asymTIPREDEFFECTstd`. `TRAITVAR` is not the standardisation variance. Page 16 `TIPREDEFFECTstd` is `B · √v / √(-q / (2 a))` after strictly positive `asymDIFFUSION` `-q / (2 a)` and strictly positive predictor variance `v` (footnote 4: standardise using only the relevant variance, not the total; the affecting variance is `TIPREDVAR`; the affected variance is `asymDIFFUSION`). Unstandardised `B` is defined for a zero coefficient and for zero predictor variance and is not `TIPREDEFFECTstd`. The asymptotic standardisation `(-B / a) · √v / √p` is the total change and is not `TIPREDEFFECTstd`. The finite-interval standardisation `A^{-1}[e^{A Δt} − I] B · √v / √p` depends on the event interval and is not `TIPREDEFFECTstd`. `B · √v / √(trait + p + added)` uses `TRAITVAR` and is not `TIPREDEFFECTstd`. `TRAITVAR` is not the standardisation variance. Table 3 / p. 16 `T0TIPREDEFFECTstd` is `t0_b · √v / √p_0` after strictly positive free `T0VAR` `p_0` and strictly positive predictor variance `v` (footnote 4: standardise using only the relevant variance, not the total; the affecting variance is `TIPREDVAR`; the affected variance is free `T0VAR`, not `asymDIFFUSION`). Unstandardised `t0_b` is defined for a zero coefficient and for zero predictor variance and is not `T0TIPREDEFFECTstd`. `TIPREDEFFECTstd` `B · √v / √(-q / (2 a))` uses `asymDIFFUSION` and is not `T0TIPREDEFFECTstd`. `asymTIPREDEFFECTstd` `(-B / a) · √v / √p` is the total change and is not `T0TIPREDEFFECTstd`. `t0_b · √v / √(trait + p_0 + added)` uses `TRAITVAR` and is not `T0TIPREDEFFECTstd`. `TRAITVAR` is not the standardisation variance. 2017-era `addedT0TIPREDVAR` is `t0_b² v` (`T0TIPREDEFFECT %*% TIPREDVAR %*% t(T0TIPREDEFFECT)` immediately after `T0TIPREDEFFECTstd`). A zero coefficient or zero predictor variance is exactly zero. Free `T0TIPREDEFFECT` does not require `a < 0`. `(B / a)² v` is `addedTIPREDVAR` and is not this first-occasion map. `t0_b · √v / √p_0` is `T0TIPREDEFFECTstd` and is not this variance. Free `T0VAR` is not this extra TI variance. `TRAITVAR` is not this extra TI variance. Equation 5 of 2017-era `addedT0TIPREDVAR` is `λ² t0_b² v`. Form `t0_b² v` first, then `(λ extra) λ` with `θ = 0`. A zero loading or zero extra is exactly zero. `t0_b² v` is the latent extra, not the observed extra. `λ² p_0 + θ` is first-occasion observed variance, not this extra. `λ² (B / a)² v` is Eq. 5 of `addedTIPREDVAR`, not this first-occasion observed extra. `MANIFESTVAR` `θ` is not this extra. Equation 5 of §7.2 `addedTIPREDVAR` is `λ² (B / a)² v`. Form `(B / a)² v` first, then `(λ extra) λ` with `θ = 0`. A zero loading or zero extra is exactly zero. Lasting asymptotic extra requires `a < 0`. `(B / a)² v` is the latent extra, not the observed extra. `λ² t0_b² v` is first-occasion extra observed TI variance, not this extra. `λ² p + θ` is stationary observed variance, not this extra. `MANIFESTVAR` `θ` is not this extra. Page 16 `TDPREDEFFECTstd` is `m · √v / √(-q / (2 a))` after strictly positive `asymDIFFUSION` `-q / (2 a)` and strictly positive time-dependent predictor variance `v` (footnote 4: standardise using only the relevant variance, not the total; the affecting variance is the TD predictor; the affected variance is `asymDIFFUSION`). Unstandardised `M` is defined for a zero coefficient and for zero predictor variance and is not `TDPREDEFFECTstd`. `TIPREDEFFECTstd` `B · √v / √p` is a different named matrix even when `M = B`. The finite-interval intercept-style standardisation `A^{-1}[e^{A Δt} − I] M · √v / √p` depends on the event interval and is not `TDPREDEFFECTstd`. `m · √v / √(trait + p + added)` uses `TRAITVAR` and is not `TDPREDEFFECTstd`. `TRAITVAR` is not the standardisation variance. Table 3 / p. 16 `T0TDPREDEFFECTstd` is `t0_m · √v / √p_0` after strictly positive free `T0VAR` `p_0` and strictly positive time-dependent predictor variance `v` (footnote 4: standardise using only the relevant variance, not the total; the affecting variance is the TD predictor, not `TIPREDVAR`; the affected variance is free `T0VAR`, not `asymDIFFUSION`). Unstandardised `t0_m` is defined for a zero coefficient and for zero predictor variance and is not `T0TDPREDEFFECTstd`. `TDPREDEFFECTstd` `m · √v / √(-q / (2 a))` uses `asymDIFFUSION` and is not `T0TDPREDEFFECTstd`. `T0TIPREDEFFECTstd` `t0_b · √v / √p_0` is a different named matrix even when `t0_m = t0_b`. `t0_m · √v / √(trait + p_0 + added)` uses `TRAITVAR` and is not `T0TDPREDEFFECTstd`. `TRAITVAR` is not the standardisation variance. Free `T0VAR` does not require `a < 0`. Page 16 `T0VARstd` is the correlation form `solve(sqrt(diag(T0VAR))) %&% T0VAR` after strictly positive free `T0VAR` `p_0` (2017-era `summary.ctsemFit.R`; OpenMx `%&%` is `t(A) %*% B %*% A`; the default ridge is 0; the scalar map is `p_0 / p_0 = 1`). Unstandardised `T0VAR` is defined for a zero first-occasion variance and is not `T0VARstd`. Zero `p_0` fails closed. Distinct positive `p_0` recover the same 1. `T0TDPREDEFFECTstd` `t0_m · √v / √p_0` depends on `p_0` and is not `T0VARstd`. `addedT0TIPREDVAR` `t0_b² v` is extra TI variance, not this correlation. `TRAITVAR` is not the standardisation variance. Page 16 `TRAITVARstd` is the correlation form `solve(sqrt(diag(TRAITVAR))) %&% TRAITVAR` after strictly positive `TRAITVAR` (2017-era `summary.ctsemFit.R` forms it only when `TRAITVAR != 0`; OpenMx `%&%` is `t(A) %*% B %*% A`; unlike `T0VARstd` there is no ridge addend; the scalar map is `trait / trait = 1`). Unstandardised `TRAITVAR` is defined for a zero trait and is not `TRAITVARstd`. Zero `TRAITVAR` fails closed. Distinct positive `trait` recover the same 1. `T0VARstd` `p_0 / p_0 = 1` recovers the same number and remains a distinct named quantity. `addedT0TIPREDVAR` `t0_b² v` is extra TI variance, not this correlation. `TRAITVAR` does not require `a < 0`. Page 16 `MANIFESTTRAITVARstd` is the correlation form `solve(sqrt(diag(MANIFESTTRAITVAR))) %&% MANIFESTTRAITVAR` after strictly positive `MANIFESTTRAITVAR` (2017-era `summary.ctsemFit.R` forms it only when `MANIFESTTRAITVAR != 0`; OpenMx `%&%` is `t(A) %*% B %*% A`; unlike `TRAITVARstd` the 2017-era source adds ridging; the default ridge is 0; the scalar map is `ψ / ψ = 1`). Unstandardised `MANIFESTTRAITVAR` is defined for a zero trait and is not `MANIFESTTRAITVARstd`. Zero `MANIFESTTRAITVAR` fails closed. Distinct positive `ψ` recover the same 1. `TRAITVARstd` `trait / trait = 1` recovers the same number and remains a distinct named quantity. `MANIFESTVAR` `θ` is measurement error, not this correlation. `MANIFESTTRAITVAR` does not require `a < 0`. Page 16 `MANIFESTVARstd` is the correlation form `solve(sqrt(diag(MANIFESTVAR))) %&% MANIFESTVAR` after strictly positive `MANIFESTVAR` (2017-era `summary.ctsemFit.R` forms it whenever `verbose = TRUE`; OpenMx `%&%` is `t(A) %*% B %*% A`; unlike `TRAITVARstd` the 2017-era source adds ridging; the default ridge is 0; the 2017-era `dimnames` assignment to `latentNames` is a source bug; the scalar map is `θ / θ = 1`). Unstandardised `MANIFESTVAR` is defined for a zero residual and is not `MANIFESTVARstd`. Zero `MANIFESTVAR` makes `solve(sqrt(0))` fail and fails closed. Distinct positive `θ` recover the same 1. `MANIFESTTRAITVARstd` `ψ / ψ = 1` recovers the same number and remains a distinct named quantity. Equation 5 `λ² Var(η) + θ` is `Var(y)`, not this correlation. `MANIFESTVAR` does not require `a < 0`. Page 16 `TIPREDVARstd` is the correlation form `solve(sqrt(diag(TIPREDVAR))) %&% TIPREDVAR` after strictly positive `TIPREDVAR` (2017-era `summary.ctsemFit.R` forms it whenever `verbose = TRUE` and `n.TIpred > 0`; OpenMx `%&%` is `t(A) %*% B %*% A`; unlike `TRAITVARstd` the 2017-era source adds ridging; the default ridge is 0; `dimnames` are `TIpredNames`; the scalar map is `v / v = 1`). Unstandardised `TIPREDVAR` is defined for a zero predictor and is not `TIPREDVARstd`. Zero `TIPREDVAR` makes `solve(sqrt(0))` fail and fails closed. Distinct positive `v` recover the same 1. `MANIFESTVARstd` `θ / θ = 1` recovers the same number and remains a distinct named quantity. Section 7.2 `addedTIPREDVAR` `(B / a)² v` is extra process variance, not this correlation. `TIPREDVAR` does not require `a < 0`. Page 16 `asymDIFFUSIONstd` is the correlation form `solve(sqrt(diag(asymDIFFUSION))) %&% asymDIFFUSION` after strictly positive `asymDIFFUSION` `-q / (2 a)` (2017-era `summary.ctsemFit.R` forms it whenever `verbose = TRUE`; OpenMx `%&%` is `t(A) %*% B %*% A`; the 2017-era source adds ridging; the default ridge is 0; `dimnames` are `latentNames`; the scalar map is `p / p = 1`). Unstandardised `asymDIFFUSION` is defined for a zero process and is not `asymDIFFUSIONstd`. Zero `q` makes `solve(sqrt(0))` fail and fails closed. Distinct positive `p` recover the same 1. `TIPREDVARstd` `v / v = 1` recovers the same number and remains a distinct named quantity. `DIFFUSIONstd` `q / p = −2 a` is the continuous-diffusion ratio, not this correlation. Lasting `asymDIFFUSION` requires `a < 0`. Page 16 `discreteCINTstd` is `A^{-1}[e^{A Δt} − I] κ / √p` after strictly positive `asymDIFFUSION` `-q / (2 a)` (2017-era `summary.ctsemFit.R` forms unstandardised `discreteCINT` whenever `verbose = TRUE` as `solve(DRIFT) %*% (discreteDRIFT − I) %*% CINT`; that source does not form a `discreteCINTstd` matrix; the scalar map is the footnote 4 standardisation of that named discrete intercept). Unstandardised `discreteCINT` is defined for growing `a ≥ 0` and for zero diffusion and is not `discreteCINTstd`. Zero `q` has no positive process SD and fails closed. `κ / √p` does not depend on `Δt` and is not this finite-interval map. `(-κ / a) / √p` is the standardised asymptotic intercept and is not this map. Lasting `asymDIFFUSION` requires `a < 0`. Page 16 `asymCINTstd` is `(-κ / a) / √p` after strictly positive `asymDIFFUSION` `-q / (2 a)` (2017-era `summary.ctsemFit.R` forms unstandardised `asymCINT` whenever `verbose = TRUE` as `-solve(DRIFT) %*% CINT`; that source does not form an `asymCINTstd` matrix; the scalar map is the footnote 4 standardisation of that named asymptotic intercept). Unstandardised `asymCINT` is defined for a zero process and is not `asymCINTstd`. Zero `q` has no positive process SD and fails closed. `κ / √p` is the continuous intercept standardisation and is not this total-change map. `A^{-1}[e^{A Δt} − I] κ / √p` depends on the event interval and is not this `Δt → ∞` map. Lasting `asymDIFFUSION` requires `a < 0`. Page 16 `T0MEANSstd` is `μ_0 / √p_0` after strictly positive free `T0VAR` `p_0` (2017-era `summary.ctsemFit.R` forms unstandardised `T0MEANS` and does not form a `T0MEANSstd` matrix; the scalar map is the footnote 4 standardisation of that named first-occasion mean; relevant variance is free `T0VAR`, not `asymDIFFUSION`). Unstandardised `T0MEANS` is defined for a zero first-occasion variance and is not `T0MEANSstd`. Zero `p_0` has no positive SD and fails closed. `T0VARstd` `p_0 / p_0 = 1` recovers the same number when `μ_0 = √p_0` and remains a distinct named quantity. `μ_0 / √asymDIFFUSION` uses process-dynamics variance and is not this first-occasion map. Free `T0MEANS` does not require `a < 0`. Page 16 `MANIFESTMEANSstd` is `τ / √θ` after strictly positive `MANIFESTVAR` `θ` (2017-era `summary.ctsemFit.R` forms unstandardised `MANIFESTMEANS` and does not form a `MANIFESTMEANSstd` matrix; the scalar map is the footnote 4 standardisation of that named measurement intercept; relevant variance is residual `MANIFESTVAR`, not total observed `Var(y)`). Unstandardised `MANIFESTMEANS` is defined for a zero residual and is not `MANIFESTMEANSstd`. Zero `θ` has no positive SD and fails closed. `MANIFESTVARstd` `θ / θ = 1` recovers the same number when `τ = √θ` and remains a distinct named quantity. `τ / √(λ² Var(η) + θ)` uses total observed variance and is not this residual map. `MANIFESTMEANS` does not require `a < 0`. Equation 5 of 2017-era `T0TOTALVAR` after `addedT0TIPREDVAR` with nonzero `MANIFESTTRAITVAR` is `λ² (t0_trait² · trait + p_0 + t0_b² v) + θ + ψ`. Form extra first, then add free `T0VAR`, then form `t0_b² v`, then add, then `λ² total + θ + ψ`. The latent total is not that observed map. `λ² (extra + p_0 + ti_extra) + θ` omits `ψ`. `MANIFESTVAR` `θ` is not this composition. `MANIFESTTRAITVAR` `ψ` is not this composition. `T0TOTALVARstd` is not this map. ## Authoritative sources @@ -146,6 +148,7 @@ The Voelkle et al. (2012) ZORA accepted manuscript was re-opened 2026-08-18T21:0 - **Discrete latent variance.** Equations 3–4 write \(Q_{\Delta t}\) as the covariance of the stochastic integral, so \(Q_{\Delta t}=\operatorname{cov}(\eta_{ti}\mid\eta_{t-1,i})\) when \(\xi\) and \(z\) are given. The law of total variance on that pair is \(\operatorname{Var}(\eta_{ti})=A_{\Delta t}\operatorname{Var}(\eta_{t-1,i})A_{\Delta t}^{\top}+Q_{\Delta t}\). The scalar map is \(\mathrm{e}^{2a\Delta t}p+Q_{\Delta t}\). This is not a Kalman measurement update. A zero prior variance is exactly \(Q_{\Delta t}\). Binary64 underflow of \(\mathrm{e}^{2a\Delta t}\) keeps \(Q_{\Delta t}\). Finite-\(z\) exponential overflow rewrites as \(\exp(\ln p+z)+Q_{\Delta t}\). A zero diffusion is exactly \(Q_{\Delta t}=0\); that skip does not license a non-finite carried term when \(2(a\Delta t)\) overflows to \(+\infty\). Treating \(Q_{\Delta t}\) as \(\operatorname{Var}(\eta_{t})\) fails closed. - **Stationary within-subject variance.** Driver et al. (2017, Eq. 4 as \(\Delta t\to\infty\); §4.3 pp. 9–10; p. 16 `asymDIFFUSION`; JSS PDF re-opened 2026-08-19T04:10Z, p. 5): for stable \(a<0\), \(\lim_{\Delta t\to\infty}Q_{\Delta t}=-q/(2a)\). When \(2a\) is finite, form \(q/-(2a)\) so \(q/a\) overflow does not lose a finite Lyapunov solution (`q=MAX`, `a=-0.75` → `MAX/1.5`; CodeRabbit on `75ecdd3`). When \(2a\) overflows, form \((q/a)\times-0.5\). Forming \(2a\) as the only path overflows when \(|a|\) is at the binary64 extreme (`a=-1e308`, `q=1e308` → `0.5`). Forming \(0.5q\) first underflows at the minimum subnormal (`q=from_bits(1)`, `a=-from_bits(1)` → naive `+0`; representable solution `0.5`). Starting from that variance, \(\operatorname{Var}(\eta_{t})\) is invariant across finite event intervals. A zero diffusion is exactly zero. \(a\ge 0\) has no finite stationary variance (Brownian \(a=0\) grows as \(q\Delta t\)). An overflowing Lyapunov solution fails closed. Finite-interval \(Q_{\Delta t}\) is not that limit. This is not ctsem estimation and not a Kalman filter. - **Trait-plus-state variance.** Driver et al. (2017, §4.3, p. 9; JSS PDF re-opened 2026-08-18T21:07Z): a stable trait process has `DRIFT` and `DIFFUSION` fixed to zero. The scalar maps are \(\operatorname{Var}=\mathrm{trait}+\mathrm{state}\) and \(\operatorname{cov}(t,t-1)=\mathrm{trait}+\mathrm{e}^{a\Delta t}p\). The ctsem `TRAITVAR` rewrite that adds the trait to `DIFFUSION` does not license treating trait variance as \(Q_{\Delta t}\). Trait variance is not `asymDIFFUSION`. Evolving the summed variance as if it were all state is not this map. A zero trait is exactly the state. A zero state is exactly the trait. An overflowing sum fails closed. This is not RI-CLPM and not ctsem estimation. +- **Equation 5 of 2017-era `T0TOTALVAR` after `addedT0TIPREDVAR` with `MANIFESTTRAITVAR`.** Driver et al. (2017, Eq. 5, p. 5; Table 2, p. 12; Table 3, p. 13; 2017-era `summary.ctsemFit.R` lines 322–339 then 437–442; JSS PDF re-opened 2026-08-30T20:56Z): `T0TRAITVAR = T0TRAITEFFECT %*% TRAITVAR %*% t(T0TRAITEFFECT)`, `T0TOTALVAR = T0TRAITVAR + T0VAR`, `addedT0TIPREDVAR = T0TIPREDEFFECT %*% TIPREDVAR %*% t(T0TIPREDEFFECT)`, then `T0TOTALVAR <- addedT0TIPREDVAR + T0TOTALVAR`. Equation 5 of that total with `τ_i ~ N(μ_τ, Ψ_τ)` is \(\operatorname{Var}(y_0)=\lambda^{2}(t0\_\mathrm{trait}^{2}\cdot\mathrm{trait}+p_0+t0_b^{2}v)+ heta+\psi\). Form extra first, then add free \(p_0\), then form \(t0_b^{2}v\), then add, then \((\lambda\,\mathrm{total})\lambda+ heta+\psi\). A zero extra, a zero \(p_0\), a zero TI extra, or a zero loading is exactly \( heta+\psi\) when the remaining latent terms are zero. A zero manifest trait is exactly \(\lambda^{2}(\mathrm{extra}+p_0+\mathrm{ti\_extra})+ heta\). The latent total is not that observed map. \(\lambda^{2}(\mathrm{extra}+p_0+\mathrm{ti\_extra})+ heta\) omits \(\psi\). `MANIFESTVAR` \( heta\) is not this composition. `MANIFESTTRAITVAR` \(\psi\) is not this composition. `T0TOTALVARstd` is not this map. - **Observed-indicator variance.** Driver et al. (2017, Eq. 5, p. 5; Table 2, p. 12; JSS PDF re-opened 2026-08-19T04:18Z): \(y_i(t)=\tau_i+\Lambda\eta_i(t)+\varepsilon_i(t)\) with \(\varepsilon\sim N(0,\Theta)\) and \(\tau_i\sim N(\mu_{\tau},\Psi_{\tau})\). Equation 1 (p. 4) is the latent SDE. Table 2 names \(\Theta\) `MANIFESTVAR` and \(\Psi_{\tau}\) `MANIFESTTRAITVAR`; p. 16 restates those names. The scalar map is \(\operatorname{Var}(y)=\lambda^{2}\operatorname{Var}(\eta)+\theta\) when \(\Psi_{\tau}=0\) and \(\lambda^{2}\operatorname{Var}(\eta)+\theta+\psi\) otherwise. Form \((\lambda p)\lambda\) then add \(\theta\), then add \(\psi\). Forming \(\lambda^{2}\) first overflows at \(\lambda=10^{308}\), \(p=10^{-308}\). A zero loading or zero latent variance is exactly \(\theta\) (\(\Psi_{\tau}=0\)) or \(\theta+\psi\). A zero measurement error is exactly \(\lambda^{2}p+\psi\). A zero manifest trait is exactly \(\lambda^{2}p+\theta\). `MANIFESTVAR` is not \(\operatorname{Var}(y)\). `MANIFESTTRAITVAR` is not `MANIFESTVAR`. `TRAITVAR` is latent additional variance and is scaled by \(\lambda^{2}\); `MANIFESTTRAITVAR` is not. \(\operatorname{Var}(\eta)\) is not \(\operatorname{Var}(y)\). An overflowing product or sum fails closed. This is not a Kalman filter and not ctsem estimation. - **Lagged observed-indicator covariance.** Driver et al. (2017, Eq. 5 with Eq. 3–4; JSS PDF re-opened 2026-08-19T04:18Z): independent \(\varepsilon_t\) does not enter \(\operatorname{cov}(y_t,y_{t-1})\). The scalar map is \(\lambda^{2}\operatorname{cov}(\eta_t,\eta_{t-1})+\psi\). Form \((\lambda c)\lambda\) then add \(\psi\). A zero loading or zero latent lagged covariance is exactly \(\psi\). A zero manifest trait is exactly \(\lambda^{2}c\). `MANIFESTVAR` is not lagged observed covariance. Lagged latent covariance is not lagged observed covariance. An overflowing product or sum fails closed. - **Observed-indicator mean.** Driver et al. (2017, Eq. 5, p. 5; Table 2, p. 12; JSS PDF re-opened 2026-08-19T14:08Z): \(y_i(t)=\Gamma+\Lambda\eta_i(t)+\zeta_i(t)\) with \(\zeta\sim N(0,\Theta)\) and \(\Gamma\sim N(\tau,\Psi)\). Table 2 names \(\tau\) `MANIFESTMEANS`, \(\kappa\) `CINT`, and the first-occasion latent mean `T0MEANS`. The scalar map is \(E(y)=\tau+\lambda\mu\). Form \(\lambda\mu\) then add \(\tau\). A zero loading or zero latent mean is exactly \(\tau\). A zero intercept is exactly \(\lambda\mu\). `MANIFESTMEANS` is not \(E(y)\). \(E(\eta)\) is not \(E(y)\). `CINT` is not `MANIFESTMEANS`. `T0MEANS` is not \(E(y)\). An overflowing product or sum fails closed. This is not a Kalman filter and not ctsem estimation. @@ -256,6 +259,7 @@ The Voelkle et al. (2012) ZORA accepted manuscript was re-opened 2026-08-18T21:0 - Driver et al. (2017, Table 2 / §7.1 / p. 16 `TRAITVARstd`; footnote 4; 2017-era ctsem `summary.ctsemFit.R`; JSS PDF re-opened 2026-08-26T17:45Z) recovers the scalar correlation \(\mathrm{trait}/\mathrm{trait}=1\) at machine-scale RMSE after strictly positive `TRAITVAR`, and that RMSE is smaller than treating unstandardised `TRAITVAR` or `addedT0TIPREDVAR` \(t0_b^{2}v\) as `TRAITVARstd`; distinct positive trait recover the same 1; equal 1 with `T0VARstd` remains a distinct named quantity; `TRAITVAR = 0` fails closed; a non-event clock fails closed; `TRAITVAR` does not require \(a<0\). - Driver et al. (2017, Table 2 / §7.1 / p. 16 `MANIFESTTRAITVARstd`; footnote 4; 2017-era ctsem `summary.ctsemFit.R`; JSS PDF re-opened 2026-08-23T22:28Z) recovers the scalar correlation \(\psi/\psi=1\) at machine-scale RMSE after strictly positive `MANIFESTTRAITVAR`, and that RMSE is smaller than treating unstandardised `MANIFESTTRAITVAR` or `MANIFESTVAR` \(\theta\) as `MANIFESTTRAITVARstd`; distinct positive \(\psi\) recover the same 1; equal 1 with `TRAITVARstd` remains a distinct named quantity; `MANIFESTTRAITVAR = 0` fails closed; a non-event clock fails closed; `MANIFESTTRAITVAR` does not require \(a<0\). +- Driver et al. (2017, Eq. 5 of 2017-era `T0TOTALVAR` after `addedT0TIPREDVAR` with `MANIFESTTRAITVAR`; Table 2, p. 12; Table 3, p. 13; 2017-era ctsem `summary.ctsemFit.R`; JSS PDF re-opened 2026-08-30T20:56Z) recovers a known \(\operatorname{Var}(y_0)=\lambda^{2}(t0\_\mathrm{trait}^{2}\cdot\mathrm{trait}+p_0+t0_b^{2}v)+ heta+\psi\) at machine-scale RMSE, and that RMSE is smaller than treating the latent total, Eq. 5 of that total without \(\psi\), `MANIFESTVAR` \( heta\), or `MANIFESTTRAITVAR` \(\psi\) as that observed total; doubling \(v\) or \(\psi\) increases the observed total; a signed coefficient yields the same product; a zero loading is \( heta+\psi\); \(v<0\) or \(\psi<0\) fails closed; a non-event clock and an overflowing product or sum fail closed; free `T0TRAITEFFECT` / `T0VAR` / `T0TIPREDEFFECT` / `MANIFESTTRAITVAR` do not require \(a<0\). - Driver et al. (2017, Table 2 / Eq. 5 / p. 16 `MANIFESTVARstd`; footnote 4; 2017-era ctsem `summary.ctsemFit.R`; JSS PDF re-opened 2026-08-23T22:40Z) recovers the scalar correlation \(\theta/\theta=1\) at machine-scale RMSE after strictly positive `MANIFESTVAR`, and that RMSE is smaller than treating unstandardised `MANIFESTVAR` or Equation 5 \(\operatorname{Var}(y)\) as `MANIFESTVARstd`; distinct positive \(\theta\) recover the same 1; equal 1 with `MANIFESTTRAITVARstd` remains a distinct named quantity; `MANIFESTVAR = 0` fails closed; a non-event clock fails closed; `MANIFESTVAR` does not require \(a<0\). - Driver et al. (2017, Table 2 / p. 16 `TIPREDVARstd`; footnote 4; 2017-era ctsem `summary.ctsemFit.R`; JSS PDF re-opened 2026-08-23T22:53Z) recovers the scalar correlation \(v/v=1\) at machine-scale RMSE after strictly positive `TIPREDVAR`, and that RMSE is smaller than treating unstandardised `TIPREDVAR` or §7.2 `addedTIPREDVAR` \((B/a)^{2}v\) as `TIPREDVARstd`; distinct positive \(v\) recover the same 1; equal 1 with `MANIFESTVARstd` remains a distinct named quantity; `TIPREDVAR = 0` fails closed; a non-event clock fails closed; `TIPREDVAR` does not require \(a<0\). - Driver et al. (2017, p. 16 `asymDIFFUSIONstd`; footnote 4; Eq. 4; 2017-era ctsem `summary.ctsemFit.R`; JSS PDF re-opened 2026-08-26T17:20Z) recovers the scalar correlation \(p/p=1\) at machine-scale RMSE after strictly positive `asymDIFFUSION` \(-q/(2a)\), and that RMSE is smaller than treating unstandardised `asymDIFFUSION` or `DIFFUSIONstd` \(-2a\) as `asymDIFFUSIONstd`; distinct positive \(p\) recover the same 1; equal 1 with `T0VARstd` and with `TIPREDVARstd` remain distinct named quantities; `q = 0` fails closed; a non-event clock fails closed; \(a\ge 0\) fails closed.