Reject a non-grav fit only when the covariance cannot support an amplitude - #542
Merged
Conversation
…itude The weak-constraint guard rejected a joint state + non-grav fit on the reciprocal condition number of the whole npar x npar correlation matrix. That is not a statement about the non-grav column. A six-parameter orbit fit is itself strongly correlated, so the test was dominated by the orbit underneath: on (6489) Golevka the state block alone has rcond 2.6e-10, twenty-five times below the old 1e-8 threshold, while A2 correlates with the state at only 0.91 to 0.93 and its formal uncertainty matches the published one. Radar makes this worse rather than better, because it tightens the state and lowers that rcond further. Adding seven radar observations to 2062 Aten's 980 optical ones turned a reported A2 = -14.96 +/- 1.70 into NaN. All three radar-bearing Yarkovsky objects were being suppressed at reduced chi-square between 0.28 and 1.55. The concern the old test stood in for -- a contaminated, over-confident amplitude -- was a symptom of taking the step from the squared-condition normal matrix, and does not survive that fix. A ten-day arc now returns A2 with a formal error five million times its own value, which tells the caller what it needs to know; unlike a significance test it also does not suppress a well-constrained null. So reject only on a non-positive or non-finite variance, which means the inverse has genuinely lost the column. The two tests that encoded the old contract now assert the stronger one: that the uncertainty is honest, and that it tracks arc length. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
# Conflicts: # src/lib/orbit_fit/orbit_fit.cpp
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #541.
This is a behaviour change, and the two rewritten tests are the crux — please push back if you disagree with the policy.
The guard rejected on rcond of the whole npar×npar correlation matrix, which is dominated by the orbit rather than the non-grav column. Radar makes it worse, since it tightens the state: adding seven radar rows to 2062 Aten's 980 optical ones turned a reported A2 = −14.96 ± 1.70 into NaN. All three radar-bearing Yarkovsky objects were suppressed at reduced chi-square 0.28–1.55.
I first tried the amplitude's variance inflation factor and measured that it does not separate the cases either (#541 has the table). What the old test stood in for — a contaminated, over-confident amplitude — was a symptom of taking the step from the squared-condition normal matrix, fixed in #536. A ten-day arc now returns A2 with a formal error five million times its own value, which is the honest answer and, unlike a significance test, does not suppress a well-constrained null. So reject only on a non-positive or non-finite variance.
With this, on merged main: Aten −15.08 ± 1.34 (0.12σ from Farnocchia+2013), Nyx +16.72 ± 2.98 (1.50σ from JPL), Golevka −10.21 ± 1.61 (0.91σ from JPL). Full suite green, 550 passed.
🤖 Generated with Claude Code