feat(psychometric): restore Driver p.16 DRIFTstd on main - #298
Conversation
Restores recover_standardised_drift after strictly positive asymDIFFUSION. Scalar SD ratio is 1 so the standardised auto-effect equals unstandardised a numerically; those remain distinct named quantities. Refuses unstandardised a, discreteDRIFTstd, and trait-contaminated a p/(trait+p+added). Independent of #280/#296/#297. Driver, Oud, and Voelkle (2017, p. 16; Eq. 1; footnote 4). JSS PDF re-opened 2026-08-29T00:25Z.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (8)
Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review. 📝 WalkthroughWalkthrough연속시간 ChangesDRIFTstd 표준화 복원
Estimated code review effort: 3 (Moderate) | ~25 minutes Merge Risk: ⚪ Minimal · up to This PR adds a bounded scalar calculation with explicit validation for invalid inputs and does not change security, deployment, or runtime boundaries. No actionable merge-blocking risk remains after normal checks and review. Sequence Diagram(s)sequenceDiagram
participant ContractTests as contract tests
participant Recover as recover_standardised_drift
participant Variance as recover_stationary_latent_variance
ContractTests->>Recover: diffusion, log_rate, EventTime 전달
Recover->>Variance: 정상 within-subject variance 검증
Variance-->>Recover: 양의 분산 또는 오류 반환
Recover-->>ContractTests: DRIFTstd 값 또는 PsychometricError 반환
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
Full details: Docstring CoverageExplanation Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 8 functions across 4 files. (4 skipped: 3 unsupported, 1 too large.) ✨ Finishing Touches 💡 1🛠️ Fix failing CI checks 💡
📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Closing as superseded by draft ContextualWisdomLab/TEPP#314. This head is |
Outcome
Restores the executable Driver, Oud, and Voelkle (2017) p. 16
DRIFTstdscalar on currentmainafterb03cc378restoredMANIFESTVARstdwhile research notes already named this map (register items 61–62).Independent of
#280discreteDRIFTstd,#296discreteDIFFUSIONstd, and#297DIFFUSIONstd(open; do not convert or merge from this PR). This crate does not currently exportdiscreteDRIFTstd; the refuse still names that quantity.JSS PDF re-opened 2026-08-29T00:25Z from https://www.jstatsoft.org/index.php/jss/article/download/v077i05/1104. Page 16, Equation 1 (p. 4), footnote 4, Table 2 (p. 12), and §7.1 (pp. 18–19) were read from that PDF in this cycle. 2017-era cran/ctsem 2.5.0
summary.ctsemFit.Rwas re-read locally.DRIFT,DIFFUSION) and, when appropriate, standardised matrices with the suffixstd. The printed example on p. 16 isdiscreteDRIFTstd, notDRIFTstd.DRIFTthat relevant variance is within-subjectasymDIFFUSIONp = −q / (2 a), becauseDRIFTis intended to represent individual, or average individual, temporal dynamics.summary.ctsemFit.RformsdiscreteDRIFTstdwheneververbose = TRUE, asdiscreteDRIFT * standardiserafterstandardiser <- rep(sqrt(diag(asymDIFFUSION)), each = n.latent) / rep(diag(sqrt(asymDIFFUSION)), times = n.latent). That source does not form aDRIFTstdmatrix.pfirst, thenDRIFT * standardiser. In the scalar stationary case that SD ratio is 1 after strictly positivep, so the standardised auto-effect equals the unstandardised log-rateanumerically; those remain distinct named quantities.ais defined for growinga ≥ 0and for zero diffusion; standardisedDRIFTis not. Zeroqhas no positive SD and fails closed. Lastingprequires stablea < 0. A non-event clock fails closed. Distinct positiveqrecover the samea.e^{a Δt}isdiscreteDRIFTstdand depends on the event interval; it is notDRIFTstd.a p / (trait + p + added)uses the total, notasymDIFFUSION, and is notDRIFTstdwhenTRAITVARis nonzero.TRAITVARis not the standardisation variance.Meredith (1993) remains unread (web search 2026-08-29T00:25Z: Springer/Cambridge Core paywalled; Unpaywall historically
is_oa: false; Springercontent/pdfis an HTML stub). Mislevy (1991, Psychometrika, 56, 177–196) remains unread on the same terms (DOI10.1007/bf02294457).Still not a Kalman filter, not a matrix
expm, not ESEM estimation, not DSEM, and not ctsem estimation.Do not squash-merge without independent non-author APPROVE plus exact-head required-check success. Do not self-approve.
Summary by CodeRabbit
새 기능
문서
테스트