From 77f8a2bb11e7d942334ceae96fa1a24fa76aa473 Mon Sep 17 00:00:00 2001 From: Liang Shi Date: Fri, 23 Oct 2026 12:34:06 +0100 Subject: [PATCH 1/5] Update LCFS consumption model and validation Add age-specific income slopes, student status and the centred consumption trend. Install the matching FW1a coefficients, covariance and residual RMSE estimated from benefit-unit own income and expenditure after local tax. Include standalone Stata construction/estimation scripts, portable three-run validation and synthetic Stata prediction fixtures. Preserve unrelated configuration, database setup and cash-income/donor-matching behaviour. --- .../RegressionEstimates/consumption/README.md | 37 + .../consumption/collect_lcfs.do | 601 +++++++++++++++ .../consumption/consumption_modelling_lcfs.do | 485 ++++++++++++ .../consumption/export_synthetic_fixtures.do | 62 ++ input/regression_files/reg_RMSE.xlsx | Bin 8378 -> 4183 bytes .../reg_wealth_financial.xlsx | Bin 111627 -> 125266 bytes src/main/java/simpaths/model/BenefitUnit.java | 33 + .../model/ConsumptionRegressionTest.java | 132 ++++ .../model/consumption_stata_fixtures.csv | 701 ++++++++++++++++++ validation/consumption/README.md | 45 ++ validation/consumption/average_three_runs.do | 40 + validation/consumption/consumption_sim_v3.do | 107 +++ validation/consumption/consumption_surv_v3.do | 106 +++ .../results/comparison_2016_2023.csv | 25 + .../results/individual_run_statistics.csv | 37 + .../results/simulation_validation_stats.csv | 13 + .../simulation_validation_stats_sd.csv | 13 + .../results/survey_validation_stats.csv | 10 + 18 files changed, 2447 insertions(+) create mode 100644 input/regression_files/RegressionEstimates/consumption/README.md create mode 100644 input/regression_files/RegressionEstimates/consumption/collect_lcfs.do create mode 100644 input/regression_files/RegressionEstimates/consumption/consumption_modelling_lcfs.do create mode 100644 input/regression_files/RegressionEstimates/consumption/export_synthetic_fixtures.do create mode 100644 src/test/java/simpaths/model/ConsumptionRegressionTest.java create mode 100644 src/test/resources/simpaths/model/consumption_stata_fixtures.csv create mode 100644 validation/consumption/README.md create mode 100644 validation/consumption/average_three_runs.do create mode 100644 validation/consumption/consumption_sim_v3.do create mode 100644 validation/consumption/consumption_surv_v3.do create mode 100644 validation/consumption/results/comparison_2016_2023.csv create mode 100644 validation/consumption/results/individual_run_statistics.csv create mode 100644 validation/consumption/results/simulation_validation_stats.csv create mode 100644 validation/consumption/results/simulation_validation_stats_sd.csv create mode 100644 validation/consumption/results/survey_validation_stats.csv diff --git a/input/regression_files/RegressionEstimates/consumption/README.md b/input/regression_files/RegressionEstimates/consumption/README.md new file mode 100644 index 000000000..eeaf57f80 --- /dev/null +++ b/input/regression_files/RegressionEstimates/consumption/README.md @@ -0,0 +1,37 @@ +# LCFS consumption estimation (FW1a) + +FW1a models log real monthly benefit-unit broad expenditure using LCFS waves indexed 2008–2023. It retains the existing age groups, allows age-specific linear log-income slopes, and uses common quadratic curvature and a reference-adult student indicator. Other controls cover composition, work, pension receipt, housing status and region. The age reference category is under 20 (18–19 in the retained adult sample). + +## Construction and estimation + +`collect_lcfs.do` uses household expenditure P550tp, recorded personal expenditure and the existing benefit-unit housing/residual attribution rule. Benefit-unit own income sums members' P177/P177p personal net income, independently of expenditure shares. The same adult-share allocation of Council Tax or Northern Ireland domestic rates is deducted from both income and broad expenditure. Transfers and exceptional purchases remain included. The active data tags are `personal_net_ct` and `broad_net_ct`. + +`consumption_modelling_lcfs.do` converts weekly amounts to monthly equivalents in 2015 prices using CPIH (ONS L522). It requires complete income scope, positive expenditure/income and one or two adults. Estimation uses `weighta` and covariance clustered by household within survey wave. The trend is centred at 2015; 2008 is the reference year and the 2023 indicator is additionally omitted for collinearity with the trend. The script exports all 65 coefficients, the complete clustered covariance, RMSE, fit statistics, saved estimates, reader tables and age-specific elasticity contrasts. + +The installed v3 estimates have N=97,107, 82,923 clusters, R-squared 0.5523814416590156 and RMSE 0.6457928727473985. The `lcfs_model_sample.dta` working file is saved before the final one/two-adult regression restriction and contains 97,918 rows; it is not exactly `e(sample)`. Elasticity reference incomes are the unweighted percentiles calculated in that log-usable working sample. + +Run from the repository root, supplying an external consumption data root: + +```stata +local source_root "D:/your/consumption-data" +do "input/regression_files/RegressionEstimates/consumption/collect_lcfs.do" "`source_root'" +do "input/regression_files/RegressionEstimates/consumption/consumption_modelling_lcfs.do" "`source_root'" +``` + +The first command requires the original `data/LCFS.../stata` wave folders and filenames listed in the collection script. If prepared `output_lcfs/lcfs_sorted.dta` is already available, only the second command is needed. Both scripts accept an optional second argument for a separate existing export root. They use the current working directory if the first argument is omitted. Raw/prepared survey data and generated intermediate files are not part of this directory. Tested with StataNow 19. + +Install the coefficient/covariance CSV into `input/regression_files/reg_wealth_financial.xlsx`, sheet `FW1a`, and the matching RMSE into `input/regression_files/reg_RMSE.xlsx`, sheet `UK`, entry `FW1a`. Preserve other processes and workbook layouts. The similarly named CSV under `output_writing` is a reader table, not the computational matrix. + +## Synthetic Java–Stata checks + +`export_synthetic_fixtures.do` reads saved m4 estimates and creates a deterministic grid of **700 synthetic cases**, not observed LCFS rows. It spans 14 age bands, two student states, five income levels and five years, with varying region, housing and composition controls. It matches Java's GBP1 monthly income floor, double-precision square and 2023 trend freeze. Future-year indicators remain zero, matching the omitted 2023 indicator. + +```stata +do "input/regression_files/RegressionEstimates/consumption/export_synthetic_fixtures.do" /// + "`source_root'/output_writing/consumption_model_housing_status.ster" /// + "src/test/resources/simpaths/model/consumption_stata_fixtures.csv" +``` + +`ConsumptionRegressionTest` loads the actual workbooks and compares log predictions, RMSE and conditional means with these Stata results. It also checks age boundaries, the income floor and trend freezing. Regenerate the fixtures whenever the estimated model changes. + +See [consumption validation](../../../../validation/consumption/README.md) for the three-run comparison and remaining gaps. diff --git a/input/regression_files/RegressionEstimates/consumption/collect_lcfs.do b/input/regression_files/RegressionEstimates/consumption/collect_lcfs.do new file mode 100644 index 000000000..a7b471f2e --- /dev/null +++ b/input/regression_files/RegressionEstimates/consumption/collect_lcfs.do @@ -0,0 +1,601 @@ +/************************************************************************************** +* +* PROGRAM TO COLLECT LCFS DATA FOR CONSUMPTION MODELLING +* First draft adapted from: +* 1 collect_fes_efs_lcfs_v3.do +* +* SCOPE: +* - LCFS waves only +* - Discover local files from LCFS wave folders under ./data +* - Harmonise renamed modern LCFS variables +* - Construct wave-specific benefit-unit files +* - Append wave files into pooled lcfs_sorted.dta +* +* UPDATED 22 OCTOBER 2026: own income and broad expenditure after local tax. +* Council Tax and NI domestic rates use the same adult-share BU allocation. +* Original before-local-tax aggregates are retained for v2 replication and auditing. +* +* NOTES: +* - This draft keeps the original LCFS-style derivations where possible. +* - File discovery excludes quarter and urban/rural files. +* - Region (gor) is optional in later waves. +* +**************************************************************************************/ + +cls +clear all +set more off + + +/************************************************************************************** +* Helper: deterministic LCFS file map +**************************************************************************************/ +capture program drop _get_lcfs_files +program define _get_lcfs_files, rclass + syntax, WAVE(string) + + if ("`wave'" == "LCFS2008") { + return local dvper "2008_dvper_ukanon.dta" + return local dvhh "2008_dvhh_ukanon.dta" + } + else if ("`wave'" == "LCFS2009") { + return local dvper "2009_dvper_ukanon.dta" + return local dvhh "2009_dvhh_ukanon.dta" + } + else if ("`wave'" == "LCFS2010") { + return local dvper "2010_dvper_ukanon.dta" + return local dvhh "2010_dvhh_ukanon.dta" + } + else if ("`wave'" == "LCFS2011") { + return local dvper "2011_dvper_ukanon_v2.dta" + return local dvhh "2011_dvhh_ukanon.dta" + } + else if ("`wave'" == "LCFS2012") { + return local dvper "2012_dvper_ukanon.dta" + return local dvhh "2012_dvhh_ukanon.dta" + } + else if ("`wave'" == "LCFS2013") { + return local dvper "2013_dvper_ukanon.dta" + return local dvhh "2013_dvhh_ukanon.dta" + } + else if ("`wave'" == "LCFS2014") { + return local dvper "2014_dvper_ukanon.dta" + return local dvhh "2014_dvhh_ukanon.dta" + } + else if ("`wave'" == "LCFS2015-2016") { + return local dvper "2015-16_dvper_ukanon.dta" + return local dvhh "2015-16_dvhh_ukanon.dta" + } + else if ("`wave'" == "LCFS2016-2017") { + return local dvper "2016_17_dvper_ukanon.dta" + return local dvhh "2016_17_dvhh_ukanon.dta" + } + else if ("`wave'" == "LCFS2017-2018") { + return local dvper "dvper_ukanon_2017-18.dta" + return local dvhh "dvhh_ukanon_2017-18.dta" + } + else if ("`wave'" == "LCFS2018-2019") { + return local dvper "2018_dvper_ukanon201819.dta" + return local dvhh "2018_dvhh_ukanon.dta" + } + else if ("`wave'" == "LCFS2019-2020") { + return local dvper "lcfs_2019_dvper_ukanon201920.dta" + return local dvhh "lcfs_2019_dvhh_ukanon.dta" + } + else if ("`wave'" == "LCFS2020-2021") { + return local dvper "lcfs_2020_dvper_ukanon202021.dta" + return local dvhh "lcfs_2020_dvhh_ukanon.dta" + } + else if ("`wave'" == "LCFS2021-2022") { + return local dvper "lcfs_2021_dvper_ukanon202122.dta" + return local dvhh "lcfs_2021_dvhh_ukanon.dta" + } + else if ("`wave'" == "LCFS2022-2023") { + return local dvper "dvper_ukanon_2022-23.dta" + return local dvhh "dvhh_ukanon_2022.dta" + } + else if ("`wave'" == "LCFS2023-2024") { + return local dvper "dvper_ukanon_202324_2023.dta" + return local dvhh "dvhh_ukanon_v2_2023.dta" + } + else { + di as error "No file map defined for `wave'" + exit 198 + } +end + + +/************************************************************************************** +* Data set-up +**************************************************************************************/ +* Optional arguments allow a complete staged rebuild before installation. +args rootdir exportdir +if ("`rootdir'"=="") local rootdir "`c(pwd)'" +if ("`exportdir'"=="") local exportdir "`rootdir'" +local datadir "`rootdir'/data" +local outdir "`exportdir'/output_lcfs" +local drop_multi_child_bu_hh 0 + +capture mkdir "`outdir'" +capture mkdir "`outdir'/waves" + +capture log close +log using "`outdir'/collect_lcfs.log", replace text + +tempname diag_handle +tempfile diag_file +postfile `diag_handle' /// + str20 wave /// + int year /// + long hh_pre_rule /// + long hh_drop_rule /// + long bu_pre_rule /// + long bu_drop_rule /// + using "`diag_file'", replace + + +tempfile pooled_bu +local first_bu 1 + +tempfile pooled_ind +local first_ind 1 + + +/************************************************************************************** +* Process each LCFS wave +**************************************************************************************/ +foreach wave_dir in /// + LCFS2008 /// + LCFS2009 /// + LCFS2010 /// + LCFS2011 /// + LCFS2012 /// + LCFS2013 /// + LCFS2014 /// + LCFS2015-2016 /// + LCFS2016-2017 /// + LCFS2017-2018 /// + LCFS2018-2019 /// + LCFS2019-2020 /// + LCFS2020-2021 /// + LCFS2021-2022 /// + LCFS2022-2023 /// + LCFS2023-2024 { + + local statadir "`datadir'/`wave_dir'/stata" + local wave_label : subinstr local wave_dir "LCFS" "", all + local wave_stub : subinstr local wave_label "-" "_", all + local year = real(substr("`wave_label'", 1, 4)) + + _get_lcfs_files, wave("`wave_dir'") + local dvper_file "`r(dvper)'" + local dvhh_file "`r(dvhh)'" + + capture confirm file "`statadir'/`dvper_file'" + if (_rc) { + di as error "Expected dvper file not found: `statadir'/`dvper_file'" + exit 601 + } + + capture confirm file "`statadir'/`dvhh_file'" + if (_rc) { + di as error "Expected dvhh file not found: `statadir'/`dvhh_file'" + exit 601 + } + + di as text "Processing `wave_dir'" + di as text " dvper: `dvper_file'" + di as text " dvhh : `dvhh_file'" + + /******************************************************************************* + * Person file + *******************************************************************************/ + use "`statadir'/`dvper_file'", clear + rename *, lower + + capture confirm variable a006 + if (_rc) capture rename a006p a006 + + capture confirm variable p008 + if (_rc) capture rename p008p p008 + + capture confirm variable p011 + if (_rc) capture rename p011p p011 + + capture confirm variable p037 + if (_rc) capture rename p037p p037 + + capture confirm variable p047 + if (_rc) capture rename p047p p047 + + * P177 is personal normal income after tax and National Insurance. + * Preserve reported values, including negatives and separate anonymisation caps. + capture confirm variable p177 + if (_rc) capture rename p177p p177 + + capture confirm variable p049 + if (_rc) capture rename p049p p049 + + capture confirm variable p116c + if (_rc) gen p116c = 0 + + capture confirm variable b352 + if (_rc) gen b352 = . + + foreach v in a006 p008 p011 p037 p047 p049 p153 p116 p116c b352 p177 { + capture confirm variable `v' + if (_rc) { + di as error "Required person-level variable `v' not found in `dvper_file'" + exit 111 + } + } + + keep case person benunper a002 a004 a005p a006 a007 a010 a206 a221 /// + p008 p011 p037 p047 p049 p153 p116 p116c b352 p177 + + replace a010 = 0 if (a010 >= .) + replace a006 = 0 if (a006 >= .) + replace p008 = 0 if (p008 >= .) + replace p011 = 0 if (p011 >= .) + replace p037 = 0 if (p037 >= .) + replace p047 = 0 if (p047 >= .) + replace p049 = 0 if (p049 >= .) + replace p116 = 0 if (p116 >= .) + replace p116c = 0 if (p116c >= .) + + gen hrp = (a002 == 0) + gen sps = (a002 == 1) + gen os = (a002 == 2) + gen student = (a007 > 0) if (a007 < .) + gen chld = (a005p < 18) if (a005p < .) + gen baby = chld * (a005p < 1) + gen adlt = 1 - chld if (a005p < .) + gen bu = benunper + * Missing source unit identifiers prevent a defensible complete income assignment. + by case, sort: egen byte source_missing_bu = max(missing(bu)) + drop if (bu >= .) + + gen female = (a004 == 2) + gen age = a005p + gen agem = a005p * (1 - female) + gen fti = (a206 == 2) + (a206 == 1) * (a221 > 30.1) + gen pti = (a206 == 3) + (a206 == 1) * (a221 < 30.1) + gen ue = (a206 == 4) + gen sempi = (a206 == 1) + gen edn = a010 * (a010 < 40) * (a007 == 0) + a005p * (a007 > 0) + gen nk04i = (a005p < 5) * chld + gen nk05i = (a005p < 6) * chld + gen nk513i = (a005p >= 5) * (a005p <= 13) * chld + gen nk612i = (a005p >= 6) * (a005p <= 12) * chld + gen nk1417i = (a005p >= 14) * (a005p <= 17) * chld + gen yi = p008 + p011 + p037 + p047 + gen pers_hsgi = p116 + p116c + gen pen_inci = p049 + gen double personal_net_i = p177 + + replace fti = ((fti > 0) + (pti > 1) * (fti == 0)) * (yi > 0) + replace pti = (pti == 1) * (fti == 0) * (yi > 0) + + save "`outdir'/waves/lcfs_`wave_stub'_ind_full.dta", replace + + preserve + keep case person age student female fti pti ue sempi edn yi pen_inci personal_net_i + label var age "Age" + label var student "Continuing full-time student" + label var female "Female" + label var fti "FT work" + label var pti "PT work" + label var ue "Unemployed" + label var sempi "Self-employed" + label var edn "Age last in FTE" + label var yi "Gross individual earnings" + label var pen_inci "Individual income from pensions and annuities, p049" + save "`outdir'/waves/lcfs_`wave_stub'_ind.dta", replace + + if (`first_ind' == 1) { + save "`pooled_ind'", replace + local first_ind 0 + } + else { + append using "`pooled_ind'" + save "`pooled_ind'", replace + } + restore + + /******************************************************************************* + * Benefit-unit aggregation + *******************************************************************************/ + sort case bu + * Require complete personal incomes; never interpret a missing member as zero. + by case bu: egen double bu_net_personsum = total(personal_net_i) + by case bu: egen int missing_net_bu = total(missing(personal_net_i)) + replace bu_net_personsum = . if missing_net_bu>0 + by case: egen double hh_net_personsum = total(personal_net_i) + by case: egen int missing_net_hh = total(missing(personal_net_i)) + replace hh_net_personsum = . if missing_net_hh>0 + by case bu: egen age_male = max(agem) + by case bu: egen na = sum(adlt) + by case: egen byte source_noadult_bu = max(na==0) + * Source units with no adult aged 18+ are outside SimPaths' unit definition. + * Keep retained BUs for inspection, but exclude the WHOLE household from model + * estimation and validation; do not invent an assignment of the omitted income. + gen byte income_scope_ok = source_noadult_bu==0 & source_missing_bu==0 & missing_net_hh==0 + by case bu: egen mar = max(sps) + by case bu: egen nk = sum(chld) + by case bu: egen nk04 = sum(nk04i) + by case bu: egen nk05 = sum(nk05i) + by case bu: egen nk513 = sum(nk513i) + by case bu: egen nk612 = sum(nk612i) + by case bu: egen nk1417 = sum(nk1417i) + by case bu: egen birth = sum(baby) + by case bu: egen ft = sum(fti) + by case bu: egen pt = sum(pti) + by case bu: egen semp = sum(sempi) + by case bu: egen y = sum(yi) + by case bu: egen pen_inc = sum(pen_inci) + by case bu: egen pen_inc_any = max(pen_inci > 0) if (pen_inci < .) + by case bu: egen pers_cons = sum(p153) + by case bu: egen pers_hsg = sum(pers_hsgi) + by case bu: egen edn_max = max(edn) + by case bu: egen allow = sum(b352) + + sort case + by case: egen na_hh = sum(adlt) + + keep case a002 bu age student adlt age_male female na mar nk nk04 nk05 /// + nk513 nk612 nk1417 birth ft pt semp y pen_inc pen_inc_any pers_cons pers_hsg /// + na_hh edn_max allow bu_net_personsum hh_net_personsum income_scope_ok source_noadult_bu source_missing_bu missing_net_bu missing_net_hh + + drop if (na == 0) + keep if (adlt == 1) + drop adlt + + * Keep one representative adult per benefit unit: prefer HRP, then spouse, then oldest adult. + gen rep_priority = cond(a002 == 0, 0, cond(a002 == 1, 1, 2)) + gsort case bu rep_priority -age + by case bu: keep if (_n == 1) + drop rep_priority + + gen byte single_female_adult = (na == 1 & female == 1) + gen byte single_male_adult = (na == 1 & female == 0) + + sort case bu + gen id1 = (nk > 0) + by case: replace id1 = id1[_n-1] + ((nk > 0) & (bu >= bu[_n-1])) if (bu > 1) + by case: egen id_max = max(id1) + + preserve + gen byte _drop_multi_child_bu_hh = (id_max > 1) + egen byte _hh_tag = tag(case) + count if _hh_tag == 1 + local hh_pre_rule = r(N) + count if _hh_tag == 1 & _drop_multi_child_bu_hh == 1 + local hh_drop_rule = r(N) + count + local bu_pre_rule = r(N) + count if _drop_multi_child_bu_hh == 1 + local bu_drop_rule = r(N) + restore + + post `diag_handle' /// + ("`wave_label'") /// + (`year') /// + (`hh_pre_rule') /// + (`hh_drop_rule') /// + (`bu_pre_rule') /// + (`bu_drop_rule') + + if (`drop_multi_child_bu_hh' == 1) { + drop if (id_max > 1) + } + drop id1 id_max + + tempfile bu_temp + save "`bu_temp'", replace + + /******************************************************************************* + * Household file + *******************************************************************************/ + use "`statadir'/`dvhh_file'", clear + rename *, lower + + capture confirm variable cc4121 + if (_rc) gen cc4121 = 0 + + capture confirm variable cc4122 + if (_rc) gen cc4122 = 0 + + capture confirm variable b265 + if (_rc) gen b265 = . + + capture confirm variable gor + if (_rc) gen gor = . + + capture confirm variable gorx + if (_rc) gen gorx = . + + * B038p is Council Tax; B030 is NI domestic rates, already weekly amounts. + * Source credits (negative B030) are retained, not truncated to zero. + capture confirm variable b038p + if (_rc) capture rename b038 b038p + foreach v in case p389p p536tp p550tp cc4121 cc4122 weighta a122 b265 b038p b030 { + capture confirm variable `v' + if (_rc) { + di as error "Required household-level variable `v' not found in `dvhh_file'" + exit 111 + } + } + + assert !missing(b038p,b030) + gen double local_tax_hh = b038p + b030 + keep case p389p p536tp p550tp cc4121 cc4122 weighta a122 gor gorx b265 local_tax_hh + save "`outdir'/waves/lcfs_`wave_stub'_hh.dta", replace + + /******************************************************************************* + * Merge and final wave-level BU file + *******************************************************************************/ + use "`bu_temp'", clear + merge m:1 case using "`outdir'/waves/lcfs_`wave_stub'_hh.dta" + drop if (_merge == 1) + drop _merge + + drop if (age >= .) + + gen year = `year' + gen survey_label = "`wave_label'" + + gen childcare = (cc4121 + cc4122) * (nk > 0) + gen rent = (p536tp - pers_hsg) * na / na_hh + replace rent = 0 if (rent < 0) + drop na_hh + + gen consmpn = 0 + replace consmpn = pers_cons + rent if (bu > 1) + + sort case + by case: egen cons_hh = sum(consmpn) + by case: egen na_hh = sum(na) + by case: egen nk_hh = sum(nk) + + gen wght = weighta / na + gen chk = (p550tp < cons_hh) + + replace consmpn = p550tp - cons_hh if (bu == 1 & chk == 0) + replace consmpn = pers_cons + rent if (bu == 1 & chk == 1) + drop cons_hh + + by case: egen cons_hh = sum(consmpn) + by case: egen chk2 = max(chk) + replace consmpn = p550tp * consmpn / cons_hh if (chk2 == 1 & cons_hh > 0) + gen cons_share = consmpn / p550tp + * Retain the former construction only as an explicitly named audit field. + gen double disp_inc_consumption_share = p389p * consmpn / p550tp if (p550tp > 0) + * Production income now comes from the personal net-income components, not C. + gen double disp_inc = bu_net_personsum + gen double hh_reported_disp_inc = p389p + gen double hh_net_difference = hh_net_personsum - hh_reported_disp_inc + gen byte hh_income_gap_flag = abs(hh_net_difference)>1 if hh_net_difference<. + * Align both sides of the budget with donor disposable income after local tax. + * This is an explicit attribution assumption: each retained BU bears the same + * local-tax share as its share of household adults. It is independent of income + * and expenditure, so it does not reinstate expenditure-based income allocation. + * Keep cash gifts/maintenance and all other broad-expenditure boundaries intact. + gen double local_tax_adult_share = na / na_hh + gen double local_tax_bu = local_tax_hh * local_tax_adult_share + gen double consmpn_before_ct = consmpn + gen double disp_inc_before_ct = disp_inc + gen double cons_share_before_ct = cons_share + recast double consmpn + replace consmpn = consmpn_before_ct - local_tax_bu + replace disp_inc = disp_inc_before_ct - local_tax_bu + replace cons_share = consmpn / (p550tp - local_tax_hh) + * Do not clip low/negative net amounts: retain them for sample accounting. + * Existing estimation positivity and validation income screens apply downstream. + by case: egen double _local_tax_sum = total(local_tax_bu) + assert abs(_local_tax_sum-local_tax_hh)<1e-8 + assert abs((consmpn-disp_inc)-(consmpn_before_ct-disp_inc_before_ct))<1e-8 /// + if !missing(consmpn_before_ct,disp_inc_before_ct) + drop _local_tax_sum + gen str16 income_definition = "personal_net_ct" + gen str16 expenditure_definition = "broad_net_ct" + + replace childcare = 0 if (childcare >= .) + gen caseno = case + + keep caseno bu age age_male student na mar nk nk04 nk05 nk513 nk612 nk1417 /// + birth female single_female_adult single_male_adult edn_max ft pt semp y pen_inc pen_inc_any childcare rent consmpn /// + disp_inc year survey_label wght weighta a122 gor gorx b265 allow cons_share /// + disp_inc_consumption_share hh_reported_disp_inc hh_net_personsum hh_net_difference /// + hh_income_gap_flag income_scope_ok income_definition source_noadult_bu source_missing_bu missing_net_bu missing_net_hh /// + local_tax_hh local_tax_bu local_tax_adult_share consmpn_before_ct disp_inc_before_ct cons_share_before_ct expenditure_definition + + label var caseno "Household ID" + label var bu "Benefit unit" + label var age "Age of representative adult" + label var age_male "Oldest man in BU" + label var student "Continuing full-time student" + label var na "Number of adults in BU" + label var mar "Spouse/cohabitee present in BU" + label var nk "Number of children in BU" + label var nk04 "Children aged under 5" + label var nk05 "Children aged under 6" + label var nk513 "Children aged 5 to 13" + label var nk612 "Children aged 6 to 12" + label var nk1417 "Children aged 14 to 17" + label var birth "Baby present in BU" + label var female "Representative adult is female" + label var single_female_adult "Single-adult BU with female adult" + label var single_male_adult "Single-adult BU with male adult" + label var edn_max "Highest age last in FTE in BU" + label var ft "Number in FT work in BU" + label var pt "Number in PT work in BU" + label var semp "Number self-employed in BU" + label var y "Total gross earnings in BU" + label var pen_inc "BU income from pensions and annuities, p049" + label var pen_inc_any "BU receives any pension or annuity income, p049" + label var childcare "Childcare expenditure" + label var rent "Original broad housing allocation before local tax" + label var consmpn "BU broad expenditure after allocated Council Tax/NI rates" + label var disp_inc "BU sum personal P177/P177p less allocated Council Tax/NI rates" + label var local_tax_hh "HH weekly Council Tax and NI domestic rates: B038p+B030" + label var local_tax_bu "BU weekly local tax, allocated by household adult share" + label var local_tax_adult_share "BU adults divided by household adults" + label var consmpn_before_ct "v2 broad BU expenditure before Council Tax alignment" + label var disp_inc_before_ct "v2 BU personal net-income sum before local tax" + label var cons_share_before_ct "v2 BU share of broad HH expenditure before local tax" + label var disp_inc_consumption_share "Former expenditure-allocated BU income (audit only)" + label var income_scope_ok "Complete household, no source BU without an 18+ adult" + label var hh_income_gap_flag "Personal sum differs from reported HH income by over 1 pound/week" + label var year "Wave start year" + label var survey_label "Original LCFS wave label" + label var wght "Annual weight divided by adults in BU" + label var weighta "Annual household weight" + label var a122 "Tenure type" + label var gor "Government office region" + label var gorx "Government office region modified" + label var b265 "Regular allowances paid" + label var allow "Regular allowances received" + label var cons_share "BU share of household consumption" + + save "`outdir'/waves/lcfs_`wave_stub'_bu.dta", replace + + if (`first_bu' == 1) { + save "`pooled_bu'", replace + local first_bu 0 + } + else { + append using "`pooled_bu'" + save "`pooled_bu'", replace + } +} + + +/************************************************************************************** +* Save pooled outputs +**************************************************************************************/ +use "`pooled_ind'", clear +sort case person +save "`outdir'/lcfs_individuals_sorted.dta", replace + +use "`pooled_bu'", clear +sort caseno year bu +save "`outdir'/lcfs_sorted.dta", replace + +postclose `diag_handle' +use "`diag_file'", clear +gen hh_drop_share = hh_drop_rule / hh_pre_rule if (hh_pre_rule > 0) +gen bu_drop_share = bu_drop_rule / bu_pre_rule if (bu_pre_rule > 0) +sort year +save "`outdir'/multi_child_bu_rule_diagnostics.dta", replace + +egen hh_pre_rule_total = total(hh_pre_rule) +egen hh_drop_rule_total = total(hh_drop_rule) +egen bu_pre_rule_total = total(bu_pre_rule) +egen bu_drop_rule_total = total(bu_drop_rule) +gen hh_drop_share_total = hh_drop_rule_total / hh_pre_rule_total if (hh_pre_rule_total > 0) +gen bu_drop_share_total = bu_drop_rule_total / bu_pre_rule_total if (bu_pre_rule_total > 0) + +list wave year hh_pre_rule hh_drop_rule hh_drop_share bu_pre_rule bu_drop_rule bu_drop_share, noobs abbreviate(20) +list hh_pre_rule_total hh_drop_rule_total hh_drop_share_total bu_pre_rule_total bu_drop_rule_total bu_drop_share_total in 1, noobs + +log close diff --git a/input/regression_files/RegressionEstimates/consumption/consumption_modelling_lcfs.do b/input/regression_files/RegressionEstimates/consumption/consumption_modelling_lcfs.do new file mode 100644 index 000000000..a31e615f7 --- /dev/null +++ b/input/regression_files/RegressionEstimates/consumption/consumption_modelling_lcfs.do @@ -0,0 +1,485 @@ +/************************************************************************************** +* +* CONSUMPTION MODELLING USING POOLED LCFS BENEFIT-UNIT DATA +* +* Input: +* output_lcfs/lcfs_sorted.dta +* +* Production v3 (22 October 2026; after local-tax alignment): +* m4: five-year age-specific log-income slopes with common curvature +* reference-adult student dummy; three-category housing status +* +* Baseline modelling choices: +* - Real monthly monetary variables, CPIH (L522), base 2015; 365.25/7/12 conversion +* - Disposable income: personal P177/P177p sums less allocated local tax; income_scope_ok required +* - Positive-sample restriction for log specification +* - Benefit-unit level regression +* - Survey weights: weighta; covariance clustered by household within year +* - Year fixed effects included +* - Existing five-year age intercepts and age-specific log-income slopes +* - Common uncentered quadratic in log disposable income +* - Child status in the constructed input file is age <= 17 +* +**************************************************************************************/ + +cls +//version 17 +clear all +set more off + +args rootdir exportdir +if ("`rootdir'" == "") local rootdir "`c(pwd)'" +if ("`exportdir'" == "") local exportdir "`rootdir'" +local outdir "`rootdir'/output_lcfs" +local writingdir "`exportdir'/output_writing" +local modelinputdir "`exportdir'/output_model_input" + +capture mkdir "`writingdir'" +capture mkdir "`modelinputdir'" + +capture log close +log using "`writingdir'/consumption_modelling_lcfs.log", replace text + + +/************************************************************************************** +* Helper: export stored model to CSV +**************************************************************************************/ +capture program drop export_model_csv +program define export_model_csv + syntax, MODEL(string) OUTFILE(string) + + estimates restore `model' + + local title "`model'" + if ("`model'" == "m4") { + local title "m4: five-year age-specific income slopes; common curvature; student control; three-category housing status" + } + + quietly ereturn display + matrix results = r(table) + local cnames : colnames results + local k = colsof(results) + + tempname fh + file open `fh' using "`outfile'", write text replace + file write `fh' `"model,`model'"' _n + file write `fh' `"title,"`title'""' _n + file write `fh' `"dependent variable,ln_consmpn"' _n + file write `fh' `"observations,`=string(e(N), "%18.0g")'"' _n + file write `fh' `"R-squared,`=string(e(r2), "%18.0g")'"' _n + file write `fh' `"Root MSE,`=string(e(rmse), "%18.0g")'"' _n + file write `fh' `"F statistic,`=string(e(F), "%18.0g")'"' _n + file write `fh' `"residual df,`=string(e(df_r), "%18.0g")'"' _n + file write `fh' `"weight,pweight = weighta"' _n + file write `fh' `"VCE,clustered by household within year"' _n + file write `fh' _n + file write `fh' `"term,coefficient,std. err.,t,P>|t|"' _n + + forvalues j = 1/`k' { + local term : word `j' of `cnames' + if !regexm("`term'", "^[0-9]+[bo]\.") { + local term_label "`term'" + if ("`term'" == "year_c2015") local term_label "Year trend (since 2015)" + if ("`term'" == "ln_disp_inc") local term_label "ln(real disposable income)" + if ("`term'" == "ln_disp_inc2") local term_label "ln(real disposable income) squared" + if ("`term'" == "2.age_group") local term_label "Age 20-24" + if ("`term'" == "3.age_group") local term_label "Age 25-29" + if ("`term'" == "4.age_group") local term_label "Age 30-34" + if ("`term'" == "5.age_group") local term_label "Age 35-39" + if ("`term'" == "6.age_group") local term_label "Age 40-44" + if ("`term'" == "7.age_group") local term_label "Age 45-49" + if ("`term'" == "8.age_group") local term_label "Age 50-54" + if ("`term'" == "9.age_group") local term_label "Age 55-59" + if ("`term'" == "10.age_group") local term_label "Age 60-64" + if ("`term'" == "11.age_group") local term_label "Age 65-69" + if ("`term'" == "12.age_group") local term_label "Age 70-74" + if ("`term'" == "13.age_group") local term_label "Age 75-79" + if ("`term'" == "14.age_group") local term_label "Age 80+" + if ("`term'" == "single_female_adult") local term_label "Single female adult BU" + if ("`term'" == "single_male_adult") local term_label "Single male adult BU" + if ("`term'" == "nk") local term_label "Number of children" + if ("`term'" == "ft") local term_label "Number in full-time work" + if ("`term'" == "pt") local term_label "Number in part-time work" + if ("`term'" == "semp") local term_label "Number self-employed" + if ("`term'" == "pen_inc_any") local term_label "Receives pension or annuity income" + if ("`term'" == "1.housing_status") local term_label "Owner with ongoing payments" + if ("`term'" == "2.housing_status") local term_label "Owned outright" + if ("`term'" == "1.gorx") local term_label "Region: North East" + if ("`term'" == "2.gorx") local term_label "Region: North West and Merseyside" + if ("`term'" == "3.gorx") local term_label "Region: Yorkshire and the Humber" + if ("`term'" == "4.gorx") local term_label "Region: East Midlands" + if ("`term'" == "5.gorx") local term_label "Region: West Midlands" + if ("`term'" == "6.gorx") local term_label "Region: Eastern" + if ("`term'" == "8.gorx") local term_label "Region: South East" + if ("`term'" == "9.gorx") local term_label "Region: South West" + if ("`term'" == "10.gorx") local term_label "Region: Wales" + if ("`term'" == "11.gorx") local term_label "Region: Scotland" + if ("`term'" == "12.gorx") local term_label "Region: Northern Ireland" + if ("`term'" == "year") local term_label "Year trend" + if ("`term'" == "2009.year") local term_label "Year 2009" + if ("`term'" == "2010.year") local term_label "Year 2010" + if ("`term'" == "2011.year") local term_label "Year 2011" + if ("`term'" == "2012.year") local term_label "Year 2012" + if ("`term'" == "2013.year") local term_label "Year 2013" + if ("`term'" == "2014.year") local term_label "Year 2014" + if ("`term'" == "2015.year") local term_label "Year 2015" + if ("`term'" == "2016.year") local term_label "Year 2016" + if ("`term'" == "2017.year") local term_label "Year 2017" + if ("`term'" == "2018.year") local term_label "Year 2018" + if ("`term'" == "2019.year") local term_label "Year 2019" + if ("`term'" == "2020.year") local term_label "Year 2020" + if ("`term'" == "2021.year") local term_label "Year 2021" + if ("`term'" == "2022.year") local term_label "Year 2022" + if ("`term'" == "2023.year") local term_label "Year 2023" + if ("`term'" == "_cons") local term_label "Constant" + + scalar coefficient = results[1, `j'] + scalar std_error = results[2, `j'] + scalar t_stat = results[3, `j'] + scalar p_value = results[4, `j'] + + local p_value_display = string(p_value, "%12.4g") + if (p_value == 0) { + local p_value_display "<1e-300" + } + + local coefficient_s = string(coefficient, "%12.6f") + local std_error_s = string(std_error, "%12.6f") + local t_stat_s = string(t_stat, "%12.2f") + + file write `fh' `"`term_label',`coefficient_s',`std_error_s',`t_stat_s',`p_value_display'"' _n + } + } + file close `fh' +end + +capture program drop export_model_input_csv +program define export_model_input_csv + syntax, MODEL(string) OUTFILE(string) + + tempname bmat vmat fh + local dq = char(34) + + capture estimates restore `model' + if _rc { + di as err "Estimation results not found: `model'" + exit 111 + } + + matrix `bmat' = e(b) + matrix `vmat' = e(V) + local cnames : colfullnames `bmat' + local k = colsof(`bmat') + + local n_keep = 0 + forvalues j = 1/`k' { + local term : word `j' of `cnames' + if strpos("`term'", "b.") | strpos("`term'", "o.") { + continue + } + + local term_label "`term'" + if ("`term'" == "student") local term_label "ReferenceAdultStudent" + if ("`term'" == "year_c2015") local term_label "YearFrom2015" + if ("`term'" == "ln_disp_inc") local term_label "LnDispInc" + if ("`term'" == "ln_disp_inc2") local term_label "LnDispInc_sq" + if ("`term'" == "2.age_group") local term_label "Age20to24" + if ("`term'" == "3.age_group") local term_label "Age25to29" + if ("`term'" == "4.age_group") local term_label "Age30to34" + if ("`term'" == "5.age_group") local term_label "Age35to39" + if ("`term'" == "6.age_group") local term_label "Age40to44" + if ("`term'" == "7.age_group") local term_label "Age45to49" + if ("`term'" == "8.age_group") local term_label "Age50to54" + if ("`term'" == "9.age_group") local term_label "Age55to59" + if ("`term'" == "10.age_group") local term_label "Age60to64" + if ("`term'" == "11.age_group") local term_label "Age65to69" + if ("`term'" == "12.age_group") local term_label "Age70to74" + if ("`term'" == "13.age_group") local term_label "Age75to79" + if ("`term'" == "14.age_group") local term_label "Age80plus" + if ("`term'" == "single_female_adult") local term_label "SingleFemale" + if ("`term'" == "single_male_adult") local term_label "SingleMale" + if ("`term'" == "nk") local term_label "NumberMembersUnder18" + if ("`term'" == "ft") local term_label "NumberFullTimeWork" + if ("`term'" == "pt") local term_label "NumberPartTimeWork" + if ("`term'" == "semp") local term_label "NumberSelfEmployed" + if ("`term'" == "pen_inc_any") local term_label "PrivatePensionIncome" + if ("`term'" == "1.housing_status") local term_label "MortgageHolder" + if ("`term'" == "2.housing_status") local term_label "HomeOwnedOutright" + if ("`term'" == "1.gorx") local term_label "UKC" + if ("`term'" == "2.gorx") local term_label "UKD" + if ("`term'" == "3.gorx") local term_label "UKE" + if ("`term'" == "4.gorx") local term_label "UKF" + if ("`term'" == "5.gorx") local term_label "UKG" + if ("`term'" == "6.gorx") local term_label "UKH" + if ("`term'" == "8.gorx") local term_label "UKJ" + if ("`term'" == "9.gorx") local term_label "UKK" + if ("`term'" == "10.gorx") local term_label "UKL" + if ("`term'" == "11.gorx") local term_label "UKM" + if ("`term'" == "12.gorx") local term_label "UKN" + if ("`term'" == "year") local term_label "Year" + if ("`term'" == "2009.year") local term_label "Year2009" + if ("`term'" == "2010.year") local term_label "Year2010" + if ("`term'" == "2011.year") local term_label "Year2011" + if ("`term'" == "2012.year") local term_label "Year2012" + if ("`term'" == "2013.year") local term_label "Year2013" + if ("`term'" == "2014.year") local term_label "Year2014" + if ("`term'" == "2015.year") local term_label "Year2015" + if ("`term'" == "2016.year") local term_label "Year2016" + if ("`term'" == "2017.year") local term_label "Year2017" + if ("`term'" == "2018.year") local term_label "Year2018" + if ("`term'" == "2019.year") local term_label "Year2019" + if ("`term'" == "2020.year") local term_label "Year2020" + if ("`term'" == "2021.year") local term_label "Year2021" + if ("`term'" == "2022.year") local term_label "Year2022" + if ("`term'" == "2023.year") local term_label "Year 2023" + if ("`term'" == "_cons") local term_label "Constant" + + if ("`term'" == "2.age_group#c.ln_disp_inc") local term_label "Age20to24_LnDispInc" + if ("`term'" == "3.age_group#c.ln_disp_inc") local term_label "Age25to29_LnDispInc" + if ("`term'" == "4.age_group#c.ln_disp_inc") local term_label "Age30to34_LnDispInc" + if ("`term'" == "5.age_group#c.ln_disp_inc") local term_label "Age35to39_LnDispInc" + if ("`term'" == "6.age_group#c.ln_disp_inc") local term_label "Age40to44_LnDispInc" + if ("`term'" == "7.age_group#c.ln_disp_inc") local term_label "Age45to49_LnDispInc" + if ("`term'" == "8.age_group#c.ln_disp_inc") local term_label "Age50to54_LnDispInc" + if ("`term'" == "9.age_group#c.ln_disp_inc") local term_label "Age55to59_LnDispInc" + if ("`term'" == "10.age_group#c.ln_disp_inc") local term_label "Age60to64_LnDispInc" + if ("`term'" == "11.age_group#c.ln_disp_inc") local term_label "Age65to69_LnDispInc" + if ("`term'" == "12.age_group#c.ln_disp_inc") local term_label "Age70to74_LnDispInc" + if ("`term'" == "13.age_group#c.ln_disp_inc") local term_label "Age75to79_LnDispInc" + if ("`term'" == "14.age_group#c.ln_disp_inc") local term_label "Age80plus_LnDispInc" + + local ++n_keep + local idx`n_keep' `j' + local lbl`n_keep' "`term_label'" + } + + file open `fh' using "`outfile'", write text replace + file write `fh' `"`dq'REGRESSOR`dq',`dq'COEFFICIENT`dq'"' + forvalues j = 1/`n_keep' { + file write `fh' `",`dq'`lbl`j''`dq'"' + } + file write `fh' _n + + forvalues r = 1/`n_keep' { + local rr = `idx`r'' + local b_i = string(`bmat'[1,`rr'], "%24.17g") + file write `fh' `"`dq'`lbl`r''`dq',`b_i'"' + + forvalues c = 1/`n_keep' { + local cc = `idx`c'' + local v_rc = string(`vmat'[`rr',`cc'], "%24.17g") + file write `fh' `",`v_rc'"' + } + file write `fh' _n + } + file close `fh' +end + +capture program drop export_income_elasticity_csv +program define export_income_elasticity_csv + syntax, OUTFILE(string) C25(real) C50(real) C75(real) C90(real) MEAN(real) + tempname fh + file open `fh' using "`outfile'", write text replace + file write `fh' "age_group,point,ln_disp_inc,elasticity,std_error,p_value" _n + forvalues g=1/14 { + foreach point in p25 mean p50 p75 p90 { + if "`point'"=="p25" local at=`c25' + if "`point'"=="mean" local at=`mean' + if "`point'"=="p50" local at=`c50' + if "`point'"=="p75" local at=`c75' + if "`point'"=="p90" local at=`c90' + local contrast "_b[ln_disp_inc] + 2*_b[ln_disp_inc2]*(`at')" + if `g'>1 local contrast "`contrast' + _b[`g'.age_group#c.ln_disp_inc]" + quietly lincom `contrast' + file write `fh' "`g',`point',`=string(`at',"%24.17g")',`=string(r(estimate),"%24.17g")',`=string(r(se),"%24.17g")',`=string(r(p),"%24.17g")'" _n + } + } + file close `fh' +end + + +/************************************************************************************** +* 1. Estimation sample and modelling variables +**************************************************************************************/ +use "`outdir'/lcfs_sorted.dta", clear + +* Require the revised construction and use the same population scope in validation. +confirm variable income_definition income_scope_ok +* 22 October 2026: both own income and broad expenditure exclude the same +* adult-share allocation of Council Tax/NI rates. Other cash outflows remain. +assert income_definition=="personal_net_ct" +confirm variable expenditure_definition local_tax_bu +assert expenditure_definition=="broad_net_ct" +keep if income_scope_ok==1 +di as text "Loaded personal-net-income LCFS benefit-unit file" +describe + +gen byte sample_log = (consmpn > 0 & disp_inc > 0) if !missing(consmpn, disp_inc) +count +local N_all = r(N) +count if sample_log == 1 +local N_log = r(N) +di as text "Total BU observations: `N_all'" +di as text "Log-usable BU observations: `N_log'" + +keep if sample_log == 1 + +global inflation_minyear = 2008 +global inflation_maxyear = 2025 +matrix inflation = ( /// +0.862 \ /// 2008 +0.879 \ /// 2009 +0.901 \ /// 2010 +0.936 \ /// 2011 +0.96 \ /// 2012 +0.982 \ /// 2013 +0.996 \ /// 2014 +1 \ /// 2015 +1.01 \ /// 2016 +1.036 \ /// 2017 +1.06 \ /// 2018 +1.078 \ /// 2019 +1.089 \ /// 2020 +1.116 \ /// 2021 +1.205 \ /// 2022 +1.286 \ /// 2023 +1.329 \ /// 2024 +1.329) /// 2025 //to update when becomes available + +gen CPI = . +forvalues yy = $inflation_minyear/$inflation_maxyear { + + replace CPI = inflation[`yy'-${inflation_minyear}+1,1] if year == `yy' +} +foreach var in consmpn disp_inc { + + gen `var'r = `var' / CPI +} + +gen ln_consmpn = ln(consmpnr * 365.25/7/12) +gen ln_disp_inc = ln(disp_incr * 365.25/7/12) +gen ln_disp_inc2 = ln_disp_inc^2 + +summ ln_disp_inc +local mean_ln_disp_inc = r(mean) +gen c_ln_disp_inc = ln_disp_inc - `mean_ln_disp_inc' +gen c_ln_disp_inc2 = c_ln_disp_inc^2 + +quietly summ ln_disp_inc, detail +local p25_ln_disp_inc = r(p25) +local p50_ln_disp_inc = r(p50) +local p75_ln_disp_inc = r(p75) +local p90_ln_disp_inc = r(p90) +local c25_ln_disp_inc = `p25_ln_disp_inc' - `mean_ln_disp_inc' +local c50_ln_disp_inc = `p50_ln_disp_inc' - `mean_ln_disp_inc' +local c75_ln_disp_inc = `p75_ln_disp_inc' - `mean_ln_disp_inc' +local c90_ln_disp_inc = `p90_ln_disp_inc' - `mean_ln_disp_inc' + +recode age /// + (min/19 = 1 "Under 20") /// + (20/24 = 2 "20-24") /// + (25/29 = 3 "25-29") /// + (30/34 = 4 "30-34") /// + (35/39 = 5 "35-39") /// + (40/44 = 6 "40-44") /// + (45/49 = 7 "45-49") /// + (50/54 = 8 "50-54") /// + (55/59 = 9 "55-59") /// + (60/64 = 10 "60-64") /// + (65/69 = 11 "65-69") /// + (70/74 = 12 "70-74") /// + (75/79 = 13 "75-79") /// + (80/max = 14 "80+"), gen(age_group) + +label var sample_log "Positive consmpn and disp_inc sample" +label var ln_consmpn "Log broad BU expenditure after local tax per month" +label var ln_disp_inc "Log benefit-unit disposable income per month" +label var c_ln_disp_inc "Centered log benefit-unit disposable income" +label var c_ln_disp_inc2 "Centered log benefit-unit disposable income squared" +label var age_group "Age group" + +gen byte housing_status = . +replace housing_status = 0 if inlist(a122, 1, 2, 3, 4, 8) +replace housing_status = 1 if inlist(a122, 5, 6) +replace housing_status = 2 if (a122 == 7) +label define housing_status_lbl /// + 0 "Non-owner" /// + 1 "Owner with ongoing payments" /// + 2 "Owned outright", replace +label values housing_status housing_status_lbl +label var housing_status "Housing status from a122, with non-owner as benchmark" + +save "`writingdir'/lcfs_model_sample.dta", replace + + +/************************************************************************************** +* 2. Sample profile +**************************************************************************************/ +di as text "Sample profile after log restriction" +summ ln_consmpn ln_disp_inc ln_disp_inc2 age na nk ft pt semp y pen_inc /// + wght weighta, detail + +tab year +tab na +tab nk +tab mar +tab single_female_adult +tab single_male_adult +tab pen_inc_any +tab age_group +tab housing_status, missing +tab gorx + + +/************************************************************************************** +* 3. Production regression +**************************************************************************************/ +drop single_female_adult single_male_adult +gen single_female_adult = (na==1) * female +gen single_male_adult = (na==1) * (1 - female) +local demo_controls_agegrp i.age_group single_female_adult single_male_adult nk +* Full-time student status belongs to the same reference adult as age. +* Keep the existing age bands and income slopes; retain common log-income curvature. +assert inlist(student,0,1) +local work_controls ft pt semp pen_inc_any student +local hh_controls ib0.housing_status ib7.gorx +di as text "Model m4: age-specific income slopes, common curvature, non-owner benchmark" +egen long regression_hh = group(year caseno) +* Centre the calendar trend without changing its fitted relationship. +gen double year_c2015 = year - 2015 +reg ln_consmpn ln_disp_inc ln_disp_inc2 i.age_group#c.ln_disp_inc `demo_controls_agegrp' `work_controls' `hh_controls' year_c2015 i.year /// + [pweight=weighta] if (na<3 & na>0), vce(cluster regression_hh) +estimates store m4 +estimates save "`writingdir'/consumption_model_housing_status.ster", replace + +* Age-specific elasticities are exported below using joint coefficient contrasts. + +/************************************************************************************** +* 4. Export CSV output +**************************************************************************************/ +export_model_csv, model("m4") outfile("`writingdir'/consumption_model_housing_status.csv") +export_income_elasticity_csv, /// + outfile("`writingdir'/consumption_model_housing_status_elasticities.csv") /// + c25(`p25_ln_disp_inc') c50(`p50_ln_disp_inc') c75(`p75_ln_disp_inc') c90(`p90_ln_disp_inc') mean(`mean_ln_disp_inc') +export_model_input_csv, model("m4") outfile("`modelinputdir'/consumption_model_housing_status.csv") + +di as text "CSV results exported to:" +di as text " `writingdir'/consumption_model_housing_status.csv" +di as text " `writingdir'/consumption_model_housing_status_elasticities.csv" +di as text " `modelinputdir'/consumption_model_housing_status.csv" + + +* FW1a residual dispersion is exported separately from coefficient covariance. +estimates restore m4 +tempname rmsefile +file open `rmsefile' using "`modelinputdir'/consumption_model_housing_status_rmse.csv", write text replace +file write `rmsefile' "REGRESSOR,COEFFICIENT" _n +file write `rmsefile' "FW1a,`=string(e(rmse),"%24.17g")'" _n +file close `rmsefile' +tempname metafile +file open `metafile' using "`modelinputdir'/consumption_model_housing_status_fit.csv", write text replace +file write `metafile' "model,observations,r_squared,rmse,household_clusters" _n +file write `metafile' "m4,`=e(N)',`=string(e(r2),"%24.17g")',`=string(e(rmse),"%24.17g")',`=e(N_clust)'" _n +file close `metafile' + +log close diff --git a/input/regression_files/RegressionEstimates/consumption/export_synthetic_fixtures.do b/input/regression_files/RegressionEstimates/consumption/export_synthetic_fixtures.do new file mode 100644 index 000000000..c296480f5 --- /dev/null +++ b/input/regression_files/RegressionEstimates/consumption/export_synthetic_fixtures.do @@ -0,0 +1,62 @@ +******************************************************************************** +* Export Stata predictions for a deterministic synthetic consumption test grid. +* No observed LCFS rows are read or exported by this script. +* Arguments: saved m4 estimates (.ster), then destination fixture CSV. +******************************************************************************** +args estimates_file output_file +if (`"`estimates_file'"'=="" | `"`output_file'"'=="") { + di as error "Supply the saved m4 .ster file and destination CSV." + exit 198 +} +clear all +set more off +set obs 700 + +* Full grid: 14 age bands x 2 student states x 5 years x 5 income levels. +gen byte age_group=ceil(_n/50) +gen byte age=cond(age_group==1,19,5*age_group+10) +gen byte student=mod(floor((_n-1)/25),2) +gen byte year_case=mod(floor((_n-1)/5),5) +gen int year=2008 +replace year=2015 if year_case==1 +replace year=2022 if year_case==2 +replace year=2023 if year_case==3 +replace year=2026 if year_case==4 +gen byte income_case=mod(_n-1,5) +gen double income_month=.1 +replace income_month=1 if income_case==1 +replace income_month=500 if income_case==2 +replace income_month=1800 if income_case==3 +replace income_month=5000 if income_case==4 + +* Deterministic control combinations exercise every region and housing status. +gen byte single_female_adult=mod(_n,3)==0 +gen byte single_male_adult=mod(_n,3)==1 +gen byte na=cond(single_female_adult | single_male_adult,1,2) +gen byte nk=mod(floor((_n-1)/2),4) +gen byte pen_inc_any=age>=65 +gen byte ft=(!student & !pen_inc_any & mod(_n,3)==0)+(na==2) +gen byte pt=!student & !pen_inc_any & mod(_n,3)==1 +gen byte semp=!student & !pen_inc_any & mod(_n,3)==2 +gen byte housing_status=mod(floor((_n-1)/7),3) +gen byte gorx=mod(floor((_n-1)/3),12)+1 + +* Match Java's GBP1 monthly floor, double square and 2023 trend freeze. +gen double ln_disp_inc=ln(max(income_month,1)) +gen double ln_disp_inc2=ln_disp_inc^2 +gen int actual_year=year +gen double year_c2015=min(year,2023)-2015 +* 2023 is the omitted annual indicator, so it also represents future years' +* all-zero indicator vector while their centred trend remains frozen at 8. +replace year=2023 if actual_year>2023 +estimates use `"`estimates_file'"' +predict double stata_xb, xb +gen double stata_rmse=e(rmse) +gen double stata_mean_month=exp(stata_xb+stata_rmse^2/2) +replace year=actual_year +keep student age nk ft pt semp pen_inc_any gorx year age_group housing_status /// + single_female_adult single_male_adult income_month stata_xb stata_rmse stata_mean_month +assert _N==700 +assert !missing(stata_xb,stata_rmse,stata_mean_month) +format stata_xb income_month stata_mean_month stata_rmse %24.17g +export delimited using `"`output_file'"', replace datafmt nolabel diff --git a/input/regression_files/reg_RMSE.xlsx b/input/regression_files/reg_RMSE.xlsx index 3f1ce654e626130254cb4206ba012236d34993af..31ac0239c69e3a3dbe9f12d5c2dcebf2101516d3 100644 GIT binary patch literal 4183 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 literal 8378 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 literal 111627 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 z℞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 z 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

7nIJokl=ejzpEvNzgq58tr91FYh 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 U@7Fo#;14AX1jJ variableID) { throw new RuntimeException("request for parameter LnDispInc without specifying yDispMonth"); return Math.pow(Math.log(Math.max(yDispMonth, 1.0)),2.0); } + case Age20to24_LnDispInc, Age25to29_LnDispInc, Age30to34_LnDispInc, + Age35to39_LnDispInc, Age40to44_LnDispInc, Age45to49_LnDispInc, + Age50to54_LnDispInc, Age55to59_LnDispInc, Age60to64_LnDispInc, + Age65to69_LnDispInc, Age70to74_LnDispInc, Age75to79_LnDispInc, + Age80plus_LnDispInc -> { + // FW1a adds an income slope to each existing age-band intercept. + // Under 20 is the baseline slope; quadratic curvature stays common. + String ageVariable = variableID.name().replace("_LnDispInc", ""); + return getDoubleValue(Variables.valueOf(ageVariable)) * getDoubleValue(Variables.LnDispInc); + } + case ReferenceAdultStudent -> { + // Use the same reference adult as the consumption age regressors. + return Les_c4.Student.equals(getRefPerson().getLabC4()) ? 1.0 : 0.0; + } case MaleEduM_10 -> { return (getMale() != null && getMale().getLabourSupplyWeekly().equals(Labour.TEN) && getMale().getEduHighestC4().equals(Education.Medium)) ? 1. : 0.; } @@ -4182,6 +4211,10 @@ public double getDoubleValue(Enum variableID) { case Year -> { return (Parameters.isFixTimeTrend && getYear() >= Parameters.timeTrendStopsIn) ? Parameters.timeTrendStopsIn : getYear(); } + case YearFrom2015 -> { + // Matches Stata's centred trend, including the existing trend freeze. + return getDoubleValue(Variables.Year) - 2015.0; + } case Year2009 -> { return (getYear() == 2009) ? 1. : 0.; } diff --git a/src/test/java/simpaths/model/ConsumptionRegressionTest.java b/src/test/java/simpaths/model/ConsumptionRegressionTest.java new file mode 100644 index 000000000..d330f476f --- /dev/null +++ b/src/test/java/simpaths/model/ConsumptionRegressionTest.java @@ -0,0 +1,132 @@ +package simpaths.model; + +import com.opencsv.CSVReader; +import microsim.data.excel.ExcelAssistant; +import microsim.statistics.regression.LinearRegression; +import org.junit.jupiter.api.Test; +import simpaths.data.Parameters; +import simpaths.model.enums.Les_c4; + +import java.io.InputStreamReader; +import java.lang.reflect.Field; +import java.nio.charset.StandardCharsets; +import java.util.*; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; + +class ConsumptionRegressionTest { + private static final String[] AGE_NAMES = {"Age20to24", "Age25to29", "Age30to34", "Age35to39", + "Age40to44", "Age45to49", "Age50to54", "Age55to59", "Age60to64", "Age65to69", + "Age70to74", "Age75to79", "Age80plus"}; + + private BenefitUnit unit(int age, boolean student, int year, double income, + Map controls) throws Exception { + BenefitUnit bu = mock(BenefitUnit.class); + Person ref = mock(Person.class); + when(ref.getDemAge()).thenReturn(age); + when(ref.getLabC4()).thenReturn(student ? Les_c4.Student : Les_c4.NotEmployed); + when(bu.getRefPerson()).thenReturn(ref); + when(bu.getYear()).thenReturn(year); + Field field = BenefitUnit.class.getDeclaredField("yDispMonth"); + field.setAccessible(true); + field.set(bu, income); + doAnswer(inv -> { + String name = ((Enum) inv.getArgument(0)).name(); + if (name.startsWith("Age") || name.equals("LnDispInc") || name.equals("LnDispInc_sq") + || name.equals("ReferenceAdultStudent") || name.equals("Year") || name.equals("YearFrom2015") + || name.equals("Constant")) + return inv.callRealMethod(); + Double value = controls.get(name); + if (value == null) throw new AssertionError("Unmapped fixture regressor " + name); + return value; + }).when(bu).getDoubleValue(any(Enum.class)); + return bu; + } + + @Test + void predictionsMatchFullPrecisionStataConsumptionModel() throws Exception { + LinearRegression regression = new LinearRegression(ExcelAssistant.loadCoefficientMap( + System.getProperty("simpaths.consumption.coefficients", + "input/regression_files/reg_wealth_financial.xlsx"), "FW1a", 1)); + Object rmseValue = ExcelAssistant.loadCoefficientMap( + System.getProperty("simpaths.consumption.rmse", + "input/regression_files/reg_RMSE.xlsx"), "UK", 1).getValue("FW1a"); + assertInstanceOf(Number.class, rmseValue); + double rmse = ((Number) rmseValue).doubleValue(); + boolean oldFix = Parameters.isFixTimeTrend; + Integer oldStop = Parameters.timeTrendStopsIn; + try { + Parameters.isFixTimeTrend = true; + Parameters.timeTrendStopsIn = 2023; + try (CSVReader reader = new CSVReader(new InputStreamReader(Objects.requireNonNull( + getClass().getResourceAsStream("/simpaths/model/consumption_stata_fixtures.csv")), StandardCharsets.UTF_8))) { + String[] header = reader.readNext(); + String[] row; + int count = 0; + while ((row = reader.readNext()) != null) { + Map data = new HashMap<>(); + for (int i=0; i controls = new HashMap<>(); + controls.put("SingleFemale", data.get("single_female_adult")); + controls.put("SingleMale", data.get("single_male_adult")); + controls.put("NumberMembersUnder18", data.get("nk")); + controls.put("NumberFullTimeWork", data.get("ft")); + controls.put("NumberPartTimeWork", data.get("pt")); + controls.put("NumberSelfEmployed", data.get("semp")); + controls.put("PrivatePensionIncome", data.get("pen_inc_any")); + controls.put("MortgageHolder", data.get("housing_status")==1.0 ? 1.0 : 0.0); + controls.put("HomeOwnedOutright", data.get("housing_status")==2.0 ? 1.0 : 0.0); + String[] regions = {"UKC","UKD","UKE","UKF","UKG","UKH","UKI","UKJ","UKK","UKL","UKM","UKN"}; + for (int i=0;i=lower && (i==12 || age=0 & age<=44) + } + else if (`aa'==3) { + gen age_grp = (age>=45 & age<=64) + } + else { + gen age_grp = (age>=65 & age<=84) + } + + sum cons_to_inc if (age_grp & year==`yy'), mean + matrix stats[`yy'-${start_year}+1,`col'] = r(mean) + local col = `col' + 1 + + forvalues qq = 1/5 { + + sum cons_to_inc if (age_grp & pct1==`qq' & year==`yy'), mean + matrix stats[`yy'-${start_year}+1,`col'] = r(mean) + local col = `col' + 1 + } + drop age_grp + } + drop pct1 +} +matrix colnames stats = all_mean all_q1 all_q2 all_q3 all_q4 all_q5 under45_mean under45_q1 under45_q2 under45_q3 under45_q4 under45_q5 age45to64_mean age45to64_q1 age45to64_q2 age45to64_q3 age45to64_q4 age45to64_q5 age65to84_mean age65to84_q1 age65to84_q2 age65to84_q3 age65to84_q4 age65to84_q5 +matlist stats + +* Export full-precision results without changing the loaded source data or stats matrix. +* V3 retains the v2 layout and all 18 chart styles: survey 2015-2023, +* simulation 2015-2026, with all chart axes covering 2015-2023. +* CSV generation does not itself update workbook cells or native chart caches. +preserve +clear +svmat double stats, names(col) +gen year = ${start_year} + _n - 1 +export delimited using "${validation_dir}/simulation_validation_stats.csv", replace +restore diff --git a/validation/consumption/consumption_surv_v3.do b/validation/consumption/consumption_surv_v3.do new file mode 100644 index 000000000..16c0607aa --- /dev/null +++ b/validation/consumption/consumption_surv_v3.do @@ -0,0 +1,106 @@ +*************************************************************************************** +* PROJECT: SUSTAINWELL +* DO-FILE NAME: consumption_surv.do +* DESCRIPTION: GENERATE SUMMARY STATISTICS FROM SURVEY DATA FOR VALIDATING +* PROJECTION OF CONSUMPTION +*************************************************************************************** +* COUNTRY: UK +* AUTHORS: Justin van de Ven +* LAST UPDATE: 23 Oct 2026 - portable v3 replication +*************************************************************************************** + + +/********************************************************************** +* set-up +**********************************************************************/ +* Optional arguments: input directory, then CSV output directory. +* With no arguments, use the local paths below. Workbook cells are refreshed separately. +args input_dir output_dir +if (`"`input_dir'"'=="" | `"`output_dir'"'=="") { + di as error "Supply the source-data directory and a separate output directory." + exit 198 +} +set more off +global data_dir `"`input_dir'"' +global validation_dir `"`output_dir'"' +capture mkdir "${validation_dir}" +* V3 retains the original income screens and national annual income quintiles. +* Survey uses weighta; simulation is unweighted. Age 65+ denotes 65-84. +* The 2015 simulation is initialisation and must be exported as missing. +global start_year = 2015 +global end_year = 2023 + + +/********************************************************************** +* load data +**********************************************************************/ +use "${data_dir}/lcfs_sorted.dta", clear // file generated by collect_lcf.do +* Preserve the original survey income screen: nominal weekly disposable income. +* Simulation uses a monthly screen; these thresholds are not harmonised. +* Use direct personal net incomes and the same structural BU scope as estimation. +confirm variable income_definition income_scope_ok +assert income_definition=="personal_net_ct" +keep if income_scope_ok==1 & inrange(na,1,2) +drop if (disp_inc < 10.0) +gen cons_to_inc = consmpn / disp_inc + + +/********************************************************************** +* analysis +**********************************************************************/ +* Annual income quintiles are defined over ALL ages in each dataset separately. +* Each age-specific result then subsets those national quintiles; it does not +* recalculate income quintiles within an age group. +* All-age results retain missing reference ages. Age-specific results exclude them. +* The older band is 65-84, even where the historical workbook label reads 65+. +* Each reported statistic is the mean of unit-level C/Y, not mean(C)/mean(Y). +matrix stats = J(${end_year} - ${start_year} + 1, 24, .) +forvalues yy = $start_year / $end_year { + + local col = 1 + xtile pct1 = disp_inc if (year==`yy') [aweight=weighta], nq(5) + forvalues aa = 1/4 { + + if (`aa'==1) { + gen age_grp = 1 + } + else if (`aa'==2) { + gen age_grp = (age>=0 & age<=44) + } + else if (`aa'==3) { + gen age_grp = (age>=45 & age<=64) + } + else { + gen age_grp = (age>=65 & age<=84) + } + + sum cons_to_inc if (age_grp & year==`yy') [aweight=weighta], mean + matrix stats[`yy'-${start_year}+1,`col'] = r(mean) + local col = `col' + 1 + + forvalues qq = 1/5 { + + sum cons_to_inc if (age_grp & pct1==`qq' & year==`yy') [aweight=weighta], mean + matrix stats[`yy'-${start_year}+1,`col'] = r(mean) + local col = `col' + 1 + } + drop age_grp + } + drop pct1 +} +matrix colnames stats = all_mean all_q1 all_q2 all_q3 all_q4 all_q5 under45_mean under45_q1 under45_q2 under45_q3 under45_q4 under45_q5 age45to64_mean age45to64_q1 age45to64_q2 age45to64_q3 age45to64_q4 age45to64_q5 age65to84_mean age65to84_q1 age65to84_q2 age65to84_q3 age65to84_q4 age65to84_q5 +matlist stats + +* Export full-precision results without changing the loaded source data or stats matrix. +* Refreshed v2 uses C4:Z12 for 2015-2023. Workbook v1 remains historical. +* The personal-net-income definition and weighta differ from the historical +* workbook's expenditure-allocated income and weighta/na; label this in v2. +* The original nominal-weekly income exclusion is retained for continuity. +* CSV generation does not itself write XLSX cells or chart caches. +* After-CT statistics belong to v3, paired with the next revised simulation. +preserve +clear +svmat double stats, names(col) +gen year = ${start_year} + _n - 1 +export delimited using "${validation_dir}/survey_validation_stats.csv", replace +restore diff --git a/validation/consumption/results/comparison_2016_2023.csv b/validation/consumption/results/comparison_2016_2023.csv new file mode 100644 index 000000000..912e94d15 --- /dev/null +++ b/validation/consumption/results/comparison_2016_2023.csv @@ -0,0 +1,25 @@ +metric,survey,three_run_mean,seed_606,seed_607,seed_608,run_sd,run_min,run_max +all_mean,0.8522266882214895,0.8819164702381396,0.8824235696164363,0.8817446188599458,0.8815812222380366,0.00044669558830879517,0.8815812222380366,0.8824235696164363 +all_q1,1.338870438733884,1.4461289176314032,1.4491251659134956,1.4444753787259683,1.4447862082547451,0.0025994771733844845,1.4444753787259683,1.4491251659134956 +all_q2,0.7765462532848522,0.8099656595257092,0.8121980137641559,0.8090229511956015,0.8086760136173703,0.0019410423759491497,0.8086760136173703,0.8121980137641559 +all_q3,0.7777404389979764,0.7585493396402845,0.758105051120763,0.7587621131805885,0.7587808546195018,0.000384879236666598,0.758105051120763,0.7587808546195018 +all_q4,0.7353218366985208,0.7334019049590137,0.7321353869388509,0.7350683760296433,0.7330019519085471,0.0015068437489036053,0.7321353869388509,0.7350683760296433 +all_q5,0.6322620100145939,0.6614020907501513,0.6603932260036048,0.6612500928803191,0.66256295336653,0.0010928205349835514,0.6603932260036048,0.66256295336653 +under45_mean,0.7563549448591624,0.9265779257896355,0.9257685422978216,0.9264614968840342,0.9275037381870508,0.0008734374396853657,0.9257685422978216,0.9275037381870508 +under45_q1,1.1652837160805039,1.5163790303247153,1.5158344212691088,1.5151903989180047,1.5181122707870318,0.0015351817717584183,1.5151903989180047,1.5181122707870318 +under45_q2,0.620880314408079,0.6877611683810174,0.6880492941900157,0.6874065105774433,0.6878277003755933,0.00032651580800107104,0.6874065105774433,0.6880492941900157 +under45_q3,0.6963440372881742,0.695136837966463,0.6956543744264426,0.6958374699379419,0.6939186695350044,0.0010589295241585,0.6939186695350044,0.6958374699379419 +under45_q4,0.7080741252428925,0.7113856990734297,0.708875830102957,0.7139143159878227,0.7113669511295095,0.00251929526198277,0.708875830102957,0.7139143159878227 +under45_q5,0.6166107412225054,0.6661612985288368,0.6638399313222894,0.6657902397166167,0.6688537245476041,0.0025274085756259316,0.6638399313222894,0.6688537245476041 +age45to64_mean,0.976912404784198,0.9099829947248019,0.9121661874656517,0.9085268496836567,0.909255947025098,0.0019255242509762967,0.9085268496836567,0.9121661874656517 +age45to64_q1,1.8934940624570356,1.6345548150584757,1.6502407594367567,1.6220890108226622,1.6313346749160076,0.014349467391183665,1.6220890108226622,1.6502407594367567 +age45to64_q2,1.0016278862095314,0.9962627553812314,1.0001156914729226,0.9923093594013812,0.9963632152693904,0.0039041355310286655,0.9923093594013812,1.0001156914729226 +age45to64_q3,0.8952630089538323,0.8768167209131301,0.8759631270173576,0.8779018067048416,0.8765852290171912,0.0009898540832263575,0.8759631270173576,0.8779018067048416 +age45to64_q4,0.7710081845823971,0.7997691936266024,0.7990072697734801,0.7990661218667494,0.8012341892395778,0.001269064616853017,0.7990072697734801,0.8012341892395778 +age45to64_q5,0.64690350410462,0.6688480872367008,0.6689168009316686,0.6695511238311431,0.6680763369472906,0.0007397906914140902,0.6680763369472906,0.6695511238311431 +age65to84_mean,0.8622446684875749,0.8011695612783954,0.8006573232673604,0.8026893588057207,0.8001620017621053,0.0013392812406063021,0.8001620017621053,0.8026893588057207 +age65to84_q1,1.1368223234891643,0.9765342834302599,0.9764559801056238,0.9797235365318833,0.973423333653273,0.0031508312610958604,0.973423333653273,0.9797235365318833 +age65to84_q2,0.823382148296001,0.8599670002852959,0.8611917734691668,0.8600412847593707,0.8586679426273498,0.001263554180414541,0.8586679426273498,0.8611917734691668 +age65to84_q3,0.7770263597386602,0.7773460660165735,0.7751426266292263,0.7784439635602303,0.7784516078602639,0.0019082383129775777,0.7751426266292263,0.7784516078602639 +age65to84_q4,0.7344226733351727,0.6950053538642893,0.6948548501168456,0.6978392102236551,0.6923220012523674,0.0027616819588269716,0.6923220012523674,0.6978392102236551 +age65to84_q5,0.6392836863094074,0.6237315683843143,0.6241391221900593,0.6229050881035637,0.6241504948593197,0.0007157755061844724,0.6229050881035637,0.6241504948593197 diff --git a/validation/consumption/results/individual_run_statistics.csv b/validation/consumption/results/individual_run_statistics.csv new file mode 100644 index 000000000..2c863902d --- /dev/null +++ b/validation/consumption/results/individual_run_statistics.csv @@ -0,0 +1,37 @@ +all_mean,all_q1,all_q2,all_q3,all_q4,all_q5,under45_mean,under45_q1,under45_q2,under45_q3,under45_q4,under45_q5,age45to64_mean,age45to64_q1,age45to64_q2,age45to64_q3,age45to64_q4,age45to64_q5,age65to84_mean,age65to84_q1,age65to84_q2,age65to84_q3,age65to84_q4,age65to84_q5,year,seed +,,,,,,,,,,,,,,,,,,,,,,,,2015,606 +1.006012343132448,1.520387670907318,.9904631363211749,.9058314698283921,.864677217763488,.7481352672653672,.9808532632759902,1.528428558880693,.8011453431893262,.7882734281208362,.8230725774886959,.73199496039565,1.084954056468561,1.848116212847676,1.19527668602985,1.036844789861875,.9320394319052501,.7698114566388156,.9885419241600435,1.072260998807666,1.06386057657948,.9775514206622796,.8525651746081111,.712736056974301,2016,606 +.9303350636083966,1.512393322282647,.87105218792891,.8043781194521455,.7633249549208215,.7004194613861952,.9943891794059898,1.5970971968681,.7530786704629828,.7691793637634334,.7467476506143632,.7129500363715167,.9525187705120739,1.686669950862746,1.04610035526592,.9426716436554845,.841853188236505,.7064458627881957,.8228371690332111,1.029715190910995,.9335564730368602,.7565513919957363,.7089308350642279,.6505543299019336,2017,606 +.9872585170619278,1.692262304471723,.8775238502445546,.8209287525530328,.8132598370726813,.7322199002362111,1.054823773419422,1.789782211064019,.7519940234190925,.768413054265085,.8021672805825548,.7309974387355216,1.019027522090932,1.975397806106643,1.092598638073402,.9407728619188604,.8737138174809496,.7435375488067508,.8676831571244347,1.056460273340126,.9177303676059525,.856510033316607,.7645842878869581,.6985742009520156,2018,606 +.9583801029887379,1.565559187605789,.8608815655329065,.8319945149561225,.8163995257432856,.7169788254799613,1.008536625557977,1.674947501918321,.7346364390884623,.7648671320578118,.7786498482671349,.7220451312050218,.9684184663892487,1.692644714395393,1.069371543262365,.9201489429904055,.8882827789366802,.7116298096772636,.8773787032588226,1.035841975810117,.8995014269357081,.8819674148650493,.7771003160258414,.7207764379680157,2019,606 +.7776947714923492,1.186123040680878,.7530573461160013,.7081623011096962,.6610727231121726,.5797648814102921,.724119776918985,1.107002613736758,.6192252082501685,.584015587720666,.6027307619773586,.567711504166728,.8858320164783902,1.613055900039737,.969624466742971,.8390816049432276,.7425862693565741,.5955789980115013,.7843326524969056,.9344607034569267,.7880928099626343,.7903894834207845,.6663518324494362,.5624179813838515,2020,606 +.7761019697672054,1.283466525870546,.705577130632271,.6610735856406598,.6397388655275673,.5905627993194726,.8248883489100395,1.331761705930701,.6044969751375515,.6249251716999055,.6256960034143908,.6047842873615377,.8012271643415854,1.579236207941775,.8733728138783328,.7620931858294059,.7129186647305936,.58712027144184,.691870039261511,.9117946467258605,.7409841368087638,.6550535494970454,.5818072239550794,.5752271148699818,2021,606 +.8717709038342274,1.672152248939691,.7299177061595131,.674013705138528,.6653446025040741,.6173817905818823,1.028895169568446,1.917958884166133,.62437961280939,.6332614863483275,.6785790581336003,.6259195338261625,.8078190897927446,1.428121060681727,.8810337007865734,.8020761711912069,.710248849364149,.6338087432741704,.6907880747484259,.8805920310050296,.7835327127696802,.644065893126523,.6011382567561228,.5319119103315497,2022,606 +.7518348850461979,1.160657026549373,.7091111871779158,.658457960287527,.6332653688667166,.597682882349457,.7896422013257228,1.179696697588146,.6154380811631519,.6322997714354757,.6133634603455574,.6143165585161769,.7775324136516775,1.378684222618356,.8735473277439665,.7640158157483949,.6904151581771399,.6034017168148116,.6818268660555283,.8905220207882698,.7622756840542548,.6390518261497854,.6063608741889875,.5409149451388253,2023,606 +.7584331753067735,1.217226331228932,.6970743025269939,.6443438147320555,.6234578300991446,.6099881633601051,.8106851907182886,1.261562883736401,.621437675563701,.5973464787429106,.6097289648702612,.6194247271150476,.7808181843770233,1.426535573367656,.8468485902323507,.767927499006781,.685092951262173,.6209352812754659,.6648270317437586,.8628393378474809,.7469657861494916,.64501302857092,.5731136202688019,.5508105490344882,2024,606 +.7457136382314626,1.203597490911791,.686652923128064,.640543030175045,.6090909216363019,.5886094693703073,.7906344605101951,1.230208005278694,.5948362045371838,.5972854989689298,.5848556913668398,.5907350714585864,.7710273291489309,1.392889340056666,.8288042825689308,.7731348716764844,.688523327592764,.598974299462218,.6573014161551702,.9089067255494476,.747837474200293,.6170380550342767,.5671862005204183,.5494794573917285,2025,606 +.7399386242507494,1.162419936577609,.7012358588011809,.6288037842808304,.6199412139169374,.5872923276771896,.7817073991299999,1.178754542790828,.6251441797910856,.5925316301176894,.5817946890098097,.603034484830192,.770825168251867,1.340680786117636,.8908880426500163,.7506234379855762,.7012126918423407,.5970863752873451,.6507600784350439,.9290638876675862,.7174025305140945,.6093690734931999,.581470640843517,.5472601578083772,2026,606 +,,,,,,,,,,,,,,,,,,,,,,,,2015,607 +1.004665508848094,1.519308255073549,.983543350957272,.9110065657762073,.8633592010115689,.7461101714218739,.9824628371645472,1.52933841944919,.7969579984930074,.797729265364324,.8255083296905985,.7331695553606956,1.084008933963453,1.841216119078085,1.206607883880829,1.029353478602511,.9295405624354065,.7673954930426418,.9860259814369022,1.065429558744654,1.054886570396338,.9829230218815969,.8519356102385806,.7077485130452291,2016,607 +.9300904631741748,1.513746267808927,.8706396007845195,.8019532451011638,.7642955165809195,.6997752702743677,.9961786005698284,1.607783543874107,.7512365501302285,.7616710008107307,.7491154155606846,.7125950385805521,.9533982250637681,1.672912877965492,1.046864581345816,.9536286716847751,.8432040002894097,.7059939969724235,.818882889084518,1.026727895912497,.927919090961431,.7520756266538113,.7085446339614433,.647165004883103,2017,607 +.9878702137629143,1.687410038427028,.8815001407993659,.818844819537583,.8208746453560957,.7306746788684552,1.054141303879324,1.78678942048478,.7598433484140422,.7690117434101619,.8013634824054461,.7310468854739515,1.019444325851764,1.956202283975563,1.099462040901677,.9318749235353445,.8844205132907911,.7403941969621585,.8675549466297424,1.053385077892466,.9197025952147337,.8509164574078383,.7689608064018377,.6908893187059796,2018,607 +.9601668764074004,1.561570880675437,.8641971068469239,.8346363331058292,.814540136842081,.7258475291718997,1.014199203746017,1.679532018819512,.7368924683203052,.7651757380893911,.786907203826207,.7328073256885406,.971765028397914,1.685060927983035,1.080862544703524,.9304209205820766,.8785634594715622,.7230736746079495,.8843319419654269,1.05544715992887,.9079482046496855,.8842980665279133,.7809701038628282,.7110831164647191,2019,607 +.7791790619739032,1.188742763706365,.7565549447771356,.7047363812817342,.6651182375654685,.579919401798641,.7261334996650424,1.108613135108706,.6319975248458948,.5758194837753068,.6112645665349695,.5633836897493583,.8812509775501246,1.593642279846391,.9499028246338461,.8365503300582608,.7430843521610109,.5958500313430674,.7939065218039736,.9522955376722246,.8002053544113737,.7983027447604347,.6632951265568973,.5757674976571727,2020,607 +.7700246578132647,1.261836155823242,.7031545091802099,.6557942375130229,.6371503486499396,.5921356209867339,.8192761514269348,1.308401299041367,.6105761106519663,.6212982174409225,.6255523286777426,.6096946162458827,.7853129942768386,1.505389444290468,.8634344875762189,.7634592953424154,.6925059073865414,.5854916744010614,.6919549090604954,.9196451952876393,.7387426192227703,.641194416106656,.5938867802554335,.5762789432200597,2021,607 +.8702475071476943,1.661538001571624,.7220160802160707,.6788414751689108,.6707245299038345,.6180126289474981,1.029345922558513,1.916734125413066,.6107124116133076,.6376676654151405,.6928249645967874,.6315034046755164,.8023357712371922,1.383489727069893,.8514412885075555,.8124488017950129,.7159280534555663,.6366144075780955,.6942831502148846,.8698259273015565,.7918627163098624,.659401381363741,.5964398165421368,.5247074107854811,2022,607 +.7517126617521206,1.161650666721574,.6905778760033143,.664283847960257,.644484392327238,.5975254415730838,.7899544560620672,1.184331229153309,.6010356721507946,.6383266451975576,.6187782366101457,.6121214019584367,.7706985411281991,1.338798426372371,.8398992236615833,.7654780320383364,.7052821264437077,.6015955157417476,.6845745302498222,.8950319395151589,.7390631269087712,.6584399937798512,.6186808039700836,.5496009000667653,2023,607 +.7549563494930586,1.208916974698131,.6904373319241296,.6362463127264512,.6355298556579468,.6036264276183982,.8074248469357931,1.247058286436806,.6096393778418514,.5895648759498584,.6268034520377674,.6185894818384186,.7745240968333882,1.412151519750709,.8526023978943398,.7471767693339733,.6895567153268214,.6113477838291435,.6639452628519582,.8589626553827505,.7266924289539634,.6566792689148397,.5886826754572662,.5553405862339835,2024,607 +.7463596224460121,1.197547292463813,.7012516151106629,.6221833423963875,.6260878067846182,.5846549768108243,.7891624334495771,1.209596201181515,.6134460090914238,.5800746204599065,.6102540482502946,.598347413023183,.7808967206856904,1.450577170171697,.867279713683331,.7616153664674964,.6962979113146902,.5952010487549916,.6493297137641439,.895629974095992,.7382219592131928,.6041298002204447,.5745361396891031,.5334357151019198,2025,607 +.7411043083677263,1.161839260175349,.6986621864524389,.6310901723021553,.6279621818785867,.5859009577044182,.7848535811569269,1.17259784261461,.6186807092413013,.5997223959520426,.6038696918011489,.6056484147181382,.7717867370501802,1.382865867843439,.8566279058458482,.7557073807212451,.7167541360645509,.5935964113960757,.6518239004086298,.9252492544477555,.7348198660695674,.6160744804729515,.5722575100517477,.5405938635346127,2026,607 +,,,,,,,,,,,,,,,,,,,,,,,,2015,608 +1.00401479501719,1.521179763285077,.9812448224392766,.9117738186394855,.8570686932653189,.7487393680755087,.9842101985758567,1.533064746078397,.8009103747566094,.7976086687154677,.823234035611313,.736539369354664,1.081265455334482,1.826632888896728,1.196327632854855,1.037951867564543,.923744812897577,.7715945286110869,.9860726559469403,1.080858988889802,1.048758915161395,.9850336963582077,.8462980813740079,.705384257612592,2016,608 +.9313489802603794,1.517073091857304,.8710485476283993,.8035206416178383,.7652584481699296,.6998014747196405,.9976852958667366,1.610005057376596,.7556774681843523,.7692539808946895,.7420487986364975,.71559076516508,.9510334076495619,1.670450302529929,1.05405885263133,.9370235603730127,.847235403024175,.7030537833216483,.8228290819793306,1.035371441115104,.9277116426410927,.7553554775842121,.71575148122716,.6504753246624894,2017,608 +.9877918251019882,1.693719445316928,.8705082824805664,.8229246072331688,.819105121047171,.7326253551719688,1.056072212469987,1.803531904983914,.7379510250860245,.7664851896725979,.8123637636541285,.7309984906282135,1.020730602640103,1.969601333838947,1.084989165948913,.9481272741668993,.8732672558108034,.7463868617752398,.8670143950867792,1.0606293343971,.9190073357258259,.8541571911188213,.7672479567664467,.676912470310295,2018,608 +.9530569966361943,1.535939547207867,.8612239752079287,.8263004548559457,.8127525705178837,.7289630697820597,1.005686298389041,1.657059487710959,.7399325292862218,.7563716011190005,.7840270492030181,.7344211037187706,.9677225158986996,1.675799999495329,1.076816763466873,.9102427906474051,.8836521563573696,.7221578731522208,.8795042758341962,1.045970612692941,.9018278083164398,.8896952715790535,.7636730844962216,.7226396730093627,2019,608 +.7770037975970523,1.177996513962126,.7529068988773625,.7072934353816603,.6674478155328587,.5789578528169845,.7281875349768224,1.11057551792939,.628982026760698,.5699612393725537,.6154828773975575,.5698161586572271,.8789569038828783,1.573275153848627,.9601635549133378,.8422689827775878,.750308828190284,.5927651128836817,.7856821575002864,.9207178773947909,.7876165618910234,.8040406079246447,.6608555860761413,.5660339495810596,2020,608 +.7735452847528907,1.270794400916598,.7102726421996577,.6569908046053462,.6409734933079624,.58866194952069,.8230941866486443,1.314173044805709,.6187122730305298,.6185747414425092,.6324721042168924,.60692167623416,.7922098147492955,1.544764717400669,.8761993281063604,.764870679241839,.7023281164158307,.5781923144924559,.69001476392731,.9125940139043316,.7417816011980176,.6371768863568609,.5921072265592174,.580563341266063,2021,608 +.8703363396490744,1.669661475480958,.7213387833126671,.6764477382856909,.6629266410212886,.6212635159448199,1.028981392215366,1.914182984359618,.6125829666963166,.640513833074042,.6750376006938018,.6361581008082549,.8029424754767031,1.433147014694981,.8559070159217198,.8022705401470865,.7140759609378894,.6300808195876495,.6919382903053571,.8738374451456322,.7896932016305931,.6479298190796809,.5914375550830654,.5420900214790799,2022,608 +.7555517588895236,1.171925428011104,.7008641567931041,.6649953363368787,.6384828324059635,.6014910409005678,.7961127863539526,1.202305423051671,.6078729392039933,.6325801019891742,.6062693796228676,.6203841318144625,.779186400569061,1.357005988622851,.8664434083117345,.7699261372191554,.7152609802826928,.6003794017543417,.6782403935166426,.8574069556864825,.7529464744544103,.6542239128806308,.6012050384366792,.549104920953616,2023,608 +.7563719616630533,1.221230950851974,.6872295986614433,.6451011253265417,.6256460562344694,.6026520772408379,.8002838096015504,1.239269711157066,.6086329926397779,.5924483216738656,.6072147325038855,.6075166630610709,.7877328061415344,1.497107096642641,.8352887630649222,.7581014411278679,.6943723004333151,.6175009802965764,.664291590060605,.8728787226691133,.7285049203936128,.6646369003230204,.5744453657097769,.5552887817326281,2024,608 +.750307399919069,1.213147449534908,.6951112326811703,.633020357201437,.6195899028543984,.59062307983678,.7992674405028223,1.239199635790563,.6030202367907197,.5974812963297241,.6019257641998914,.5977931285520206,.7754095520516746,1.400844514559788,.8667602028955917,.7558251236754421,.6869504278277171,.6026907051770711,.6482342138907495,.8851227834023284,.7308830364102235,.6086026334093781,.571323186458063,.5423640108333444,2025,608 +.7407769097659601,1.168739582385098,.69981928896153,.6307622365251198,.6122668210331584,.592228451292747,.7808808577625804,1.181362778625093,.6026089596504598,.5915835034460053,.5917739863431937,.6170552263146866,.7799418264952847,1.393500442939513,.8855109259243056,.7751347540514923,.6960892116582227,.5958433330740969,.6509261574864885,.8915924427409967,.7473426869189895,.6147801236413357,.5623985304824041,.5505867730826139,2026,608 diff --git a/validation/consumption/results/simulation_validation_stats.csv b/validation/consumption/results/simulation_validation_stats.csv new file mode 100644 index 000000000..435d3a067 --- /dev/null +++ b/validation/consumption/results/simulation_validation_stats.csv @@ -0,0 +1,13 @@ +year,all_mean,all_q1,all_q2,all_q3,all_q4,all_q5,under45_mean,under45_q1,under45_q2,under45_q3,under45_q4,under45_q5,age45to64_mean,age45to64_q1,age45to64_q2,age45to64_q3,age45to64_q4,age45to64_q5,age65to84_mean,age65to84_q1,age65to84_q2,age65to84_q3,age65to84_q4,age65to84_q5 +2015,,,,,,,,,,,,,,,,,,,,,,,, +2016,1.004897548999244,1.520291896421981,.9850837699059077,.9095372847480282,.8617017040134586,.7476616022542499,.9825087663387979,1.530277241469427,.799671238812981,.7945371207335427,.8239383142635358,.7339012950370032,1.083409481922165,1.838655073607496,1.199404067588511,1.034716712009643,.9284416024127445,.7696004927641814,.9868801871812952,1.072849848814041,1.055835354045738,.9818360463006948,.8502662887402331,.7086229425440407 +2017,.9305915023476503,1.514404227316293,.8709134454472763,.8032840020570493,.7642929732238902,.6999987354600677,.9960843586141849,1.604961932706268,.7533308962591878,.7667014484896179,.7459706216038485,.7137119467057161,.9523168010751347,1.676677710452722,1.049007929747689,.9444412919044241,.8440975305166966,.7051645476940891,.8215163800323532,1.030604842646199,.9297290688797947,.7546608320779198,.7110756500842771,.649398219815842 +2018,.9876401853089435,1.691130596071893,.8765107578414956,.8208993931079283,.8177465344919826,.7318399780922117,1.055012429922911,1.793367845510905,.7499294656397196,.7679699957826149,.8052981755473766,.7310142716125623,1.019734150194266,1.967067141307051,1.092349948307997,.9402583532070348,.8771338621941814,.7434395358480498,.867417499613652,1.056824895209897,.9188134328488374,.8538612272810889,.7669310170184142,.6887919966560968 +2019,.9572013253441108,1.554356538496364,.8621008825292531,.8309771009726324,.8145640777010833,.7239298081446401,1.009474042564345,1.670513002816264,.7371538122316631,.7621381570887346,.7831947004321199,.7297578535374442,.9693020035619542,1.684501880624586,1.075683617144254,.9202708847399624,.8834994649218707,.718953785812478,.8804049736861486,1.045753249477309,.9030924799672778,.885320250990672,.7739145014616304,.7181664091473658 +2020,.7779592103544349,1.18428743944979,.7541730632568332,.7067307059243636,.6645462587368333,.5795473786753059,.7261469371869499,1.108730422258285,.6267349199522538,.5765987702895089,.6098260686366285,.5669704508577712,.8820132993037976,1.593324444578252,.9598969487633849,.8393003059263586,.7453264832359562,.5947313807460834,.7879737772670552,.9358247061746474,.7919715754216772,.7975776120352881,.6635008483608248,.5680731428740279 +2021,.7732239707777869,1.272032360870129,.706334760670713,.6579528759196763,.6392875691618231,.5904534566089655,.8224195623285396,1.318112016592592,.6112617862733492,.6215993768611124,.6279068121030086,.6071335266138601,.7929166577892399,1.543130123210971,.8710022098536374,.7634743868045534,.7025842295109884,.5836014201117857,.6912799040831055,.9146779519726104,.740502785743184,.6444749506535207,.5892670769232434,.5773564664520349 +2022,.8707849168769988,1.667783908664091,.7244241898960836,.6764343061977099,.6663319244763991,.6188859784914,1.029074161447442,1.916291997979606,.6158916637063382,.6371476616125032,.6821472078080631,.6311936797699779,.8043657788355466,1.4149192674822,.8627940017386161,.8055985043777688,.7134176212525348,.6335013234799718,.6923365050895559,.8747518011507395,.7883628769033786,.6504656978566482,.596338542793775,.5329031141987036 +2023,.7530331018959474,1.164744373760684,.7001844066581113,.6625790481948876,.6387441978666394,.5988997882743695,.7919031479139141,1.188777783264375,.6081155641726466,.6344021728740691,.6128036921928569,.6156073640963587,.7758057851163125,1.358162879204526,.8599633199057615,.7664733283352957,.7036527549678467,.601792211436967,.6815472632739977,.880986971996637,.7514284284724789,.6505719109367557,.6087489055319167,.5465402553864022 +2024,.7565871621542951,1.215791418926346,.6915804110375223,.6418970842616828,.6282112473305203,.6054222227397804,.8061312824185441,1.249296960443424,.6132366820151101,.5931198921222115,.6145823831373046,.615176957338179,.7810250291173153,1.445264729920335,.8449132503972042,.7577352364895408,.6896739890074365,.6165946818003952,.6643546282187739,.8648935719664482,.7340543784990227,.65544306593626,.5787472204786149,.5538133056670332 +2025,.7474602201988478,1.204764077636837,.6943385903066325,.6319155765909564,.6182562104251061,.5879625086726373,.7930214448208649,1.226334614083591,.6037674834731092,.5916138052528536,.5990118346056753,.5956252043445966,.775777867295432,1.41477034159605,.8542813997159512,.7635251206064743,.6905905555783903,.5989553511314269,.6516217812700212,.8965531610159226,.7389808232745697,.6099234962213665,.5710151755558615,.5417597277756643 +2026,.7406066141281453,1.164332926379352,.6999057780717166,.6302187310360351,.620056738942894,.588473912224785,.782480612683169,1.17757172134351,.6154779495609489,.5946125098385791,.5924794557180507,.6085793752876723,.7741845772657773,1.372349032300196,.8776756248067233,.7604885242527711,.7046853465217048,.5955087065858392,.6511700454433874,.9153018616187794,.7331883611675504,.6134078925358291,.5720422271258897,.5461469314752013 diff --git a/validation/consumption/results/simulation_validation_stats_sd.csv b/validation/consumption/results/simulation_validation_stats_sd.csv new file mode 100644 index 000000000..c7366507f --- /dev/null +++ b/validation/consumption/results/simulation_validation_stats_sd.csv @@ -0,0 +1,13 @@ +year,all_mean,all_q1,all_q2,all_q3,all_q4,all_q5,under45_mean,under45_q1,under45_q2,under45_q3,under45_q4,under45_q5,age45to64_mean,age45to64_q1,age45to64_q2,age45to64_q3,age45to64_q4,age45to64_q5,age65to84_mean,age65to84_q1,age65to84_q2,age65to84_q3,age65to84_q4,age65to84_q5 +2015,,,,,,,,,,,,,,,,,,,,,,,, +2016,.001018789277526,.0009394228603165,.0047983325863561,.0032321768830002,.0040660648646903,.0013771120753006,.0016789388817518,.0024565418828711,.0023526702524028,.0054248520484695,.0013620677340907,.0023589182716033,.0019159727670129,.0109682504266706,.0062607786406598,.0046775645045759,.0042551099832048,.0021074520738483,.0014392956497454,.0077315513901484,.0075954056643898,.0038577518495332,.0034509549547725,.00375309321427 +2017,.0006672982349068,.002408265735539,.0002371634192645,.0012296351555685,.0009667491337391,.0003645948394106,.0016500779043288,.0069010385387675,.0022311771960255,.0043566552326969,.0035968179340478,.0016367574531164,.001195275738366,.0087406933794031,.0043908856575487,.00844281775314,.002800152889658,.0018418850007099,.0022806736459559,.0043899121374853,.0033162517452004,.0023173299578509,.0040539900691188,.0019344242447874 +2018,.0003328500918213,.0033034416526198,.0055655192469339,.0020400523015418,.0039850526181272,.0010293396606069,.0009791810116652,.0089286212592401,.0110912242017233,.001320262875857,.0061321631051439,.0000282493289407,.0008877609201646,.0098454871038834,.0072396417245019,.0081383821901935,.0063143738790242,.0029975344527696,.0003549358074728,.0036358664589297,.001000309541836,.0028085082885268,.0022054062393771,.0109821087881294 +2019,.0036986125968876,.01607376197824,.0018234386167028,.00426005457237,.001823595480793,.0062180196467114,.0043331804009387,.0118744368422603,.0026576998185845,.0049963672037529,.0041911315374904,.0067279740052634,.0021612392922211,.0084362613448051,.0058287043132697,.0100896176467612,.0048614584974173,.0063592564737138,.0035630499004559,.0098043993267402,.0043630905589572,.0039640368508597,.0090779282091425,.0062046504837786 +2020,.0011114808640436,.0056033512116473,.0020641410502851,.0017809351471876,.0032258054309548,.0005163571349619,.0020339123210015,.001789337391054,.006676086770091,.0070595072403061,.0064966198191957,.0032796393197594,.003500377714238,.0198922775549618,.0098635237617951,.0028655924031661,.0043220183425056,.0017082218084138,.0051820251103009,.0158329572319802,.0071346366687313,.006854390064534,.0027538921809773,.0069044281549946 +2021,.0030513705362223,.010868193765789,.0036190408780504,.0027680435461871,.0019511176480014,.0017394151990706,.0028662743461329,.0121681459788338,.0071324110117019,.0031859086397432,.0039543115293695,.0024620099259838,.0079805966271174,.0369505081029577,.0067044843963882,.0013888082042527,.0102087884214986,.0047546713641542,.0010964649702793,.0043202866322188,.001575635426652,.0093789765668642,.0065214076371132,.0028265916355468 +2022,.0008550441586223,.0055506310147117,.0047695621891598,.0024139130436506,.0039916000881739,.002083027248428,.0002392679717984,.0019263858226673,.0074100407597828,.003654030134463,.0094152189421615,.0051263057458106,.0030060006543392,.0273345397131995,.0159530763915441,.0059333275530075,.0028962731456092,.0032776246283893,.0017812409690512,.0054409817511678,.0043214074853849,.0079760460597384,.0048511437328217,.008733593330411 +2023,.0021820768597535,.0062387887693496,.0092853352636385,.0035866527686217,.0056140765741089,.002245470892508,.003648995423672,.0119422568791766,.0072042693242527,.0034015817744402,.0062731874729381,.0042799311271078,.004499652658407,.01996804903859,.0177353428609836,.0030783008317883,.0125027939909428,.0015207281080371,.0031763115913326,.0205450168805273,.0116804987055575,.0101969652182124,.0089792881408128,.0048779693886176 +2024,.0017483743515911,.0062811409924025,.0050209083784414,.004908339234575,.0064318429934613,.0039841184690984,.005319977833988,.0113139352965241,.0071200719225132,.0039340298241788,.0106581534470295,.0066471414891632,.006606783556067,.0454692037553036,.0088175757983549,.0103802107332335,.0046407860430231,.0048575775386447,.000444251563504,.0071818619132709,.011218271566607,.0098701688936364,.0086300831806242,.0026005925233127 +2025,.0024867947584774,.0078652348090186,.0073299511649054,.0092295687320923,.0085765714483252,.0030361953231557,.0054590349386197,.0151770617932383,.0093273784950547,.0099937066905106,.0129474851749238,.0042440378828272,.0049449938741674,.0312636838812717,.0220653596493892,.0088114819762855,.0050048911619761,.0037448641643762,.0049491129826064,.0119188162827198,.0085026552436325,.0065547135338453,.0036846376324881,.0080389231353334 +2026,.0006012115420858,.0038273044216221,.0012890142025228,.0012363014230006,.0078483181345284,.0033251165859143,.0020961935003955,.0045005917110022,.0116039772868696,.0044506109823051,.0110543974208708,.0074557491467243,.0050090510734539,.0279362114302911,.0184250699092966,.0129362148220645,.0107612393836117,.0017688818941845,.0005723113658764,.0206213545697677,.0150366085794428,.0035570893081585,.0095378775658027,.0050886162127135 diff --git a/validation/consumption/results/survey_validation_stats.csv b/validation/consumption/results/survey_validation_stats.csv new file mode 100644 index 000000000..b9a2db24d --- /dev/null +++ b/validation/consumption/results/survey_validation_stats.csv @@ -0,0 +1,10 @@ +all_mean,all_q1,all_q2,all_q3,all_q4,all_q5,under45_mean,under45_q1,under45_q2,under45_q3,under45_q4,under45_q5,age45to64_mean,age45to64_q1,age45to64_q2,age45to64_q3,age45to64_q4,age45to64_q5,age65to84_mean,age65to84_q1,age65to84_q2,age65to84_q3,age65to84_q4,age65to84_q5,year +.9376469920551275,1.424380321962701,.856606911477369,.8595696100540643,.8465294454163473,.7007625495328518,.8737875577523273,1.32556421800007,.7406237908021062,.7743381017859863,.7868801141349662,.7015470916567629,1.00449752345006,1.605808981433826,1.085985156930003,1.019306629680039,.8839109541797505,.7195291791908557,.9689891150000987,1.43574542808971,.8448648767922488,.8272553758434122,.9149305031022941,.6264744162003448,2015 +.942729028616368,1.462506219640236,.8645627787518269,.8744461205963507,.8099189071925154,.7015282188215537,.8365471509202226,1.227395789917362,.6686765406103856,.7973242631679727,.7841254634809817,.7019582767750624,1.086847232579837,2.163136170395575,1.178402646030457,1.023563294356311,.8319562016222168,.7059146067937978,.9454967198079448,1.256712635308495,.9044214502245265,.8339733149793775,.8277269056904359,.6849214387866267,2016 +.9136711210407348,1.343777499129268,.8382125675465615,.8545037682014137,.8161447255262222,.7155722416063182,.817193036218725,1.229121614450603,.665473938577386,.7637166853771626,.7843137015218076,.6950799936116919,1.056129107224089,1.871761876792196,1.09661305155227,.9832891073525301,.8420972782541704,.7486831802291942,.9060536337067917,1.065192555918207,.8968891470032898,.8721184944444218,.8462445467714379,.6704423615451408,2017 +.9259494530122817,1.427862169357723,.8326154803586072,.8498112633947064,.8035105747008275,.7151028825934782,.8164714285827066,1.228496786204868,.6879771752772447,.7189001498941472,.7616353393528796,.6966128520089419,1.054968298131574,2.037543475945756,1.022807947970579,.9954397251529998,.8287898094131387,.7221601180311782,.9540922240084034,1.210857810619809,.8982269276871395,.89931329303681,.8479712602461043,.75134384762675,2018 +.9163402217246607,1.51285003633488,.800730479937846,.8119812722416876,.7804995875302391,.6753280201649536,.8187634553966061,1.321097627007919,.6705757862026639,.7226054351017731,.7347525611776816,.663023954510806,1.064554416567154,2.212935378470821,.9909188240133248,.9215241847534621,.8526360385188166,.6991423947587757,.9017538898541921,1.220504519296271,.8521318299409659,.8153588521889312,.7592914566401922,.6386538272321327,2019 +.7026492621627551,1.068664744147674,.6455145661097704,.6464046595080647,.6303312111079434,.5219455483184975,.64248728221787,.9389236722161114,.5322708989268096,.6166108222842616,.6342724299602496,.519952871673999,.822194294626972,1.485005450596423,.8688029461718533,.7483736476556883,.662005090680069,.5493052587795682,.6561671566680527,.8835799739774504,.62724170983724,.5886635037431276,.5707429316961995,.4343226899860834,2020 +.7918890218563854,1.323534920974521,.7231750537354352,.6860398209994171,.6510077806015482,.5754769163615439,.690887425852996,1.11986104049875,.5893825267020673,.587972523395449,.6311886191190701,.5503088495595331,.9181836783381345,2.000547624749156,.9071024423367671,.7954505657623396,.6802213171875049,.5893398322762214,.8116880813193951,1.103927018564602,.7616824875598228,.7155932121367038,.6479199574982905,.6237708581912029,2021 +.802508754908469,1.211629744117138,.7590929470158961,.7661681177685694,.700577070490208,.5749617927524927,.681916864212838,.9425596646338602,.5739215106071704,.7189684157552551,.6698026711626361,.5448036819088474,.9235370429570237,1.726943276972896,.9974492783490816,.8495648617440322,.7391185753101186,.5825606418842628,.8543076711443905,1.141021982498468,.8063501691847448,.7454771449950958,.7024513028732648,.6714582693536481,2022 +.8220766424502614,1.360138176169631,.7484661528228747,.732568489273602,.6905848364386629,.5781804594979135,.7465729154713348,1.314813533714558,.5787641383609053,.6446540033293727,.6645022161678332,.5611454497311615,.8888851678487999,1.650079245733462,.9509259532519178,.8448986848532949,.7312411656731419,.5781220000839622,.8683979713914289,1.212782091730013,.8401134649302785,.7457130623848131,.6730330252654568,.6393561977536738,2023 From c2da15116cbd785b6f29c6bdadf90de6dc798d60 Mon Sep 17 00:00:00 2001 From: Liang Shi Date: Fri, 23 Oct 2026 14:14:48 +0100 Subject: [PATCH 2/5] Keep consumption estimation scripts in shared Drive workflow --- .../RegressionEstimates/consumption/README.md | 37 -- .../consumption/collect_lcfs.do | 601 ------------------ .../consumption/consumption_modelling_lcfs.do | 485 -------------- .../test/stata/export_consumption_fixtures.do | 1 + validation/consumption/README.md | 30 +- 5 files changed, 30 insertions(+), 1124 deletions(-) delete mode 100644 input/regression_files/RegressionEstimates/consumption/README.md delete mode 100644 input/regression_files/RegressionEstimates/consumption/collect_lcfs.do delete mode 100644 input/regression_files/RegressionEstimates/consumption/consumption_modelling_lcfs.do rename input/regression_files/RegressionEstimates/consumption/export_synthetic_fixtures.do => src/test/stata/export_consumption_fixtures.do (97%) diff --git a/input/regression_files/RegressionEstimates/consumption/README.md b/input/regression_files/RegressionEstimates/consumption/README.md deleted file mode 100644 index eeaf57f80..000000000 --- a/input/regression_files/RegressionEstimates/consumption/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# LCFS consumption estimation (FW1a) - -FW1a models log real monthly benefit-unit broad expenditure using LCFS waves indexed 2008–2023. It retains the existing age groups, allows age-specific linear log-income slopes, and uses common quadratic curvature and a reference-adult student indicator. Other controls cover composition, work, pension receipt, housing status and region. The age reference category is under 20 (18–19 in the retained adult sample). - -## Construction and estimation - -`collect_lcfs.do` uses household expenditure P550tp, recorded personal expenditure and the existing benefit-unit housing/residual attribution rule. Benefit-unit own income sums members' P177/P177p personal net income, independently of expenditure shares. The same adult-share allocation of Council Tax or Northern Ireland domestic rates is deducted from both income and broad expenditure. Transfers and exceptional purchases remain included. The active data tags are `personal_net_ct` and `broad_net_ct`. - -`consumption_modelling_lcfs.do` converts weekly amounts to monthly equivalents in 2015 prices using CPIH (ONS L522). It requires complete income scope, positive expenditure/income and one or two adults. Estimation uses `weighta` and covariance clustered by household within survey wave. The trend is centred at 2015; 2008 is the reference year and the 2023 indicator is additionally omitted for collinearity with the trend. The script exports all 65 coefficients, the complete clustered covariance, RMSE, fit statistics, saved estimates, reader tables and age-specific elasticity contrasts. - -The installed v3 estimates have N=97,107, 82,923 clusters, R-squared 0.5523814416590156 and RMSE 0.6457928727473985. The `lcfs_model_sample.dta` working file is saved before the final one/two-adult regression restriction and contains 97,918 rows; it is not exactly `e(sample)`. Elasticity reference incomes are the unweighted percentiles calculated in that log-usable working sample. - -Run from the repository root, supplying an external consumption data root: - -```stata -local source_root "D:/your/consumption-data" -do "input/regression_files/RegressionEstimates/consumption/collect_lcfs.do" "`source_root'" -do "input/regression_files/RegressionEstimates/consumption/consumption_modelling_lcfs.do" "`source_root'" -``` - -The first command requires the original `data/LCFS.../stata` wave folders and filenames listed in the collection script. If prepared `output_lcfs/lcfs_sorted.dta` is already available, only the second command is needed. Both scripts accept an optional second argument for a separate existing export root. They use the current working directory if the first argument is omitted. Raw/prepared survey data and generated intermediate files are not part of this directory. Tested with StataNow 19. - -Install the coefficient/covariance CSV into `input/regression_files/reg_wealth_financial.xlsx`, sheet `FW1a`, and the matching RMSE into `input/regression_files/reg_RMSE.xlsx`, sheet `UK`, entry `FW1a`. Preserve other processes and workbook layouts. The similarly named CSV under `output_writing` is a reader table, not the computational matrix. - -## Synthetic Java–Stata checks - -`export_synthetic_fixtures.do` reads saved m4 estimates and creates a deterministic grid of **700 synthetic cases**, not observed LCFS rows. It spans 14 age bands, two student states, five income levels and five years, with varying region, housing and composition controls. It matches Java's GBP1 monthly income floor, double-precision square and 2023 trend freeze. Future-year indicators remain zero, matching the omitted 2023 indicator. - -```stata -do "input/regression_files/RegressionEstimates/consumption/export_synthetic_fixtures.do" /// - "`source_root'/output_writing/consumption_model_housing_status.ster" /// - "src/test/resources/simpaths/model/consumption_stata_fixtures.csv" -``` - -`ConsumptionRegressionTest` loads the actual workbooks and compares log predictions, RMSE and conditional means with these Stata results. It also checks age boundaries, the income floor and trend freezing. Regenerate the fixtures whenever the estimated model changes. - -See [consumption validation](../../../../validation/consumption/README.md) for the three-run comparison and remaining gaps. diff --git a/input/regression_files/RegressionEstimates/consumption/collect_lcfs.do b/input/regression_files/RegressionEstimates/consumption/collect_lcfs.do deleted file mode 100644 index a7b471f2e..000000000 --- a/input/regression_files/RegressionEstimates/consumption/collect_lcfs.do +++ /dev/null @@ -1,601 +0,0 @@ -/************************************************************************************** -* -* PROGRAM TO COLLECT LCFS DATA FOR CONSUMPTION MODELLING -* First draft adapted from: -* 1 collect_fes_efs_lcfs_v3.do -* -* SCOPE: -* - LCFS waves only -* - Discover local files from LCFS wave folders under ./data -* - Harmonise renamed modern LCFS variables -* - Construct wave-specific benefit-unit files -* - Append wave files into pooled lcfs_sorted.dta -* -* UPDATED 22 OCTOBER 2026: own income and broad expenditure after local tax. -* Council Tax and NI domestic rates use the same adult-share BU allocation. -* Original before-local-tax aggregates are retained for v2 replication and auditing. -* -* NOTES: -* - This draft keeps the original LCFS-style derivations where possible. -* - File discovery excludes quarter and urban/rural files. -* - Region (gor) is optional in later waves. -* -**************************************************************************************/ - -cls -clear all -set more off - - -/************************************************************************************** -* Helper: deterministic LCFS file map -**************************************************************************************/ -capture program drop _get_lcfs_files -program define _get_lcfs_files, rclass - syntax, WAVE(string) - - if ("`wave'" == "LCFS2008") { - return local dvper "2008_dvper_ukanon.dta" - return local dvhh "2008_dvhh_ukanon.dta" - } - else if ("`wave'" == "LCFS2009") { - return local dvper "2009_dvper_ukanon.dta" - return local dvhh "2009_dvhh_ukanon.dta" - } - else if ("`wave'" == "LCFS2010") { - return local dvper "2010_dvper_ukanon.dta" - return local dvhh "2010_dvhh_ukanon.dta" - } - else if ("`wave'" == "LCFS2011") { - return local dvper "2011_dvper_ukanon_v2.dta" - return local dvhh "2011_dvhh_ukanon.dta" - } - else if ("`wave'" == "LCFS2012") { - return local dvper "2012_dvper_ukanon.dta" - return local dvhh "2012_dvhh_ukanon.dta" - } - else if ("`wave'" == "LCFS2013") { - return local dvper "2013_dvper_ukanon.dta" - return local dvhh "2013_dvhh_ukanon.dta" - } - else if ("`wave'" == "LCFS2014") { - return local dvper "2014_dvper_ukanon.dta" - return local dvhh "2014_dvhh_ukanon.dta" - } - else if ("`wave'" == "LCFS2015-2016") { - return local dvper "2015-16_dvper_ukanon.dta" - return local dvhh "2015-16_dvhh_ukanon.dta" - } - else if ("`wave'" == "LCFS2016-2017") { - return local dvper "2016_17_dvper_ukanon.dta" - return local dvhh "2016_17_dvhh_ukanon.dta" - } - else if ("`wave'" == "LCFS2017-2018") { - return local dvper "dvper_ukanon_2017-18.dta" - return local dvhh "dvhh_ukanon_2017-18.dta" - } - else if ("`wave'" == "LCFS2018-2019") { - return local dvper "2018_dvper_ukanon201819.dta" - return local dvhh "2018_dvhh_ukanon.dta" - } - else if ("`wave'" == "LCFS2019-2020") { - return local dvper "lcfs_2019_dvper_ukanon201920.dta" - return local dvhh "lcfs_2019_dvhh_ukanon.dta" - } - else if ("`wave'" == "LCFS2020-2021") { - return local dvper "lcfs_2020_dvper_ukanon202021.dta" - return local dvhh "lcfs_2020_dvhh_ukanon.dta" - } - else if ("`wave'" == "LCFS2021-2022") { - return local dvper "lcfs_2021_dvper_ukanon202122.dta" - return local dvhh "lcfs_2021_dvhh_ukanon.dta" - } - else if ("`wave'" == "LCFS2022-2023") { - return local dvper "dvper_ukanon_2022-23.dta" - return local dvhh "dvhh_ukanon_2022.dta" - } - else if ("`wave'" == "LCFS2023-2024") { - return local dvper "dvper_ukanon_202324_2023.dta" - return local dvhh "dvhh_ukanon_v2_2023.dta" - } - else { - di as error "No file map defined for `wave'" - exit 198 - } -end - - -/************************************************************************************** -* Data set-up -**************************************************************************************/ -* Optional arguments allow a complete staged rebuild before installation. -args rootdir exportdir -if ("`rootdir'"=="") local rootdir "`c(pwd)'" -if ("`exportdir'"=="") local exportdir "`rootdir'" -local datadir "`rootdir'/data" -local outdir "`exportdir'/output_lcfs" -local drop_multi_child_bu_hh 0 - -capture mkdir "`outdir'" -capture mkdir "`outdir'/waves" - -capture log close -log using "`outdir'/collect_lcfs.log", replace text - -tempname diag_handle -tempfile diag_file -postfile `diag_handle' /// - str20 wave /// - int year /// - long hh_pre_rule /// - long hh_drop_rule /// - long bu_pre_rule /// - long bu_drop_rule /// - using "`diag_file'", replace - - -tempfile pooled_bu -local first_bu 1 - -tempfile pooled_ind -local first_ind 1 - - -/************************************************************************************** -* Process each LCFS wave -**************************************************************************************/ -foreach wave_dir in /// - LCFS2008 /// - LCFS2009 /// - LCFS2010 /// - LCFS2011 /// - LCFS2012 /// - LCFS2013 /// - LCFS2014 /// - LCFS2015-2016 /// - LCFS2016-2017 /// - LCFS2017-2018 /// - LCFS2018-2019 /// - LCFS2019-2020 /// - LCFS2020-2021 /// - LCFS2021-2022 /// - LCFS2022-2023 /// - LCFS2023-2024 { - - local statadir "`datadir'/`wave_dir'/stata" - local wave_label : subinstr local wave_dir "LCFS" "", all - local wave_stub : subinstr local wave_label "-" "_", all - local year = real(substr("`wave_label'", 1, 4)) - - _get_lcfs_files, wave("`wave_dir'") - local dvper_file "`r(dvper)'" - local dvhh_file "`r(dvhh)'" - - capture confirm file "`statadir'/`dvper_file'" - if (_rc) { - di as error "Expected dvper file not found: `statadir'/`dvper_file'" - exit 601 - } - - capture confirm file "`statadir'/`dvhh_file'" - if (_rc) { - di as error "Expected dvhh file not found: `statadir'/`dvhh_file'" - exit 601 - } - - di as text "Processing `wave_dir'" - di as text " dvper: `dvper_file'" - di as text " dvhh : `dvhh_file'" - - /******************************************************************************* - * Person file - *******************************************************************************/ - use "`statadir'/`dvper_file'", clear - rename *, lower - - capture confirm variable a006 - if (_rc) capture rename a006p a006 - - capture confirm variable p008 - if (_rc) capture rename p008p p008 - - capture confirm variable p011 - if (_rc) capture rename p011p p011 - - capture confirm variable p037 - if (_rc) capture rename p037p p037 - - capture confirm variable p047 - if (_rc) capture rename p047p p047 - - * P177 is personal normal income after tax and National Insurance. - * Preserve reported values, including negatives and separate anonymisation caps. - capture confirm variable p177 - if (_rc) capture rename p177p p177 - - capture confirm variable p049 - if (_rc) capture rename p049p p049 - - capture confirm variable p116c - if (_rc) gen p116c = 0 - - capture confirm variable b352 - if (_rc) gen b352 = . - - foreach v in a006 p008 p011 p037 p047 p049 p153 p116 p116c b352 p177 { - capture confirm variable `v' - if (_rc) { - di as error "Required person-level variable `v' not found in `dvper_file'" - exit 111 - } - } - - keep case person benunper a002 a004 a005p a006 a007 a010 a206 a221 /// - p008 p011 p037 p047 p049 p153 p116 p116c b352 p177 - - replace a010 = 0 if (a010 >= .) - replace a006 = 0 if (a006 >= .) - replace p008 = 0 if (p008 >= .) - replace p011 = 0 if (p011 >= .) - replace p037 = 0 if (p037 >= .) - replace p047 = 0 if (p047 >= .) - replace p049 = 0 if (p049 >= .) - replace p116 = 0 if (p116 >= .) - replace p116c = 0 if (p116c >= .) - - gen hrp = (a002 == 0) - gen sps = (a002 == 1) - gen os = (a002 == 2) - gen student = (a007 > 0) if (a007 < .) - gen chld = (a005p < 18) if (a005p < .) - gen baby = chld * (a005p < 1) - gen adlt = 1 - chld if (a005p < .) - gen bu = benunper - * Missing source unit identifiers prevent a defensible complete income assignment. - by case, sort: egen byte source_missing_bu = max(missing(bu)) - drop if (bu >= .) - - gen female = (a004 == 2) - gen age = a005p - gen agem = a005p * (1 - female) - gen fti = (a206 == 2) + (a206 == 1) * (a221 > 30.1) - gen pti = (a206 == 3) + (a206 == 1) * (a221 < 30.1) - gen ue = (a206 == 4) - gen sempi = (a206 == 1) - gen edn = a010 * (a010 < 40) * (a007 == 0) + a005p * (a007 > 0) - gen nk04i = (a005p < 5) * chld - gen nk05i = (a005p < 6) * chld - gen nk513i = (a005p >= 5) * (a005p <= 13) * chld - gen nk612i = (a005p >= 6) * (a005p <= 12) * chld - gen nk1417i = (a005p >= 14) * (a005p <= 17) * chld - gen yi = p008 + p011 + p037 + p047 - gen pers_hsgi = p116 + p116c - gen pen_inci = p049 - gen double personal_net_i = p177 - - replace fti = ((fti > 0) + (pti > 1) * (fti == 0)) * (yi > 0) - replace pti = (pti == 1) * (fti == 0) * (yi > 0) - - save "`outdir'/waves/lcfs_`wave_stub'_ind_full.dta", replace - - preserve - keep case person age student female fti pti ue sempi edn yi pen_inci personal_net_i - label var age "Age" - label var student "Continuing full-time student" - label var female "Female" - label var fti "FT work" - label var pti "PT work" - label var ue "Unemployed" - label var sempi "Self-employed" - label var edn "Age last in FTE" - label var yi "Gross individual earnings" - label var pen_inci "Individual income from pensions and annuities, p049" - save "`outdir'/waves/lcfs_`wave_stub'_ind.dta", replace - - if (`first_ind' == 1) { - save "`pooled_ind'", replace - local first_ind 0 - } - else { - append using "`pooled_ind'" - save "`pooled_ind'", replace - } - restore - - /******************************************************************************* - * Benefit-unit aggregation - *******************************************************************************/ - sort case bu - * Require complete personal incomes; never interpret a missing member as zero. - by case bu: egen double bu_net_personsum = total(personal_net_i) - by case bu: egen int missing_net_bu = total(missing(personal_net_i)) - replace bu_net_personsum = . if missing_net_bu>0 - by case: egen double hh_net_personsum = total(personal_net_i) - by case: egen int missing_net_hh = total(missing(personal_net_i)) - replace hh_net_personsum = . if missing_net_hh>0 - by case bu: egen age_male = max(agem) - by case bu: egen na = sum(adlt) - by case: egen byte source_noadult_bu = max(na==0) - * Source units with no adult aged 18+ are outside SimPaths' unit definition. - * Keep retained BUs for inspection, but exclude the WHOLE household from model - * estimation and validation; do not invent an assignment of the omitted income. - gen byte income_scope_ok = source_noadult_bu==0 & source_missing_bu==0 & missing_net_hh==0 - by case bu: egen mar = max(sps) - by case bu: egen nk = sum(chld) - by case bu: egen nk04 = sum(nk04i) - by case bu: egen nk05 = sum(nk05i) - by case bu: egen nk513 = sum(nk513i) - by case bu: egen nk612 = sum(nk612i) - by case bu: egen nk1417 = sum(nk1417i) - by case bu: egen birth = sum(baby) - by case bu: egen ft = sum(fti) - by case bu: egen pt = sum(pti) - by case bu: egen semp = sum(sempi) - by case bu: egen y = sum(yi) - by case bu: egen pen_inc = sum(pen_inci) - by case bu: egen pen_inc_any = max(pen_inci > 0) if (pen_inci < .) - by case bu: egen pers_cons = sum(p153) - by case bu: egen pers_hsg = sum(pers_hsgi) - by case bu: egen edn_max = max(edn) - by case bu: egen allow = sum(b352) - - sort case - by case: egen na_hh = sum(adlt) - - keep case a002 bu age student adlt age_male female na mar nk nk04 nk05 /// - nk513 nk612 nk1417 birth ft pt semp y pen_inc pen_inc_any pers_cons pers_hsg /// - na_hh edn_max allow bu_net_personsum hh_net_personsum income_scope_ok source_noadult_bu source_missing_bu missing_net_bu missing_net_hh - - drop if (na == 0) - keep if (adlt == 1) - drop adlt - - * Keep one representative adult per benefit unit: prefer HRP, then spouse, then oldest adult. - gen rep_priority = cond(a002 == 0, 0, cond(a002 == 1, 1, 2)) - gsort case bu rep_priority -age - by case bu: keep if (_n == 1) - drop rep_priority - - gen byte single_female_adult = (na == 1 & female == 1) - gen byte single_male_adult = (na == 1 & female == 0) - - sort case bu - gen id1 = (nk > 0) - by case: replace id1 = id1[_n-1] + ((nk > 0) & (bu >= bu[_n-1])) if (bu > 1) - by case: egen id_max = max(id1) - - preserve - gen byte _drop_multi_child_bu_hh = (id_max > 1) - egen byte _hh_tag = tag(case) - count if _hh_tag == 1 - local hh_pre_rule = r(N) - count if _hh_tag == 1 & _drop_multi_child_bu_hh == 1 - local hh_drop_rule = r(N) - count - local bu_pre_rule = r(N) - count if _drop_multi_child_bu_hh == 1 - local bu_drop_rule = r(N) - restore - - post `diag_handle' /// - ("`wave_label'") /// - (`year') /// - (`hh_pre_rule') /// - (`hh_drop_rule') /// - (`bu_pre_rule') /// - (`bu_drop_rule') - - if (`drop_multi_child_bu_hh' == 1) { - drop if (id_max > 1) - } - drop id1 id_max - - tempfile bu_temp - save "`bu_temp'", replace - - /******************************************************************************* - * Household file - *******************************************************************************/ - use "`statadir'/`dvhh_file'", clear - rename *, lower - - capture confirm variable cc4121 - if (_rc) gen cc4121 = 0 - - capture confirm variable cc4122 - if (_rc) gen cc4122 = 0 - - capture confirm variable b265 - if (_rc) gen b265 = . - - capture confirm variable gor - if (_rc) gen gor = . - - capture confirm variable gorx - if (_rc) gen gorx = . - - * B038p is Council Tax; B030 is NI domestic rates, already weekly amounts. - * Source credits (negative B030) are retained, not truncated to zero. - capture confirm variable b038p - if (_rc) capture rename b038 b038p - foreach v in case p389p p536tp p550tp cc4121 cc4122 weighta a122 b265 b038p b030 { - capture confirm variable `v' - if (_rc) { - di as error "Required household-level variable `v' not found in `dvhh_file'" - exit 111 - } - } - - assert !missing(b038p,b030) - gen double local_tax_hh = b038p + b030 - keep case p389p p536tp p550tp cc4121 cc4122 weighta a122 gor gorx b265 local_tax_hh - save "`outdir'/waves/lcfs_`wave_stub'_hh.dta", replace - - /******************************************************************************* - * Merge and final wave-level BU file - *******************************************************************************/ - use "`bu_temp'", clear - merge m:1 case using "`outdir'/waves/lcfs_`wave_stub'_hh.dta" - drop if (_merge == 1) - drop _merge - - drop if (age >= .) - - gen year = `year' - gen survey_label = "`wave_label'" - - gen childcare = (cc4121 + cc4122) * (nk > 0) - gen rent = (p536tp - pers_hsg) * na / na_hh - replace rent = 0 if (rent < 0) - drop na_hh - - gen consmpn = 0 - replace consmpn = pers_cons + rent if (bu > 1) - - sort case - by case: egen cons_hh = sum(consmpn) - by case: egen na_hh = sum(na) - by case: egen nk_hh = sum(nk) - - gen wght = weighta / na - gen chk = (p550tp < cons_hh) - - replace consmpn = p550tp - cons_hh if (bu == 1 & chk == 0) - replace consmpn = pers_cons + rent if (bu == 1 & chk == 1) - drop cons_hh - - by case: egen cons_hh = sum(consmpn) - by case: egen chk2 = max(chk) - replace consmpn = p550tp * consmpn / cons_hh if (chk2 == 1 & cons_hh > 0) - gen cons_share = consmpn / p550tp - * Retain the former construction only as an explicitly named audit field. - gen double disp_inc_consumption_share = p389p * consmpn / p550tp if (p550tp > 0) - * Production income now comes from the personal net-income components, not C. - gen double disp_inc = bu_net_personsum - gen double hh_reported_disp_inc = p389p - gen double hh_net_difference = hh_net_personsum - hh_reported_disp_inc - gen byte hh_income_gap_flag = abs(hh_net_difference)>1 if hh_net_difference<. - * Align both sides of the budget with donor disposable income after local tax. - * This is an explicit attribution assumption: each retained BU bears the same - * local-tax share as its share of household adults. It is independent of income - * and expenditure, so it does not reinstate expenditure-based income allocation. - * Keep cash gifts/maintenance and all other broad-expenditure boundaries intact. - gen double local_tax_adult_share = na / na_hh - gen double local_tax_bu = local_tax_hh * local_tax_adult_share - gen double consmpn_before_ct = consmpn - gen double disp_inc_before_ct = disp_inc - gen double cons_share_before_ct = cons_share - recast double consmpn - replace consmpn = consmpn_before_ct - local_tax_bu - replace disp_inc = disp_inc_before_ct - local_tax_bu - replace cons_share = consmpn / (p550tp - local_tax_hh) - * Do not clip low/negative net amounts: retain them for sample accounting. - * Existing estimation positivity and validation income screens apply downstream. - by case: egen double _local_tax_sum = total(local_tax_bu) - assert abs(_local_tax_sum-local_tax_hh)<1e-8 - assert abs((consmpn-disp_inc)-(consmpn_before_ct-disp_inc_before_ct))<1e-8 /// - if !missing(consmpn_before_ct,disp_inc_before_ct) - drop _local_tax_sum - gen str16 income_definition = "personal_net_ct" - gen str16 expenditure_definition = "broad_net_ct" - - replace childcare = 0 if (childcare >= .) - gen caseno = case - - keep caseno bu age age_male student na mar nk nk04 nk05 nk513 nk612 nk1417 /// - birth female single_female_adult single_male_adult edn_max ft pt semp y pen_inc pen_inc_any childcare rent consmpn /// - disp_inc year survey_label wght weighta a122 gor gorx b265 allow cons_share /// - disp_inc_consumption_share hh_reported_disp_inc hh_net_personsum hh_net_difference /// - hh_income_gap_flag income_scope_ok income_definition source_noadult_bu source_missing_bu missing_net_bu missing_net_hh /// - local_tax_hh local_tax_bu local_tax_adult_share consmpn_before_ct disp_inc_before_ct cons_share_before_ct expenditure_definition - - label var caseno "Household ID" - label var bu "Benefit unit" - label var age "Age of representative adult" - label var age_male "Oldest man in BU" - label var student "Continuing full-time student" - label var na "Number of adults in BU" - label var mar "Spouse/cohabitee present in BU" - label var nk "Number of children in BU" - label var nk04 "Children aged under 5" - label var nk05 "Children aged under 6" - label var nk513 "Children aged 5 to 13" - label var nk612 "Children aged 6 to 12" - label var nk1417 "Children aged 14 to 17" - label var birth "Baby present in BU" - label var female "Representative adult is female" - label var single_female_adult "Single-adult BU with female adult" - label var single_male_adult "Single-adult BU with male adult" - label var edn_max "Highest age last in FTE in BU" - label var ft "Number in FT work in BU" - label var pt "Number in PT work in BU" - label var semp "Number self-employed in BU" - label var y "Total gross earnings in BU" - label var pen_inc "BU income from pensions and annuities, p049" - label var pen_inc_any "BU receives any pension or annuity income, p049" - label var childcare "Childcare expenditure" - label var rent "Original broad housing allocation before local tax" - label var consmpn "BU broad expenditure after allocated Council Tax/NI rates" - label var disp_inc "BU sum personal P177/P177p less allocated Council Tax/NI rates" - label var local_tax_hh "HH weekly Council Tax and NI domestic rates: B038p+B030" - label var local_tax_bu "BU weekly local tax, allocated by household adult share" - label var local_tax_adult_share "BU adults divided by household adults" - label var consmpn_before_ct "v2 broad BU expenditure before Council Tax alignment" - label var disp_inc_before_ct "v2 BU personal net-income sum before local tax" - label var cons_share_before_ct "v2 BU share of broad HH expenditure before local tax" - label var disp_inc_consumption_share "Former expenditure-allocated BU income (audit only)" - label var income_scope_ok "Complete household, no source BU without an 18+ adult" - label var hh_income_gap_flag "Personal sum differs from reported HH income by over 1 pound/week" - label var year "Wave start year" - label var survey_label "Original LCFS wave label" - label var wght "Annual weight divided by adults in BU" - label var weighta "Annual household weight" - label var a122 "Tenure type" - label var gor "Government office region" - label var gorx "Government office region modified" - label var b265 "Regular allowances paid" - label var allow "Regular allowances received" - label var cons_share "BU share of household consumption" - - save "`outdir'/waves/lcfs_`wave_stub'_bu.dta", replace - - if (`first_bu' == 1) { - save "`pooled_bu'", replace - local first_bu 0 - } - else { - append using "`pooled_bu'" - save "`pooled_bu'", replace - } -} - - -/************************************************************************************** -* Save pooled outputs -**************************************************************************************/ -use "`pooled_ind'", clear -sort case person -save "`outdir'/lcfs_individuals_sorted.dta", replace - -use "`pooled_bu'", clear -sort caseno year bu -save "`outdir'/lcfs_sorted.dta", replace - -postclose `diag_handle' -use "`diag_file'", clear -gen hh_drop_share = hh_drop_rule / hh_pre_rule if (hh_pre_rule > 0) -gen bu_drop_share = bu_drop_rule / bu_pre_rule if (bu_pre_rule > 0) -sort year -save "`outdir'/multi_child_bu_rule_diagnostics.dta", replace - -egen hh_pre_rule_total = total(hh_pre_rule) -egen hh_drop_rule_total = total(hh_drop_rule) -egen bu_pre_rule_total = total(bu_pre_rule) -egen bu_drop_rule_total = total(bu_drop_rule) -gen hh_drop_share_total = hh_drop_rule_total / hh_pre_rule_total if (hh_pre_rule_total > 0) -gen bu_drop_share_total = bu_drop_rule_total / bu_pre_rule_total if (bu_pre_rule_total > 0) - -list wave year hh_pre_rule hh_drop_rule hh_drop_share bu_pre_rule bu_drop_rule bu_drop_share, noobs abbreviate(20) -list hh_pre_rule_total hh_drop_rule_total hh_drop_share_total bu_pre_rule_total bu_drop_rule_total bu_drop_share_total in 1, noobs - -log close diff --git a/input/regression_files/RegressionEstimates/consumption/consumption_modelling_lcfs.do b/input/regression_files/RegressionEstimates/consumption/consumption_modelling_lcfs.do deleted file mode 100644 index a31e615f7..000000000 --- a/input/regression_files/RegressionEstimates/consumption/consumption_modelling_lcfs.do +++ /dev/null @@ -1,485 +0,0 @@ -/************************************************************************************** -* -* CONSUMPTION MODELLING USING POOLED LCFS BENEFIT-UNIT DATA -* -* Input: -* output_lcfs/lcfs_sorted.dta -* -* Production v3 (22 October 2026; after local-tax alignment): -* m4: five-year age-specific log-income slopes with common curvature -* reference-adult student dummy; three-category housing status -* -* Baseline modelling choices: -* - Real monthly monetary variables, CPIH (L522), base 2015; 365.25/7/12 conversion -* - Disposable income: personal P177/P177p sums less allocated local tax; income_scope_ok required -* - Positive-sample restriction for log specification -* - Benefit-unit level regression -* - Survey weights: weighta; covariance clustered by household within year -* - Year fixed effects included -* - Existing five-year age intercepts and age-specific log-income slopes -* - Common uncentered quadratic in log disposable income -* - Child status in the constructed input file is age <= 17 -* -**************************************************************************************/ - -cls -//version 17 -clear all -set more off - -args rootdir exportdir -if ("`rootdir'" == "") local rootdir "`c(pwd)'" -if ("`exportdir'" == "") local exportdir "`rootdir'" -local outdir "`rootdir'/output_lcfs" -local writingdir "`exportdir'/output_writing" -local modelinputdir "`exportdir'/output_model_input" - -capture mkdir "`writingdir'" -capture mkdir "`modelinputdir'" - -capture log close -log using "`writingdir'/consumption_modelling_lcfs.log", replace text - - -/************************************************************************************** -* Helper: export stored model to CSV -**************************************************************************************/ -capture program drop export_model_csv -program define export_model_csv - syntax, MODEL(string) OUTFILE(string) - - estimates restore `model' - - local title "`model'" - if ("`model'" == "m4") { - local title "m4: five-year age-specific income slopes; common curvature; student control; three-category housing status" - } - - quietly ereturn display - matrix results = r(table) - local cnames : colnames results - local k = colsof(results) - - tempname fh - file open `fh' using "`outfile'", write text replace - file write `fh' `"model,`model'"' _n - file write `fh' `"title,"`title'""' _n - file write `fh' `"dependent variable,ln_consmpn"' _n - file write `fh' `"observations,`=string(e(N), "%18.0g")'"' _n - file write `fh' `"R-squared,`=string(e(r2), "%18.0g")'"' _n - file write `fh' `"Root MSE,`=string(e(rmse), "%18.0g")'"' _n - file write `fh' `"F statistic,`=string(e(F), "%18.0g")'"' _n - file write `fh' `"residual df,`=string(e(df_r), "%18.0g")'"' _n - file write `fh' `"weight,pweight = weighta"' _n - file write `fh' `"VCE,clustered by household within year"' _n - file write `fh' _n - file write `fh' `"term,coefficient,std. err.,t,P>|t|"' _n - - forvalues j = 1/`k' { - local term : word `j' of `cnames' - if !regexm("`term'", "^[0-9]+[bo]\.") { - local term_label "`term'" - if ("`term'" == "year_c2015") local term_label "Year trend (since 2015)" - if ("`term'" == "ln_disp_inc") local term_label "ln(real disposable income)" - if ("`term'" == "ln_disp_inc2") local term_label "ln(real disposable income) squared" - if ("`term'" == "2.age_group") local term_label "Age 20-24" - if ("`term'" == "3.age_group") local term_label "Age 25-29" - if ("`term'" == "4.age_group") local term_label "Age 30-34" - if ("`term'" == "5.age_group") local term_label "Age 35-39" - if ("`term'" == "6.age_group") local term_label "Age 40-44" - if ("`term'" == "7.age_group") local term_label "Age 45-49" - if ("`term'" == "8.age_group") local term_label "Age 50-54" - if ("`term'" == "9.age_group") local term_label "Age 55-59" - if ("`term'" == "10.age_group") local term_label "Age 60-64" - if ("`term'" == "11.age_group") local term_label "Age 65-69" - if ("`term'" == "12.age_group") local term_label "Age 70-74" - if ("`term'" == "13.age_group") local term_label "Age 75-79" - if ("`term'" == "14.age_group") local term_label "Age 80+" - if ("`term'" == "single_female_adult") local term_label "Single female adult BU" - if ("`term'" == "single_male_adult") local term_label "Single male adult BU" - if ("`term'" == "nk") local term_label "Number of children" - if ("`term'" == "ft") local term_label "Number in full-time work" - if ("`term'" == "pt") local term_label "Number in part-time work" - if ("`term'" == "semp") local term_label "Number self-employed" - if ("`term'" == "pen_inc_any") local term_label "Receives pension or annuity income" - if ("`term'" == "1.housing_status") local term_label "Owner with ongoing payments" - if ("`term'" == "2.housing_status") local term_label "Owned outright" - if ("`term'" == "1.gorx") local term_label "Region: North East" - if ("`term'" == "2.gorx") local term_label "Region: North West and Merseyside" - if ("`term'" == "3.gorx") local term_label "Region: Yorkshire and the Humber" - if ("`term'" == "4.gorx") local term_label "Region: East Midlands" - if ("`term'" == "5.gorx") local term_label "Region: West Midlands" - if ("`term'" == "6.gorx") local term_label "Region: Eastern" - if ("`term'" == "8.gorx") local term_label "Region: South East" - if ("`term'" == "9.gorx") local term_label "Region: South West" - if ("`term'" == "10.gorx") local term_label "Region: Wales" - if ("`term'" == "11.gorx") local term_label "Region: Scotland" - if ("`term'" == "12.gorx") local term_label "Region: Northern Ireland" - if ("`term'" == "year") local term_label "Year trend" - if ("`term'" == "2009.year") local term_label "Year 2009" - if ("`term'" == "2010.year") local term_label "Year 2010" - if ("`term'" == "2011.year") local term_label "Year 2011" - if ("`term'" == "2012.year") local term_label "Year 2012" - if ("`term'" == "2013.year") local term_label "Year 2013" - if ("`term'" == "2014.year") local term_label "Year 2014" - if ("`term'" == "2015.year") local term_label "Year 2015" - if ("`term'" == "2016.year") local term_label "Year 2016" - if ("`term'" == "2017.year") local term_label "Year 2017" - if ("`term'" == "2018.year") local term_label "Year 2018" - if ("`term'" == "2019.year") local term_label "Year 2019" - if ("`term'" == "2020.year") local term_label "Year 2020" - if ("`term'" == "2021.year") local term_label "Year 2021" - if ("`term'" == "2022.year") local term_label "Year 2022" - if ("`term'" == "2023.year") local term_label "Year 2023" - if ("`term'" == "_cons") local term_label "Constant" - - scalar coefficient = results[1, `j'] - scalar std_error = results[2, `j'] - scalar t_stat = results[3, `j'] - scalar p_value = results[4, `j'] - - local p_value_display = string(p_value, "%12.4g") - if (p_value == 0) { - local p_value_display "<1e-300" - } - - local coefficient_s = string(coefficient, "%12.6f") - local std_error_s = string(std_error, "%12.6f") - local t_stat_s = string(t_stat, "%12.2f") - - file write `fh' `"`term_label',`coefficient_s',`std_error_s',`t_stat_s',`p_value_display'"' _n - } - } - file close `fh' -end - -capture program drop export_model_input_csv -program define export_model_input_csv - syntax, MODEL(string) OUTFILE(string) - - tempname bmat vmat fh - local dq = char(34) - - capture estimates restore `model' - if _rc { - di as err "Estimation results not found: `model'" - exit 111 - } - - matrix `bmat' = e(b) - matrix `vmat' = e(V) - local cnames : colfullnames `bmat' - local k = colsof(`bmat') - - local n_keep = 0 - forvalues j = 1/`k' { - local term : word `j' of `cnames' - if strpos("`term'", "b.") | strpos("`term'", "o.") { - continue - } - - local term_label "`term'" - if ("`term'" == "student") local term_label "ReferenceAdultStudent" - if ("`term'" == "year_c2015") local term_label "YearFrom2015" - if ("`term'" == "ln_disp_inc") local term_label "LnDispInc" - if ("`term'" == "ln_disp_inc2") local term_label "LnDispInc_sq" - if ("`term'" == "2.age_group") local term_label "Age20to24" - if ("`term'" == "3.age_group") local term_label "Age25to29" - if ("`term'" == "4.age_group") local term_label "Age30to34" - if ("`term'" == "5.age_group") local term_label "Age35to39" - if ("`term'" == "6.age_group") local term_label "Age40to44" - if ("`term'" == "7.age_group") local term_label "Age45to49" - if ("`term'" == "8.age_group") local term_label "Age50to54" - if ("`term'" == "9.age_group") local term_label "Age55to59" - if ("`term'" == "10.age_group") local term_label "Age60to64" - if ("`term'" == "11.age_group") local term_label "Age65to69" - if ("`term'" == "12.age_group") local term_label "Age70to74" - if ("`term'" == "13.age_group") local term_label "Age75to79" - if ("`term'" == "14.age_group") local term_label "Age80plus" - if ("`term'" == "single_female_adult") local term_label "SingleFemale" - if ("`term'" == "single_male_adult") local term_label "SingleMale" - if ("`term'" == "nk") local term_label "NumberMembersUnder18" - if ("`term'" == "ft") local term_label "NumberFullTimeWork" - if ("`term'" == "pt") local term_label "NumberPartTimeWork" - if ("`term'" == "semp") local term_label "NumberSelfEmployed" - if ("`term'" == "pen_inc_any") local term_label "PrivatePensionIncome" - if ("`term'" == "1.housing_status") local term_label "MortgageHolder" - if ("`term'" == "2.housing_status") local term_label "HomeOwnedOutright" - if ("`term'" == "1.gorx") local term_label "UKC" - if ("`term'" == "2.gorx") local term_label "UKD" - if ("`term'" == "3.gorx") local term_label "UKE" - if ("`term'" == "4.gorx") local term_label "UKF" - if ("`term'" == "5.gorx") local term_label "UKG" - if ("`term'" == "6.gorx") local term_label "UKH" - if ("`term'" == "8.gorx") local term_label "UKJ" - if ("`term'" == "9.gorx") local term_label "UKK" - if ("`term'" == "10.gorx") local term_label "UKL" - if ("`term'" == "11.gorx") local term_label "UKM" - if ("`term'" == "12.gorx") local term_label "UKN" - if ("`term'" == "year") local term_label "Year" - if ("`term'" == "2009.year") local term_label "Year2009" - if ("`term'" == "2010.year") local term_label "Year2010" - if ("`term'" == "2011.year") local term_label "Year2011" - if ("`term'" == "2012.year") local term_label "Year2012" - if ("`term'" == "2013.year") local term_label "Year2013" - if ("`term'" == "2014.year") local term_label "Year2014" - if ("`term'" == "2015.year") local term_label "Year2015" - if ("`term'" == "2016.year") local term_label "Year2016" - if ("`term'" == "2017.year") local term_label "Year2017" - if ("`term'" == "2018.year") local term_label "Year2018" - if ("`term'" == "2019.year") local term_label "Year2019" - if ("`term'" == "2020.year") local term_label "Year2020" - if ("`term'" == "2021.year") local term_label "Year2021" - if ("`term'" == "2022.year") local term_label "Year2022" - if ("`term'" == "2023.year") local term_label "Year 2023" - if ("`term'" == "_cons") local term_label "Constant" - - if ("`term'" == "2.age_group#c.ln_disp_inc") local term_label "Age20to24_LnDispInc" - if ("`term'" == "3.age_group#c.ln_disp_inc") local term_label "Age25to29_LnDispInc" - if ("`term'" == "4.age_group#c.ln_disp_inc") local term_label "Age30to34_LnDispInc" - if ("`term'" == "5.age_group#c.ln_disp_inc") local term_label "Age35to39_LnDispInc" - if ("`term'" == "6.age_group#c.ln_disp_inc") local term_label "Age40to44_LnDispInc" - if ("`term'" == "7.age_group#c.ln_disp_inc") local term_label "Age45to49_LnDispInc" - if ("`term'" == "8.age_group#c.ln_disp_inc") local term_label "Age50to54_LnDispInc" - if ("`term'" == "9.age_group#c.ln_disp_inc") local term_label "Age55to59_LnDispInc" - if ("`term'" == "10.age_group#c.ln_disp_inc") local term_label "Age60to64_LnDispInc" - if ("`term'" == "11.age_group#c.ln_disp_inc") local term_label "Age65to69_LnDispInc" - if ("`term'" == "12.age_group#c.ln_disp_inc") local term_label "Age70to74_LnDispInc" - if ("`term'" == "13.age_group#c.ln_disp_inc") local term_label "Age75to79_LnDispInc" - if ("`term'" == "14.age_group#c.ln_disp_inc") local term_label "Age80plus_LnDispInc" - - local ++n_keep - local idx`n_keep' `j' - local lbl`n_keep' "`term_label'" - } - - file open `fh' using "`outfile'", write text replace - file write `fh' `"`dq'REGRESSOR`dq',`dq'COEFFICIENT`dq'"' - forvalues j = 1/`n_keep' { - file write `fh' `",`dq'`lbl`j''`dq'"' - } - file write `fh' _n - - forvalues r = 1/`n_keep' { - local rr = `idx`r'' - local b_i = string(`bmat'[1,`rr'], "%24.17g") - file write `fh' `"`dq'`lbl`r''`dq',`b_i'"' - - forvalues c = 1/`n_keep' { - local cc = `idx`c'' - local v_rc = string(`vmat'[`rr',`cc'], "%24.17g") - file write `fh' `",`v_rc'"' - } - file write `fh' _n - } - file close `fh' -end - -capture program drop export_income_elasticity_csv -program define export_income_elasticity_csv - syntax, OUTFILE(string) C25(real) C50(real) C75(real) C90(real) MEAN(real) - tempname fh - file open `fh' using "`outfile'", write text replace - file write `fh' "age_group,point,ln_disp_inc,elasticity,std_error,p_value" _n - forvalues g=1/14 { - foreach point in p25 mean p50 p75 p90 { - if "`point'"=="p25" local at=`c25' - if "`point'"=="mean" local at=`mean' - if "`point'"=="p50" local at=`c50' - if "`point'"=="p75" local at=`c75' - if "`point'"=="p90" local at=`c90' - local contrast "_b[ln_disp_inc] + 2*_b[ln_disp_inc2]*(`at')" - if `g'>1 local contrast "`contrast' + _b[`g'.age_group#c.ln_disp_inc]" - quietly lincom `contrast' - file write `fh' "`g',`point',`=string(`at',"%24.17g")',`=string(r(estimate),"%24.17g")',`=string(r(se),"%24.17g")',`=string(r(p),"%24.17g")'" _n - } - } - file close `fh' -end - - -/************************************************************************************** -* 1. Estimation sample and modelling variables -**************************************************************************************/ -use "`outdir'/lcfs_sorted.dta", clear - -* Require the revised construction and use the same population scope in validation. -confirm variable income_definition income_scope_ok -* 22 October 2026: both own income and broad expenditure exclude the same -* adult-share allocation of Council Tax/NI rates. Other cash outflows remain. -assert income_definition=="personal_net_ct" -confirm variable expenditure_definition local_tax_bu -assert expenditure_definition=="broad_net_ct" -keep if income_scope_ok==1 -di as text "Loaded personal-net-income LCFS benefit-unit file" -describe - -gen byte sample_log = (consmpn > 0 & disp_inc > 0) if !missing(consmpn, disp_inc) -count -local N_all = r(N) -count if sample_log == 1 -local N_log = r(N) -di as text "Total BU observations: `N_all'" -di as text "Log-usable BU observations: `N_log'" - -keep if sample_log == 1 - -global inflation_minyear = 2008 -global inflation_maxyear = 2025 -matrix inflation = ( /// -0.862 \ /// 2008 -0.879 \ /// 2009 -0.901 \ /// 2010 -0.936 \ /// 2011 -0.96 \ /// 2012 -0.982 \ /// 2013 -0.996 \ /// 2014 -1 \ /// 2015 -1.01 \ /// 2016 -1.036 \ /// 2017 -1.06 \ /// 2018 -1.078 \ /// 2019 -1.089 \ /// 2020 -1.116 \ /// 2021 -1.205 \ /// 2022 -1.286 \ /// 2023 -1.329 \ /// 2024 -1.329) /// 2025 //to update when becomes available - -gen CPI = . -forvalues yy = $inflation_minyear/$inflation_maxyear { - - replace CPI = inflation[`yy'-${inflation_minyear}+1,1] if year == `yy' -} -foreach var in consmpn disp_inc { - - gen `var'r = `var' / CPI -} - -gen ln_consmpn = ln(consmpnr * 365.25/7/12) -gen ln_disp_inc = ln(disp_incr * 365.25/7/12) -gen ln_disp_inc2 = ln_disp_inc^2 - -summ ln_disp_inc -local mean_ln_disp_inc = r(mean) -gen c_ln_disp_inc = ln_disp_inc - `mean_ln_disp_inc' -gen c_ln_disp_inc2 = c_ln_disp_inc^2 - -quietly summ ln_disp_inc, detail -local p25_ln_disp_inc = r(p25) -local p50_ln_disp_inc = r(p50) -local p75_ln_disp_inc = r(p75) -local p90_ln_disp_inc = r(p90) -local c25_ln_disp_inc = `p25_ln_disp_inc' - `mean_ln_disp_inc' -local c50_ln_disp_inc = `p50_ln_disp_inc' - `mean_ln_disp_inc' -local c75_ln_disp_inc = `p75_ln_disp_inc' - `mean_ln_disp_inc' -local c90_ln_disp_inc = `p90_ln_disp_inc' - `mean_ln_disp_inc' - -recode age /// - (min/19 = 1 "Under 20") /// - (20/24 = 2 "20-24") /// - (25/29 = 3 "25-29") /// - (30/34 = 4 "30-34") /// - (35/39 = 5 "35-39") /// - (40/44 = 6 "40-44") /// - (45/49 = 7 "45-49") /// - (50/54 = 8 "50-54") /// - (55/59 = 9 "55-59") /// - (60/64 = 10 "60-64") /// - (65/69 = 11 "65-69") /// - (70/74 = 12 "70-74") /// - (75/79 = 13 "75-79") /// - (80/max = 14 "80+"), gen(age_group) - -label var sample_log "Positive consmpn and disp_inc sample" -label var ln_consmpn "Log broad BU expenditure after local tax per month" -label var ln_disp_inc "Log benefit-unit disposable income per month" -label var c_ln_disp_inc "Centered log benefit-unit disposable income" -label var c_ln_disp_inc2 "Centered log benefit-unit disposable income squared" -label var age_group "Age group" - -gen byte housing_status = . -replace housing_status = 0 if inlist(a122, 1, 2, 3, 4, 8) -replace housing_status = 1 if inlist(a122, 5, 6) -replace housing_status = 2 if (a122 == 7) -label define housing_status_lbl /// - 0 "Non-owner" /// - 1 "Owner with ongoing payments" /// - 2 "Owned outright", replace -label values housing_status housing_status_lbl -label var housing_status "Housing status from a122, with non-owner as benchmark" - -save "`writingdir'/lcfs_model_sample.dta", replace - - -/************************************************************************************** -* 2. Sample profile -**************************************************************************************/ -di as text "Sample profile after log restriction" -summ ln_consmpn ln_disp_inc ln_disp_inc2 age na nk ft pt semp y pen_inc /// - wght weighta, detail - -tab year -tab na -tab nk -tab mar -tab single_female_adult -tab single_male_adult -tab pen_inc_any -tab age_group -tab housing_status, missing -tab gorx - - -/************************************************************************************** -* 3. Production regression -**************************************************************************************/ -drop single_female_adult single_male_adult -gen single_female_adult = (na==1) * female -gen single_male_adult = (na==1) * (1 - female) -local demo_controls_agegrp i.age_group single_female_adult single_male_adult nk -* Full-time student status belongs to the same reference adult as age. -* Keep the existing age bands and income slopes; retain common log-income curvature. -assert inlist(student,0,1) -local work_controls ft pt semp pen_inc_any student -local hh_controls ib0.housing_status ib7.gorx -di as text "Model m4: age-specific income slopes, common curvature, non-owner benchmark" -egen long regression_hh = group(year caseno) -* Centre the calendar trend without changing its fitted relationship. -gen double year_c2015 = year - 2015 -reg ln_consmpn ln_disp_inc ln_disp_inc2 i.age_group#c.ln_disp_inc `demo_controls_agegrp' `work_controls' `hh_controls' year_c2015 i.year /// - [pweight=weighta] if (na<3 & na>0), vce(cluster regression_hh) -estimates store m4 -estimates save "`writingdir'/consumption_model_housing_status.ster", replace - -* Age-specific elasticities are exported below using joint coefficient contrasts. - -/************************************************************************************** -* 4. Export CSV output -**************************************************************************************/ -export_model_csv, model("m4") outfile("`writingdir'/consumption_model_housing_status.csv") -export_income_elasticity_csv, /// - outfile("`writingdir'/consumption_model_housing_status_elasticities.csv") /// - c25(`p25_ln_disp_inc') c50(`p50_ln_disp_inc') c75(`p75_ln_disp_inc') c90(`p90_ln_disp_inc') mean(`mean_ln_disp_inc') -export_model_input_csv, model("m4") outfile("`modelinputdir'/consumption_model_housing_status.csv") - -di as text "CSV results exported to:" -di as text " `writingdir'/consumption_model_housing_status.csv" -di as text " `writingdir'/consumption_model_housing_status_elasticities.csv" -di as text " `modelinputdir'/consumption_model_housing_status.csv" - - -* FW1a residual dispersion is exported separately from coefficient covariance. -estimates restore m4 -tempname rmsefile -file open `rmsefile' using "`modelinputdir'/consumption_model_housing_status_rmse.csv", write text replace -file write `rmsefile' "REGRESSOR,COEFFICIENT" _n -file write `rmsefile' "FW1a,`=string(e(rmse),"%24.17g")'" _n -file close `rmsefile' -tempname metafile -file open `metafile' using "`modelinputdir'/consumption_model_housing_status_fit.csv", write text replace -file write `metafile' "model,observations,r_squared,rmse,household_clusters" _n -file write `metafile' "m4,`=e(N)',`=string(e(r2),"%24.17g")',`=string(e(rmse),"%24.17g")',`=e(N_clust)'" _n -file close `metafile' - -log close diff --git a/input/regression_files/RegressionEstimates/consumption/export_synthetic_fixtures.do b/src/test/stata/export_consumption_fixtures.do similarity index 97% rename from input/regression_files/RegressionEstimates/consumption/export_synthetic_fixtures.do rename to src/test/stata/export_consumption_fixtures.do index c296480f5..2b00eb914 100644 --- a/input/regression_files/RegressionEstimates/consumption/export_synthetic_fixtures.do +++ b/src/test/stata/export_consumption_fixtures.do @@ -2,6 +2,7 @@ * Export Stata predictions for a deterministic synthetic consumption test grid. * No observed LCFS rows are read or exported by this script. * Arguments: saved m4 estimates (.ster), then destination fixture CSV. +* See validation/consumption/README.md for the shared Drive estimation workflow. ******************************************************************************** args estimates_file output_file if (`"`estimates_file'"'=="" | `"`output_file'"'=="") { diff --git a/validation/consumption/README.md b/validation/consumption/README.md index c731bc858..11f55e1cc 100644 --- a/validation/consumption/README.md +++ b/validation/consumption/README.md @@ -1,6 +1,34 @@ # Consumption validation: LCFS and three v3 runs -The supplied results compare benefit-unit broad expenditure/disposable income (C/Y) in LCFS with three 50,000-person simulations for 2015–2026, seeds 606, 607 and 608. They use the v3 consumption estimates described in the [estimation README](../../input/regression_files/RegressionEstimates/consumption/README.md). Simulation coefficient bootstrapping and intertemporal optimisation were off; other recorded settings were identical apart from seed. The results retain the original validation conventions so that the change in consumption estimates can be assessed consistently. +The supplied results compare benefit-unit broad expenditure/disposable income (C/Y) in LCFS with three 50,000-person simulations for 2015–2026, seeds 606, 607 and 608. They use the v3 consumption estimates described below. Simulation coefficient bootstrapping and intertemporal optimisation were off; other recorded settings were identical apart from seed. The results retain the original validation conventions so that the change in consumption estimates can be assessed consistently. + +## Estimation and model inputs + +Dataset construction and regression scripts are supplied through the team's shared Drive for integration into the maintained preparation and regression scripts. They are not duplicated under `input/regression_files/RegressionEstimates` in this change. The shared package contains `collect_lcfs.do`, `consumption_modelling_lcfs.do`, the prepared `output_lcfs/lcfs_sorted.dta` and the matching model outputs. Collecting the dataset requires the original LCFS wave files; re-estimation can start from the prepared dataset. + +FW1a models log real monthly benefit-unit broad expenditure using LCFS waves indexed 2008–2023. It retains the existing 14 age groups, adds age-specific linear log-income slopes and a reference-adult student indicator, and uses common quadratic curvature. The reference age group is under 20 (18–19 in the retained adult sample). Other controls cover composition, work, pension receipt, housing status and region. + +Benefit-unit own income sums members' P177/P177p personal net incomes independently of expenditure shares. Expenditure uses household P550tp, recorded personal expenditure and the existing benefit-unit housing/residual attribution rule. The same adult-share allocation of Council Tax or Northern Ireland domestic rates is deducted from income and broad expenditure. Transfers and exceptional purchases remain included; the active dataset tags are `personal_net_ct` and `broad_net_ct`. + +Weekly amounts are converted to monthly equivalents in 2015 prices using CPIH (ONS L522). Estimation requires complete income scope, positive expenditure/income and one or two adults. It uses `weighta` and covariance clustered by household within survey wave. The trend is centred at 2015; 2008 is the reference year and the 2023 indicator is additionally omitted for collinearity with the trend. + +The installed estimates have N=97,107, 82,923 clusters, R-squared 0.5523814416590156 and RMSE 0.6457928727473985. The working `lcfs_model_sample.dta` contains 97,918 rows before the final one/two-adult regression restriction; it is not exactly `e(sample)`. Elasticity reference incomes are the unweighted percentiles calculated in that log-usable working sample. + +The computational `output_model_input/consumption_model_housing_status.csv` supplies all 65 coefficients and the full clustered covariance for `input/regression_files/reg_wealth_financial.xlsx`, sheet `FW1a`. The matching RMSE is installed in `input/regression_files/reg_RMSE.xlsx`, sheet `UK`, entry `FW1a`. The similarly named CSV under `output_writing` is a reader table, not the computational matrix. Other processes and workbook layouts are preserved. + +## Synthetic Java–Stata checks + +The test helper [export_consumption_fixtures.do](../../src/test/stata/export_consumption_fixtures.do) reads the shared package's saved m4 estimates and generates 700 deterministic synthetic cases. It does not read or export observed LCFS rows. The grid spans 14 age bands, two student states, five income levels and five years, with varying region, housing and composition controls. It matches Java's GBP1 monthly income floor, double-precision square and 2023 trend freeze. + +Run from the repository root, with the saved estimates obtained from the shared Drive package: + +```stata +do "src/test/stata/export_consumption_fixtures.do" /// + "D:/consumption-data/output_writing/consumption_model_housing_status.ster" /// + "src/test/resources/simpaths/model/consumption_stata_fixtures.csv" +``` + +`ConsumptionRegressionTest` loads the actual workbooks and compares log predictions, RMSE and conditional means with these Stata results. It also checks age boundaries, the income floor and trend freezing. Regenerate the fixtures whenever the estimated model changes. The checked-in fixtures let the Java tests run without Stata or access to the shared Drive. ## Definition and results From 9477c2a637fd8dfd6ef2c459160a3a5339a12fb3 Mon Sep 17 00:00:00 2001 From: Liang Shi Date: Fri, 23 Oct 2026 14:25:56 +0100 Subject: [PATCH 3/5] Keep consumption validation scripts and results outside PR --- validation/consumption/README.md | 70 +++--------- validation/consumption/average_three_runs.do | 40 ------- validation/consumption/consumption_sim_v3.do | 107 ------------------ validation/consumption/consumption_surv_v3.do | 106 ----------------- .../results/comparison_2016_2023.csv | 25 ---- .../results/individual_run_statistics.csv | 37 ------ .../results/simulation_validation_stats.csv | 13 --- .../simulation_validation_stats_sd.csv | 13 --- .../results/survey_validation_stats.csv | 10 -- 9 files changed, 13 insertions(+), 408 deletions(-) delete mode 100644 validation/consumption/average_three_runs.do delete mode 100644 validation/consumption/consumption_sim_v3.do delete mode 100644 validation/consumption/consumption_surv_v3.do delete mode 100644 validation/consumption/results/comparison_2016_2023.csv delete mode 100644 validation/consumption/results/individual_run_statistics.csv delete mode 100644 validation/consumption/results/simulation_validation_stats.csv delete mode 100644 validation/consumption/results/simulation_validation_stats_sd.csv delete mode 100644 validation/consumption/results/survey_validation_stats.csv diff --git a/validation/consumption/README.md b/validation/consumption/README.md index 11f55e1cc..c27ed0e49 100644 --- a/validation/consumption/README.md +++ b/validation/consumption/README.md @@ -1,26 +1,24 @@ -# Consumption validation: LCFS and three v3 runs +# Consumption model update (FW1a) -The supplied results compare benefit-unit broad expenditure/disposable income (C/Y) in LCFS with three 50,000-person simulations for 2015–2026, seeds 606, 607 and 608. They use the v3 consumption estimates described below. Simulation coefficient bootstrapping and intertemporal optimisation were off; other recorded settings were identical apart from seed. The results retain the original validation conventions so that the change in consumption estimates can be assessed consistently. +This update adds age-specific log-income slopes and a reference-adult student indicator, retaining log broad expenditure, the existing 14 age groups, common quadratic curvature and other controls. Java supplies the new regressors and the trend centred at 2015, preserving the existing 2023 trend freeze. -## Estimation and model inputs +LCFS benefit-unit own income sums members' personal net incomes independently of expenditure shares. The same adult-share allocation of Council Tax or Northern Ireland domestic rates is deducted from both income and broad expenditure. Monthly amounts are expressed in 2015 prices using CPIH (ONS L522); transfers and exceptional purchases remain included. Estimation uses survey weights and household-within-wave clustered covariance. -Dataset construction and regression scripts are supplied through the team's shared Drive for integration into the maintained preparation and regression scripts. They are not duplicated under `input/regression_files/RegressionEstimates` in this change. The shared package contains `collect_lcfs.do`, `consumption_modelling_lcfs.do`, the prepared `output_lcfs/lcfs_sorted.dta` and the matching model outputs. Collecting the dataset requires the original LCFS wave files; re-estimation can start from the prepared dataset. +The updated `input/regression_files/reg_wealth_financial.xlsx`, sheet `FW1a`, contains all 65 coefficients and the full covariance matrix. The matching RMSE is 0.6457928727473985 in `input/regression_files/reg_RMSE.xlsx`, sheet `UK`, entry `FW1a`. Other regression processes are unchanged. Cash-income and donor-matching algorithms are unchanged. -FW1a models log real monthly benefit-unit broad expenditure using LCFS waves indexed 2008–2023. It retains the existing 14 age groups, adds age-specific linear log-income slopes and a reference-adult student indicator, and uses common quadratic curvature. The reference age group is under 20 (18–19 in the retained adult sample). Other controls cover composition, work, pension receipt, housing status and region. +Dataset-construction and regression scripts, validation scripts, result snapshots and detailed documentation are maintained separately in the team's shared Drive workflow. They are outside this PR. The local documentation is titled `consumption_validation_v2_milestone.md`; subsequent Council Tax and three-run results are documented in `consumption_validation_v3_2026-10-22.md` and `v3_three_runs_20261022/validation_report.md` in the shared consumption validation materials. -Benefit-unit own income sums members' P177/P177p personal net incomes independently of expenditure shares. Expenditure uses household P550tp, recorded personal expenditure and the existing benefit-unit housing/residual attribution rule. The same adult-share allocation of Council Tax or Northern Ireland domestic rates is deducted from income and broad expenditure. Transfers and exceptional purchases remain included; the active dataset tags are `personal_net_ct` and `broad_net_ct`. +## Automated prediction checks -Weekly amounts are converted to monthly equivalents in 2015 prices using CPIH (ONS L522). Estimation requires complete income scope, positive expenditure/income and one or two adults. It uses `weighta` and covariance clustered by household within survey wave. The trend is centred at 2015; 2008 is the reference year and the 2023 indicator is additionally omitted for collinearity with the trend. +`ConsumptionRegressionTest` checks Java predictions against 700 deterministic synthetic Stata cases, including log predictions, RMSE and conditional means. It also checks age boundaries, the income floor and trend freezing. The fixtures contain no observed LCFS records. Java tests use the checked-in CSV and require neither Stata nor access to the shared Drive. -The installed estimates have N=97,107, 82,923 clusters, R-squared 0.5523814416590156 and RMSE 0.6457928727473985. The working `lcfs_model_sample.dta` contains 97,918 rows before the final one/two-adult regression restriction; it is not exactly `e(sample)`. Elasticity reference incomes are the unweighted percentiles calculated in that log-usable working sample. +Run from the repository root: -The computational `output_model_input/consumption_model_housing_status.csv` supplies all 65 coefficients and the full clustered covariance for `input/regression_files/reg_wealth_financial.xlsx`, sheet `FW1a`. The matching RMSE is installed in `input/regression_files/reg_RMSE.xlsx`, sheet `UK`, entry `FW1a`. The similarly named CSV under `output_writing` is a reader table, not the computational matrix. Other processes and workbook layouts are preserved. - -## Synthetic Java–Stata checks - -The test helper [export_consumption_fixtures.do](../../src/test/stata/export_consumption_fixtures.do) reads the shared package's saved m4 estimates and generates 700 deterministic synthetic cases. It does not read or export observed LCFS rows. The grid spans 14 age bands, two student states, five income levels and five years, with varying region, housing and composition controls. It matches Java's GBP1 monthly income floor, double-precision square and 2023 trend freeze. +```powershell +mvn -o -Dtest=ConsumptionRegressionTest test +``` -Run from the repository root, with the saved estimates obtained from the shared Drive package: +When replacing the estimated model, regenerate the fixtures from the matching saved m4 Stata estimates supplied through the shared Drive: ```stata do "src/test/stata/export_consumption_fixtures.do" /// @@ -28,46 +26,4 @@ do "src/test/stata/export_consumption_fixtures.do" /// "src/test/resources/simpaths/model/consumption_stata_fixtures.csv" ``` -`ConsumptionRegressionTest` loads the actual workbooks and compares log predictions, RMSE and conditional means with these Stata results. It also checks age boundaries, the income floor and trend freezing. Regenerate the fixtures whenever the estimated model changes. The checked-in fixtures let the Java tests run without Stata or access to the shared Drive. - -## Definition and results - -The statistic is the mean of benefit-unit C/Y, not aggregate expenditure divided by aggregate income. National income quintiles are defined separately within each year and dataset/run, before splitting by reference age. Survey uses `weighta`, complete-income scope, one/two-adult units and nominal weekly income of at least GBP10. Simulation is unweighted and uses real monthly income of at least GBP10; these income screens remain unequal in units and prices. Missing reference ages enter all-age statistics and are excluded from age-specific groups. The older reporting group is **65–84**, including where earlier workbook labels say “65+”. - -Survey income sums personal net income and both income and broad expenditure deduct the same allocated Council Tax/domestic rates. The 2015 simulation has initialisation zeros, exported as missing; usable simulated consumption starts in 2016. Survey results cover 2015–2023; simulation results extend through 2026. Comparisons below use equal-year averages of annual means over the common usable period **2016–2023**. - -| Reference age | LCFS bottom quintile | Three-run simulation | Seed 606 | Seed 607 | Seed 608 | -|---|---:|---:|---:|---:|---:| -| All ages | 1.339 | 1.446 | 1.449 | 1.444 | 1.445 | -| Under 45 | 1.165 | 1.516 | 1.516 | 1.515 | 1.518 | -| 45–64 | 1.894 | 1.635 | 1.650 | 1.622 | 1.631 | -| 65–84 | 1.137 | 0.976 | 0.976 | 0.980 | 0.973 | - -At ages 45–64, aligning Council Tax boundaries and re-estimating reduces the average bottom-quintile gap compared with the saved v2 comparison (LCFS/simulation 2.155/1.634 before that revision). Most of this narrowing comes from the changed survey benchmark and quintile membership. The three-run v3 result remains below LCFS, while young-age overprediction and the older-age shortfall remain. The three runs' variability is smaller than these remaining gaps. These are descriptive comparisons; they do not supply uncertainty intervals for survey estimates, fitted parameters or model specification. - -## Replication - -Run the standalone Stata scripts from the repository root. Each validator requires a source directory and a separate output directory: - -```stata -do "validation/consumption/consumption_sim_v3.do" "D:/simulation-run/csv" "D:/validation-output/seed_606" -do "validation/consumption/consumption_surv_v3.do" "D:/consumption-data/output_lcfs" "D:/validation-output" -``` - -The simulation output directory must already exist under its parent; the script creates only its final directory. The survey validator requires the after-local-tax `lcfs_sorted.dta`. Both preserve the existing sample/quintile rules and export full-precision statistics. They do not edit Excel workbooks. - -`average_three_runs.do` calls both validators and exports the equal-weight average of run-specific annual statistics, together with individual results and sample standard deviations across runs: - -```stata -do "validation/consumption/average_three_runs.do" /// - "D:/run606/csv" "D:/run607/csv" "D:/run608/csv" /// - "D:/consumption-data/output_lcfs" "D:/validation-output" -``` - -The wrapper labels the three inputs as seeds 606/607/608; supply them in that order. It does not recalculate quintiles after pooling runs. Three-run averaging changes validation statistics, not the fitted coefficients or covariance. - -The aggregate CSV snapshots under `results` contain the survey benchmark, three-run mean, per-run statistics, annual across-run SDs and the common-period comparison. No survey or simulated person/benefit-unit microdata are included. Their source runs were `20261022175956_606_0`, `20261022181110_607_1` and `20261022182226_608_2`. Reproducing a 2015-start simulation also requires compatible starting-population and tax-donor inputs; this change does not alter the global run configuration or database/policy-year setup. - -## Scope - -Java changes supply the age-income interactions, reference-adult student status and centred trend required by the new FW1a coefficient names. The complete coefficient/covariance workbook and matching RMSE are installed together. Cash-income, pension double-counting and donor-selection mechanisms are unchanged by this update and remain separate follow-up work. +The helper matches Java's GBP1 monthly income floor, double-precision square and 2023 trend freeze. Update coefficients, covariance, RMSE and fixtures together. diff --git a/validation/consumption/average_three_runs.do b/validation/consumption/average_three_runs.do deleted file mode 100644 index a1b13b0b4..000000000 --- a/validation/consumption/average_three_runs.do +++ /dev/null @@ -1,40 +0,0 @@ -******************************************************************************** -* V3 validation with separate national income quintiles within each run/year. -* Run from repository root. Arguments: three simulation CSV directories, -* prepared survey output_lcfs directory, then a separate output directory. -* Exports CSVs; does not overwrite regression inputs or edit Excel workbooks. -******************************************************************************** -args run606_dir run607_dir run608_dir survey_dir output_dir -if (`"`run606_dir'"'=="" | `"`run607_dir'"'=="" | `"`run608_dir'"'=="" | `"`survey_dir'"'=="" | `"`output_dir'"'=="") { - di as error "Supply three simulation CSV directories, the survey directory and a separate output directory." - exit 198 -} -set more off -capture mkdir "`output_dir'" -foreach seed in 606 607 608 { - capture mkdir "`output_dir'/seed_`seed'" -} -do "validation/consumption/consumption_sim_v3.do" "`run606_dir'" "`output_dir'/seed_606" -do "validation/consumption/consumption_sim_v3.do" "`run607_dir'" "`output_dir'/seed_607" -do "validation/consumption/consumption_sim_v3.do" "`run608_dir'" "`output_dir'/seed_608" -do "validation/consumption/consumption_surv_v3.do" "`survey_dir'" "`output_dir'" - -tempfile stacked -local first=1 -foreach seed in 606 607 608 { - import delimited "`output_dir'/seed_`seed'/simulation_validation_stats.csv", clear asdouble - gen int seed=`seed' - if !`first' append using "`stacked'" - save "`stacked'", replace - local first=0 -} -sort seed year -export delimited using "`output_dir'/individual_run_statistics.csv", replace -ds seed year, not -local metrics `r(varlist)' -preserve -collapse (mean) `metrics', by(year) -export delimited using "`output_dir'/simulation_validation_stats.csv", replace -restore -collapse (sd) `metrics', by(year) -export delimited using "`output_dir'/simulation_validation_stats_sd.csv", replace diff --git a/validation/consumption/consumption_sim_v3.do b/validation/consumption/consumption_sim_v3.do deleted file mode 100644 index 3793f4b3f..000000000 --- a/validation/consumption/consumption_sim_v3.do +++ /dev/null @@ -1,107 +0,0 @@ -*************************************************************************************** -* PROJECT: SUSTAINWELL -* DO-FILE NAME: consumption_sim_v3.do -* DESCRIPTION: GENERATE SUMMARY STATISTICS FROM SIMULATED DATA FOR VALIDATING -* PROJECTION OF CONSUMPTION -*************************************************************************************** -* COUNTRY: UK -* AUTHORS: Justin van de Ven -* LAST UPDATE: 23 Oct 2026 - portable v3 replication -*************************************************************************************** - - -/********************************************************************** -* set-up -**********************************************************************/ -* Optional arguments: input directory, then CSV output directory. -* With no arguments, use the local paths below. Workbook cells are refreshed separately. -args input_dir output_dir -if (`"`input_dir'"'=="" | `"`output_dir'"'=="") { - di as error "Supply the source-data directory and a separate output directory." - exit 198 -} -set more off -global data_dir `"`input_dir'"' -global validation_dir `"`output_dir'"' -capture mkdir "${validation_dir}" -* V3 retains the original income screens and national annual income quintiles. -* Survey uses weighta; simulation is unweighted. Age 65+ denotes 65-84. -* The 2015 simulation is initialisation and must be exported as missing. -global start_year = 2015 -global end_year = 2026 - - -/********************************************************************** -* prepare data for analysis -**********************************************************************/ -import delimited "${data_dir}/BenefitUnit.csv", clear -* Preserve the original simulation income screen: real monthly disposable income. -* Survey uses a weekly screen; these thresholds are not harmonised. -drop if (ydispmonth < 10.0) -gen cons_to_inc = xdiscconsumptionannual / ydispmonth / 12.0 -rename time year -* This assertion protects the treatment of this run's initialisation year. -assert xdiscconsumptionannual == 0 if year == 2015 -replace cons_to_inc = . if year == 2015 -rename agerefperson age -* CSV reference age can be numeric or text containing null. -capture confirm numeric variable age -if (_rc) destring age, replace ignore("null") - - -/********************************************************************** -* analysis -**********************************************************************/ -* Annual income quintiles are defined over ALL ages in each dataset separately. -* Each age-specific result then subsets those national quintiles; it does not -* recalculate income quintiles within an age group. -* All-age results retain missing reference ages. Age-specific results exclude them. -* The older band is 65-84, even where the historical workbook label reads 65+. -* Each reported statistic is the mean of unit-level C/Y, not mean(C)/mean(Y). -matrix stats = J(${end_year} - ${start_year} + 1, 24, .) -forvalues yy = $start_year / $end_year { - - local col = 1 - xtile pct1 = ydispmonth if (year==`yy'), nq(5) - forvalues aa = 1/4 { - - if (`aa'==1) { - gen age_grp = 1 - } - else if (`aa'==2) { - gen age_grp = (age>=0 & age<=44) - } - else if (`aa'==3) { - gen age_grp = (age>=45 & age<=64) - } - else { - gen age_grp = (age>=65 & age<=84) - } - - sum cons_to_inc if (age_grp & year==`yy'), mean - matrix stats[`yy'-${start_year}+1,`col'] = r(mean) - local col = `col' + 1 - - forvalues qq = 1/5 { - - sum cons_to_inc if (age_grp & pct1==`qq' & year==`yy'), mean - matrix stats[`yy'-${start_year}+1,`col'] = r(mean) - local col = `col' + 1 - } - drop age_grp - } - drop pct1 -} -matrix colnames stats = all_mean all_q1 all_q2 all_q3 all_q4 all_q5 under45_mean under45_q1 under45_q2 under45_q3 under45_q4 under45_q5 age45to64_mean age45to64_q1 age45to64_q2 age45to64_q3 age45to64_q4 age45to64_q5 age65to84_mean age65to84_q1 age65to84_q2 age65to84_q3 age65to84_q4 age65to84_q5 -matlist stats - -* Export full-precision results without changing the loaded source data or stats matrix. -* V3 retains the v2 layout and all 18 chart styles: survey 2015-2023, -* simulation 2015-2026, with all chart axes covering 2015-2023. -* CSV generation does not itself update workbook cells or native chart caches. -preserve -clear -svmat double stats, names(col) -gen year = ${start_year} + _n - 1 -export delimited using "${validation_dir}/simulation_validation_stats.csv", replace -restore diff --git a/validation/consumption/consumption_surv_v3.do b/validation/consumption/consumption_surv_v3.do deleted file mode 100644 index 16c0607aa..000000000 --- a/validation/consumption/consumption_surv_v3.do +++ /dev/null @@ -1,106 +0,0 @@ -*************************************************************************************** -* PROJECT: SUSTAINWELL -* DO-FILE NAME: consumption_surv.do -* DESCRIPTION: GENERATE SUMMARY STATISTICS FROM SURVEY DATA FOR VALIDATING -* PROJECTION OF CONSUMPTION -*************************************************************************************** -* COUNTRY: UK -* AUTHORS: Justin van de Ven -* LAST UPDATE: 23 Oct 2026 - portable v3 replication -*************************************************************************************** - - -/********************************************************************** -* set-up -**********************************************************************/ -* Optional arguments: input directory, then CSV output directory. -* With no arguments, use the local paths below. Workbook cells are refreshed separately. -args input_dir output_dir -if (`"`input_dir'"'=="" | `"`output_dir'"'=="") { - di as error "Supply the source-data directory and a separate output directory." - exit 198 -} -set more off -global data_dir `"`input_dir'"' -global validation_dir `"`output_dir'"' -capture mkdir "${validation_dir}" -* V3 retains the original income screens and national annual income quintiles. -* Survey uses weighta; simulation is unweighted. Age 65+ denotes 65-84. -* The 2015 simulation is initialisation and must be exported as missing. -global start_year = 2015 -global end_year = 2023 - - -/********************************************************************** -* load data -**********************************************************************/ -use "${data_dir}/lcfs_sorted.dta", clear // file generated by collect_lcf.do -* Preserve the original survey income screen: nominal weekly disposable income. -* Simulation uses a monthly screen; these thresholds are not harmonised. -* Use direct personal net incomes and the same structural BU scope as estimation. -confirm variable income_definition income_scope_ok -assert income_definition=="personal_net_ct" -keep if income_scope_ok==1 & inrange(na,1,2) -drop if (disp_inc < 10.0) -gen cons_to_inc = consmpn / disp_inc - - -/********************************************************************** -* analysis -**********************************************************************/ -* Annual income quintiles are defined over ALL ages in each dataset separately. -* Each age-specific result then subsets those national quintiles; it does not -* recalculate income quintiles within an age group. -* All-age results retain missing reference ages. Age-specific results exclude them. -* The older band is 65-84, even where the historical workbook label reads 65+. -* Each reported statistic is the mean of unit-level C/Y, not mean(C)/mean(Y). -matrix stats = J(${end_year} - ${start_year} + 1, 24, .) -forvalues yy = $start_year / $end_year { - - local col = 1 - xtile pct1 = disp_inc if (year==`yy') [aweight=weighta], nq(5) - forvalues aa = 1/4 { - - if (`aa'==1) { - gen age_grp = 1 - } - else if (`aa'==2) { - gen age_grp = (age>=0 & age<=44) - } - else if (`aa'==3) { - gen age_grp = (age>=45 & age<=64) - } - else { - gen age_grp = (age>=65 & age<=84) - } - - sum cons_to_inc if (age_grp & year==`yy') [aweight=weighta], mean - matrix stats[`yy'-${start_year}+1,`col'] = r(mean) - local col = `col' + 1 - - forvalues qq = 1/5 { - - sum cons_to_inc if (age_grp & pct1==`qq' & year==`yy') [aweight=weighta], mean - matrix stats[`yy'-${start_year}+1,`col'] = r(mean) - local col = `col' + 1 - } - drop age_grp - } - drop pct1 -} -matrix colnames stats = all_mean all_q1 all_q2 all_q3 all_q4 all_q5 under45_mean under45_q1 under45_q2 under45_q3 under45_q4 under45_q5 age45to64_mean age45to64_q1 age45to64_q2 age45to64_q3 age45to64_q4 age45to64_q5 age65to84_mean age65to84_q1 age65to84_q2 age65to84_q3 age65to84_q4 age65to84_q5 -matlist stats - -* Export full-precision results without changing the loaded source data or stats matrix. -* Refreshed v2 uses C4:Z12 for 2015-2023. Workbook v1 remains historical. -* The personal-net-income definition and weighta differ from the historical -* workbook's expenditure-allocated income and weighta/na; label this in v2. -* The original nominal-weekly income exclusion is retained for continuity. -* CSV generation does not itself write XLSX cells or chart caches. -* After-CT statistics belong to v3, paired with the next revised simulation. -preserve -clear -svmat double stats, names(col) -gen year = ${start_year} + _n - 1 -export delimited using "${validation_dir}/survey_validation_stats.csv", replace -restore diff --git a/validation/consumption/results/comparison_2016_2023.csv b/validation/consumption/results/comparison_2016_2023.csv deleted file mode 100644 index 912e94d15..000000000 --- a/validation/consumption/results/comparison_2016_2023.csv +++ /dev/null @@ -1,25 +0,0 @@ -metric,survey,three_run_mean,seed_606,seed_607,seed_608,run_sd,run_min,run_max -all_mean,0.8522266882214895,0.8819164702381396,0.8824235696164363,0.8817446188599458,0.8815812222380366,0.00044669558830879517,0.8815812222380366,0.8824235696164363 -all_q1,1.338870438733884,1.4461289176314032,1.4491251659134956,1.4444753787259683,1.4447862082547451,0.0025994771733844845,1.4444753787259683,1.4491251659134956 -all_q2,0.7765462532848522,0.8099656595257092,0.8121980137641559,0.8090229511956015,0.8086760136173703,0.0019410423759491497,0.8086760136173703,0.8121980137641559 -all_q3,0.7777404389979764,0.7585493396402845,0.758105051120763,0.7587621131805885,0.7587808546195018,0.000384879236666598,0.758105051120763,0.7587808546195018 -all_q4,0.7353218366985208,0.7334019049590137,0.7321353869388509,0.7350683760296433,0.7330019519085471,0.0015068437489036053,0.7321353869388509,0.7350683760296433 -all_q5,0.6322620100145939,0.6614020907501513,0.6603932260036048,0.6612500928803191,0.66256295336653,0.0010928205349835514,0.6603932260036048,0.66256295336653 -under45_mean,0.7563549448591624,0.9265779257896355,0.9257685422978216,0.9264614968840342,0.9275037381870508,0.0008734374396853657,0.9257685422978216,0.9275037381870508 -under45_q1,1.1652837160805039,1.5163790303247153,1.5158344212691088,1.5151903989180047,1.5181122707870318,0.0015351817717584183,1.5151903989180047,1.5181122707870318 -under45_q2,0.620880314408079,0.6877611683810174,0.6880492941900157,0.6874065105774433,0.6878277003755933,0.00032651580800107104,0.6874065105774433,0.6880492941900157 -under45_q3,0.6963440372881742,0.695136837966463,0.6956543744264426,0.6958374699379419,0.6939186695350044,0.0010589295241585,0.6939186695350044,0.6958374699379419 -under45_q4,0.7080741252428925,0.7113856990734297,0.708875830102957,0.7139143159878227,0.7113669511295095,0.00251929526198277,0.708875830102957,0.7139143159878227 -under45_q5,0.6166107412225054,0.6661612985288368,0.6638399313222894,0.6657902397166167,0.6688537245476041,0.0025274085756259316,0.6638399313222894,0.6688537245476041 -age45to64_mean,0.976912404784198,0.9099829947248019,0.9121661874656517,0.9085268496836567,0.909255947025098,0.0019255242509762967,0.9085268496836567,0.9121661874656517 -age45to64_q1,1.8934940624570356,1.6345548150584757,1.6502407594367567,1.6220890108226622,1.6313346749160076,0.014349467391183665,1.6220890108226622,1.6502407594367567 -age45to64_q2,1.0016278862095314,0.9962627553812314,1.0001156914729226,0.9923093594013812,0.9963632152693904,0.0039041355310286655,0.9923093594013812,1.0001156914729226 -age45to64_q3,0.8952630089538323,0.8768167209131301,0.8759631270173576,0.8779018067048416,0.8765852290171912,0.0009898540832263575,0.8759631270173576,0.8779018067048416 -age45to64_q4,0.7710081845823971,0.7997691936266024,0.7990072697734801,0.7990661218667494,0.8012341892395778,0.001269064616853017,0.7990072697734801,0.8012341892395778 -age45to64_q5,0.64690350410462,0.6688480872367008,0.6689168009316686,0.6695511238311431,0.6680763369472906,0.0007397906914140902,0.6680763369472906,0.6695511238311431 -age65to84_mean,0.8622446684875749,0.8011695612783954,0.8006573232673604,0.8026893588057207,0.8001620017621053,0.0013392812406063021,0.8001620017621053,0.8026893588057207 -age65to84_q1,1.1368223234891643,0.9765342834302599,0.9764559801056238,0.9797235365318833,0.973423333653273,0.0031508312610958604,0.973423333653273,0.9797235365318833 -age65to84_q2,0.823382148296001,0.8599670002852959,0.8611917734691668,0.8600412847593707,0.8586679426273498,0.001263554180414541,0.8586679426273498,0.8611917734691668 -age65to84_q3,0.7770263597386602,0.7773460660165735,0.7751426266292263,0.7784439635602303,0.7784516078602639,0.0019082383129775777,0.7751426266292263,0.7784516078602639 -age65to84_q4,0.7344226733351727,0.6950053538642893,0.6948548501168456,0.6978392102236551,0.6923220012523674,0.0027616819588269716,0.6923220012523674,0.6978392102236551 -age65to84_q5,0.6392836863094074,0.6237315683843143,0.6241391221900593,0.6229050881035637,0.6241504948593197,0.0007157755061844724,0.6229050881035637,0.6241504948593197 diff --git a/validation/consumption/results/individual_run_statistics.csv b/validation/consumption/results/individual_run_statistics.csv deleted file mode 100644 index 2c863902d..000000000 --- a/validation/consumption/results/individual_run_statistics.csv +++ /dev/null @@ -1,37 +0,0 @@ -all_mean,all_q1,all_q2,all_q3,all_q4,all_q5,under45_mean,under45_q1,under45_q2,under45_q3,under45_q4,under45_q5,age45to64_mean,age45to64_q1,age45to64_q2,age45to64_q3,age45to64_q4,age45to64_q5,age65to84_mean,age65to84_q1,age65to84_q2,age65to84_q3,age65to84_q4,age65to84_q5,year,seed -,,,,,,,,,,,,,,,,,,,,,,,,2015,606 -1.006012343132448,1.520387670907318,.9904631363211749,.9058314698283921,.864677217763488,.7481352672653672,.9808532632759902,1.528428558880693,.8011453431893262,.7882734281208362,.8230725774886959,.73199496039565,1.084954056468561,1.848116212847676,1.19527668602985,1.036844789861875,.9320394319052501,.7698114566388156,.9885419241600435,1.072260998807666,1.06386057657948,.9775514206622796,.8525651746081111,.712736056974301,2016,606 -.9303350636083966,1.512393322282647,.87105218792891,.8043781194521455,.7633249549208215,.7004194613861952,.9943891794059898,1.5970971968681,.7530786704629828,.7691793637634334,.7467476506143632,.7129500363715167,.9525187705120739,1.686669950862746,1.04610035526592,.9426716436554845,.841853188236505,.7064458627881957,.8228371690332111,1.029715190910995,.9335564730368602,.7565513919957363,.7089308350642279,.6505543299019336,2017,606 -.9872585170619278,1.692262304471723,.8775238502445546,.8209287525530328,.8132598370726813,.7322199002362111,1.054823773419422,1.789782211064019,.7519940234190925,.768413054265085,.8021672805825548,.7309974387355216,1.019027522090932,1.975397806106643,1.092598638073402,.9407728619188604,.8737138174809496,.7435375488067508,.8676831571244347,1.056460273340126,.9177303676059525,.856510033316607,.7645842878869581,.6985742009520156,2018,606 -.9583801029887379,1.565559187605789,.8608815655329065,.8319945149561225,.8163995257432856,.7169788254799613,1.008536625557977,1.674947501918321,.7346364390884623,.7648671320578118,.7786498482671349,.7220451312050218,.9684184663892487,1.692644714395393,1.069371543262365,.9201489429904055,.8882827789366802,.7116298096772636,.8773787032588226,1.035841975810117,.8995014269357081,.8819674148650493,.7771003160258414,.7207764379680157,2019,606 -.7776947714923492,1.186123040680878,.7530573461160013,.7081623011096962,.6610727231121726,.5797648814102921,.724119776918985,1.107002613736758,.6192252082501685,.584015587720666,.6027307619773586,.567711504166728,.8858320164783902,1.613055900039737,.969624466742971,.8390816049432276,.7425862693565741,.5955789980115013,.7843326524969056,.9344607034569267,.7880928099626343,.7903894834207845,.6663518324494362,.5624179813838515,2020,606 -.7761019697672054,1.283466525870546,.705577130632271,.6610735856406598,.6397388655275673,.5905627993194726,.8248883489100395,1.331761705930701,.6044969751375515,.6249251716999055,.6256960034143908,.6047842873615377,.8012271643415854,1.579236207941775,.8733728138783328,.7620931858294059,.7129186647305936,.58712027144184,.691870039261511,.9117946467258605,.7409841368087638,.6550535494970454,.5818072239550794,.5752271148699818,2021,606 -.8717709038342274,1.672152248939691,.7299177061595131,.674013705138528,.6653446025040741,.6173817905818823,1.028895169568446,1.917958884166133,.62437961280939,.6332614863483275,.6785790581336003,.6259195338261625,.8078190897927446,1.428121060681727,.8810337007865734,.8020761711912069,.710248849364149,.6338087432741704,.6907880747484259,.8805920310050296,.7835327127696802,.644065893126523,.6011382567561228,.5319119103315497,2022,606 -.7518348850461979,1.160657026549373,.7091111871779158,.658457960287527,.6332653688667166,.597682882349457,.7896422013257228,1.179696697588146,.6154380811631519,.6322997714354757,.6133634603455574,.6143165585161769,.7775324136516775,1.378684222618356,.8735473277439665,.7640158157483949,.6904151581771399,.6034017168148116,.6818268660555283,.8905220207882698,.7622756840542548,.6390518261497854,.6063608741889875,.5409149451388253,2023,606 -.7584331753067735,1.217226331228932,.6970743025269939,.6443438147320555,.6234578300991446,.6099881633601051,.8106851907182886,1.261562883736401,.621437675563701,.5973464787429106,.6097289648702612,.6194247271150476,.7808181843770233,1.426535573367656,.8468485902323507,.767927499006781,.685092951262173,.6209352812754659,.6648270317437586,.8628393378474809,.7469657861494916,.64501302857092,.5731136202688019,.5508105490344882,2024,606 -.7457136382314626,1.203597490911791,.686652923128064,.640543030175045,.6090909216363019,.5886094693703073,.7906344605101951,1.230208005278694,.5948362045371838,.5972854989689298,.5848556913668398,.5907350714585864,.7710273291489309,1.392889340056666,.8288042825689308,.7731348716764844,.688523327592764,.598974299462218,.6573014161551702,.9089067255494476,.747837474200293,.6170380550342767,.5671862005204183,.5494794573917285,2025,606 -.7399386242507494,1.162419936577609,.7012358588011809,.6288037842808304,.6199412139169374,.5872923276771896,.7817073991299999,1.178754542790828,.6251441797910856,.5925316301176894,.5817946890098097,.603034484830192,.770825168251867,1.340680786117636,.8908880426500163,.7506234379855762,.7012126918423407,.5970863752873451,.6507600784350439,.9290638876675862,.7174025305140945,.6093690734931999,.581470640843517,.5472601578083772,2026,606 -,,,,,,,,,,,,,,,,,,,,,,,,2015,607 -1.004665508848094,1.519308255073549,.983543350957272,.9110065657762073,.8633592010115689,.7461101714218739,.9824628371645472,1.52933841944919,.7969579984930074,.797729265364324,.8255083296905985,.7331695553606956,1.084008933963453,1.841216119078085,1.206607883880829,1.029353478602511,.9295405624354065,.7673954930426418,.9860259814369022,1.065429558744654,1.054886570396338,.9829230218815969,.8519356102385806,.7077485130452291,2016,607 -.9300904631741748,1.513746267808927,.8706396007845195,.8019532451011638,.7642955165809195,.6997752702743677,.9961786005698284,1.607783543874107,.7512365501302285,.7616710008107307,.7491154155606846,.7125950385805521,.9533982250637681,1.672912877965492,1.046864581345816,.9536286716847751,.8432040002894097,.7059939969724235,.818882889084518,1.026727895912497,.927919090961431,.7520756266538113,.7085446339614433,.647165004883103,2017,607 -.9878702137629143,1.687410038427028,.8815001407993659,.818844819537583,.8208746453560957,.7306746788684552,1.054141303879324,1.78678942048478,.7598433484140422,.7690117434101619,.8013634824054461,.7310468854739515,1.019444325851764,1.956202283975563,1.099462040901677,.9318749235353445,.8844205132907911,.7403941969621585,.8675549466297424,1.053385077892466,.9197025952147337,.8509164574078383,.7689608064018377,.6908893187059796,2018,607 -.9601668764074004,1.561570880675437,.8641971068469239,.8346363331058292,.814540136842081,.7258475291718997,1.014199203746017,1.679532018819512,.7368924683203052,.7651757380893911,.786907203826207,.7328073256885406,.971765028397914,1.685060927983035,1.080862544703524,.9304209205820766,.8785634594715622,.7230736746079495,.8843319419654269,1.05544715992887,.9079482046496855,.8842980665279133,.7809701038628282,.7110831164647191,2019,607 -.7791790619739032,1.188742763706365,.7565549447771356,.7047363812817342,.6651182375654685,.579919401798641,.7261334996650424,1.108613135108706,.6319975248458948,.5758194837753068,.6112645665349695,.5633836897493583,.8812509775501246,1.593642279846391,.9499028246338461,.8365503300582608,.7430843521610109,.5958500313430674,.7939065218039736,.9522955376722246,.8002053544113737,.7983027447604347,.6632951265568973,.5757674976571727,2020,607 -.7700246578132647,1.261836155823242,.7031545091802099,.6557942375130229,.6371503486499396,.5921356209867339,.8192761514269348,1.308401299041367,.6105761106519663,.6212982174409225,.6255523286777426,.6096946162458827,.7853129942768386,1.505389444290468,.8634344875762189,.7634592953424154,.6925059073865414,.5854916744010614,.6919549090604954,.9196451952876393,.7387426192227703,.641194416106656,.5938867802554335,.5762789432200597,2021,607 -.8702475071476943,1.661538001571624,.7220160802160707,.6788414751689108,.6707245299038345,.6180126289474981,1.029345922558513,1.916734125413066,.6107124116133076,.6376676654151405,.6928249645967874,.6315034046755164,.8023357712371922,1.383489727069893,.8514412885075555,.8124488017950129,.7159280534555663,.6366144075780955,.6942831502148846,.8698259273015565,.7918627163098624,.659401381363741,.5964398165421368,.5247074107854811,2022,607 -.7517126617521206,1.161650666721574,.6905778760033143,.664283847960257,.644484392327238,.5975254415730838,.7899544560620672,1.184331229153309,.6010356721507946,.6383266451975576,.6187782366101457,.6121214019584367,.7706985411281991,1.338798426372371,.8398992236615833,.7654780320383364,.7052821264437077,.6015955157417476,.6845745302498222,.8950319395151589,.7390631269087712,.6584399937798512,.6186808039700836,.5496009000667653,2023,607 -.7549563494930586,1.208916974698131,.6904373319241296,.6362463127264512,.6355298556579468,.6036264276183982,.8074248469357931,1.247058286436806,.6096393778418514,.5895648759498584,.6268034520377674,.6185894818384186,.7745240968333882,1.412151519750709,.8526023978943398,.7471767693339733,.6895567153268214,.6113477838291435,.6639452628519582,.8589626553827505,.7266924289539634,.6566792689148397,.5886826754572662,.5553405862339835,2024,607 -.7463596224460121,1.197547292463813,.7012516151106629,.6221833423963875,.6260878067846182,.5846549768108243,.7891624334495771,1.209596201181515,.6134460090914238,.5800746204599065,.6102540482502946,.598347413023183,.7808967206856904,1.450577170171697,.867279713683331,.7616153664674964,.6962979113146902,.5952010487549916,.6493297137641439,.895629974095992,.7382219592131928,.6041298002204447,.5745361396891031,.5334357151019198,2025,607 -.7411043083677263,1.161839260175349,.6986621864524389,.6310901723021553,.6279621818785867,.5859009577044182,.7848535811569269,1.17259784261461,.6186807092413013,.5997223959520426,.6038696918011489,.6056484147181382,.7717867370501802,1.382865867843439,.8566279058458482,.7557073807212451,.7167541360645509,.5935964113960757,.6518239004086298,.9252492544477555,.7348198660695674,.6160744804729515,.5722575100517477,.5405938635346127,2026,607 -,,,,,,,,,,,,,,,,,,,,,,,,2015,608 -1.00401479501719,1.521179763285077,.9812448224392766,.9117738186394855,.8570686932653189,.7487393680755087,.9842101985758567,1.533064746078397,.8009103747566094,.7976086687154677,.823234035611313,.736539369354664,1.081265455334482,1.826632888896728,1.196327632854855,1.037951867564543,.923744812897577,.7715945286110869,.9860726559469403,1.080858988889802,1.048758915161395,.9850336963582077,.8462980813740079,.705384257612592,2016,608 -.9313489802603794,1.517073091857304,.8710485476283993,.8035206416178383,.7652584481699296,.6998014747196405,.9976852958667366,1.610005057376596,.7556774681843523,.7692539808946895,.7420487986364975,.71559076516508,.9510334076495619,1.670450302529929,1.05405885263133,.9370235603730127,.847235403024175,.7030537833216483,.8228290819793306,1.035371441115104,.9277116426410927,.7553554775842121,.71575148122716,.6504753246624894,2017,608 -.9877918251019882,1.693719445316928,.8705082824805664,.8229246072331688,.819105121047171,.7326253551719688,1.056072212469987,1.803531904983914,.7379510250860245,.7664851896725979,.8123637636541285,.7309984906282135,1.020730602640103,1.969601333838947,1.084989165948913,.9481272741668993,.8732672558108034,.7463868617752398,.8670143950867792,1.0606293343971,.9190073357258259,.8541571911188213,.7672479567664467,.676912470310295,2018,608 -.9530569966361943,1.535939547207867,.8612239752079287,.8263004548559457,.8127525705178837,.7289630697820597,1.005686298389041,1.657059487710959,.7399325292862218,.7563716011190005,.7840270492030181,.7344211037187706,.9677225158986996,1.675799999495329,1.076816763466873,.9102427906474051,.8836521563573696,.7221578731522208,.8795042758341962,1.045970612692941,.9018278083164398,.8896952715790535,.7636730844962216,.7226396730093627,2019,608 -.7770037975970523,1.177996513962126,.7529068988773625,.7072934353816603,.6674478155328587,.5789578528169845,.7281875349768224,1.11057551792939,.628982026760698,.5699612393725537,.6154828773975575,.5698161586572271,.8789569038828783,1.573275153848627,.9601635549133378,.8422689827775878,.750308828190284,.5927651128836817,.7856821575002864,.9207178773947909,.7876165618910234,.8040406079246447,.6608555860761413,.5660339495810596,2020,608 -.7735452847528907,1.270794400916598,.7102726421996577,.6569908046053462,.6409734933079624,.58866194952069,.8230941866486443,1.314173044805709,.6187122730305298,.6185747414425092,.6324721042168924,.60692167623416,.7922098147492955,1.544764717400669,.8761993281063604,.764870679241839,.7023281164158307,.5781923144924559,.69001476392731,.9125940139043316,.7417816011980176,.6371768863568609,.5921072265592174,.580563341266063,2021,608 -.8703363396490744,1.669661475480958,.7213387833126671,.6764477382856909,.6629266410212886,.6212635159448199,1.028981392215366,1.914182984359618,.6125829666963166,.640513833074042,.6750376006938018,.6361581008082549,.8029424754767031,1.433147014694981,.8559070159217198,.8022705401470865,.7140759609378894,.6300808195876495,.6919382903053571,.8738374451456322,.7896932016305931,.6479298190796809,.5914375550830654,.5420900214790799,2022,608 -.7555517588895236,1.171925428011104,.7008641567931041,.6649953363368787,.6384828324059635,.6014910409005678,.7961127863539526,1.202305423051671,.6078729392039933,.6325801019891742,.6062693796228676,.6203841318144625,.779186400569061,1.357005988622851,.8664434083117345,.7699261372191554,.7152609802826928,.6003794017543417,.6782403935166426,.8574069556864825,.7529464744544103,.6542239128806308,.6012050384366792,.549104920953616,2023,608 -.7563719616630533,1.221230950851974,.6872295986614433,.6451011253265417,.6256460562344694,.6026520772408379,.8002838096015504,1.239269711157066,.6086329926397779,.5924483216738656,.6072147325038855,.6075166630610709,.7877328061415344,1.497107096642641,.8352887630649222,.7581014411278679,.6943723004333151,.6175009802965764,.664291590060605,.8728787226691133,.7285049203936128,.6646369003230204,.5744453657097769,.5552887817326281,2024,608 -.750307399919069,1.213147449534908,.6951112326811703,.633020357201437,.6195899028543984,.59062307983678,.7992674405028223,1.239199635790563,.6030202367907197,.5974812963297241,.6019257641998914,.5977931285520206,.7754095520516746,1.400844514559788,.8667602028955917,.7558251236754421,.6869504278277171,.6026907051770711,.6482342138907495,.8851227834023284,.7308830364102235,.6086026334093781,.571323186458063,.5423640108333444,2025,608 -.7407769097659601,1.168739582385098,.69981928896153,.6307622365251198,.6122668210331584,.592228451292747,.7808808577625804,1.181362778625093,.6026089596504598,.5915835034460053,.5917739863431937,.6170552263146866,.7799418264952847,1.393500442939513,.8855109259243056,.7751347540514923,.6960892116582227,.5958433330740969,.6509261574864885,.8915924427409967,.7473426869189895,.6147801236413357,.5623985304824041,.5505867730826139,2026,608 diff --git a/validation/consumption/results/simulation_validation_stats.csv b/validation/consumption/results/simulation_validation_stats.csv deleted file mode 100644 index 435d3a067..000000000 --- a/validation/consumption/results/simulation_validation_stats.csv +++ /dev/null @@ -1,13 +0,0 @@ -year,all_mean,all_q1,all_q2,all_q3,all_q4,all_q5,under45_mean,under45_q1,under45_q2,under45_q3,under45_q4,under45_q5,age45to64_mean,age45to64_q1,age45to64_q2,age45to64_q3,age45to64_q4,age45to64_q5,age65to84_mean,age65to84_q1,age65to84_q2,age65to84_q3,age65to84_q4,age65to84_q5 -2015,,,,,,,,,,,,,,,,,,,,,,,, -2016,1.004897548999244,1.520291896421981,.9850837699059077,.9095372847480282,.8617017040134586,.7476616022542499,.9825087663387979,1.530277241469427,.799671238812981,.7945371207335427,.8239383142635358,.7339012950370032,1.083409481922165,1.838655073607496,1.199404067588511,1.034716712009643,.9284416024127445,.7696004927641814,.9868801871812952,1.072849848814041,1.055835354045738,.9818360463006948,.8502662887402331,.7086229425440407 -2017,.9305915023476503,1.514404227316293,.8709134454472763,.8032840020570493,.7642929732238902,.6999987354600677,.9960843586141849,1.604961932706268,.7533308962591878,.7667014484896179,.7459706216038485,.7137119467057161,.9523168010751347,1.676677710452722,1.049007929747689,.9444412919044241,.8440975305166966,.7051645476940891,.8215163800323532,1.030604842646199,.9297290688797947,.7546608320779198,.7110756500842771,.649398219815842 -2018,.9876401853089435,1.691130596071893,.8765107578414956,.8208993931079283,.8177465344919826,.7318399780922117,1.055012429922911,1.793367845510905,.7499294656397196,.7679699957826149,.8052981755473766,.7310142716125623,1.019734150194266,1.967067141307051,1.092349948307997,.9402583532070348,.8771338621941814,.7434395358480498,.867417499613652,1.056824895209897,.9188134328488374,.8538612272810889,.7669310170184142,.6887919966560968 -2019,.9572013253441108,1.554356538496364,.8621008825292531,.8309771009726324,.8145640777010833,.7239298081446401,1.009474042564345,1.670513002816264,.7371538122316631,.7621381570887346,.7831947004321199,.7297578535374442,.9693020035619542,1.684501880624586,1.075683617144254,.9202708847399624,.8834994649218707,.718953785812478,.8804049736861486,1.045753249477309,.9030924799672778,.885320250990672,.7739145014616304,.7181664091473658 -2020,.7779592103544349,1.18428743944979,.7541730632568332,.7067307059243636,.6645462587368333,.5795473786753059,.7261469371869499,1.108730422258285,.6267349199522538,.5765987702895089,.6098260686366285,.5669704508577712,.8820132993037976,1.593324444578252,.9598969487633849,.8393003059263586,.7453264832359562,.5947313807460834,.7879737772670552,.9358247061746474,.7919715754216772,.7975776120352881,.6635008483608248,.5680731428740279 -2021,.7732239707777869,1.272032360870129,.706334760670713,.6579528759196763,.6392875691618231,.5904534566089655,.8224195623285396,1.318112016592592,.6112617862733492,.6215993768611124,.6279068121030086,.6071335266138601,.7929166577892399,1.543130123210971,.8710022098536374,.7634743868045534,.7025842295109884,.5836014201117857,.6912799040831055,.9146779519726104,.740502785743184,.6444749506535207,.5892670769232434,.5773564664520349 -2022,.8707849168769988,1.667783908664091,.7244241898960836,.6764343061977099,.6663319244763991,.6188859784914,1.029074161447442,1.916291997979606,.6158916637063382,.6371476616125032,.6821472078080631,.6311936797699779,.8043657788355466,1.4149192674822,.8627940017386161,.8055985043777688,.7134176212525348,.6335013234799718,.6923365050895559,.8747518011507395,.7883628769033786,.6504656978566482,.596338542793775,.5329031141987036 -2023,.7530331018959474,1.164744373760684,.7001844066581113,.6625790481948876,.6387441978666394,.5988997882743695,.7919031479139141,1.188777783264375,.6081155641726466,.6344021728740691,.6128036921928569,.6156073640963587,.7758057851163125,1.358162879204526,.8599633199057615,.7664733283352957,.7036527549678467,.601792211436967,.6815472632739977,.880986971996637,.7514284284724789,.6505719109367557,.6087489055319167,.5465402553864022 -2024,.7565871621542951,1.215791418926346,.6915804110375223,.6418970842616828,.6282112473305203,.6054222227397804,.8061312824185441,1.249296960443424,.6132366820151101,.5931198921222115,.6145823831373046,.615176957338179,.7810250291173153,1.445264729920335,.8449132503972042,.7577352364895408,.6896739890074365,.6165946818003952,.6643546282187739,.8648935719664482,.7340543784990227,.65544306593626,.5787472204786149,.5538133056670332 -2025,.7474602201988478,1.204764077636837,.6943385903066325,.6319155765909564,.6182562104251061,.5879625086726373,.7930214448208649,1.226334614083591,.6037674834731092,.5916138052528536,.5990118346056753,.5956252043445966,.775777867295432,1.41477034159605,.8542813997159512,.7635251206064743,.6905905555783903,.5989553511314269,.6516217812700212,.8965531610159226,.7389808232745697,.6099234962213665,.5710151755558615,.5417597277756643 -2026,.7406066141281453,1.164332926379352,.6999057780717166,.6302187310360351,.620056738942894,.588473912224785,.782480612683169,1.17757172134351,.6154779495609489,.5946125098385791,.5924794557180507,.6085793752876723,.7741845772657773,1.372349032300196,.8776756248067233,.7604885242527711,.7046853465217048,.5955087065858392,.6511700454433874,.9153018616187794,.7331883611675504,.6134078925358291,.5720422271258897,.5461469314752013 diff --git a/validation/consumption/results/simulation_validation_stats_sd.csv b/validation/consumption/results/simulation_validation_stats_sd.csv deleted file mode 100644 index c7366507f..000000000 --- a/validation/consumption/results/simulation_validation_stats_sd.csv +++ /dev/null @@ -1,13 +0,0 @@ -year,all_mean,all_q1,all_q2,all_q3,all_q4,all_q5,under45_mean,under45_q1,under45_q2,under45_q3,under45_q4,under45_q5,age45to64_mean,age45to64_q1,age45to64_q2,age45to64_q3,age45to64_q4,age45to64_q5,age65to84_mean,age65to84_q1,age65to84_q2,age65to84_q3,age65to84_q4,age65to84_q5 -2015,,,,,,,,,,,,,,,,,,,,,,,, -2016,.001018789277526,.0009394228603165,.0047983325863561,.0032321768830002,.0040660648646903,.0013771120753006,.0016789388817518,.0024565418828711,.0023526702524028,.0054248520484695,.0013620677340907,.0023589182716033,.0019159727670129,.0109682504266706,.0062607786406598,.0046775645045759,.0042551099832048,.0021074520738483,.0014392956497454,.0077315513901484,.0075954056643898,.0038577518495332,.0034509549547725,.00375309321427 -2017,.0006672982349068,.002408265735539,.0002371634192645,.0012296351555685,.0009667491337391,.0003645948394106,.0016500779043288,.0069010385387675,.0022311771960255,.0043566552326969,.0035968179340478,.0016367574531164,.001195275738366,.0087406933794031,.0043908856575487,.00844281775314,.002800152889658,.0018418850007099,.0022806736459559,.0043899121374853,.0033162517452004,.0023173299578509,.0040539900691188,.0019344242447874 -2018,.0003328500918213,.0033034416526198,.0055655192469339,.0020400523015418,.0039850526181272,.0010293396606069,.0009791810116652,.0089286212592401,.0110912242017233,.001320262875857,.0061321631051439,.0000282493289407,.0008877609201646,.0098454871038834,.0072396417245019,.0081383821901935,.0063143738790242,.0029975344527696,.0003549358074728,.0036358664589297,.001000309541836,.0028085082885268,.0022054062393771,.0109821087881294 -2019,.0036986125968876,.01607376197824,.0018234386167028,.00426005457237,.001823595480793,.0062180196467114,.0043331804009387,.0118744368422603,.0026576998185845,.0049963672037529,.0041911315374904,.0067279740052634,.0021612392922211,.0084362613448051,.0058287043132697,.0100896176467612,.0048614584974173,.0063592564737138,.0035630499004559,.0098043993267402,.0043630905589572,.0039640368508597,.0090779282091425,.0062046504837786 -2020,.0011114808640436,.0056033512116473,.0020641410502851,.0017809351471876,.0032258054309548,.0005163571349619,.0020339123210015,.001789337391054,.006676086770091,.0070595072403061,.0064966198191957,.0032796393197594,.003500377714238,.0198922775549618,.0098635237617951,.0028655924031661,.0043220183425056,.0017082218084138,.0051820251103009,.0158329572319802,.0071346366687313,.006854390064534,.0027538921809773,.0069044281549946 -2021,.0030513705362223,.010868193765789,.0036190408780504,.0027680435461871,.0019511176480014,.0017394151990706,.0028662743461329,.0121681459788338,.0071324110117019,.0031859086397432,.0039543115293695,.0024620099259838,.0079805966271174,.0369505081029577,.0067044843963882,.0013888082042527,.0102087884214986,.0047546713641542,.0010964649702793,.0043202866322188,.001575635426652,.0093789765668642,.0065214076371132,.0028265916355468 -2022,.0008550441586223,.0055506310147117,.0047695621891598,.0024139130436506,.0039916000881739,.002083027248428,.0002392679717984,.0019263858226673,.0074100407597828,.003654030134463,.0094152189421615,.0051263057458106,.0030060006543392,.0273345397131995,.0159530763915441,.0059333275530075,.0028962731456092,.0032776246283893,.0017812409690512,.0054409817511678,.0043214074853849,.0079760460597384,.0048511437328217,.008733593330411 -2023,.0021820768597535,.0062387887693496,.0092853352636385,.0035866527686217,.0056140765741089,.002245470892508,.003648995423672,.0119422568791766,.0072042693242527,.0034015817744402,.0062731874729381,.0042799311271078,.004499652658407,.01996804903859,.0177353428609836,.0030783008317883,.0125027939909428,.0015207281080371,.0031763115913326,.0205450168805273,.0116804987055575,.0101969652182124,.0089792881408128,.0048779693886176 -2024,.0017483743515911,.0062811409924025,.0050209083784414,.004908339234575,.0064318429934613,.0039841184690984,.005319977833988,.0113139352965241,.0071200719225132,.0039340298241788,.0106581534470295,.0066471414891632,.006606783556067,.0454692037553036,.0088175757983549,.0103802107332335,.0046407860430231,.0048575775386447,.000444251563504,.0071818619132709,.011218271566607,.0098701688936364,.0086300831806242,.0026005925233127 -2025,.0024867947584774,.0078652348090186,.0073299511649054,.0092295687320923,.0085765714483252,.0030361953231557,.0054590349386197,.0151770617932383,.0093273784950547,.0099937066905106,.0129474851749238,.0042440378828272,.0049449938741674,.0312636838812717,.0220653596493892,.0088114819762855,.0050048911619761,.0037448641643762,.0049491129826064,.0119188162827198,.0085026552436325,.0065547135338453,.0036846376324881,.0080389231353334 -2026,.0006012115420858,.0038273044216221,.0012890142025228,.0012363014230006,.0078483181345284,.0033251165859143,.0020961935003955,.0045005917110022,.0116039772868696,.0044506109823051,.0110543974208708,.0074557491467243,.0050090510734539,.0279362114302911,.0184250699092966,.0129362148220645,.0107612393836117,.0017688818941845,.0005723113658764,.0206213545697677,.0150366085794428,.0035570893081585,.0095378775658027,.0050886162127135 diff --git a/validation/consumption/results/survey_validation_stats.csv b/validation/consumption/results/survey_validation_stats.csv deleted file mode 100644 index b9a2db24d..000000000 --- a/validation/consumption/results/survey_validation_stats.csv +++ /dev/null @@ -1,10 +0,0 @@ -all_mean,all_q1,all_q2,all_q3,all_q4,all_q5,under45_mean,under45_q1,under45_q2,under45_q3,under45_q4,under45_q5,age45to64_mean,age45to64_q1,age45to64_q2,age45to64_q3,age45to64_q4,age45to64_q5,age65to84_mean,age65to84_q1,age65to84_q2,age65to84_q3,age65to84_q4,age65to84_q5,year -.9376469920551275,1.424380321962701,.856606911477369,.8595696100540643,.8465294454163473,.7007625495328518,.8737875577523273,1.32556421800007,.7406237908021062,.7743381017859863,.7868801141349662,.7015470916567629,1.00449752345006,1.605808981433826,1.085985156930003,1.019306629680039,.8839109541797505,.7195291791908557,.9689891150000987,1.43574542808971,.8448648767922488,.8272553758434122,.9149305031022941,.6264744162003448,2015 -.942729028616368,1.462506219640236,.8645627787518269,.8744461205963507,.8099189071925154,.7015282188215537,.8365471509202226,1.227395789917362,.6686765406103856,.7973242631679727,.7841254634809817,.7019582767750624,1.086847232579837,2.163136170395575,1.178402646030457,1.023563294356311,.8319562016222168,.7059146067937978,.9454967198079448,1.256712635308495,.9044214502245265,.8339733149793775,.8277269056904359,.6849214387866267,2016 -.9136711210407348,1.343777499129268,.8382125675465615,.8545037682014137,.8161447255262222,.7155722416063182,.817193036218725,1.229121614450603,.665473938577386,.7637166853771626,.7843137015218076,.6950799936116919,1.056129107224089,1.871761876792196,1.09661305155227,.9832891073525301,.8420972782541704,.7486831802291942,.9060536337067917,1.065192555918207,.8968891470032898,.8721184944444218,.8462445467714379,.6704423615451408,2017 -.9259494530122817,1.427862169357723,.8326154803586072,.8498112633947064,.8035105747008275,.7151028825934782,.8164714285827066,1.228496786204868,.6879771752772447,.7189001498941472,.7616353393528796,.6966128520089419,1.054968298131574,2.037543475945756,1.022807947970579,.9954397251529998,.8287898094131387,.7221601180311782,.9540922240084034,1.210857810619809,.8982269276871395,.89931329303681,.8479712602461043,.75134384762675,2018 -.9163402217246607,1.51285003633488,.800730479937846,.8119812722416876,.7804995875302391,.6753280201649536,.8187634553966061,1.321097627007919,.6705757862026639,.7226054351017731,.7347525611776816,.663023954510806,1.064554416567154,2.212935378470821,.9909188240133248,.9215241847534621,.8526360385188166,.6991423947587757,.9017538898541921,1.220504519296271,.8521318299409659,.8153588521889312,.7592914566401922,.6386538272321327,2019 -.7026492621627551,1.068664744147674,.6455145661097704,.6464046595080647,.6303312111079434,.5219455483184975,.64248728221787,.9389236722161114,.5322708989268096,.6166108222842616,.6342724299602496,.519952871673999,.822194294626972,1.485005450596423,.8688029461718533,.7483736476556883,.662005090680069,.5493052587795682,.6561671566680527,.8835799739774504,.62724170983724,.5886635037431276,.5707429316961995,.4343226899860834,2020 -.7918890218563854,1.323534920974521,.7231750537354352,.6860398209994171,.6510077806015482,.5754769163615439,.690887425852996,1.11986104049875,.5893825267020673,.587972523395449,.6311886191190701,.5503088495595331,.9181836783381345,2.000547624749156,.9071024423367671,.7954505657623396,.6802213171875049,.5893398322762214,.8116880813193951,1.103927018564602,.7616824875598228,.7155932121367038,.6479199574982905,.6237708581912029,2021 -.802508754908469,1.211629744117138,.7590929470158961,.7661681177685694,.700577070490208,.5749617927524927,.681916864212838,.9425596646338602,.5739215106071704,.7189684157552551,.6698026711626361,.5448036819088474,.9235370429570237,1.726943276972896,.9974492783490816,.8495648617440322,.7391185753101186,.5825606418842628,.8543076711443905,1.141021982498468,.8063501691847448,.7454771449950958,.7024513028732648,.6714582693536481,2022 -.8220766424502614,1.360138176169631,.7484661528228747,.732568489273602,.6905848364386629,.5781804594979135,.7465729154713348,1.314813533714558,.5787641383609053,.6446540033293727,.6645022161678332,.5611454497311615,.8888851678487999,1.650079245733462,.9509259532519178,.8448986848532949,.7312411656731419,.5781220000839622,.8683979713914289,1.212782091730013,.8401134649302785,.7457130623848131,.6730330252654568,.6393561977536738,2023 From edaf1dd951ba20fe3240e1e088a1d16ae99b4421 Mon Sep 17 00:00:00 2001 From: Liang Shi Date: Fri, 23 Oct 2026 14:30:57 +0100 Subject: [PATCH 4/5] Move consumption model note into PR description --- src/test/stata/export_consumption_fixtures.do | 5 +++- validation/consumption/README.md | 29 ------------------- 2 files changed, 4 insertions(+), 30 deletions(-) delete mode 100644 validation/consumption/README.md diff --git a/src/test/stata/export_consumption_fixtures.do b/src/test/stata/export_consumption_fixtures.do index 2b00eb914..1383fa9d6 100644 --- a/src/test/stata/export_consumption_fixtures.do +++ b/src/test/stata/export_consumption_fixtures.do @@ -2,7 +2,10 @@ * Export Stata predictions for a deterministic synthetic consumption test grid. * No observed LCFS rows are read or exported by this script. * Arguments: saved m4 estimates (.ster), then destination fixture CSV. -* See validation/consumption/README.md for the shared Drive estimation workflow. +* Saved estimates are supplied through the team's shared Drive workflow. +* From the repository root, regenerate fixtures after updating FW1a and RMSE: +* do "src/test/stata/export_consumption_fixtures.do" "path/to/model.ster" /// +* "src/test/resources/simpaths/model/consumption_stata_fixtures.csv" ******************************************************************************** args estimates_file output_file if (`"`estimates_file'"'=="" | `"`output_file'"'=="") { diff --git a/validation/consumption/README.md b/validation/consumption/README.md deleted file mode 100644 index c27ed0e49..000000000 --- a/validation/consumption/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# Consumption model update (FW1a) - -This update adds age-specific log-income slopes and a reference-adult student indicator, retaining log broad expenditure, the existing 14 age groups, common quadratic curvature and other controls. Java supplies the new regressors and the trend centred at 2015, preserving the existing 2023 trend freeze. - -LCFS benefit-unit own income sums members' personal net incomes independently of expenditure shares. The same adult-share allocation of Council Tax or Northern Ireland domestic rates is deducted from both income and broad expenditure. Monthly amounts are expressed in 2015 prices using CPIH (ONS L522); transfers and exceptional purchases remain included. Estimation uses survey weights and household-within-wave clustered covariance. - -The updated `input/regression_files/reg_wealth_financial.xlsx`, sheet `FW1a`, contains all 65 coefficients and the full covariance matrix. The matching RMSE is 0.6457928727473985 in `input/regression_files/reg_RMSE.xlsx`, sheet `UK`, entry `FW1a`. Other regression processes are unchanged. Cash-income and donor-matching algorithms are unchanged. - -Dataset-construction and regression scripts, validation scripts, result snapshots and detailed documentation are maintained separately in the team's shared Drive workflow. They are outside this PR. The local documentation is titled `consumption_validation_v2_milestone.md`; subsequent Council Tax and three-run results are documented in `consumption_validation_v3_2026-10-22.md` and `v3_three_runs_20261022/validation_report.md` in the shared consumption validation materials. - -## Automated prediction checks - -`ConsumptionRegressionTest` checks Java predictions against 700 deterministic synthetic Stata cases, including log predictions, RMSE and conditional means. It also checks age boundaries, the income floor and trend freezing. The fixtures contain no observed LCFS records. Java tests use the checked-in CSV and require neither Stata nor access to the shared Drive. - -Run from the repository root: - -```powershell -mvn -o -Dtest=ConsumptionRegressionTest test -``` - -When replacing the estimated model, regenerate the fixtures from the matching saved m4 Stata estimates supplied through the shared Drive: - -```stata -do "src/test/stata/export_consumption_fixtures.do" /// - "D:/consumption-data/output_writing/consumption_model_housing_status.ster" /// - "src/test/resources/simpaths/model/consumption_stata_fixtures.csv" -``` - -The helper matches Java's GBP1 monthly income floor, double-precision square and 2023 trend freeze. Update coefficients, covariance, RMSE and fixtures together. From bd4dc55f11f0aacde9ad1113aaaeb22d19c3a600 Mon Sep 17 00:00:00 2001 From: Liang Shi Date: Fri, 23 Oct 2026 15:20:26 +0100 Subject: [PATCH 5/5] Refresh integration reference outputs for revised consumption --- .../expected/DemographicStatistics.csv | 4 ++-- .../expected/HealthStatistics.csv | 4 ++-- .../expected/LabourStatistics.csv | 8 +++---- .../expected/WealthIncomeStatistics.csv | 12 +++++----- .../expected/WellbeingByGender.csv | 24 +++++++++---------- 5 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/test/java/simpaths/integrationtest/expected/DemographicStatistics.csv b/src/test/java/simpaths/integrationtest/expected/DemographicStatistics.csv index c803e2f30..e5a002123 100644 --- a/src/test/java/simpaths/integrationtest/expected/DemographicStatistics.csv +++ b/src/test/java/simpaths/integrationtest/expected/DemographicStatistics.csv @@ -2,8 +2,8 @@ run,time,id_DemographicStatistics,demMarried18to29Share,demMarried30to54Share,de 1,2019.0,1,0.2119546547578152,0.6774992262457443,0.6043081245609927,0.2631398144967365,0.9653358093469514,0.07867010067899789,2911.0,6462.0,4271.0 1,2020.0,1,0.41941135248773653,0.7690869429728887,0.6558741905642923,0.31289418360196214,0.9839513867248364,0.08048103607770583,2854.0,6418.0,4324.0 1,2021.0,1,0.4362676056338028,0.7826964895930413,0.656797995900706,0.3429577464788732,0.961789375582479,0.08517421999544524,2840.0,6438.0,4391.0 -1,2022.0,1,0.3944986072423398,0.7634308716519586,0.6542902422458682,0.3774373259052925,0.9134540950611549,0.09350237717908082,2872.0,6459.0,4417.0 +1,2022.0,1,0.394508168230796,0.7634957463263727,0.653375623017671,0.37504344803614875,0.9138437741686002,0.09265971907566833,2877.0,6465.0,4414.0 2,2019.0,1,0.21229817931982137,0.6779398076326404,0.6032379164711403,0.26382686362074886,0.9655600372323921,0.07860159549507273,2911.0,6446.0,4262.0 2,2020.0,1,0.42040673211781204,0.7703611067687979,0.6587393211729393,0.3155680224403927,0.9837423792402689,0.08173631955668437,2852.0,6397.0,4331.0 2,2021.0,1,0.43400211193241817,0.7795765877957659,0.6609051626108711,0.337909186906019,0.959838107098381,0.08528542187855356,2841.0,6424.0,4397.0 -2,2022.0,1,0.3917130919220056,0.7633209417596035,0.6564695218672105,0.36664345403899723,0.9200743494423792,0.0940403353727623,2872.0,6456.0,4413.0 \ No newline at end of file +2,2022.0,1,0.3922594142259414,0.7634191746819733,0.6580557443915703,0.36541143654114366,0.9190195470058952,0.09426693859052798,2868.0,6446.0,4413.0 diff --git a/src/test/java/simpaths/integrationtest/expected/HealthStatistics.csv b/src/test/java/simpaths/integrationtest/expected/HealthStatistics.csv index ab83d6f6f..7ac4f023a 100644 --- a/src/test/java/simpaths/integrationtest/expected/HealthStatistics.csv +++ b/src/test/java/simpaths/integrationtest/expected/HealthStatistics.csv @@ -2,8 +2,8 @@ run,time,id_HealthStatistics,healthDsbl18to29Share,healthDsbl30to54Share,healthD 1,2019.0,1,0.04809343868086568,0.08635097493036212,0.0660266916413018,3.6602542081758846,3.4648715567935624,3.0852259424022477 1,2020.0,1,0.04590049053959355,0.09660330320972266,0.06406105457909343,3.546601261387526,3.359613586787161,3.053654024051804 1,2021.0,1,0.038028169014084505,0.0970798384591488,0.06649965839216579,3.5024647887323943,3.2882882882882885,2.9521749032111138 -1,2022.0,1,0.04213091922005571,0.10527945502399752,0.06361784016300656,3.3760445682451254,3.215513237343242,2.9040072447362464 +1,2022.0,1,0.04310045185957595,0.10471771075019334,0.06320797462618939,3.3740006951685784,3.2136117556071153,2.9046216583597646 2,2019.0,1,0.04809343868086568,0.0862550418864412,0.0656968559361802,3.661284781861903,3.4668011169717654,3.0863444392304085 2,2020.0,1,0.0455820476858345,0.09535719868688448,0.06257215423689678,3.5546984572230014,3.362513678286697,3.0491803278688523 2,2021.0,1,0.036606828581485396,0.09480074719800748,0.06504434841937685,3.4973600844772967,3.296232876712329,2.9563338639981804 -2,2022.0,1,0.04700557103064067,0.1008364312267658,0.061862678450033994,3.371518105849582,3.2145291201982653,2.906412871062769 \ No newline at end of file +2,2022.0,1,0.04602510460251046,0.10083772882407695,0.061182868796736914,3.3702928870292888,3.2142413900093083,2.906412871062769 diff --git a/src/test/java/simpaths/integrationtest/expected/LabourStatistics.csv b/src/test/java/simpaths/integrationtest/expected/LabourStatistics.csv index 2b54bf384..0c040efed 100644 --- a/src/test/java/simpaths/integrationtest/expected/LabourStatistics.csv +++ b/src/test/java/simpaths/integrationtest/expected/LabourStatistics.csv @@ -1,9 +1,9 @@ run,time,id_LabourStatistics,labEmpShare,labEmpToNotEmpShare,labNotEmpToEmpShare,labUnempShare,labWorkFullTime18to29Share,labWorkFullTime30to54Share,labWorkFullTime55to74Share,labWorkPartTime18to29Share,labWorkPartTime30to54Share,labWorkPartTime55to74Share 1,2019.0,1,0.7126739685415465,0.0,0.0,0.158939306596393,0.5565097904500171,0.6857010213556175,0.2858815265745727,0.10133974579182412,0.14562055091303003,0.09482556778272068 1,2020.0,1,0.7259651153178474,0.07562834072557717,0.44666666666666666,0.1460692733735637,0.4954449894884373,0.755687129947024,0.34620721554116557,0.13524877365101612,0.08818946712371455,0.057816836262719704 -1,2021.0,1,0.7536779814251664,0.027614505933237218,0.37360801781737196,0.11259965480397797,0.5010563380281691,0.7781919850885368,0.360054657253473,0.15704225352112677,0.09490525007766387,0.07310407652015487 -1,2022.0,1,0.7599413298565841,0.03187671522060376,0.29036827195467424,0.10845827900912647,0.49268802228412256,0.7753522217061465,0.37514149875481095,0.17479108635097493,0.10140888682458585,0.08082408874801902 +1,2021.0,1,0.7536779814251664,0.027725407563491185,0.3741648106904232,0.11259965480397797,0.5014084507042254,0.7777260018639329,0.3602823958096106,0.1563380281690141,0.09537123330226778,0.07310407652015487 +1,2022.0,1,0.7597069597069597,0.03196539719379681,0.29178470254957506,0.10834350834350834,0.4907890163364616,0.7749419953596288,0.37471681014952424,0.17587765033020508,0.10177880897138437,0.08155867693701857 2,2019.0,1,0.7126474713307482,0.0,0.0,0.1585677749360614,0.5568533150120234,0.6860068259385665,0.28554669169404034,0.10099622122981793,0.14551659944151413,0.09408728296574378 2,2020.0,1,0.7250745279894004,0.07609067091923909,0.44467318579516213,0.14657171248757866,0.4926367461430575,0.7572299515397842,0.3458785499884553,0.13569424964936885,0.08675941847741128,0.05679981528515354 -2,2021.0,1,0.7539689068026652,0.02690383546414675,0.3695532266960838,0.11293904746236735,0.5019359380499824,0.7778642590286425,0.3600181942233341,0.15874692009855684,0.09604607721046077,0.07095747100295656 -2,2022.0,1,0.7598043212392989,0.03213870387990274,0.2938689217758985,0.10990623726049735,0.48746518105849584,0.7752478314745973,0.3759347382732835,0.17931754874651812,0.10176579925650557,0.07840471334692953 \ No newline at end of file +2,2021.0,1,0.7539689068026652,0.02690383546414675,0.37010479867622725,0.11293904746236735,0.5022879267863428,0.7777085927770859,0.36024562201501026,0.15769095388947554,0.09620174346201743,0.0711848987946327 +2,2022.0,1,0.7603886031512777,0.032554698234858896,0.2980085348506401,0.10931504612621439,0.4895397489539749,0.774433757368911,0.37548153183775207,0.1806136680613668,0.10254421346571517,0.0790845230002266 diff --git a/src/test/java/simpaths/integrationtest/expected/WealthIncomeStatistics.csv b/src/test/java/simpaths/integrationtest/expected/WealthIncomeStatistics.csv index 4d1d2543a..357b7715a 100644 --- a/src/test/java/simpaths/integrationtest/expected/WealthIncomeStatistics.csv +++ b/src/test/java/simpaths/integrationtest/expected/WealthIncomeStatistics.csv @@ -1,9 +1,9 @@ run,time,id_WealthIncomeStatistics,statInvestLoss18to29Avg,statInvestLoss30to54Avg,statInvestLoss55to74Avg,statSIndexP50,statYDispGrossOfLosses18to29Avg,statYDispGrossOfLosses30to54Avg,statYDispGrossOfLosses55to74Avg,statYHhDispEquivNatGini,statYInvest18to29Avg,statYInvest30to54Avg,statYInvest55to74Avg,statYLabWeeklyPerWorker18to29Avg,statYLabWeeklyPerWorker30to54Avg,statYLabWeeklyPerWorker55to74Avg,statYMktNatGini,statYPens18to29Avg,statYPens30to54Avg,statYPens55to74Avg,wealth18to29Avg,wealth30to54Avg,wealth55to74Avg,yEmployedEarningsP20,yEmployedEarningsP40,yEmployedEarningsP60,yEmployedEarningsP80,yHhDispEquivP50,yHhQuintilesC5P20,yHhQuintilesC5P40,yHhQuintilesC5P60,yHhQuintilesC5P80,yLabFceEarningsP20,yLabFceEarningsP40,yLabFceEarningsP60,yLabFceEarningsP80 1,2019.0,1,0.0,0.0,0.0,0.0,1098.3619822396215,1659.0317891410793,1522.3926171014346,0.0,0.0,0.0,0.0,395.13042709203506,566.9991878868162,487.2743556874287,0.0,0.0,0.0,0.0,14788.277425041762,179671.46899293957,297472.45000012836,11497.444084641429,18506.172624107145,26144.305492414285,38420.89577607858,16048.5576,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 -1,2020.0,1,-250.7488411029527,-328.52812800727696,-762.1198505665782,0.0,1307.3119010178075,1941.3838747128084,2068.4123000004356,0.0,-250.7488411029527,-328.52812800727696,-762.1198505665782,425.84127825543123,643.3286046985605,543.2464470741508,0.0,0.2580110975379803,8.228551113280265,388.1515219185641,19665.43171307161,190923.72950161409,318579.2573834327,10423.380815659611,17528.457823676694,27074.14468509112,43365.68237995348,11385.98054646562,-5.955783258644075,5.70197923247809,7.418462500489933,8.201946603951265,79.92384204585235,887.4637819299685,1682.4925524476525,3046.8137726571863 -1,2021.0,1,-36.68756007817177,-517.9741693028336,-474.1743951732273,0.0,1308.6779125027945,2512.3739926606486,2498.318395617464,0.0,82.3352896148895,-311.29517223174184,31.554844044978324,417.5567714410715,647.5848293342482,520.1240387265273,0.0,0.5849264137883765,8.676252951895004,361.22206239561865,24888.824311751294,238575.78509438183,380975.22088567866,9751.195791039347,17214.130801200638,26338.780615047886,43586.217763426255,17098.12595948333,6.282728145686912,7.404898055813944,8.01953375458997,8.554481213360386,689.4713221320721,1424.7060369005446,2283.4874064516766,3771.9971899033226 -1,2022.0,1,-0.4890385202415654,-0.6175983395229478,-0.16872530202047192,0.0,1342.8815919772696,3220.1586055786543,2868.6368368117614,0.0,201.4163827025984,3237.957451587501,3635.0081103129764,416.31281942018035,640.9411425706578,522.4438525538973,0.0,0.2295824309220035,7.356505184850107,322.2761213635668,24485.684898902036,217365.18431530372,384895.0635175582,9586.632266175575,16616.49975851708,26169.479002616128,42267.36406762688,17689.35650657962,6.675818615152003,7.528208324163545,8.0613859766916,8.586128671926126,790.1406349717676,1491.6106577142205,2369.601879308474,3883.7744529063953 +1,2020.0,1,-250.7488411029527,-328.52812800727696,-762.1198505665782,0.0,1307.3119010178075,1941.3838747128084,2068.4123000004356,0.0,-250.7488411029527,-328.52812800727696,-762.1198505665782,425.84127825543123,643.3286046985605,543.2464470741508,0.0,0.2580110975379803,8.228551113280265,388.1515219185641,20253.729354243365,190849.65904412942,318117.39379962336,10423.380815659611,17528.457823676694,27074.14468509112,43365.68237995348,11385.98054646562,-5.955783258644075,5.70197923247809,7.418462500489933,8.201946603951265,79.92384204585235,887.4637819299685,1682.4925524476525,3046.8137726571863 +1,2021.0,1,-37.015838791649216,-579.8636805032824,-514.5168240939524,0.0,1311.658114843149,2573.6026897842435,2537.979009511179,0.0,83.39924671901379,-371.65055030528947,-9.941845228995463,418.3817800356049,647.6680387493873,520.567319769875,0.0,0.5849264137883765,8.676252951895004,361.22206239561865,26281.302561841854,242714.46816493702,384253.9611595054,9783.134202114947,17221.329603750677,26333.09198062594,43594.67292336701,17136.370929563793,6.282655961741195,7.40557552551278,8.018055697238193,8.554725802060752,690.364374669642,1425.9679982438136,2283.447499472534,3772.2368169515516 +1,2022.0,1,-0.4775388677015336,-0.5997286605649887,-0.1660715640209267,0.0,1340.1344119847204,3310.2589680285414,2928.0707509986246,0.0,204.55470844455527,3515.6089744754854,3884.973261120413,414.99873832300136,641.5809151114466,521.841497994903,0.0,0.2291834346916907,7.349677801847926,322.49515814745683,26285.833406504364,231329.7500097538,396127.6784047258,9568.519399003922,16580.274055759728,26178.92667947928,42266.99714782604,17709.178669879024,6.678815100457701,7.528715111115655,8.0650445502503,8.5900180384411,785.6007923133773,1490.5084364598026,2375.925128747765,3883.058933256573 2,2019.0,1,0.0,0.0,0.0,0.0,1098.3549517548865,1660.4279555229555,1523.8390765899653,0.0,0.0,0.0,0.0,395.554917209919,567.3590978050611,488.6361413475094,0.0,0.0,0.0,0.0,14848.479668022597,180279.78637938178,298618.0568016762,11518.71286347,18523.15623358286,26144.90110037143,38385.89565308573,16068.192000000001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 -2,2020.0,1,-251.44853207303862,-327.5163848247718,-765.8910514294679,0.0,1313.0876472585383,1938.145675146225,2076.122274153027,0.0,-251.44853207303862,-327.5163848247718,-765.8910514294679,427.1597751776355,642.7577520844819,550.9098190909464,0.0,0.2680109421529793,8.229506463232132,388.604887168888,19738.26579621087,191001.87181937727,321124.09222432907,10462.499647595689,17570.993151163577,27117.55336464533,43596.770540150035,11402.656686917799,-5.964979880372034,5.714758904785886,7.421765226785345,8.208225367394723,77.21236525922397,890.1476100108384,1694.0879450686514,3067.939917282307 -2,2021.0,1,-36.62420661988649,-608.304051467683,-358.5894845357523,0.0,1313.7331877924257,2600.6436017033643,2393.1664386792813,0.0,82.30364461866606,-397.7608985383392,150.76948054731454,417.75259802529683,646.898004928068,524.9825506015943,0.0,0.5637411780655305,8.303709304997756,363.02713557049464,24002.453992000355,242887.53294619726,378892.4757826235,9723.901702426965,17169.961707796203,26356.400807496528,43907.78381605853,17107.091229364036,6.303371440453282,7.408502559403067,8.02442396197474,8.563907765653155,686.951233222443,1424.8537948263267,2296.811166991709,3829.8019327967563 -2,2022.0,1,-0.507976230597884,-0.6284670815577966,-0.190654892928645,0.0,1326.624225188659,3225.6676425335086,2869.756584758877,0.0,202.48414676631998,3511.0042645500757,3016.479829252969,406.50905607556535,638.3357760543789,523.9444925535469,0.0,0.6579750403410656,6.809227198472103,325.42383169340553,23158.241447775097,224540.84392181353,378963.7137527624,9515.420618950966,16568.318397693467,26023.034757176858,42379.12694974829,17682.778892519746,6.674225077093719,7.509050626633911,8.0731158933846,8.59282179021714,785.1324476454662,1483.091501769883,2372.9396165114435,3884.1276201117776 \ No newline at end of file +2,2020.0,1,-251.44853207303862,-327.5163848247718,-765.8910514294679,0.0,1313.0876472585383,1938.145675146225,2076.122274153027,0.0,-251.44853207303862,-327.5163848247718,-765.8910514294679,427.1597751776355,642.7577520844819,550.9098190909464,0.0,0.2680109421529793,8.229506463232132,388.604887168888,20331.9564225529,190924.8903109714,320640.2048370646,10462.499647595689,17570.993151163577,27117.55336464533,43596.770540150035,11402.656686917799,-5.964979880372034,5.714758904785886,7.421765226785345,8.208225367394723,77.21236525922397,890.1476100108384,1694.0879450686514,3067.939917282307 +2,2021.0,1,-36.95695939194427,-673.4713884395934,-410.54292979063,0.0,1317.5023032823108,2664.921300830438,2443.4559661561384,0.0,83.43498802630762,-461.3191951490834,97.62600965772089,418.7378434101851,647.2917433279545,525.2313299619132,0.0,0.5637411780655305,8.303709304997756,363.02713557049464,25391.451146483054,247196.68214369428,382855.5427898394,9736.733863913556,17187.472388658127,26343.764573731576,44041.75042902999,17125.424393503192,6.292717413591005,7.405701059781297,8.023567646432612,8.562852736353621,687.0077749518179,1426.0464484510055,2295.9689555167233,3837.9571463275083 +2,2022.0,1,-0.4988955022159949,-0.5707540692045535,-0.1878862573337276,0.0,1332.6871694904623,3381.2174232601224,3146.105767513779,0.0,207.2053114160848,3987.4238450418407,3458.0007046602254,405.1074951294256,637.9354415176269,524.921114923114,0.0,0.6588927182215971,6.819790690868119,325.42383169340553,24968.50992935619,238183.172218754,391446.65695303713,9537.948122968119,16549.23386825755,26015.41842601896,42398.17394780925,17738.344700329362,6.675686302118199,7.509325947935047,8.07660422532203,8.596816260751885,785.5136251279536,1484.2050801982614,2377.110739875384,3877.966926902728 diff --git a/src/test/java/simpaths/integrationtest/expected/WellbeingByGender.csv b/src/test/java/simpaths/integrationtest/expected/WellbeingByGender.csv index 528bfbf4d..03a2b6bf8 100644 --- a/src/test/java/simpaths/integrationtest/expected/WellbeingByGender.csv +++ b/src/test/java/simpaths/integrationtest/expected/WellbeingByGender.csv @@ -5,21 +5,21 @@ run,time,id_WellbeingByGender,demLifeSatScore0to10Avg,demLifeSatScore0to10P10,de 1,2020.0,1,6.531719057032783,3.6619029594317953,5.126032154983248,6.672429510472085,8.078231374029382,9.34030448057857,Total,8110.486091743377,65872.3866901756,45.73853340891123,32.604653955446956,39.48855858133085,46.25042214579257,52.61532853086872,58.05145587511929,10085,51.08567401306888,38.30609436182795,45.56308491110741,52.07600070991801,57.83068576393079,62.538704593936394,12.883029553278584,6.18360669682598,9.185602468593313,12.534688349095003,16.281417050173566,19.935769021318947 1,2020.0,2,6.555495866706393,3.723363785025523,5.20070909542898,6.654396553959046,8.086760327933826,9.338471094222937,Male,4062.2134873756077,32403.816069129756,47.013858481528516,34.41661832157898,41.06412892252041,47.387138910016816,53.68044556750254,59.044051795120545,4943,51.52874195724106,39.44611046297003,46.155833247932264,52.41173314786387,58.083664207769104,62.54042999775598,12.162772744095959,5.629643336601326,8.608730097229119,11.813467793028996,15.369150937369977,19.02672868104122 1,2020.0,3,6.508862431164122,3.5951748845483316,5.057143526171261,6.680254374277837,8.070674912075647,9.351230104830869,Female,4048.272604367769,33468.570621045976,44.5125645575018,31.306260059211624,38.05714002128869,45.144230919425155,51.46122772447984,56.911359045859456,5142,50.659753194701885,36.77458432252791,44.983533111816946,51.76111567015478,57.59612444571111,62.568954854149524,13.575411779608753,6.847863234639331,9.722448914590839,13.238833406057982,17.0211645966218,20.673675253120077 -1,2021.0,1,6.384821845019674,3.657866438932769,5.0129653562801,6.455968810757305,7.891122159243835,9.081175294315702,Total,8029.979663984851,64735.70868665447,44.9254674680324,32.176894174583786,38.19112077282166,45.24642028650752,51.66632512738298,57.35041543406466,10139,50.77866857717815,38.026128191380984,44.78047843222764,51.25113265375148,57.41806850976098,62.82180665767753,13.270397951017715,6.516423364219324,9.66718828468779,13.130954811621557,16.808395124601887,20.13468624031968 -1,2021.0,2,6.412650532070537,3.6858994342431295,5.047240261948179,6.510253476487479,7.9201382248455685,9.068125947310957,Male,4000.18762742062,31806.74663906991,46.20360990614665,33.512918131525396,39.65271950084021,46.47176600017271,52.629653572139425,58.45268815117875,4960,51.029906875362926,38.97091060634392,45.21035628499107,51.49903186094829,57.33938124086173,62.86480633047945,12.459491615988531,5.798652357904905,8.820540447512919,12.283538550311919,15.92845457407308,19.352538482690676 -1,2021.0,3,6.358169926160383,3.628273143748942,4.9817810983963025,6.4095722719355175,7.869016332110254,9.096245139748284,Female,4029.792036564231,32928.96204758463,43.70137275997164,30.84809123758809,37.11226533062855,43.988533616061964,50.56598066677174,56.03053676919914,5179,50.53805418077025,37.243490472634775,44.22474460568375,51.09370375932314,57.53120675977421,62.770590715883095,14.04701417456372,7.4030205772276565,10.53885404455611,13.931236498750295,17.46641248429281,20.73730488406939 -1,2022.0,1,6.293650841000346,3.5839090016286526,4.927059121448485,6.349769049651194,7.74862918144081,9.035598225216004,Total,7948.4150475520655,64377.75445259256,44.53026525337737,31.75799178563973,38.13080180408613,44.79188124220524,51.178892766885824,56.94966476427934,10229,49.93275777995984,37.43976740702546,43.81447963299145,50.20872852793501,56.540055414197354,62.18382347303197,13.238357581033835,6.495279203367819,9.693363593242488,13.187615070581405,16.73899363655407,19.890913460129205 -1,2022.0,2,6.324123236066413,3.613071773136591,4.947314580888195,6.395960968641006,7.761272974382857,9.052628347102575,Male,3968.1250884304886,31607.967933859996,45.74096112915099,33.21553114329556,39.428650249293014,45.944026587606245,52.22385843245115,58.148153253494065,4998,50.36345072902722,37.95801858691046,44.324913141536236,50.73373828303752,56.73047444388101,62.532663713425066,12.569212498419171,5.90176300268141,9.015862432401995,12.412246484954931,16.089660961946002,19.281017627904834 -1,2022.0,3,6.2645357520039395,3.560229361472044,4.902320676067404,6.305692087614625,7.718545899370114,8.990748650275266,Female,3980.2899591215773,32769.786518732595,43.37349637799666,30.64865267556051,37.08991402693485,43.66828356934874,50.06582143993391,55.60839477426922,5231,49.521248821932936,37.08489202005658,43.39542920906328,49.806087361285,56.188180724666054,61.94825699847218,13.877697501299194,7.211986936460991,10.474659204645317,13.909785067507404,17.181848260973837,20.409619347642717 +1,2021.0,1,6.384879305983952,3.657871350532653,5.012502952738894,6.456401022079937,7.889469460407195,9.08121558845853,Total,8029.9693698885085,64736.29128337107,44.92542123163234,32.17720200308243,38.191163571856606,45.24773354068483,51.6664062868658,57.350483111892046,10139,50.77873170092831,38.024358743210264,44.77894786406224,51.25141308764901,57.4208618802088,62.8236170824407,13.270329483611711,6.516301023892368,9.66845187847887,13.130173928462328,16.808395124601887,20.13528325858139 +1,2021.0,2,6.412890721340803,3.685359185200582,5.050012888060346,6.509829088869624,7.922374812482872,9.068530105252165,Male,4000.2214823110617,31807.93797785047,46.20432714149043,33.51356828381646,39.64224868265374,46.47270338830948,52.62964434956375,58.45354323450649,4960,51.029938172931615,38.96875033249009,45.21036278677732,51.4990056171463,57.339265730601866,62.86410237014559,12.458854356892017,5.7965568458272,8.817467662244553,12.290223078645402,15.927658947627641,19.343136630082604 +1,2021.0,3,6.358052385696255,3.628273143748942,4.981798462421833,6.409614728347958,7.868101229636388,9.096243780415161,Female,4029.7478875774473,32928.35330552096,43.70059533611273,30.84874027375017,37.09476835145788,43.98847838161159,50.566127100495386,56.028308077049594,5179,50.53814778489502,37.243464151678985,44.22467190988386,51.09399998744856,57.537493733419204,62.770609193476304,14.047490446834278,7.4029615575016265,10.53646443425393,13.931323858820395,17.46640787229884,20.737304928114852 +1,2022.0,1,6.292892208382854,3.578717101751178,4.9231853874403475,6.3509672337871805,7.751655872052609,9.033018809914548,Total,7953.202601731116,64432.92332163207,44.51892200815233,31.753466412842137,38.1168415078142,44.7701220251022,51.16903600491321,56.955634643948834,10239,49.91850114224646,37.456446427207354,43.81016739992915,50.208194299705106,56.46862813522558,62.168197478083286,13.246673652527797,6.497160430496873,9.698872554540221,13.193856997171174,16.750708890049708,19.928551784931297 +1,2022.0,2,6.324827027488373,3.6148873254975094,4.959470076373945,6.393653564342233,7.761593701649885,9.046321909934218,Male,3972.1433538855276,31662.084099606705,45.71392092731498,33.17160536017505,39.34265681666417,45.916282352601414,52.22583053488225,58.13603987906013,5006,50.3521986517754,37.955091043425746,44.28003308402822,50.74432948380513,56.70515445009135,62.49041753563044,12.580403107504928,5.884572478359062,9.024057691118923,12.424419958089775,16.096740017689445,19.353012601981845 +1,2022.0,3,6.262342675716653,3.5420545428538017,4.8860107901742715,6.310797013167998,7.728303700507418,8.991624420737564,Female,3981.059247845589,32770.83922202525,43.375760420281466,30.66280246862488,37.09359835840321,43.652766294916994,50.05605484383841,55.59834857059093,5233,49.50361680578518,37.08682470178726,43.396129219944406,49.78180210203683,56.16223287132432,61.93999193933281,13.884042341307557,7.216884806401925,10.47423843496062,13.913800366705514,17.197002876892917,20.442579206092397 2,2019.0,1,6.741525188417298,3.33,5.0,8.0,8.33,8.33,Total,8309.653749245777,67981.5400000033,47.24261106703689,32.39,41.23,49.47,54.79,57.49,10084,51.23513883379611,37.435,47.9725,54.51,57.49,59.79,11.779055930186423,6.0,8.0,11.0,14.0,20.0 2,2019.0,2,6.714190611088631,3.33,5.0,7.0,8.33,8.33,Male,4166.189751478453,33181.530000000865,48.37145285309591,34.25,43.31,51.0,55.7025,58.15,4942,51.781602590044514,39.53,49.0,54.77,57.47,59.37,11.115944961554007,6.0,7.0,10.0,12.0,18.0 2,2019.0,3,6.767796577207312,3.33,5.0,8.33,8.33,8.33,Female,4143.463997767325,34800.01000000123,46.157676001555814,30.77,39.73,48.355000000000004,54.2,57.33,5142,50.70992998833139,35.3,46.65,54.33,57.75,60.09899999999998,12.416374951380794,6.0,8.0,11.0,15.0,21.0 2,2020.0,1,6.540949714036444,3.6852231226651355,5.150099835389495,6.675182731341655,8.090774730250459,9.346128825916193,Total,8092.283633362109,65815.03602263475,45.76964601737298,32.6968812114569,39.48439252058364,46.26304400824915,52.660740978043876,58.05587448509347,10062,51.061516761459536,38.24790379908255,45.58481838325366,52.0063402942549,57.82246809595494,62.52571245286481,12.8710807363802,6.1959161218239265,9.173436142265427,12.523017836531437,16.235895544902366,19.87470149183813 2,2020.0,2,6.566188099692085,3.7302238231361327,5.229079538680326,6.660505290192928,8.094025793670758,9.348232921345122,Male,4052.6649141247544,32397.57208388081,47.050027846263355,34.47802514308085,41.102242818228994,47.48107747800515,53.684846374668325,59.01992217235703,4934,51.47147762812734,39.37692445278696,46.13480080113773,52.30704097421855,58.01657251436907,62.5319463480464,12.179346319601786,5.66695694709504,8.610036896995732,11.85368728136092,15.38998134882099,19.03182910147219 2,2020.0,3,6.516666134702408,3.6434314736838473,5.064899028575013,6.683287107755065,8.084884909002417,9.346488738221423,Female,4039.618719237354,33417.46393875399,44.53770297062081,31.420326256395327,38.085562605848175,45.08024416249953,51.463810245208286,56.9169194780454,5128,50.66706533475538,36.77780045421139,45.044292136902875,51.76406816859323,57.633616830015434,62.503675831082965,13.536645793397497,6.824722784004164,9.729529483275837,13.219784109429465,16.965017312876903,20.518571823343187 -2,2021.0,1,6.392531972412021,3.6564543649168844,5.017927442053093,6.469778138609839,7.905901487839022,9.099014557443624,Total,8019.958011692754,64717.99368869933,44.94208048194549,32.245517800487555,38.27496654752627,45.2947150707601,51.66607302584889,57.361185228245304,10124,50.78396842263172,38.02661239804755,44.76354797851376,51.30825510736786,57.39843448062286,62.86095934778808,13.280978858743628,6.579848363008235,9.669538345827917,13.163269257301328,16.806241111333858,20.102381423210176 -2,2021.0,2,6.416909223384138,3.6928375984308395,5.0575610571609095,6.505088755685854,7.92812572539924,9.08332048740751,Male,3995.161941219114,31789.36829264508,46.21994399391517,33.66594446255509,39.65529588846737,46.517962951138756,52.64094002454712,58.43821587026359,4954,51.0099295920603,38.982363491361426,45.191393757599926,51.46397107046306,57.307583497750684,62.853468709262756,12.50682090763736,5.867211376754124,8.913750112063607,12.346543226576227,15.90587299413187,19.382289103554037 -2,2021.0,3,6.369173190726166,3.605898715002645,4.985071888094175,6.435191811133754,7.890183579095658,9.1208390597757,Female,4024.79607047364,32928.625396054274,43.71760546486661,30.88996709764635,37.181129805403586,44.00602136149024,50.56675567753466,56.03736332581279,5170,50.5674477972257,37.21974296123046,44.255105035653585,51.17763381806225,57.54968127990403,62.89339545121879,14.022792879977757,7.374135727852362,10.522381160389763,13.923968463305044,17.44512565984127,20.65294160476254 -2,2022.0,1,6.277772502313605,3.5671519556240714,4.915071125870329,6.326315430506572,7.719431339529499,9.011723829236749,Total,7948.148165564994,64183.94606365432,44.55570884767418,31.822396553651743,38.19923721335598,44.80562282042183,51.24922312037055,56.934013977162635,10224,49.93545249821693,37.41544486304984,43.813831131783516,50.20719683949365,56.56151827511016,62.250277102041004,13.260906841598404,6.60231698784964,9.756285418057743,13.164231247786592,16.713694984589917,19.938306799487577 -2,2022.0,2,6.295867022325366,3.610184921012878,4.934074094082508,6.33199449747446,7.719923234235579,9.03250881682148,Male,3972.320189881784,31504.518579716158,45.7318143629376,33.23142683069024,39.339300768969814,45.93445165216778,52.30556884062537,57.97628543098898,5004,50.33692715979863,37.924307943873714,44.27980180830151,50.70942544774555,56.70401999647539,62.41132347794596,12.626128598169526,6.006959710921459,9.14393363116356,12.478213982191203,16.08153140383468,19.314433777557657 -2,2022.0,3,6.26042672106095,3.5330890887460686,4.8909690527517,6.315143636530178,7.719431339529499,8.98735998336115,Female,3975.8279756832103,32679.427483938296,43.42826976752512,30.603287417865765,37.13337824083931,43.7541212181674,50.16111650476772,55.635757121796566,5220,49.550590581252415,36.98079907428182,43.395828673587104,49.812244421870375,56.37718315716788,62.09617748855787,13.869418399092293,7.258308055695878,10.447920884733712,13.838162382484494,17.156085883789913,20.475677248160896 \ No newline at end of file +2,2021.0,1,6.3926170900966595,3.6562520208564147,5.017786561513933,6.468926070123672,7.905095848951531,9.09937237384019,Total,8020.088839207434,64718.85542013845,44.942739351181324,32.24527114825335,38.29789446199977,45.29472218310011,51.66612685039066,57.36156903880688,10124,50.78439392499128,38.02609455737263,44.76355873785468,51.30650537770802,57.403395787395354,62.86094478608264,13.280436274981275,6.57964578894508,9.665580347832767,13.159613054626465,16.806214366385728,20.09990776796186 +2,2021.0,2,6.417154657414023,3.6888055943941125,5.055711068460088,6.505067873102327,7.928381714825241,9.083265269975907,Male,3995.249883031219,31790.584172829094,46.22100255275973,33.66064953285322,39.655222586686236,46.515145340394,52.64106052166581,58.44404314231376,4954,51.01047267276506,38.97764073290038,45.191401669201014,51.46402351498751,57.307558397809316,62.853761430358134,12.506094513042642,5.864966219819999,8.908982308505687,12.346748689030932,15.905854184670254,19.377914872511433 +2,2021.0,3,6.369104690001839,3.6059053803864223,4.985206520070877,6.434073704059616,7.886960352137257,9.120856702517733,Female,4024.8389561762156,32928.27124730954,43.717881343324564,30.890016236630263,37.1823976474046,43.99623191872728,50.56688021593018,56.03768456187958,5170,50.56776063360417,37.219937936756466,44.25612746992009,51.177382132698824,57.55207237397079,62.892657201013535,14.022426427523632,7.382448328766508,10.523299887913891,13.9222862171448,17.445129722891803,20.65305118285963 +2,2022.0,1,6.279206680429553,3.5696793689957045,4.916079067771468,6.328880603234933,7.7201999434648565,9.009064546714411,Total,7933.49026917511,64098.141793824674,44.54735758796844,31.791103136257163,38.17044009366954,44.79929958322753,51.24908219719499,56.96511582430976,10208,49.92536438046665,37.41719989192662,43.79104929665941,50.22315185431776,56.560737289497155,62.243929389961394,13.255765848857228,6.5899194157957695,9.74525669713356,13.164878677304474,16.708529564225113,19.93916960294297 +2,2022.0,2,6.296957812385085,3.6090429950200487,4.933833508043516,6.344060958507989,7.713626029206429,9.030261088066881,Male,3960.002614727677,31428.116441613995,45.718512535600425,33.22710700365567,39.31649153857018,45.92097641410677,52.299331952714375,58.00362283825078,4991,50.31441859368968,37.90134524293881,44.23617282860287,50.69471550425454,56.688336063600595,62.37667784859398,12.605825055102331,5.977783699781755,9.133267696120084,12.459474069269936,16.068278182085546,19.29183883917292 +2,2022.0,3,6.262224526013211,3.5336118176987776,4.893273836000972,6.311792599788577,7.728303700507418,8.987368468812326,Female,3973.487654447433,32670.025352210974,43.426936973893056,30.553431765007264,37.101618554291235,43.74475448254485,50.15291362217008,55.68365605030192,5217,49.553163962947735,36.978055349766635,43.396129219944406,49.82948355331851,56.39632444709198,62.102300176862045,13.877551262242449,7.254622942891149,10.446287558280993,13.8445519935073,17.166090055368645,20.495353140178704