Skip to content

Parameter censoredRunaways: score a runaway replicate as at least the size it burned - #82

Closed
eliotmcintire wants to merge 1 commit into
developmentfrom
censored-runaways
Closed

eliotmcintire wants to merge 1 commit into
developmentfrom
censored-runaways

Conversation

@eliotmcintire

Copy link
Copy Markdown
Collaborator

Depends-on: PredictiveEcology/fireSenseUtils#166

A new switch for the spread fit: a simulated fire that reaches the edge of its buffer is scored as "at least as big as it burned" instead of as twice its buffer, which had made the fit prefer no year-to-year variation in fire spread. Off by default; nothing changes until a run turns it on.

Affects: with censoredRunaways = TRUE, fits, their re-scores and the threshold calibration use the censored objective (new cache entries); with the default FALSE every cache key is unchanged.

Technical details
  • defineParameter("censoredRunaways", "logical", default = FALSE); fitSpread() passes censoredRunawaysOrNULL(P(sim)$censoredRunaways) to runDEoptim() and estimateSNLLThresholdPostLargeFires() to runSpreadWithoutDEoptim() (both branches hand it to .objfunSpreadFit()), TRUE or NULL; NULL is added to omitArgs through fireSenseUtils::omitNullArgs() in both Cache() calls, as runawayBufferMultiple = NA already is, so a FALSE leaves the keys as they are.
  • Needs the censoredRunaways argument of fireSenseUtils (Spread objective: right-censor runaway replicates at the size they burned (censoredRunaways) fireSenseUtils#166); the reqdPkgs floor follows once that merges and the version is bumped.
  • Tests: test-objectiveSettings.R (TRUE reaches the fit, the calibration and the objective; FALSE arrives as NULL), test-metadata.R and test-metadataContract.R (name, class, default). 142 module tests pass through the package rendition.
  • Evidence (phase4/spreadYearRE in the session logs): on synthetic fire sizes from ELF 14.3's fitted parameters with a known per-year effect of sd 0.25, the objective's minimum over yearSpreadSD was at 0.03-0.11 with the 2 x buffer rule, 0.16-0.18 with censoring (and 0.16-0.19 with penaliseRunaways = FALSE); with the year effect at its true value the optimum of maxAsymptote sits at the truth under censoring and 0.01-0.02 below it under the 2 x rule.

🤖 Generated with Claude Code

https://claude.ai/code/session_014G18Mik3fH4z5M5CyMSUS6

…t and the threshold calibration

Default FALSE, passed to runDEoptim() and runSpreadWithoutDEoptim() as TRUE or NULL (censoredRunawaysOrNULL()),
so a FALSE stays out of the fit's and the calibration's cache keys and existing fits are still found. With TRUE,
fireSenseUtils::.objfunSpreadFit(censoredRunaways = TRUE): a simulated fire that reaches its buffer's edge ring
keeps burning inside its buffer and is 'at least this big' in the size likelihood; the size terms score the
size it burned, runawayBufferMultiple is not used. Why: the 2 x buffer rule made the fit prefer no year effect
whatever the true one (known-sigma test, ELF 14.3, 2026-10-17).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014G18Mik3fH4z5M5CyMSUS6
@eliotmcintire eliotmcintire added enhancement New feature or request backwards compatible Existing code and results keep working unchanged labels Oct 18, 2026
@eliotmcintire

Copy link
Copy Markdown
Collaborator Author

Closing: Eliot chose penaliseRunaways = FALSE (simulated fires scored at the size they burned, buffer-bounded like observed fires). In the known-sigma tests on ELF 14.3 the censored variant gave the same fits as FALSE within Monte Carlo noise; a larger buffer is the remedy if buffer-filling fires become a problem.

@eliotmcintire
eliotmcintire deleted the censored-runaways branch October 18, 2026 15:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backwards compatible Existing code and results keep working unchanged enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant