Repository navigation
Add an intensive-margin hours response for parents in work - #8
vahid-ahmadi wants to merge 7 commits into
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Program ReviewSource Documents
Critical (Must Fix)
Should Address
Suggestions
PDF Audit Summary
The paper confirms 12.5 additional weekly free hours on file page 8, the 14.319 final-sample mean on file page 17, and the 0.600 hours effect plus zero-for-nonworkers note on file page 41. The -0.042 arithmetic is accurate. Issue #6 explicitly requests the caveated, overlapping sensitivity and the Cost tab discloses it, so the known overlap is not treated as an implementation defect. Validation Summary
Review Severity: REQUEST_CHANGESNext StepsReplace the UC maximum-element subtraction with realized incremental UC support, add the tapered-UC regression, update stale methodology text and page-specific references, then regenerate artifacts. Fixes can be applied with the fix-pr workflow. |
…hodology up to date Addresses María's review of #8: C1 (the UC childcare element's face value is mostly withdrawn by the taper, so realised support is the award difference against an abolition counterfactual), A1 (stale extensive-only text in the methodology tab and machine-readable assumptions), A2 (file-page references for the Brewer et al. figures) and S1 (a two-earner allocation test).
|
Addressed in d1af0a9 (rebased onto #7's fix first). C1 — realised UC support. You're right; I had subtracted the face value of a maximum-amount component. Effect on the results: the mean price fall for parents in scope drops from 79% to 58%, because UC families now carry a real out-of-pocket base and the subsidy leg pays them nothing, so their price change is close to zero. Central 2027-28: 30,565 FTEs (was 41,448), £1.67bn earnings, £0.67bn revenue (was £0.90bn), combined dynamic cost £5.95bn (was £5.72bn). Offset share 3.2% / 10.4% / 21.1% low/central/high. README and dashboard figures updated. A1 — MethodologyTab no longer says the intensive margin is unmodelled; it has its own bullet describing the elasticity, the realised-UC price, the rerun, and the overlap with participation. The Bettendorf sentence is reframed as the same overlap point. A2 — S1 — two-earner test added: both adults respond, the household gain is allocated 35:15 by extra earnings, totals and the England split reconcile. 66 tests pass. |
2ea2433 to
d1af0a9
Compare
Program ReviewSource Documents
Prior Finding Status
Critical (Must Fix)None. Should Address
SuggestionsNone. PDF Audit SummaryThe prior 43-page audit remains valid: file pages 8, 17, and 41 support the treatment, mean, and effect used in the elasticity. No source-derived input changed. Validation Summary
Review Severity: COMMENTNext StepsUpdate the two overview strings and refresh the PR description. The substantive implementation is ready on this targeted re-review. |
|
A1 remainder fixed in 548f0bf (pipeline module docstring and CLI description now say both margins). A3: PR description rewritten to the corrected method and figures. |
The Reform tab's labour supply control is now two checkboxes: the extensive margin, with its low/central/high elasticity when on, and the intensive margin, at its one setting. Every combination is emitted by the pipeline so the household view has an exact block for each, and switching the intensive margin off returns the figures published before it existed.
… and make the two margins switches Three bullets misdescribed the free-hours leg's work incentive: the 15 hours cancel for a non-working family, so their gain to work is unchanged; it falls for working parents on the 30-hour offer, who would keep 15 hours if they stopped working. The two-year-old targeted offer is now acknowledged.
…hodology up to date Addresses María's review of #8: C1 (the UC childcare element's face value is mostly withdrawn by the taper, so realised support is the award difference against an abolition counterfactual), A1 (stale extensive-only text in the methodology tab and machine-readable assumptions), A2 (file-page references for the Brewer et al. figures) and S1 (a two-earner allocation test).
* Add an intensive-margin hours response for parents in work Closes #6. * Measure the childcare price on realised UC support, and bring the methodology up to date Addresses María's review of #8: C1 (the UC childcare element's face value is mostly withdrawn by the taper, so realised support is the award difference against an abolition counterfactual), A1 (stale extensive-only text in the methodology tab and machine-readable assumptions), A2 (file-page references for the Brewer et al. figures) and S1 (a two-earner allocation test). * Say both margins in the two overview strings * Cut the labour supply explanation to four bullets * Switch the two labour supply margins on independently The Reform tab's labour supply control is now two checkboxes: the extensive margin, with its low/central/high elasticity when on, and the intensive margin, at its one setting. Every combination is emitted by the pipeline so the household view has an exact block for each, and switching the intensive margin off returns the figures published before it existed. * Tighten the dashboard copy, correct the free-hours incentive bullets, and make the two margins switches Three bullets misdescribed the free-hours leg's work incentive: the 15 hours cancel for a non-working family, so their gain to work is unchanged; it falls for working parents on the 30-hour offer, who would keep 15 hours if they stopped working. The two-year-old targeted offer is now acknowledged. * Regenerate results after the sources text change * Title the dashboard for its two legs * Regenerate results on the rebased history * Point the site-shell check at the new title
Closes #6. Stacked on #7.
Max asked for an intensive-margin response using a −0.042 childcare price elasticity of hours worked, derived from Brewer et al. (2020). This adds it.
What it does. For each adult in the responsive population (youngest child 1-4, not excluded by the OBR framework) who is in work with a positive out-of-pocket childcare cost, the proportional change in that cost is multiplied by the elasticity to give a change in hours, and earnings move with hours at a constant wage. Out-of-pocket cost is childcare expenses less Tax-Free Childcare (or the subsidy), less the paid care that new free hours displace, less the realised Universal Credit childcare support — the UC award minus the award with the element's coverage rate set to zero, the same counterfactual the baseline benchmark uses, since the element's face value is mostly withdrawn by the taper for working families. The revenue is not an assumed rate: each leg is rerun with the changed earnings and the revenue is the extra earnings less the rise in household net income. The household gain is allocated back to the adults whose hours produced it and laid over the distribution alongside the participation response, so the Household effects view moves with it. Low and high scale both margins by the same multiplier.
Results, 2027-28 central, UK. Parents in scope (1.26m; 1.02m see a price change) face a 58% mean fall in out-of-pocket cost under both legs together, giving +2.4% hours: 30,565 FTEs, £1.67bn of earnings, £0.67bn back to the exchequer, against £0.02bn from the participation margin. Combined dynamic cost £6.64bn → £5.95bn (10.4% offset; 3.2% low, 21.1% high). Free hours alone: 2,073 FTEs, £0.07bn (only displaced paid care moves the price). Subsidy alone: 29,401 FTEs, £0.63bn. UC families sit in scope with a near-zero price change, because the subsidy leg pays them nothing.
Caveats, recorded in
sources.py, the README and on the dashboard. I checked the derivation against the paper. The +0.600 is Table A.3 panel B (file page 41) and is measured over all mothers with zeros for non-workers; 14.319 is Table 1's all-mothers mean (file page 17). So −0.042 is a total-hours elasticity that already contains the participation channel — the paper's own +3.5pp employment effect at part-time hours accounts for most of the +0.6 — and adding it to the extensive margin counts that channel twice. The treatment was also 12.5 extra free hours a week (file page 8), not a 100% price fall. The dashboard says both.Also in this PR.
_build_with_earningshas to callreset_calculations()beforeset_input:employment_incomeis a derived variable upstream, and the other order silently left earnings unchanged (revenue came out equal to earnings). Three CostTab strings used--x, a JavaScript decrement that mutated the loaded results by £1 and flipped the displayed sign; now-x. The extended-flag comparison from #7 now compares static costs, since that scenario does not carry the hours margin. Methodology tab,assumptions.margin, the module docstring and the CLI description all now describe both margins.Tests. Eight unit tests on a stub simulation (price change, rerun earnings, revenue, household allocation for one and two earners, country reconciliation, scale, no-change, the 100% bound, and a tapered-UC family whose price is measured on realised support rather than the element) and an artifact gate that the dynamic cost equals static less both margins, each margin's country split reconciles, and revenue sits strictly between zero and earnings.
dynamic_cost.labour_supply_offset_bnkeeps its meaning (participation only);hours_offset_bnandtotal_offset_bnare added beside it.66 tests pass. Run time is up by about 16 simulations a year for the reruns and UC counterfactuals.