Skip to content

Add v0.4.0 sign convention to the manuscript; real-archive validation section - #37

Open
mdenolle wants to merge 5 commits into
masterfrom
docs/sign-convention-manuscript
Open

Add v0.4.0 sign convention to the manuscript; real-archive validation section#37
mdenolle wants to merge 5 commits into
masterfrom
docs/sign-convention-manuscript

Conversation

@mdenolle

Copy link
Copy Markdown
Contributor

Two things landed this week that needed to go into the manuscript: the
physical dv/v sign-convention correction (v0.4.0, #36) and a real-archive
validation against Clements & Denolle (2022) at three CI stations.

1-2. Sign convention (methods + boxed definition, discussion)

Boxed definition where dv/v is first introduced (dv/v = -eps/(1+eps), with
the 0.17% first-order bias at landslide-scale changes). Methods states all
seven estimators return physical dv/v as of v0.4.0 and points at
tests/test_sign_convention.py. New Discussion item, "Validate against
something you did not generate": the honest cautionary story -- generator
and estimators agreed with each other before the fix, so every synthetic
test passed, while real-archive dv/v anticorrelated with CD2022 and seasonal
hydrology (r=-0.69,-0.45,-0.40) until ground-truthing through the exact call
path caught it.

3-4. Real-archive validation (results) + figures

Comparison methodology (CD2022's trailing-90-day product lags a centered
daily series by ~45 days; matched by applying the same trailing mean,
comparing demeaned, excluding a 150-day burn-in) and headline numbers
(CI.LJR r=0.990, CI.ARV 0.66-0.92, CI.RXH 0.68). Three figures from
paper/figures/gate1/: station-by-station validation (caption is explicit
that its own annotated r is a different, unmatched-smoothing comparison from
the headline number -- I checked this against the actual image before
writing the caption, not just the prompt), the CCF interferograms explaining
why validation quality differs by station, and an optional supplement on
ensemble warm-up honesty.

5. Consistency sweep -- found two real bugs, not just wording

  • The appendix's estimator-definitions section literally equated epsilon
    with "the recovered dv/v" -- the pre-fix convention. Fixed there and in
    the Approach A/B aggregation formulas.
  • The Synthetic Framework section's own impose-dv/v equation still showed
    the pre-fix formula (t/(1+dv/v), division) instead of what the code
    actually does now (t*(1+dv/v), multiplication). Fixed.

Flagging, not silently changing

Every one of the paper's 15 synthetic demo figures (demo_1 through
demo_15) predates the sign fix -- last content-committed 2026-07-20 through
2026-08-03, the fix landed 2026-08-09 (verified via git log per figure).
The code change is not a pure sign negation (impose_dvv went from
t/(1+dvv) to t*(1+dvv), a different nonlinear map), so I can't just
mentally flip a sign and call it correct -- regenerating is the only way to
know which figures/numbers actually change and by how much, especially at
the paper's own larger-magnitude tests (the ±5% sweep, the 4% landslide
scenario) where the boxed convention's own math says the nonlinear term is
not negligible. Not attempted in this PR; flagging for a dedicated pass.

Test plan

… section

Prompted by two things landing this week: the physical dv/v sign
convention correction (v0.4.0, PR #36) and a real-archive validation
against Clements & Denolle (2022) at three CI stations.

- Boxed sign-convention definition where dv/v is first introduced
  (Introduction): dv/v = -eps/(1+eps), with the first-order shortcut's
  0.17% bias at landslide-scale (4%) changes.
- Sec. methods-fig: states all seven estimators return physical dv/v
  under this convention as of v0.4.0, the synthetic generator imposes
  in the same convention, and tests/test_sign_convention.py holds
  every estimator to it in both signs.
- New Discussion item, "Validate against something you did not
  generate": the cautionary finding that internal consistency isn't
  correctness -- generator and estimators agreed with each other
  before the fix, so every synthetic test passed, while real-archive
  dv/v anticorrelated with CD2022 and seasonal hydrology at three
  stations (r=-0.69,-0.45,-0.40) until ground-truthing through the
  exact call path caught it.
- New Sec. deployment content: the real-archive validation. Comparison
  methodology (CD2022's trailing-90-day product lags a centered daily
  series by ~45 days; match by applying the same trailing mean, compare
  demeaned, exclude a 150-day burn-in), headline numbers (CI.LJR
  r=0.990, CI.ARV 0.66-0.92, CI.RXH 0.68), and three figures: the
  station-by-station validation against CD2022 (whose own annotated r
  is a different, unmatched-smoothing comparison -- the caption is
  explicit about why the two numbers differ), the daily CCF
  interferograms explaining why validation quality differs by station,
  and an optional supplement on the ensemble's warm-up honesty.
- Consistency sweep found and fixed two real inconsistencies beyond
  the new content: the appendix's estimator-definitions section
  equated "epsilon" directly with "the recovered dv/v" (the pre-fix
  convention) instead of treating epsilon as the stretch factor that
  converts via the boxed relation -- fixed there and in the
  aggregation-approach formulas. The Synthetic Framework section's own
  impose-dv/v equation still used the pre-fix formula
  (t/(1+dv/v), division) instead of the current code's t*(1+dv/v)
  (multiplication) -- fixed.

Figures copied from paper/figures/gate1/ (committed validation
artifacts, see paper/data/gate1/README.md) into literature/figs/ as
realdata_1_validation.png, realdata_2_interferograms.png,
realdata_3_warmup.png.

Verified: 245/245 tests pass (1 unrelated skip), PDF builds cleanly
(only the 2 pre-existing, already-tracked dangling citations from
issue #30), all three new figures checked against their actual pixel
content before writing captions, box/section/figure renders visually
confirmed on rendered PDF pages.

NOT addressed here, flagged for a separate pass: every one of the
paper's 15 synthetic demo figures (demo_1 through demo_15) was
generated before the sign-convention fix (all last content-committed
2026-07-20 through 2026-08-03; the fix landed 2026-08-09). The code
change is not a pure sign negation -- impose_dvv changed from
t/(1+dvv) to t*(1+dvv), a different nonlinear map -- so regenerating
is needed to know which specific figures/numbers actually flip and by
how much, especially at the paper's own larger-magnitude tests (the
+/-5% sweep, the 4% landslide scenario) where the boxed convention's
own math says the nonlinear correction is not negligible.
Copilot AI lite review requested due to automatic review settings August 10, 2026 17:54

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates the marine manuscript to reflect codameter v0.4.0’s physical dv/v sign convention and adds a real-archive validation narrative and figures (CI stations vs Clements & Denolle product), plus consistency fixes to formulas and appendix definitions.

Changes:

  • Adds a boxed dv/v sign-convention definition and updates methods/discussion text to reflect v0.4.0 behavior and test coverage.
  • Updates the synthetic framework’s imposed dv/v equation to match the current implementation (t*(1+dv/v)).
  • Adds a real-archive validation section with three figures and updates appendix aggregation/estimator definitions to distinguish stretch factor ε from physical dv/v.

Reviewed changes

Copilot reviewed 2 out of 5 changed files in this pull request and generated 4 comments.

File Description
paper/manuscript_marine.tex Adds sign-convention box, real-archive validation + figures, and updates equations/appendix text for the v0.4.0 convention.
paper/manuscript_marine.qmd Mirrors the manuscript updates in the Quarto source (equation fix, validation section + figures, appendix wording).

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread paper/manuscript_marine.tex Outdated
claim is drawn from it.

After the correction, single-station \dvv~(NoisePy correlations, a
codameter 5-member ensemble, 2--4,Hz, 2018--2019) validates against the
Comment thread paper/manuscript_marine.tex Outdated

As an optional supplement,
Fig.\textasciitilde{}\ref{fig:realdata-warmup} shows the ensemble's
warm-up behaviour on a separate 90-day smoke run at CI.LJR: \dvv\\
Comment thread paper/manuscript_marine.tex Outdated
whether coseismic softening is a shallow site response or slip on the
fault at depth \citep{Rubinstein2005} --- so a depth reported without
its uncertainty cannot support that claim.
\citep[\citet{Mao2025}]{Takano2017, Feng2020, Mao2022}. The step from a
Comment thread paper/manuscript_marine.tex Outdated
Comment on lines +306 to +308
The first-order shortcut $\dvv \approx -\varepsilon$ is accurate to order
$\varepsilon^2$ --- negligible below $1\,\%$ but a $0.17\,\%$ absolute bias at
the $4\,\%$ changes seen on landslides.
mdenolle and others added 4 commits August 11, 2026 06:17
Copilot's own 4 comments, plus what investigating them turned up:

- The flagged 2--4,Hz (missing thin space) turned out to be one
  instance of a paper-wide, pre-existing bug: pandoc's markdown reader
  treats a bare `\,` outside math/raw-latex blocks as an escaped
  literal comma (CommonMark punctuation-escape rules), silently
  eating the backslash. Audited every `\,` in the document against
  its actual rendered .tex output rather than guessing; found and
  fixed 9 corrupted unit-spacing instances (Hz/s) across 6 lines,
  using the same $\,$ math-wrapped form already proven safe elsewhere
  in this document. Raw-latex-fenced tables were correctly unaffected
  and left alone.
- Same root cause, different symptom: three "\dvv\, " instances
  (macro + backslash-comma used as prose spacing) were rendering as
  "\dvv," -- a spurious visible comma after the delta-v/v symbol in
  three places, including the Introduction's very first sentence
  introducing dv/v. Fixed the same way. (Two other \dvv, matches were
  genuine, intentional commas -- verified each one's qmd source before
  touching anything.)
- The flagged forced line-break (`\dvv\\`) was caused by a related
  CommonMark rule: a bare backslash at the end of a source line is a
  hard-line-break request. Fixed by reflowing so the line doesn't end
  there.
- The malformed \citep[\citet{...}]{...} nesting was a real citation
  bug: a comma instead of a semicolon between two citation keys made
  pandoc parse the second key as a locator/suffix on the first
  instead of a separate citation. Fixed the separator.
- The 0.17% first-order-bias number was correct but ambiguous about
  which quantity is "4%" (epsilon or dv/v) -- Copilot's own sanity
  check computed a different, also-valid 0.15% by assuming epsilon.
  Reworded to say "a true dv/v of 4%" explicitly, keeping the
  0.17% figure since that's the physically meaningful reading (a
  real dv/v magnitude "seen on landslides", not an internal
  stretch-factor value).

Verified: 245/245 tests pass (1 unrelated skip, no Python touched),
PDF builds cleanly, re-audited the whole document for both bug
patterns (digit-comma-unit and macro-comma) after the fix -- zero
remaining instances of either.
…verify every quantitative claim

Every one of the 15 synthetic demo figures predated the v0.4.0 sign
fix (flagged in PR #37, not fixed there). impose_dvv changed from
t/(1+dvv) to t*(1+dvv) -- a different nonlinear map, not a pure sign
negation -- so regenerating could plausibly change specific numbers,
not just axis labels. Regenerated all 14 figures actually referenced
in the manuscript (literature/synthetic_dvv_demo.py,
codameter.deviations.build_figs, codameter.uq_bayes.build_figs;
demo_9_multiverse.png also regenerated but stays unreferenced/orphaned
as before) and re-derived every quantitative claim tied to them
directly from the current code rather than eyeballing the new plots.

Real changes found and fixed, not just cosmetic:

- Fig. methods (demo_1): the +/-5% sweep now shows genuine sign
  asymmetry for WCC and WTDTW -- WCC tracks the 1:1 line tightly on
  the negative branch but breaks sharply near +5%; WTDTW crosses 1%
  error at +1% true dv/v but only at -3% on the other branch. This is
  real physics from the corrected nonlinear convention, not noise.
  Rewrote the caption and body paragraph with per-branch thresholds
  instead of the old (now false) claim that TS/WTS/WCC "track the 1:1
  line throughout" and that DTW/WTDTW break symmetrically past +/-3-4%.
- Fig. deviations (demo_10) + multiverse text: the deviation ranking
  reordered substantially -- WCS is now catastrophic (~50x baseline,
  not previously flagged this way), baseline RMS moved from ~0.02% to
  ~0.03%. Sobol sensitivity ranking changed too: estimator is now
  2nd for RMS (was stated "third"), still 3rd for the drop.
- Sec. params: Brenguier-style joint inversion RMS moved to ~0.03%
  (was ~0.04%, so no longer distinct from the fixed-stack baseline).
  The "early 15% stack is ~1.5x worse" claim did not reproduce --
  re-verified it's actually comparable to (or slightly better than)
  the whole-record reference, and rewrote that paragraph to state the
  real (and more interesting) reason why: a shorter, earlier reference
  avoids averaging across the developing pre-eruptive trend.
- Sec. window: coda-window-detection numbers (the actual detected
  window boundaries) matched exactly, as expected since envelope
  detection doesn't depend on measurement sign; RMS numbers shifted by
  rounding-level amounts, tightened to match.
- Results-synthesis table: fixed the same two errors (TS/WTS best-case
  claim -> TS only, since WTS now peaks at 0.093% not <0.01%;
  reference-scheme range -> ~0.03% only).

Confirmed unchanged (RMS-type metrics on small-amplitude signals are
close to sign-invariant, consistent with the boxed convention's own
"negligible below 1%" claim): aggregation (demo_2), network
uncertainty (demo_3/14, every number re-verified via network_dvv()
directly), frequency-band depth selection (demo_4), stacking length
(demo_6), Bayesian N_eff, artifacts and branch-asymmetry figures
(demo_8/13, qualitative claims only, still hold).

Verified: 245/245 tests pass (1 unrelated skip), PDF builds cleanly
(only the 2 pre-existing dangling citations from issue #30), no unit-
spacing or citation corruption reintroduced.
Figure 10a (multiverse RMS panel): pin to a fixed, symmetric
(-0.8, 0.8) range instead of a dynamic percentile-based span, since
the cycle-skipping pipelines were making the colourbar/axis scale
distractingly asymmetric.

Figure 11 (Bayesian measurement model): restructure from a cramped
1x3 row to a 2x2 grid with panel (c) full-width on its own row --
it carries four legend entries and was too horizontally squeezed
sharing a row with (a) and (b).

Verified: 245/245 tests pass, PDF builds cleanly, both fixes
confirmed on the rendered PDF pages (Fig 10 p.22, Fig 11 p.26).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Ran a plain-voice pass over manuscript_marine.qmd. Prior editing
passes had already scrubbed the heavy tells (delve, leverage, robust
filler, landscape/tapestry-style metaphors); this pass caught the
remainder plus grammar breaks found while reading closely:

Register/filler cuts: "demonstrating robustness of the methods"
(redundant clause), "comprehensive" (package), "utilize" -> "use"
(x2), "various" (parameter impacts), "typically" (redundant with "by
habit"), "comprehensively" (redundant with "cumulative... full choice
set"), "downstream scientific insights" -> "downstream science".

Grammar/typo fixes: missing "of"/"in" (price of, reporting of,
studies in), a stray leading period breaking two sentences into one,
"atomsphere"->atmosphere, "chanes"->changes, "scatterd"->scattered,
"strething"->stretching, "te moving-window"->the, "a
implementation"->an, "cross-componet"->cross-component, "a
inter-station"->an, "characteristixcs"->characteristics, "can
alters"->materially changes, "an researchers'"->a researcher's, "both
side exhibit"->both sides exhibit, "parametic"->parametric,
"researchers typically would measure"->typically measure.

Checked and left unchanged: em-dash usage (every instance is a single
parenthetical pair per sentence, never chained), statistical/technical
uses of "robust," "significant," "framework," "workflow" (legitimate
domain vocabulary, not ornament), hedge preambles and metaphor
clichés (none found), tricolon lists (all are genuine parallel
enumerations, not decorative filler).

Verified: PDF builds cleanly (only 2 pre-existing undefined
citations, lobkis01/poupinet84, unrelated to this change).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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.

2 participants