feat(psychometric): restore Driver p.16 discreteDIFFUSIONstd QΔt/p on main - #477
feat(psychometric): restore Driver p.16 discreteDIFFUSIONstd QΔt/p on main#477seonghobae wants to merge 1 commit into
Conversation
… main Restore the exact scalar Driver, Oud, and Voelkle (2017) p.16 discreteDIFFUSIONstd map independently on current main. Form strictly positive asymDIFFUSION p = −q/(2a) first, then Q_Δt, then Q_Δt/p. The scalar stationary ratio is 1−exp(2aΔt). 2017-era summary.ctsemFit.R forms unstandardised discreteDIFFUSION and does not form a discreteDIFFUSIONstd matrix; footnote 4 still licenses this map. Do not convert stale draft #311. One named std map per PR.
|
Warning Review limit reachedNext included review available in 17 minutes. View limit detailsLimit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Team Run ID: 📒 Files selected for processing (8)
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_noise = | ||
| recover_discrete_process_noise(continuous_diffusion, log_rate, event_delta, clock)?; | ||
| require_finite(process_noise / stationary) |
There was a problem hiding this comment.
🟡 Small intervals erase standardized diffusion
When process noise underflows but stationary variance remains positive, process_noise / stationary returns zero instead of the representable standardized ratio.
Prompt for agents
Make recover_standardised_discrete_diffusion evaluate Q_Δt / p without dividing independently rounded f64 values. For example, after preserving all existing validation and the strictly-positive-stationary-variance gate, use the algebraically equivalent stable scalar expression -expm1(2 * (log_rate * event_delta)), with the same overflow/underflow conventions used elsewhere. Add cases where Q_Δt underflows although the ratio remains representable, such as q=1e-100, a=-1, and Δt=1e-308, plus subnormal q cases that expose numerator/denominator rounding.
Was this helpful? React with 👍 or 👎 to provide feedback.
Superseded by the Longitudinal Modeling landing vehicle
Closed after source-level verification against surviving PR #310 exact head
4e7435f6dd232ae8e1e019f1393e7285e32c6527.This Draft's unique scientific evidence is preserved rather than discarded: #310 now implements the event-time scalar discrete diffusion-standardisation candidate in
crates/longitudinal_core/src/diffusion.rs, preserves the strictly positive stationary-within admission contract, typedEventTimeInterval, interval ordering, scale invariance, signed-zero underflow refusal, asymptotic unit limit, named-estimand refusals and research-candidate status, with executable coverage incrates/longitudinal_core/tests/standardised_diffusion_contract.rs. The owner move is intentional: event-time/state composition belongs to TEPP Longitudinal Modeling, not the genericpsychometric_coretechnical layer.The immutable discussion and this branch remain scientific lineage. Do not merge this predecessor independently. #310 is the landing authority for the folded behavior and must satisfy its own exact-head checks/review before protected-main integration.
Original scope preserved below for lineage.
Restore one named Driver, Oud, and Voelkle (2017) p. 16 scalar candidate
discreteDIFFUSIONstd = Q_Δt / p = 1 − exp(2 a Δt)after strictly positive stationary within-person variance. The 2017-era ctsem source emits unstandardiseddiscreteDIFFUSIONbut not a nameddiscreteDIFFUSIONstdmatrix, so this remains a research-candidate extension rather than canonical ctsem output.