feat(psychometric): restore Driver p.16 asymDIFFUSIONstd p/p=1 on main - #267
feat(psychometric): restore Driver p.16 asymDIFFUSIONstd p/p=1 on main#267seonghobae wants to merge 1 commit into
Conversation
Restore recover_standardised_asymptotic_diffusion on current main after 0ce16e8 dropped the pre-consolidation code while research notes already named the map (register items 89–90). Scalar is p/p=1 after strictly positive asymDIFFUSION p=−q/(2a). Distinct from T0VARstd, DIFFUSIONstd, and TIPREDVARstd even when those equal 1.
|
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
Changes표준화 점근 확산
Estimated code review effort: 4 (Complex) | ~45 minutes Merge Risk: ⚪ Minimal · up to The PR restores a localized psychometric scalar with documented validation and passing checks; no actionable merge-blocking risk remains beyond normal review. Sequence Diagram(s)sequenceDiagram
participant Caller
participant recover_standardised_asymptotic_diffusion
participant LagClock
participant PsychometricError
Caller->>recover_standardised_asymptotic_diffusion: 입력값과 clock 전달
recover_standardised_asymptotic_diffusion->>LagClock: event-time clock 검증
LagClock-->>recover_standardised_asymptotic_diffusion: 검증 결과 반환
recover_standardised_asymptotic_diffusion->>PsychometricError: 무효 입력 오류 생성
recover_standardised_asymptotic_diffusion-->>Caller: 1 또는 오류 반환
🚥 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 11 functions across 4 files. (4 skipped: 3 unsupported, 1 too large.) ✨ Finishing Touches📝 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 |
| let process_sd = stationary.sqrt(); | ||
| let inverse_sd = require_finite(1.0 / process_sd)?; | ||
| let scaled = require_finite(inverse_sd * stationary)?; | ||
| require_finite(scaled * inverse_sd) |
There was a problem hiding this comment.
📝 Info: Overflow guards in the p/p=1 map are unreachable
In recover_standardised_asymptotic_diffusion the result (1/√p) p (1/√p) always equals 1 for finite positive p, so the three require_finite overflow guards can never fail. The documented InvalidNumericInput overflow path (event_time.rs:1806-1809) is dead. This mirrors the existing recover_standardised_initial_latent_variance, so it is consistent with the crate pattern rather than a regression.
Was this helpful? React with 👍 or 👎 to provide feedback.
Outcome
Restores the executable Driver, Oud, and Voelkle (2017) p. 16
asymDIFFUSIONstdscalar on currentmainafter0ce16e8dropped the pre-consolidation code while research notes already named the map (register items 89–90).Head is independent of any open PR (none open at open time). Lands on protected
mainc7cf34bafter#266analysis-run status HTTP,#265T0VARstd,#262T0MEANSstd,#250asymCINTstd, and#244discreteCINTstd.JSS PDF re-opened 2026-08-26T17:20Z from https://www.jstatsoft.org/index.php/jss/article/download/v077i05/1104. Table 2 (p. 12), footnote 4 (p. 16), Eq. 4 (p. 5), and the p. 16
stdsuffix were read from that PDF in this cycle.stdwhen appropriate, and namesasymDIFFUSIONthe total within-subject variance asΔt → ∞. The printed example on p. 16 isdiscreteDRIFTstd, notasymDIFFUSIONstd.asymDIFFUSIONp = −q / (2 a), not free first-occasionT0VAR.summary.ctsemFit.RformsasymDIFFUSIONstdassolve(sqrt(diag(asymDIFFUSION))) %&% asymDIFFUSIONwhenverbose = TRUE. OpenMx%&%ist(A) %*% B %*% A. The defaultridging = FALSEadds 0, not0.0001; that ridge is a numerical hack and is not this exact map.p / p = 1after strictly positiveasymDIFFUSION. Form strictly positivepfirst, then1 / √p, then(1 / √p) p (1 / √p). Unstandardisedpis defined for a zero process; standardisedasymDIFFUSIONis not. Zeroqhas no positive SD and fails closed. Lastingprequires stablea < 0. A non-event clock fails closed. Distinct positiveprecover the same 1.p_0 / p_0 = 1isT0VARstdand recovers the same number and remains a distinct named quantity. This crate already exportsT0VARstd; the refuse names that quantity.q / p = −2 aisDIFFUSIONstdand is not this correlation. Equal numbers whena = −0.5remain distinct named quantities. This crate does not currently exportDIFFUSIONstd; the refuse still names that quantity.v / v = 1isTIPREDVARstdand recovers the same number and remains a distinct named quantity. This crate does not currently exportTIPREDVARstd; the refuse still names that quantity.Still not a Kalman filter, not a matrix
expm, not ESEM estimation, not DSEM, not MGCFA, and not ctsem estimation.Meredith (1993) remains unread (Unpaywall 2026-08-26T17:20Z:
is_oa: false; OpenAlex closed; Springercontent/pdfis an HTML stub). Mislevy (1991) remains unread on the same terms (DOI10.1007/bf02294457; Unpaywallis_oa: false).#84metricstill does not license latent means.Do not merge without independent non-author APPROVE and exact-head required-check success. Author will not self-approve. Org has only collaborator
seonghobae. Do not request Copilot.Next restore after this slice:
TRAITVARstd(register items 81–82).Verification at this head
cargo +1.98.0 test -p psychometric_core --lib— 180 passedcargo +1.98.0 test -p psychometric_core --test multilevel_event_time_recovery_contract --test scientific_claim_boundary_contract standardised_asymptotic_diffusion— 2 + 1 passedcargo +1.98.0 clippy -p psychometric_core --all-targets -- -D warningscargo +1.98.0 fmt -p psychometric_core -- --checkRUSTDOCFLAGS='-D warnings' cargo +1.98.0 doc -p psychometric_core --no-depsContract
psychometric_core(not a second invariance crate)recover_standardised_asymptotic_diffusionSummary by CodeRabbit
새로운 기능
버그 수정
문서