Repository navigation
UK bus fares: impute journeys from NTS microdata so the DfT receipts targets are not level-set by the stage (#890 follow-up) #930
Description
Why
#890 (PR-T #904, PR-S #927) sets the level of bus_fare_spending at the UK spine's lcfs stage by raking user households to the DfT BUS05ai receipts (London, England outside London), Scottish Transport Statistics passenger revenue and Translink receipts, and then binds the same facts as calibration targets. The rake exists because the LCFS diary records a fortnight and cannot say who rides a bus in a year (13 % of diary households have a positive fare against the NTS household user share of 74 %), so a take-up style incidence draw from NTS0313/NTS0621 and a positive-regime fill supply the incidence and the rake supplies the level. That makes the design-weight fit of the bus targets near-tautological: the stage and the calibration bind the same number (Vahid's review of #927; María's ruling 2026-09-15 keeps rake and target together as the interim and asks for this follow-up).
What
Impute local-bus use from the National Travel Survey microdata rather than inferring it from the fortnight diary:
- Donor: NTS microdata (UK Data Service SN 5340, special licence; seven-day travel diaries with region, age, household income, car availability and journeys by mode), pinned and cleaned like the other licensed donors.
- Stage: impute bus journeys per person (or per household) onto the FRS spine by QRF on the predictors both sides share (region, age, household income,
num_vehicles), with identity-keyed draws and the usual support clip and receipts. - Pricing: journeys times the published average revenue per journey by area (DfT BUS05ai receipts over BUS01 journeys, both in Chronicle 474a0ae; Scotland and Northern Ireland from their own receipts and journey counts), so
bus_fare_spendingis journeys × fare and no longer level-set to the receipts. - Consequence: the DfT/devolved receipts targets bound in Bind the Chronicle transport and energy facts on the UK national surface (#890 PR-T) #904 then constrain something the stage did not set; the Bind DfT, HMRC, DESNZ, Ofgem and ORR facts for bus fares, road fuel, domestic energy and rail support (#790 ruling: bind facts and calibrate) #890 rake (
rake_to_vendored_factsonbus_fare_spending) retires; the incidence draw retires with it (NTS microdata carries incidence). Bus support (bus_subsidy_spending, ETB) is unchanged by this issue. - Diagnostics to keep: ONS 07.3.2 (household spend on road passenger transport, GBP 8.0bn CY2024 / 8.6bn CY2025, vendored in
ons_household_expenditure_facts.json) as a recorded upper-bound check (it covers coach and taxi as well as bus).
Also considered (recorded in the #927 thread)
- Rake shape only: NTS9904 (trips by region), NTS0702 (trips by car availability) and BUS01 journeys by local authority would let the existing rake spread receipts across nine regions or by car ownership instead of London / outside-London by income quintile; improves the shape, not the tautology.
- A different calibration total: ONS 07.3.2 is a broader concept and can only be a check; TfL fare revenue is a company report.
Acceptance
A stage twin whose design-weight bus fare totals sit within the 25 % fence of the #904 targets without a rake, receipts as in experiments/890-fuel-bus-energy-receipts.md, and the #904 targets left as they are. Licensed inputs only through the pinned-donor seam; no publisher number typed into the tree (Chronicle rows via vendored_rows).
Activity
Receipts Part R: the Wales fare fence, the rake-then-bind ruling and #…
Receipts Part R: the Wales fare fence, the rake-then-bind ruling and #…
Re-pin the UK Chronicle feed to 7846605 and vendor the bus journey, t…
Write the calibration's compiled system and weights before the batter…
Close Vahid's third-pass items on #927: declared fallback regions, co…
Impute local-bus journeys from the NTS microdata, price bus fares at …
Add the #930 receipts: Chronicle landing and re-pin, the #927 carry-o…
Regenerate the derived surfaces on the 7846605 feed after rebasing over
Drop the duplicated certification part-digest keys the rebase merge l…
Re-pin the UK Chronicle feed to 7846605 and vendor the bus journey, t…
Write the calibration's compiled system and weights before the batter…
Close Vahid's third-pass items on #927: declared fallback regions, co…
Impute local-bus journeys from the NTS microdata, price bus fares at …
Add the #930 receipts: Chronicle landing and re-pin, the #927 carry-o…
Regenerate the derived surfaces on the 7846605 feed after rebasing over
43 remaining items
Pin the SN 5340 NTS tabs and verify the stage's codebook against the …
Record the licensed measurement: the pinned tabs and verified codeboo…
Retire the ETB bus-support rake: price bus support from the frame's j…
Clip bus support like the other ETB columns before pricing it: drop t…
Rebase onto main b78f5a8: the nts_bus_travel stage records its househ…
Read the NTS stage and ticket tables: the single-fare share of each p…
Record the support pricing twin, the single-fare share readings and t…
Write the single-fare share after the eligibility flag, the declared …
Re-pin the gate and certification digests after rebasing over #971 (#930
Address Vahid's second pass on #954: Northern Ireland's concession ag…
Receipts Part K: spine-t4 calibration and the stretch anatomy after t…
Rebase onto main 43ca60f over #979: fixture and coverage regenerated,…
Changelog: the NTS tab pins are real and the fixture has 32 stages (V…
Merge pull request #954 from PolicyEngine/uk-930-nts-bus