Skip to content

Use censoring thresholds in Gaussian noise sensitivities - #1748

Open
antonsoo wants to merge 1 commit into
pints-team:mainfrom
antonsoo:fix/censored-noise-threshold
Open

antonsoo wants to merge 1 commit into
pints-team:mainfrom
antonsoo:fix/censored-noise-threshold

Conversation

@antonsoo

Copy link
Copy Markdown

For observations beyond a censoring limit, CensoredGaussianLogLikelihood uses the threshold probability in its score but the raw observation in its noise derivative. Raw and clipped representations therefore have the same likelihood surface and different evaluateS1 gradients.

Use the lower/upper threshold residual in the two noise derivative terms. Keep likelihood values and model-parameter derivatives unchanged. This preserves the accepted input behavior discussed in the original review.

Add 12 numerical cases covering one/two/three outputs, both censoring sides, raw/clipped equivalence, and finite differences. Nine fail on unchanged main; all pass after on Python3.10/NumPy1.26 and Python3.12/NumPy2.5.

I also checked 48 continued native gradient-descent fits on the supplied recorded hare/lynx series and constructed censoring variants. All 18 incorrect trajectories agree with the independent scalar reference after the change; all 30 previously correct controls remain identical. Every raw/clipped pair now follows exactly the same trajectory.

Validation: full unit suite passes (766 tests, three optional skips), Flake8 passes, and the clean HTML documentation build succeeds without warnings. CHANGELOG.md is updated.

This is independent of #1747, which corrects the model-parameter axis. Related to #667.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant