{
  "studyId": "frost-lsoa-deciles-v1",
  "version": "1.0.0",
  "frozenAtUtc": "2026-10-11T06:12:10.618804+00:00",
  "status": "frozen-before-frost-outcome-join",
  "authorizedThroughPhase": 3,
  "earliestPredictivenessClaimPhase": 6,
  "researchQuestion": "Do fixed long-run air-frost-day bands add predictive value for reported motor-involved injury collision frequency per 100,000 matched motor-vehicle miles?",
  "scope": {
    "country": "England",
    "lsoaBoundaryVintage": 2021,
    "expectedEnglandLsoas": 33755,
    "authorityUniverse": "153 English authorities inherited from parking v3 exact-code context",
    "outcomeYears": [
      2021,
      2022,
      2023,
      2024,
      2025
    ],
    "regionalSequence": [
      "London",
      "South East",
      "other England regions"
    ],
    "scotlandDeferred": true,
    "locationBasis": "collision location, never driver or casualty residence"
  },
  "estimand": {
    "numerator": "unique police-reported injury collisions with at least one definite covered motor vehicle",
    "denominator": "annual all-motor-vehicle miles for the same year, authority and road scope",
    "rateMultiplier": 100000,
    "rateLabel": "Motor-involved injury collisions per 100,000 motor-vehicle miles",
    "claimsFrequency": false,
    "causalClaim": false,
    "allInjuryCollisionCountRetainedForReconciliation": true
  },
  "climate": {
    "provider": "Met Office",
    "product": "HadUK-Grid",
    "productVersion": "v1.1.0.0",
    "publicFallbackResolutionMetres": 2000,
    "referencePeriod": [
      1991,
      2020
    ],
    "variable": "airfrost",
    "definition": "number of days with minimum air temperature below 0 degrees Celsius",
    "units": "mean air-frost days per year",
    "retrievalYear": 2026,
    "productReleaseDate": "read from actual source metadata; retrieval date is not the release date",
    "preferredLatest1kmStatus": "CEDA sign-in unavailable in this execution; use declared official public 2 km fallback",
    "sourceVintageInterpretation": "Retrospective study using the frozen downloaded source vintage; not a reconstruction of the data available at each historical prediction date",
    "strictHistoricalProspectiveBacktest": false,
    "annualPhysicalBounds": [
      0,
      366
    ],
    "missingValues": "missing, never zero",
    "annualAnomaliesInPhases1To3": false,
    "roadSurfaceIceMeasure": false
  },
  "features": {
    "primaryId": "frost_road_length_mean_1991_2020",
    "primaryWeights": "OS Open Roads road length clipped to complete LSOA2021 polygons",
    "roadNetworkSnapshot": "April 2026; static post-outcome snapshot, explicitly retrospective",
    "primaryRequiresPositiveRoadLength": true,
    "minimumValidRoadLengthCoverage": 0.99,
    "areaSensitivityId": "frost_land_area_mean_1991_2020",
    "minimumValidAreaCoverage": 0.98,
    "areaWeightsMustRemainSeparate": true,
    "silentAreaFallbackForRoadScore": false,
    "outcomeWeightedFeaturesAllowed": false,
    "trafficWeightedFeatureInPhases1To3": false,
    "continuousScoreRetained": true,
    "canonicalScoreDecimalPlaces": 6,
    "displayDecimalPlaces": 1,
    "weightBalanceAbsoluteTolerance": 1e-08
  },
  "deciles": {
    "referencePopulation": "all eligible English LSOA2021 units for each exact feature version; equal LSOA weights",
    "nominalBandCount": 10,
    "quantileProbabilities": [
      0.1,
      0.2,
      0.3,
      0.4,
      0.5,
      0.6,
      0.7,
      0.8,
      0.9
    ],
    "method": "nearest-rank empirical quantile: sorted_canonical_score[ceil(p*n)-1]",
    "assignment": "D = 1 + count(score > cutoff), retaining all nine nominal cutoffs including repeats",
    "tiePolicy": "round computed scores to six decimals for canonical assignment; equal canonical values stay together in the lower band",
    "duplicateCutoffPolicy": "retain repeated cutoffs; allow unequal or empty nominal bands; never manufacture ten populated groups",
    "arbitraryJitterAllowed": false,
    "regionalRecuttingForPrimaryAnalysis": false,
    "fixedAcrossAllOutcomeYears": true,
    "missingBand": null,
    "noOutcomeBasedBoundaries": true,
    "cutpointOutput": "separately frozen by feature with input and output hashes"
  },
  "spatialAssignment": {
    "lsoaPolygons": "ONS full LSOA2021 boundaries, not generalised display geometry",
    "rule": "exactly one containing full polygon",
    "unmatched": "retain explicit unmatched status",
    "borderAmbiguous": "retain explicit ambiguous status",
    "nearestNeighbourAssignmentAllowed": false,
    "allGbCollisionEventsRetainedForBoundaryAudit": true
  },
  "collisionEligibility": {
    "coveredVehicleTypes": [
      2,
      3,
      4,
      5,
      8,
      9,
      10,
      11,
      17,
      19,
      20,
      21,
      23,
      97,
      98
    ],
    "knownNonMotorTypes": [
      1,
      16
    ],
    "outsideDeclaredTrafficScopeTypes": [
      18,
      22,
      33
    ],
    "unknownTypes": [
      -1,
      90,
      99
    ],
    "missingVehicleRecords": "motor_missing_vehicle_records, unresolved",
    "unmappedVehicleTypes": "fail closed pending an explicit versioned code-map decision",
    "includeRule": "at least one vehicle in coveredVehicleTypes after e-scooter precedence",
    "escooterFlagPrecedence": "escooter_flag=1 makes that vehicle outside the declared conventional-motor traffic scope, even if vehicle_type is a motor code; flag/type conflicts are counted. Another confirmed covered motor vehicle still makes the collision eligible.",
    "noConfirmedMotorButUnknownVehicle": "motor_unknown_only, separate from out-of-scope-only",
    "allOtherVehiclesOutsideScope": "motor_out_of_scope_only",
    "unknownOnlyShareWarningThreshold": 0.01,
    "countOncePerCollision": true,
    "vehicleJoinRequired": true,
    "codebookSourceId": "guide",
    "codebookRawSha256": "51b08606ef3dad1ae5d4c8726241b022fc8e4bbdc910ef0e5cc2fb92b054fc12"
  },
  "exposure": {
    "phase3PrimaryRoute": "authority all roads, exact authority code and year, existing independently reconciled mileage",
    "contextPath": "public/research/parking/v3/inputs/authority-context.json",
    "contextSha256": "b8b58e796df4a0e450dc00d9180e68a9cc77d36c3bd53d2d4360a4ccbf6fa9ac",
    "inheritAllQualityReasons": true,
    "anyInheritedQualityReasonSuppressesRates": true,
    "doNotCompareMotorSubsetRateToPublishedAllCollisionRate": true,
    "expectedAuthorityYears": 765,
    "positiveMileageZeroCollisionRows": "retain",
    "zeroMileagePositiveCollisionRows": "retain, flag and suppress rate",
    "zeroMileageZeroCollisionRows": "retain, no rate",
    "missingMileage": "retain, no rate",
    "missingOutcomeCoverage": "null, never fabricated zero",
    "epsilonDenominatorsAllowed": false,
    "lsoaAllRoadMileageStatus": "blocked pending defensible all-road mileage",
    "areaOrPopulationAllocationAsObservedMileage": false,
    "majorRoadRouteStatus": "blocked for LSOA mileage and collision attribution: available MRDB geometry consists of endpoint chords rather than verified road centrelines",
    "majorRoadAndAllRoadScopeMixingAllowed": false,
    "sourceUnitsMustBeRecorded": true,
    "kmPerMile": 1.609344,
    "finiteNonnegativeMileageRequired": true
  },
  "frozenInputs": {
    "stats19ManifestPath": "db/stats19/initial.json",
    "stats19ManifestSha256": "32a977b309f084f2b303f531aec5ad1164cc6e42fbc465e6ff5c7342b423aca3",
    "rawAndGzipHashesRequired": true,
    "originalArchivedBytesPreferred": true,
    "currentSourceSubstitutionAllowed": false,
    "rawCollisionSourceId": "collision",
    "rawVehicleSourceId": "vehicle"
  },
  "validation": {
    "trainingYears": [
      2021,
      2022,
      2023
    ],
    "validationYears": [
      2024
    ],
    "finalFrostAssessmentYears": [
      2025
    ],
    "excluding2021SensitivityTrainingYears": [
      2022,
      2023
    ],
    "sensitivityValidationAndTestUnchanged": true,
    "priorProject2025OutcomesHaveBeenSeen": true,
    "testInterpretation": "2025 is reserved for later assessment of this frozen frost feature and model choices; it is not claimed to be historically unseen or a prospective forecast",
    "noFrostOutcomeAssociationBeforeProtocolFreeze": true,
    "randomLsoaSplitAllowed": false,
    "spatialFolds": 5,
    "spatialUnit": "authorities or contiguous geographic blocks; a shared underlying road link must not cross folds",
    "seed": 20261011,
    "primaryScore": "Poisson count deviance on identical held-out observations",
    "confidenceLevel": 0.95,
    "spatialBootstrapReplicates": 1000,
    "testYearRecalibrationUsingTestOutcomesAllowed": false,
    "modelStatus": "not fitted",
    "modelPerformance": null
  },
  "laterDecisionTolerances": {
    "designChoicesNotEmpiricalFindings": true,
    "minimum2025DevianceImprovementPercent": 0.5,
    "positive2024DevianceImprovementRequired": true,
    "bootstrapImprovementLower95PercentBoundAboveZeroRequired": true,
    "minimumPositiveSpatialFoldsOfFive": 4,
    "adequatelySupportedOverallObservedExpectedBounds": [
      0.95,
      1.05
    ],
    "adequatelySupportedRegionalObservedExpectedBounds": [
      0.9,
      1.1
    ],
    "adjacentBandPracticalEquivalenceRateRatioBounds": [
      0.95,
      1.05
    ],
    "maximumMergeValidationDevianceLossPercent": 0.1,
    "tailSameDirectionYearsRequiredOfFive": 4,
    "minimumBandYearCollisionCountForUnqualifiedDisplay": 30,
    "bandEventThresholdIsNotAnIndividualRowExclusion": true,
    "independentGeographicSupportAlsoRequired": true,
    "exposureStressPercentages": [
      -20,
      -10,
      10,
      20
    ],
    "exposureStressIsAssumptionAnalysisNotConfidenceInterval": true,
    "noPostTestRelaxationToObtainPositiveFinding": true
  },
  "phase1To3Claims": {
    "permitted": [
      "frozen study design",
      "source and coverage audit",
      "fixed frost scores and nominal deciles",
      "quality-gated authority all-road descriptive base panel"
    ],
    "predictiveness": "not yet tested",
    "causality": "not established",
    "adjustedRelativities": null,
    "devianceImprovement": null,
    "frostModel2025Performance": null
  },
  "operations": {
    "collisionPreparationCommand": "frost_venv/bin/python frost_site/scripts/prepare-frost-collisions.py --events-dir frost_impl_sources",
    "collisionPreparationFitsModels": false,
    "collisionPreparationReadsFrostScores": false,
    "requiredOutputs": [
      "public/research/frost/v1/collision-audit.json",
      "public/research/frost/v1/authority-base-panel.csv"
    ],
    "scratchOutput": "collisionevents.csv.gz containing all GB collisions for independent full-polygon LSOA assignment"
  },
  "_integrity": {
    "algorithm": "SHA-256",
    "scope": "canonical sorted compact UTF-8 JSON excluding _integrity",
    "sha256": "4cc088d79939dfd1a55bb157f23f98c91ad896542e541ce6bcc76b0b0fc5a3c2"
  }
}
