From 99614b9f40351428fcb448b4e93ac2eefb7dcd24 Mon Sep 17 00:00:00 2001 From: Ashley Burdett <76621383+ANBurdett@users.noreply.github.com> Date: Fri, 1 May 2026 17:21:33 +0100 Subject: [PATCH 01/13] Updated files --- input_processing/.DS_Store | Bin 0 -> 6148 bytes ...nditions.do => 00_master_conditions_PL.do} | 8 +- .../data_construction/PL/.DS_Store | Bin 0 -> 6148 bytes .../PL/00_master_data_set_construction_PL.do | 18 +- .../PL/01_prepare_pooled_data_PL.do | 42 +- .../PL/02_create_variables_PL.do | 1341 +++++----- .../PL/03_create_benefit_units_PL.do | 58 +- ...5_drop_hholds_slice_and_refactoring_PL.do} | 166 +- .../PL/extra_var_info/.DS_Store | Bin 0 -> 6148 bytes .../prepare_pooled_data _05_20.do | 2 +- .../PL/extra_var_info/vars_05_20_PL.do | 74 - .../regression_estimates/PL/.DS_Store | Bin 0 -> 6148 bytes .../PL/00_master_regression_estimates_PL.do | 14 +- .../PL/01_reg_education_PL.do | 2 +- .../PL/02_reg_leave_parental_home_PL.do | 2 +- .../PL/03_reg_partnership_PL.do | 14 +- .../PL/07_reg_retirement_PL.do | 8 +- .../PL/08_reg_wages_PL.do | 88 +- .../PL/10_parametric_matching_process_PL.do | 4 +- .../PL/11_spec_diagnostic_tests_PL.do | 81 - .../00_master_estimate_validation_PL.do | 91 +- .../03_estimate_validation_partnership_PL.do | 7 +- .../08_estimate_validation_wages_PL.do | 133 +- validation/02_simulation_validation/.DS_Store | Bin 0 -> 6148 bytes .../do_files/.DS_Store | Bin 0 -> 6148 bytes .../00_master_simulation_validation.do | 131 - .../00_master_simulation_validation_PL.do | 184 ++ .../do_files/01_prepare_simulated_data.do | 149 +- .../02_create_simulated_validation_targets.do | 309 +++ .../do_files/02_prepare_EU_SILC_data.do | 32 - .../03_create_EU_SILC_benefit_units.do | 446 ---- .../03_create_EU_SILC_validation_targets.do | 381 +++ .../do_files/04_01_plot_activity_status.do | 2286 +++++++++++++++++ .../do_files/04_02_plot_education_level.do | 721 ++++++ .../do_files/04_03_plot_gross_income.do | 991 +++++++ .../04_04_plot_gross_labour_income.do | 583 +++++ .../do_files/04_05_plot_capital_income.do | 379 +++ .../do_files/04_07_plot_disposable_income.do | 379 +++ ...4_08_plot_equivalised_disposable_income.do | 368 +++ .../do_files/04_09_plot_hourly_wages.do | 572 +++++ .../do_files/04_10_0_plot_hours_worked.do | 2077 +++++++++++++++ .../04_10_1_plot_hours_worked_discrete.do | 351 +++ .../do_files/04_11_plot_income_shares.do | 448 ++++ .../do_files/04_12_plot_partnership_status.do | 613 +++++ .../do_files/04_13_plot_health.do | 483 ++++ .../do_files/04_14_plot_at_risk_of_poverty.do | 216 ++ .../do_files/04_15_plot_inequality.do | 457 ++++ .../do_files/04_16_plot_number_children.do | 643 +++++ .../do_files/04_17_plot_disability.do | 321 +++ .../do_files/04_18_plot_alignment_targets.do | 154 ++ .../04_create_EU_SILC_validation_targets.do | 314 --- .../05_create_simulated_validation_targets.do | 196 -- .../do_files/06_01_plot_activity_status.do | 2052 --------------- .../do_files/06_02_plot_education_level.do | 632 ----- .../do_files/06_03_plot_gross_income.do | 896 ------- .../06_04_plot_gross_labour_income.do | 756 ------ .../do_files/06_05_plot_capital_income.do | 305 --- .../do_files/06_07_plot_disposable_income.do | 626 ----- ...6_08_plot_equivalised_disposable_income.do | 686 ----- .../do_files/06_09_plot_hourly_wages.do | 695 ----- .../do_files/06_10_plot_hours_worked.do | 507 ---- .../do_files/06_11_plot_income_shares.do | 457 ---- .../do_files/06_12_plot_partnership_status.do | 377 --- .../do_files/06_13_plot_health.do | 408 --- .../do_files/06_14_plot_at_risk_of_poverty.do | 104 - .../do_files/06_15_plot_income_ratios.do | 124 - .../do_files/06_16_plot_number_children.do | 171 -- .../do_files/06_17_plot_disability.do | 225 -- .../do_files/07_01_correlations.do | 153 -- .../07_create_euromod_validation_targets.do | 116 - 70 files changed, 14098 insertions(+), 11529 deletions(-) create mode 100644 input_processing/.DS_Store rename input_processing/{00_master_conditions.do => 00_master_conditions_PL.do} (95%) create mode 100644 input_processing/data_construction/PL/.DS_Store rename input_processing/data_construction/PL/{05_drop_hholds_and_slice_PL.do => 05_drop_hholds_slice_and_refactoring_PL.do} (55%) create mode 100644 input_processing/data_construction/PL/extra_var_info/.DS_Store delete mode 100644 input_processing/data_construction/PL/extra_var_info/vars_05_20_PL.do create mode 100644 input_processing/regression_estimates/PL/.DS_Store delete mode 100644 input_processing/regression_estimates/PL/11_spec_diagnostic_tests_PL.do create mode 100644 validation/02_simulation_validation/.DS_Store create mode 100644 validation/02_simulation_validation/do_files/.DS_Store delete mode 100644 validation/02_simulation_validation/do_files/00_master_simulation_validation.do create mode 100644 validation/02_simulation_validation/do_files/00_master_simulation_validation_PL.do create mode 100644 validation/02_simulation_validation/do_files/02_create_simulated_validation_targets.do delete mode 100644 validation/02_simulation_validation/do_files/02_prepare_EU_SILC_data.do delete mode 100644 validation/02_simulation_validation/do_files/03_create_EU_SILC_benefit_units.do create mode 100644 validation/02_simulation_validation/do_files/03_create_EU_SILC_validation_targets.do create mode 100644 validation/02_simulation_validation/do_files/04_01_plot_activity_status.do create mode 100644 validation/02_simulation_validation/do_files/04_02_plot_education_level.do create mode 100644 validation/02_simulation_validation/do_files/04_03_plot_gross_income.do create mode 100644 validation/02_simulation_validation/do_files/04_04_plot_gross_labour_income.do create mode 100644 validation/02_simulation_validation/do_files/04_05_plot_capital_income.do create mode 100644 validation/02_simulation_validation/do_files/04_07_plot_disposable_income.do create mode 100644 validation/02_simulation_validation/do_files/04_08_plot_equivalised_disposable_income.do create mode 100644 validation/02_simulation_validation/do_files/04_09_plot_hourly_wages.do create mode 100644 validation/02_simulation_validation/do_files/04_10_0_plot_hours_worked.do create mode 100644 validation/02_simulation_validation/do_files/04_10_1_plot_hours_worked_discrete.do create mode 100644 validation/02_simulation_validation/do_files/04_11_plot_income_shares.do create mode 100644 validation/02_simulation_validation/do_files/04_12_plot_partnership_status.do create mode 100644 validation/02_simulation_validation/do_files/04_13_plot_health.do create mode 100644 validation/02_simulation_validation/do_files/04_14_plot_at_risk_of_poverty.do create mode 100644 validation/02_simulation_validation/do_files/04_15_plot_inequality.do create mode 100644 validation/02_simulation_validation/do_files/04_16_plot_number_children.do create mode 100644 validation/02_simulation_validation/do_files/04_17_plot_disability.do create mode 100644 validation/02_simulation_validation/do_files/04_18_plot_alignment_targets.do delete mode 100644 validation/02_simulation_validation/do_files/04_create_EU_SILC_validation_targets.do delete mode 100644 validation/02_simulation_validation/do_files/05_create_simulated_validation_targets.do delete mode 100644 validation/02_simulation_validation/do_files/06_01_plot_activity_status.do delete mode 100644 validation/02_simulation_validation/do_files/06_02_plot_education_level.do delete mode 100644 validation/02_simulation_validation/do_files/06_03_plot_gross_income.do delete mode 100644 validation/02_simulation_validation/do_files/06_04_plot_gross_labour_income.do delete mode 100644 validation/02_simulation_validation/do_files/06_05_plot_capital_income.do delete mode 100644 validation/02_simulation_validation/do_files/06_07_plot_disposable_income.do delete mode 100644 validation/02_simulation_validation/do_files/06_08_plot_equivalised_disposable_income.do delete mode 100644 validation/02_simulation_validation/do_files/06_09_plot_hourly_wages.do delete mode 100644 validation/02_simulation_validation/do_files/06_10_plot_hours_worked.do delete mode 100644 validation/02_simulation_validation/do_files/06_11_plot_income_shares.do delete mode 100644 validation/02_simulation_validation/do_files/06_12_plot_partnership_status.do delete mode 100644 validation/02_simulation_validation/do_files/06_13_plot_health.do delete mode 100644 validation/02_simulation_validation/do_files/06_14_plot_at_risk_of_poverty.do delete mode 100644 validation/02_simulation_validation/do_files/06_15_plot_income_ratios.do delete mode 100644 validation/02_simulation_validation/do_files/06_16_plot_number_children.do delete mode 100644 validation/02_simulation_validation/do_files/06_17_plot_disability.do delete mode 100644 validation/02_simulation_validation/do_files/07_01_correlations.do delete mode 100644 validation/02_simulation_validation/do_files/07_create_euromod_validation_targets.do diff --git a/input_processing/.DS_Store b/input_processing/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0= ${age_can_retire} & flag_deceased ! global r1b_if_condition "ssscp != 1 & dcpst == 1 & dag >= ${age_can_retire} & flag_deceased != 1" * Wages -global W1fa_if_condition "dgn == 0 & dag >= ${age_seek_employment} & dag <= ${age_force_retire} & flag_deceased != 1" +global W1fa_if_condition "dgn == 0 & dag >= ${age_seek_employment} & dag <= ${age_force_retire} & deh_c4 != 0 & flag_deceased != 1" -global W1ma_if_condition "dgn == 1 & dag >= ${age_seek_employment} & dag <= ${age_force_retire} & flag_deceased != 1" +global W1ma_if_condition "dgn == 1 & dag >= ${age_seek_employment} & dag <= ${age_force_retire} & deh_c4 != 0 & flag_deceased != 1" -global W1fb_if_condition "dgn == 0 & dag >= ${age_seek_employment} & dag <= ${age_force_retire} & previouslyWorking == 1 & flag_deceased != 1" +global W1fb_if_condition "dgn == 0 & dag >= ${age_seek_employment} & dag <= ${age_force_retire} & deh_c4 != 0 & previouslyWorking == 1 & flag_deceased != 1" -global W1mb_if_condition "dgn == 1 & dag >= ${age_seek_employment} & dag <= ${age_force_retire} & previouslyWorking == 1 & flag_deceased != 1" +global W1mb_if_condition "dgn == 1 & dag >= ${age_seek_employment} & dag <= ${age_force_retire} & deh_c4 != 0 & previouslyWorking == 1 & flag_deceased != 1" * Capital income global i1a_if_condition "dag >= ${age_becomes_semi_responsible} & flag_deceased != 1" diff --git a/input_processing/data_construction/PL/.DS_Store b/input_processing/data_construction/PL/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..c0ceae585562ab11ba2117e708b8485ff9aad42c GIT binary patch literal 6148 zcmeHKQAz_r3{A8`K`8z7&pCp;bg3T7~V-Qfl!>nA>;{f4r72lL%d0EdB`E z1ZG}lCYep%vNIbZ;_1_3LNq3#A(|kI(jzk6yL4p6CqT}7%;=i7G@~`}Z-~S`qC0w~ z4WizS|B)KHr&up1)oon0n$G#lKKoTH%XuB=umfqSeSLes-0!pau}}N38`p(|_iY~A zYTeYaS;7wQ%EcLQ2AlzB;D8yhdti8az#Mq$&VVz}&w!i{0Zp(lOp5vFK$lAZ-~iKE zpi37Rkku%^7{4)l4P*&v>N!i`{B|W)o1KJImh}b1jAkaHM0T{?R ga+Vi$J%|pw!Z0byE;66pf&L?q3GvPu_yq<&09UX> used to set the panel. The variable 'year' is unique to this @@ -70,6 +71,7 @@ lab var swv "Data collection wave" fre swv + /*********************** YEAR OF THE PERSONAL INTERVIEW ***********************/ /* stm: year of the personal interview (pb110) or year of the household @@ -96,6 +98,7 @@ fre stm assert swv == stm + /******************************** INTERVIEW DATE ******************************/ /* The exact date of interview is not available in EU-SILC (no day recorded, only @@ -126,6 +129,7 @@ lab var Int_Date "Interview Date" fre Int_Date + /**************************** HOUSEHOLD IDENTIFIER ****************************/ /* In the original EU-SILC longitudinal wave files, a household is identified @@ -142,6 +146,7 @@ format idhh %-18.0g bysort year: sum idhh + /********************************* INDIVIDUALS ID *****************************/ /* In the original EU-SILC longitudinal wave files, a person is identified with @@ -158,6 +163,7 @@ format idperson %-20.0g bysort year: sum idperson + /******************************** SET PANEL ***********************************/ duplicates report year idperson @@ -188,6 +194,7 @@ xtset idperson swv sort upid year + /***************************** DECEASED FLAG **********************************/ gen flag_deceased = 0 @@ -195,6 +202,7 @@ replace flag_deceased = 1 if rb110 == 6 lab var flag_deceased "FLAG: Individual deied in the previous year" + /********************************* GENDER *************************************/ gen dgn = rb090 recode dgn 2 = 0 //dgn = 0 is female, 1 is male @@ -217,6 +225,7 @@ forvalues i = 1/6 { fre year dgn bysort year: sum dgn + /********************************* ID PARTNER *********************************/ /* Dataset quirks: the original variable that identifies an individual's @@ -243,6 +252,7 @@ lab var idpartner "Unique cross wave identifier of partner" recode idpartner . = -9 format idpartner %18.0g + /**************** ID FATHER (includes natural/step/adoptive) ******************/ tostring rb220, replace format(%18.0g) gen idfather = (urtgrp + rb220) @@ -254,6 +264,7 @@ lab var idfather "Father unique identifier" format idfather %18.0g recode idfather . = -9 + /******************* ID MOTHER (includes natural/step/adoptive) ***************/ tostring rb230, replace format(%18.0f) gen str30 idmother = (urtgrp + rb230) @@ -267,6 +278,7 @@ format idmother %18.0g sort idperson year + /******************************* AGE ******************************************/ /* EU-SILC has a number of possible variables that could be used to create age. @@ -340,7 +352,7 @@ drop age_dif * Impose panel consistency to help overcome possible repeat ages due to * interview timing gen dag_new = dag -replace dag_n = dag_n[_n-1] + 1 if idperson == idperson[_n-1] & /// +replace dag_new = dag_new[_n-1] + 1 if idperson == idperson[_n-1] & /// swv == swv[_n-1] + 1 * Enforce top coding @@ -443,6 +455,7 @@ hist dag, discrete graph drop _all + /************************* REGION (NUTS 1) ************************************/ /* ISSUE: The number of NUTS1 regions changes in Poland. @@ -488,10 +501,12 @@ fre drgn1 tab drgn1 year, col bys swv: sum drgn1 if drgn1 > 0 + /******************************** COUNTRY *************************************/ gen dct = . lab var dct "Country code: $country" + /******************************** UNION ***************************************/ /* Generate union variable to indicate if there is a partner in the hh; dun should @@ -535,6 +550,7 @@ tab dun year, col bys dun: sum idpartner if idpartner == -9 bys dun: sum idpartner if idpartner > 0 + /**************************** PARTNER'S AGE ***********************************/ /* To preserve the the empirical relationship between partners ages, we adjust the @@ -863,6 +879,7 @@ drop dag_sim dag_sim2 dag_sim_orig dagsp2 mean_gap sd_gap sum dagsq count if dun == 1 & dagsp == . + /************************** PARTNERSHIP STATUS ********************************/ /* Construct a variable that only indicates whether the individual is single or @@ -913,6 +930,7 @@ tab dcpst widow replace widow = 0 if dcpst == 1 // let idpartner overall widow status + /***************************** PARTNER'S GENDER *******************************/ /* In the cumulative longitidutional dataset created by GESIS, a unique @@ -944,6 +962,7 @@ recode dgnsp (. = -9) fre dgnsp if idpartner > 0 tab dgnsp year, col + /******************************* HEALTH STATUS ********************************/ fre ph010 /* Use ph010 (general health) variable: @@ -1045,6 +1064,7 @@ fre dhe tab dhe year, col bys swv: sum dhe + /************************** PARTNER'S HEALTH STATUS ***************************/ preserve @@ -1108,6 +1128,7 @@ tab2 dcpst dcpen if swv>=2011 & interview_count>=2 & first_appearance!=1, /// restore */ + /****************************** NEW PARTNERSHIP *******************************/ gen new_rel = 0 if dcpst == 1 replace new_rel = 1 if dcpen == 1 @@ -1117,6 +1138,7 @@ lab var new_rel "Partnership in first year" tab new_rel year, col bys swv: sum new_rel if new_rel >= 0 + /**************************** EXIT PARTNERSHIP ********************************/ /* Only populated if can transition out of a partnership (not because of death @@ -1148,7 +1170,7 @@ count if dag >= 65 & pb200 == 2 & idpartner == -9 & dcpex == 1 preserve -keep idperson swv pb190 pb200 pb205 rb110 rb120 flag_deceased +keep idperson swv rb120 flag_deceased rename idperson idpartner rename flag_deceased flag_deceased_sp @@ -1182,6 +1204,7 @@ bys swv: sum dcpex if dcpex >= 0 * Check consistency tab dun dcpex + /**************************** PARTNER AGE DIFFERENCE **************************/ gen dcpagdf = dag - dagsp if dagsp != . & idpartner != -9 @@ -1191,6 +1214,7 @@ fre dcpagdf // tab dcpagdf year, col bys swv: sum dcpagdf + /************************ ECONOMIC ACTIVITY STATUS ****************************/ /* Activity status is coded very differently in EU-SILC to Understanding Society @@ -1306,6 +1330,7 @@ bys swv: sum les_c3 replace les_c3 = -9 if les_c3 == . + /******************** ECONOMIC ACTIVITY STATUS WITH RETIREMENT ****************/ /* Variable construction choice seems to matter here. @@ -1385,6 +1410,7 @@ bys swv: sum les_c4 replace les_c4 = -9 if les_c4 == . + /************************ LONG-TERM SICK OR DISABLED **************************/ /* Effectively treat disabled/long-term sick as a mututlly exclusive activity @@ -1423,6 +1449,7 @@ bys swv: sum dlltsd tab les_c3 dll tab les_c4 dll + /******************* PARTNER LONG-TERM SICK OR DISABLED ***********************/ preserve @@ -1444,6 +1471,7 @@ drop _merge fre dlltsd_sp if idpartner > 0 tab dlltsd_sp year, col + /******************************* UNEMPLOYMENT *********************************/ fre pl020 pl031 @@ -1477,6 +1505,7 @@ tab unemp dlltsd tab unemp les_c3 tab unemp les_c4 + /*********************** IN INITIAL EDUCATION SPELL ***************************/ /* In the understanding society data notes from codebook differ from the code @@ -1554,6 +1583,7 @@ tab ded dlltsd * Age in estimation limited to 16-29 tab dag ded + /******************************** STUDENT *************************************/ gen studentflag = -9 replace studentflag = 0 if les_c3 == 1 | les_c3 == 3 @@ -1561,8 +1591,9 @@ replace studentflag = 1 if les_c3 == 2 label var studentflag "Student" -tab les_c3 student -tab les_c4 student +tab les_c3 studentflag +tab les_c4 studentflag + /**************************** HOURS OF WORK ***********************************/ /* @@ -1799,6 +1830,7 @@ count if les_c3 == -9 count if les_c4 == -9 count if les_c4 == -9 & lhw == . // 8,461 + /********************* LAGGED ECONOMIC ACTIVITY STATUS ************************/ * Without retirement xtset idperson swv @@ -1821,6 +1853,7 @@ lab def l1_les_c4 1 "Employed or self_employed" 2 "Student" /// lab val l1_les_c4 l1_les_c4 lab var l1_les_c4 "LABOUR MARKET: Activity status, inc retirement, t-1" + /************************** PARTNER'S ACTIVITY STATUS *************************/ * Without retirement preserve @@ -1861,6 +1894,7 @@ drop _merge fre lessp_c4 tab lessp_c4 year, col + /********************** OWN AND SPOUSE ACTIVITY LEVELS ************************/ gen lesdf_c4 = -9 replace lesdf_c4 = 1 if les_c3 == 1 & lessp_c3 == 1 & dcpst == 1 @@ -1882,6 +1916,7 @@ fre lesdf_c4 tab lesdf_c4 year, col bys swv: sum lesdf_c4 if lesdf_c4 >= 0 + /*************************** EMPLOYMENT EXPERIENCE ****************************/ gen liwwh = -9 replace liwwh = pl200 if pl200 >= 0 & pl200 != . @@ -1893,6 +1928,7 @@ fre liwwh tab liwwh year, col bys swv: sum liwwh if liwwh >= 0 + /************************* EDUCATIONAL ATTAINMENT *****************************/ /* Use pe040 variable, code negative values to missing @@ -2057,7 +2093,7 @@ forvalues i = 4(-1)1 { * Low in the future, low today (min and monotonicity) replace imp_deh_mono = imp_deh_mono[_n-1] if /// - idperson == idperson[_n-1] & imp_deh[_n-1] == 3 & /// + idperson == idperson[_n-1] & imp_deh_mono[_n-1] == 3 & /// imp_deh_mono == . & count == `i' * Populate with future observation if: @@ -2147,7 +2183,7 @@ missing values. */ -* Create four category version with an unassigned cat for those in iniital edu +* Create four category version with an unassigned cat for those in initial edu * spell gen deh_c4 = deh_c3 @@ -2161,6 +2197,7 @@ lab values deh_c4 deh_c4 count if deh_c4 == -9 // 44,265 count if deh_c4 == -9 & les_c4 == -9 // 3,031 + /*************************** PARENT'S EDUCATION STATUS ************************/ /* There is no variable for parent's education status in EU-SILC, but can be @@ -2175,9 +2212,9 @@ Create variables but leave missing so able to utilize the stadnard strucuture of SimPaths. */ -gen dehm_c3 = . -gen dehf_c3 = . -gen dehmf_c3 = . +gen dehm_c4 = . +gen dehf_c4 = . +gen dehmf_c4 = . /* preserve @@ -2199,20 +2236,20 @@ merge m:1 swv idfather idhh using "$dir_data/father_edu" keep if _merge == 1 | _merge == 3 drop _merge -replace dehm_c3 = mother_educ -replace dehf_c3 = father_educ +replace dehm_c4 = mother_educ +replace dehf_c4 = father_educ -fre dehm_c3 if dgn > 0 & dag > 0 -fre dehf_c3 if dgn > 0 & dag > 0 +fre dehm_c4 if dgn > 0 & dag > 0 +fre dehf_c4 if dgn > 0 & dag > 0 * Identify the highest parental education status -//recode dehm_c3 dehf_c3 (.=0) -egen dehmf_c3 = rowmax(dehm_c3 dehf_c3) -lab var dehmf_c3 "highest parental education status" -fre dehmf_c3 -//recode dehm_c3 dehf_c3 (0 = .) -fre dehmf_c3 if dehm_c3 == . -fre dehmf_c3 if dehf_c3 == . +//recode dehm_c4 dehf_c4 (.=0) +egen dehmf_c4 = rowmax(dehm_c4 dehf_c4) +lab var dehmf_c4 "highest parental education status" +fre dehmf_c4 +//recode dehm_c4 dehf_c4 (0 = .) +fre dehmf_c4 if dehm_c4 == . +fre dehmf_c4 if dehf_c4 == . /* Only a third of the dataset has an observation for parental education and so the following code used to predict the value is not very accurate. @@ -2222,49 +2259,49 @@ is coded out. *Predict highest parental education status if missing *Recode education level (outcome variable) so 1 = Low education, * 2 = Medium education, 3 = High education -recode dehmf_c3 /// +recode dehmf_c4 /// (1 = 3) /// (3 = 1) /// - , gen(dehmf_c3_recoded) + , gen(dehmf_c4_recoded) -la def dehmf_c3_recoded 1 "Low" 2 "Medium" 3 "High" -la val dehmf_c3_recoded dehmf_c3_recoded -fre dehmf_c3_recoded +la def dehmf_c4_recoded 1 "Low" 2 "Medium" 3 "High" +la val dehmf_c4_recoded dehmf_c4_recoded +fre dehmf_c4_recoded *ordered probit model to replace missing values recode dgn dag drgn1 (-9=.) , gen (dgn2 dag2 drgn12) fre dgn2 dag2 drgn12 -xi: oprobit dehmf_c3_recoded i.dgn2 dag2 ib8.drgn12 i.swv, vce(robust) +xi: oprobit dehmf_c4_recoded i.dgn2 dag2 ib8.drgn12 i.swv, vce(robust) predict pred_probs1 pred_probs2 pred_probs3, pr //Identify the category with the highest predicted probability egen max_prob = rowmax(pred_probs1 pred_probs2 pred_probs3) //Impute missing values based on predicted probabilities -gen imp_dehmf_c3_recoded = . -replace imp_dehmf_c3_recoded = 1 if max_prob == pred_probs1 -replace imp_dehmf_c3_recoded = 2 if max_prob == pred_probs2 -replace imp_dehmf_c3_recoded = 3 if max_prob == pred_probs3 +gen imp_dehmf_c4_recoded = . +replace imp_dehmf_c4_recoded = 1 if max_prob == pred_probs1 +replace imp_dehmf_c4_recoded = 2 if max_prob == pred_probs2 +replace imp_dehmf_c4_recoded = 3 if max_prob == pred_probs3 -fre imp_dehmf_c3_recoded if missing(dehmf_c3_recoded) -fre imp_dehmf_c3_recoded if !missing(dehmf_c3_recoded) +fre imp_dehmf_c4_recoded if missing(dehmf_c4_recoded) +fre imp_dehmf_c4_recoded if !missing(dehmf_c4_recoded) -recode imp_dehmf_c3_recoded /// +recode imp_dehmf_c4_recoded /// (1 = 3) /// (3 = 1) /// - , gen(imp_dehmf_c3) + , gen(imp_dehmf_c4) -tab2 imp_dehmf_c3_recoded imp_dehmf_c3 +tab2 imp_dehmf_c4_recoded imp_dehmf_c4 -cap gen dehmf_c3_flag = missing(dehmf_c3) -lab var dehmf_c3_flag "=1 if dehmf_c3 is imputed" -replace dehmf_c3 = round(imp_dehmf_c3) if missing(dehmf_c3) -lab define dehmf_c3 1 "High" 2 "Medium" 3 "Low" +cap gen dehmf_c4_flag = missing(dehmf_c4) +lab var dehmf_c4_flag "=1 if dehmf_c4 is imputed" +replace dehmf_c4 = round(imp_dehmf_c4) if missing(dehmf_c4) +lab define dehmf_c4 1 "High" 2 "Medium" 3 "Low" -bys dehmf_c3_flag: fre dehmf_c3 +bys dehmf_c4_flag: fre dehmf_c4 -drop dehmf_c3_recoded dgn2 dag2 drgn12 _Idgn2_1 _Iswv_* pred_probs* max_prob /// - imp_dehmf_c3_recoded imp_dehmf_c3 +drop dehmf_c4_recoded dgn2 dag2 drgn12 _Idgn2_1 _Iswv_* pred_probs* max_prob /// + imp_dehmf_c4_recoded imp_dehmf_c4 */ */ @@ -2300,6 +2337,7 @@ tab dag der tab der les_c3 tab der les_c4 + /******************************* LEAVE EDUCATION ******************************/ /* Only populated if can transition out of education @@ -2331,6 +2369,7 @@ tab sedex les_c4 tab dag sedex + /****************************** RETIRED ***************************************/ gen dlrtrd = 0 replace dlrtrd = 1 if les_c4 == 4 @@ -2347,6 +2386,7 @@ tab dlrtrd year, col tab les_c3 dlrtrd tab les_c4 dlrtrd + /**************************** ENTER RETIREMENT ********************************/ /* Only populated if at risk of transition. @@ -2368,6 +2408,7 @@ tab drtren year, col tab drtren les_c4 + /**************************** PENSION AGE *************************************/ /*cap gen bdt = mdy(1, 15, birthy) /*no month of birth available in /EU-SILC*/ */ @@ -2433,9 +2474,9 @@ replace dagpns_y = 1 if dgn == 1 & dag == 66 & stm >= 2016 & stm < 2018 replace dagpns_y = 1 if dgn == 1 & dag == 65 & stm >= 2018 & stm <= 2024 * Women -replace dagpns_y = 1 if dgn == 1 & dag == 60 & stm >= 2006 & stm < 2016 -replace dagpns_y = 1 if dgn == 1 & dag == 61 & stm >= 2016 & stm < 2018 -replace dagpns_y = 1 if dgn == 1 & dag == 60 & stm >= 2018 & stm <= 2024 +replace dagpns_y = 1 if dgn == 0 & dag == 60 & stm >= 2006 & stm < 2016 +replace dagpns_y = 1 if dgn == 0 & dag == 61 & stm >= 2016 & stm < 2018 +replace dagpns_y = 1 if dgn == 0 & dag == 60 & stm >= 2018 & stm <= 2024 * Became eligable for state pension last year gen dagpns_y1 = 0 @@ -2446,9 +2487,9 @@ replace dagpns_y1 = 1 if dgn == 1 & dag == 67 & stm >= 2016 & stm < 2018 replace dagpns_y1 = 1 if dgn == 1 & dag == 66 & stm >= 2018 & stm <= 2024 * Women -replace dagpns_y1 = 1 if dgn == 1 & dag == 61 & stm >= 2005 & stm < 2016 -replace dagpns_y1 = 1 if dgn == 1 & dag == 62 & stm >= 2016 & stm < 2018 -replace dagpns_y1 = 1 if dgn == 1 & dag == 61 & stm >= 2018 & stm <= 2024 +replace dagpns_y1 = 1 if dgn == 0 & dag == 61 & stm >= 2005 & stm < 2016 +replace dagpns_y1 = 1 if dgn == 0 & dag == 62 & stm >= 2016 & stm < 2018 +replace dagpns_y1 = 1 if dgn == 0 & dag == 61 & stm >= 2018 & stm <= 2024 lab var dagpns_y "Age became eligable for pension" lab var dagpns_y1 "Age+1 became eligable for pension" @@ -2456,6 +2497,7 @@ lab var dagpns_y1 "Age+1 became eligable for pension" tab dag dagpns_y tab dag dagpns_y + /**************************** PENSION AGE OF SPOUSE ***************************/ * Above state pension age dummy preserve @@ -2502,6 +2544,7 @@ fre dagpns_sp fre dagpns_y_sp fre dagpns_y1_sp + /*************************** NOT RETIRED WORK STATUS **************************/ gen lesnr_c2 = -9 @@ -2515,6 +2558,7 @@ lab val lesnr_c2 lesnr_c2 fre lesnr_c2 tab lesnr_c2 year, col + /*************************** SAME SEX PARTNERSHIP *****************************/ gen ssscp = 0 if idpartner > 0 replace ssscp = 1 if dcpst == 1 & dgn == dgnsp & dgnsp != . @@ -2525,6 +2569,7 @@ lab var ssscp "Partnership is same sex" fre ssscp //0.02% tab ssscp year, col + /*************************** PARTNERSHIP DURATION *****************************/ /* There are no equivalent variables in EU-SILC for partnership duration @@ -2571,6 +2616,7 @@ tab dcpyy_st swv, col tab dcpst dcpyy_st + /*********************** YEAR PRIOR TO ENDING RELATIONSHIP ********************/ /* Impossible to know for the most recent wave so set to 0 to keep the variable. @@ -2588,6 +2634,7 @@ lab var scpexpy "Year prior to exiting partnership" fre scpexpy // 1% tab scpexpy year, col + /*************************** FEMALE FERTILE DUMMY *****************************/ gen sprfm = 0 replace sprfm = 1 if dgn == 0 & dag >= ${age_have_child_min} & /// @@ -2599,6 +2646,7 @@ lab var sprfm "Woman in fertility range dummy (18-49)" fre sprfm tab sprfm year, col + /**************************** NUMBER OF CHILDREN ******************************/ /* Note idmother and idfather are not just reported if the bioloigcal parent but @@ -2698,6 +2746,7 @@ No age consistency imposed here count if dag > 42 & dgn == 0 & dnc02 > 0 & dnc02 != . // 246 cases count if dag > 44 & dgn == 0 & dnc02 > 0 & dnc02 != . // 101 cases + /*********************** NUMBER OF NEW BORN CHILDREN **************************/ gen child0 = 0 replace child0 = 1 if dag < 1 @@ -2767,6 +2816,7 @@ tab dag give_birth if dgn == 0, col hist dag if give_birth == 1 & dgn == 0 + /***************************** ADULT CHILD FLAG *******************************/ /* Decision 24/10/25: Agreed that to be an adult child the following conditions @@ -2853,6 +2903,7 @@ tab adultchildflag year, col tab dag if adultchildflag == 1 & swv > 2010 + /************************ EXIT THE PARENTAL HOME ******************************/ /* Only populated if eligable for transition. 1 means that the individual exits the @@ -2885,6 +2936,7 @@ tab dlftphm year, col tab dlftphm adultchildflag + /************************ HOUSEHOLD COMPOSITION *******************************/ /* Note: For consistency with the simulation adult children and children above @@ -2938,6 +2990,7 @@ fre dhhtp_c8 // 1.87% single parents tab dhhtp_c8 year, col bys swv: sum dhhtp_c8 + /************************** OECD EQUIVALENCE SCALE ****************************/ * Temporary number of children 0-13 and 14-18 to create OECD hh equiv scale gen depChild_013 = 1 if (dag >= 0 & dag <= 13) & (idmother > 0 | idfather > 0) @@ -2956,6 +3009,7 @@ replace moecd_eq = 0.3*dnc013 + 0.5*dnc1418 + 1 if dhhtp_c4 == 4 drop dnc013 dnc1418 + /******************** IN INITIAL EDUCATION SPELL AGE RANGE ********************/ gen sedag = 1 if dag >= $age_leave_school & dag <= $age_force_leave_spell1_edu replace sedag = 0 if missing(sedag) @@ -2966,6 +3020,7 @@ lab var sedag "Initial education spell age range" fre sedag tab sedag year, col + /***************** WAS IN INITIAL EDUCATION SPELL SAMPLE **********************/ /* Consists of those observed in education in all preceding periods t-1,t-2,t-n, @@ -2981,6 +3036,7 @@ lab var sedcsmpl "SYSTEM: Continuous education sample" lab def sedcsmpl 1 "Aged 16-29 and were in continuous education" lab val sedcsmpl sedcsmpl + /********************** RETURN TO EDUCATION SAMPLE ****************************/ /* Consists of those who have left their initial education spell above the age of @@ -2993,6 +3049,7 @@ lab var sedrsmpl "SYSTEM : Return to education sample" lab def sedrsmpl 1 "Aged 16+, not retired and not in initial education spell" lab val sedrsmpl sedrsmpl + /******************* IN INITIAL EDUCATION SPELL SAMPLE ************************/ /* Generated from sedcsmpl and ded variables. Sample: Respondents who were in @@ -3006,6 +3063,7 @@ lab var scedsmpl "SYSTEM : Not in continuous education sample" lab def scedsmpl 1 "Left continuous education" lab val scedsmpl scedsmpl + /**************************** INCOME VARIABLES ********************************/ /* A key difference here appears to be that income in EU-SILC is yearly, whereas @@ -3018,7 +3076,6 @@ below. Generate individual income variables: */ -/*************** GROSS PERSONAL NON-BENEFIT MONTHLY INCOME ********************/ /* UK version: egen ypnb = rowtotal(fimnlabgrs_dv fimnpen_dv fimnmisc_dv /// inc_stp inc_tu inc_ma); @@ -3027,7 +3084,7 @@ inc_stp, inc_tu and inc_ma generated at the beginning from income file 1 - fimnlabgrs_dv: total personal monthly labour income gross: employee cash or near cash income (gross). -DP: Note that in UKHLS the variable fimnlabgrs_dv contains “labour income” +DP: Note that in UKHLS the variable fimnlabgrs_dv contains "labour income" (see here: https://www.understandingsociety.ac.uk/documentation/... mainstage/variables/fihhmnlabgrs_dv/_) so my understanding is that self-employment income should also be included here. @@ -3048,7 +3105,7 @@ These variables correspond to a the previous calender year. DP: The Usoc description says that this variable includes receipts reported in the income data file where w_ficode equals [2] pension from a previous employer, -or [3] pension from a spouse’s previous employer. +or [3] pension from a spouse's previous employer. This is assumed to be reported net of tax. So in the UK these are occupational pensions. I think it is correct to use py080g in SILC as an equivalent. @@ -3098,138 +3155,6 @@ in relation to child income. (in EUROMOD these types of incomes are split between the oldest couple in the household). */ -* Household level variables are assigned to all adult hh members -* ==> split them equally among all adults in hh -gen adult = (dag >= $age_adult) //18 yo and over -bysort stm idhh : egen n_adults = total(adult) - -lab var n_adults "Number of adults in hh" - -gen child = (dag < $age_adult) //below 18 yo -bysort stm idhh : egen n_child = total(child) - -lab var n_child "Number of children in hh" - -foreach var in hy080g hy110g hy040g hy090g { - - gen `var'_pc = `var'/n_adults - replace `var'_pc = 0 if child == 1 - -} - -//order stm idhh dag hy080g hy110g hy040g hy090g hy080g_pc hy110g_pc /// -// hy040g_pc hy090g_pc, last - -egen ypnb_temp = rowtotal(py010g py050g py080g hy080g_pc hy110g_pc /// - hy040g_pc hy090g_pc) -gen ypnb = ypnb_temp / 12 - -fre ypnb if ypnb < 0 -/* obs with negative income (due to negative self-employment income) but many of -these are close to zero ==> recode them to zero */ - -* Impose non-negativity -replace ypnb = 0 if ypnb < 0 - -sum ypnb -assert ypnb >= 0 - -sum ypnb if year == 2013 -sum ypnb if year == 2016 -sum ypnb if year == 2019 -sum ypnb if year == 2023 - -* Check for missing values == if missing on all the components -count if py010g >= . & py050g >= . & py080g >= . & hy080g >= . & /// - hy110g >= . & hy040g >= . & hy090g >= . // 0 obs - -count if (py010g >= . | py050g >= . | py080g >= . | hy080g >= . | /// - hy110g >= . | hy040g >= . | hy090g >= .) & dag >= 16 // 65,891 - -count if dag >= 16 // 332,907 -//=> 20% of adult observations have some missing income information - -/********** GROSS PERSONAL NON-EMPLOYMENT NON-BENEFIT MONTHLY INCOME **********/ -/* -UK version: egen yptc = rowtotal(fimnpen_dv fimnmisc_dv inc_stp inc_tu inc_ma) - -EU SILC use the same variables as indicated above. -*/ - -egen yptc = rowtotal(py080g hy080g_pc hy110g_pc hy040g_pc hy090g_pc) -replace yptc = yptc / 12 - -sum yptc -sum yptc if year == 2013 -sum yptc if year == 2016 -sum yptc if year == 2019 -sum yptc if year == 2023 - -* Check for missing values == if missing on all the components -count if py080g >= . & hy080g >= . & hy110g >= . & hy040g >= . & /// - hy090g >= . // 0 obs with all missing elements - -count if (py080g >= . | hy080g >= . | hy110g >= . | hy040g >= . | /// - hy090g >= .) & dag >= 16 - // 65,891 adult obs with at least one missing element - // 20% of adult observations have some missing income information same as - // gross personal non-ben income - -/***************** GROSS PERSONAL EMPLOYMENT MONTHLY INCOME *******************/ -/* -UK version: gen yplgrs = fimnlabgrs_dv -EU SILC version: As above. -*/ -egen yplgrs = rowtotal(py010g py050g) -replace yplgrs = yplgrs / 12 - -fre yplgrs if yplgrs < 0 // 0 obs - -* Impose non-negativity -replace yplgrs = 0 if yplgrs < 0 - -drop *_temp - -* Check for missing values == if missing on all the components -count if py010g >= . & py050g >= . & dag >= 16 // 22,426 adults missing both -count if (py010g >= . & py050g >= . ) & dag >= 16 & les_c3 == 1 - // 0 employed adults missing information - -replace yplgrs = -9 if (py010g >= . & py050g >= .) & dag >= 16 & les_c3 == 1 - -sum yplgrs -sum yplgrs if year == 2013 -sum yplgrs if year == 2016 -sum yplgrs if year == 2019 -sum yplgrs if year == 2023 - -/************* SPOUSE GROSS PERSONAL NON-BENEFIT MONTHLY INCOME ***************/ -preserve -keep swv idperson idhh ypnb -rename ypnb ypnbsp -rename idperson idpartner -save "$dir_data/temp_ypnb", replace -restore - -merge m:1 swv idpartner idhh using "$dir_data/temp_ypnb" -keep if _merge == 1 | _merge == 3 -drop _merge - -/****************** HH/BEN UNIT GROSS NON-BENEFIT MONTHLY INCOME **************/ -/* -Couples = sum of partners incomes. Singles = own income -*/ -sum ypnb ypnbsp - -egen yhhnb = rowtotal(ypnb ypnbsp) if dhhtp_c4 == 1 | dhhtp_c4 == 2 - -replace yhhnb = ypnb if dhhtp_c4 == 3 | dhhtp_c4 == 4 - -sum yhhnb -sum yhhnb if year == 2013 -sum yhhnb if year == 2016 -sum yhhnb if year == 2019 -sum yhhnb if year == 2023 /************************************ CPI *************************************/ /* @@ -3266,314 +3191,59 @@ replace CPI = 143.5 if stm == 2023 lab var CPI "HICP, all items, base 2015" -/************************ REAL MONTHLY GROSS INCOMES **************************/ -* For household income, equivalise and adjust for inflation -replace yhhnb = (yhhnb/moecd_eq)/(CPI/100) - -* Adjust for inflation: -replace ypnb = ypnb/(CPI/100) -replace yptc = yptc/(CPI/100) -replace yplgrs = yplgrs/(CPI/100) -replace ypnbsp = ypnbsp/(CPI/100) - -lab var ypnb "Gross monthy real personal non-benefit income " -lab var yptc "Gross real monthly personal non-employment, non-benefit income" -lab var yplgrs "Gross monthly real personal employment income" -lab var ypnbsp "Spouse gross real monthly personal non-benefit income" - -/************ INVERSE HYPERBOLIC SINE REAL MONTHLY GROSS INCOME ***************/ -/* -This (monotonic) transformation is useful for data that exhibit highly skewed -distributions, as it can help stabilize variance and normalise the -distribution. -*/ -gen yhhnb_asinh = asinh(yhhnb) -gen ypnbihs_dv = asinh(ypnb) -gen ypnbihs_dv_sp = asinh(ypnbsp) -gen yptciihs_dv = asinh(yptc) -gen yplgrs_dv = asinh(yplgrs) -replace yplgrs_dv = -9 if yplgrs_dv < 0 - // to account for missing values in the raw data coded as -9 in yplgrs - // (626 real changes made) +/****************************** REAL HOURLY WAGES *****************************/ +/* +There are data issues here: + - Data is collected at the annual level + - The annual information corresponds to the previous calender year + - Income from self-employment can be negative + +Decided on the following: -lab var yhhnb_asinh "Gross real monthly household non-benefit income, asinh" -lab var ypnbihs_dv "Gross real monthly personal non-benefit income, asinh" -lab var ypnbihs_dv_sp /// - "Spoues gross real monthly personal non-benefit income, asinh" -lab var yptciihs_dv /// - "Gross real monthly personal non-employment, non-benefit income, asinh" -lab var yplgrs_dv "Gross real monthly personal employment income, asinh" +wage_hr = Annual employemnt income / Annual # hours worked + = Annual employemnt income / (# months worked * # hours worked ... + a week * 4.33) -/* -sum ypnbihs_dv ypnbihs_dv_sp yptciihs_dv yplgrs_dv +Data year: T-1 T T+1 +Hrs: T-1 T T+1 +Income: T-2 T-1 T +# month: T-2 T-1 T - Variable | Obs Mean Std. dev. Min Max --------------+--------------------------------------------------------- - ypnbihs_dv | 754,135 2.907554 3.419338 0 11.12896 -ypnbihs_dv~p | 378,604 4.05074 3.494108 0 11.12896 - yptciihs_dv | 754,135 .3444508 1.204493 0 9.898644 - yplgrs_dv | 754,135 2.734086 3.439811 0 11.12896 +# Months worked last year can be constructed using the PL211* variables -*/ +PY211A - Main activity January -/*********** HOUSEHOLD GROSS NON-BENEFIT MONTHLY INCOME QUINTILES *************/ -sum yhhnb_asinh +1 Employee working full-time +2 Employee working part-time +3 Self-employed working full-time (including family worker) +4 Self-employed working part-time (including family worker) +5 Unemployed +6 Student, pupil +7 Retired +8 Unable to work due to long-standing health problems +10 Fulfilling domestic tasks +11 Other -/* - Variable | Obs Mean Std. dev. Min Max --------------+--------------------------------------------------------- - yhhnb_asinh | 754,135 3.390741 3.436031 0 10.57726 +=> Create a measure of hourly wages for year T using hour info from yr T +and wage info and number of months worked info from T+1 */ -/* -cap drop ydses* -forvalues stm=2005/2020 { - xtile ydses_c5_`stm' = yhhnb_asinh if depChild != 1 & stm==`stm', nq(5) - bys idhh: egen ydses_c5_tmp_`stm' = max(ydses_c5_`stm') if stm==`stm' - replace ydses_c5_`stm' = ydses_c5_tmp_`stm' if missing(ydses_c5_`stm') - drop ydses_c5_tmp_`stm' -} +xtset idperson swv +sort idperson swv -egen ydses_c5 = rowtotal(ydses_c5_2005 ydses_c5_2006 ydses_c5_2007 /// - ydses_c5_2008 ydses_c5_2009 ydses_c5_2010 ydses_c5_2011 ydses_c5_2012 /// - ydses_c5_2013 ydses_c5_2014 ydses_c5_2015 ydses_c5_2016 ydses_c5_2017 /// - ydses_c5_2018 ydses_c5_2019 ydses_c5_2020) -recode ydses_c5 (0=-9) -drop ydses_c5_2* -bys stm: fre ydses_c5 -*/ +* Create monthly income for T-1 +* Annual gross real labour income in T-1 +egen yplgrs_annual = rowtotal(py010g py050g) + // missing = 0 -/* -Problem: if many observations in yhhnb_asinh have exactly the same value, -xtile would group them into a single quintile, causing one or more quintiles to -have very few observations. -This results in 2nd quintile being extremely small compared to the first -quintile, which probably has many similar values -Adding a very small random amount to yhhnb_asinh can help differentiate tied -values enough to distribute them more evenly across quintiles without distorting -the data meaningfully. -*/ -sort idperson swv +* Impose non-negativity +gen flag_neg_labour_annual = (yplgrs_annual < 0) +lab var flag_neg_labour_annual "FLAG: negative labour income reported" -gen yhhnb_asinh_jittered = yhhnb_asinh + runiform() * 1e-5 +replace yplgrs_annual = 0 if yplgrs_annual < 0 -cap drop ydses* -forvalues stm = 2005/2023 { - - xtile ydses_c5_`stm' = yhhnb_asinh_jittered if depChild != 1 & /// - stm == `stm', nq(5) - - bys idhh: egen ydses_c5_tmp_`stm' = max(ydses_c5_`stm') if stm == `stm' - - replace ydses_c5_`stm' = ydses_c5_tmp_`stm' if missing(ydses_c5_`stm') - drop ydses_c5_tmp_`stm' - -} - -egen ydses_c5 = rowtotal(ydses_c5_2005 ydses_c5_2006 ydses_c5_2007 /// - ydses_c5_2008 ydses_c5_2009 ydses_c5_2010 ydses_c5_2011 ydses_c5_2012 /// - ydses_c5_2013 ydses_c5_2014 ydses_c5_2015 ydses_c5_2016 /// - ydses_c5_2017 ydses_c5_2018 ydses_c5_2019 ydses_c5_2020 ydses_c5_2021 /// - ydses_c5_2022 ydses_c5_2023) -recode ydses_c5 (0 = -9) -drop ydses_c5_2* -bys stm: fre ydses_c5 - -lab var ydses_c5 "Gross real monthly household non-benefit income quintiles" - -/********** COUPLE DIFFERENCE IN GROSS PERSONAL NON-BENEFIT INCOME ************/ -gen ynbcpdf_dv = ypnbihs_dv - ypnbihs_dv_sp -recode ynbcpdf_dv (. = -999) if idpartner < 0 -recode ynbcpdf_dv (. = -999) -sum ynbcpdf_dv - -lab var ynbcpdf_dv /// -"Difference between own and spouse's gross personal non-benefit income, asinh" - -/****************************** GROSS NET RATIO ******************************/ -/* -There are no net incomes in EU-SILC, will be computed using EUROMOD anyway -*/ -gen gross_net_ratio = 1 - -/******************** GROSS PERSONAL CAPITAL INCOME ***************************/ -/* -UK version: -gen ypncp = /// - asinh((fimninvnet_dv+fimnmisc_dv+fimnprben_dv)*gross_net_ratio*(1/CPI)) - -1 - fimninvnet_dv: Investment income - -2 - fimnmisc_dv: Net miscellaneous income. Educational grant - (not student loan or tuition fee loan), payments from a - family member not living here, or any other regular payment - (not asked in Wave 1). - -3 - fimnprben_dv: Net private benefit income. Trade union/friendly society - payment, maintenance or alimony, or sickness and accident - insurance. - -EU SILC version see above. -*/ -egen ypncp_temp = rowtotal(hy080g_pc hy110g_pc hy040g_pc hy090g_pc) -gen ypncp = ypncp_temp / 12 -replace ypncp = asinh(ypncp*(100/CPI)) - -lab var ypncp "Gross real monthly personal non-employment capital income, asinh" - -gen ln_ypncp = ln(sinh(ypncp)) - -lab var ln_ypncp "Gross real monthly personal non-employment capital income, ln" - -sum ypncp -sum ypncp if year == 2013 -sum ypncp if year == 2016 -sum ypncp if year == 2019 -sum ypncp if year == 2023 - -* Check for missing values == if missing on all the components -count if hy080g >= . & hy110g >= . & hy040g >= . & hy090g >= . // 0 obs -count if hy080g >= . | hy110g >= . | hy040g >= . | hy090g >= . - // 0 obs have some missing capital income information - -/************************* PRIVATE PENSION INCOME *****************************/ -/* -UK version: -fimnpen_dv: Monthly amount of net pension income - -Eu SILC version -py080g: Pension from individual private plans (gross) -*/ -gen ypnoab_lvl = (py080g/12)*(100/CPI) -recode ypnoab_lvl (. = 0) -gen ypnoab = asinh(ypnoab_lvl) - -lab var ypnoab "Gross real monthly personal private pension income" - -sum ypnoab -sum ypnoab if year == 2013 -sum ypnoab if year == 2016 -sum ypnoab if year == 2019 -sum ypnoab if year == 2023 - -count if py080g >= . & dag >= 16 // 65,855 obs - -* Final check there are no missing values in income vars -foreach var in ydses_c5 ypnbihs_dv yptciihs_dv yplgrs_dv ynbcpdf_dv /// - ypncp ypnoab { - - assert `var'!= . - -} - -/***************************** HOME OWNERSHIP *********************************/ -/* -Dhh_owned is the definition used in the initial population and in the model -predicting house ownership in the homeownership process of the simulation. -*/ -// bys swv: fre hh021 -gen dhh_owned = 0 -replace dhh_owned = 1 if hh021 == 1 | hh021 == 2 - -lab var dhh_owned "Home ownership dummy" - -fre dhh_owned -tab dhh_owned year, col - -/* -TO DO: Adjust for the new home ownership process? YES -*/ - -/**************************** DISABILITY BENEFIT ******************************/ -/* -In EU-SILC, the variables -- py130n: (disability benefits net), -- py130g: (disability benefits gross), -- py131g: (contributory and means-tested), -- py132g: (contributory and non means-tested), -- py133g: (non-contributory and means-tested), -- py134g: (non-contributory and non means-tested) - -All may contain information on disability benefits. - -For Poland, py131g only has zero entries - -The code below may well be PL specific as some of the coding of these variables -changes between countries. -I expect that there is probably a better/more efficient way of constructing this -code. -*/ -recode py130n (0 = -9)(. = -9), gen(py130nr) -recode py130g (0 = -9)(. = -9), gen(py130gr) -recode py132g (0 = -9)(. = -9), gen(py132gr) -recode py133g (0 = -9)(. = -9), gen(py133gr) -recode py134g (0 = -9)(. = -9), gen(py134gr) - -gen bdi = 0 -replace bdi = 1 if py130gr >= 1 | py130gr >= 1 | py132gr >= 1 | /// - py133gr >= 1 | py134gr >= 1 -lab val bdi dummy - -lab var bdi "Disability benefits (dummy)" - -drop py130nr py130gr py132gr py133gr py134gr - -fre bdi -tab bdi year, col - -/**************************** HOURLY LABOUR INCOME ****************************/ -/* -There are data issues here: - - Data is collected at the annual level - - The annual information corresponds to the previous calender year - - Income from self-employment can be negative - -Decided on the following: - -wage_hr = Annual employemnt income / Annual # hours worked - = Annual employemnt income / (# months worked * # hours worked ... - a week * 4.33) - -Data year: T-1 T T+1 -Hrs: T-1 T T+1 -Income: T-2 T-1 T -# month: T-2 T-1 T - -# Months worked last year can be constructed using the PL211* variables - -PY211A - Main activity January - -1 Employee working full-time -2 Employee working part-time -3 Self-employed working full-time (including family worker) -4 Self-employed working part-time (including family worker) -5 Unemployed -6 Student, pupil -7 Retired -8 Unable to work due to long-standing health problems -10 Fulfilling domestic tasks -11 Other - -=> Create a measure of hourly wages for year T using hour info from yr T -and wage info and number of months worked info from T+1 -*/ - -xtset idperson swv -sort idperson swv - -* Create monthly income for T-1 -* Annual gross real labour income in T-1 -egen yplgrs_annual = rowtotal(py010g py050g) - // missing = 0 - -* Impose non-negativity -gen flag_neg_labour_annual = (yplgrs_annual < 0) -lab var flag_neg_labour_annual "FLAG: negative labour income reported" - -replace yplgrs_annual = 0 if yplgrs_annual < 0 - -* Turn into real gross labour income using lagged CPI to account for timing +* Turn into real gross annual labour income using lagged CPI to account for timing gen CPI_5 = 80.2 gen CPI_6 = 81.2 gen CPI_7 = 83.3 @@ -3670,10 +3340,6 @@ replace yplgrs_mnth = yplgrs_annual / 12 if months_wrk == 0 * Check sum yplgrs_mnth -sum yplgrs -sum yplgrs if yplgrs_mnth != . - -bys stm: sum yplgrs_mnth sort idperson swv @@ -3685,7 +3351,7 @@ gen obs_earnings_hourly = . replace obs_earnings_hourly = f.yplgrs_mnth/(lhw*4.33) if les_c4 == 1 lab var obs_earnings_hourly /// - "Observed hourly wages, emp and self-emp, adjusted for timing" + "Observed hourly real wages, emp and self-emp, adjusted for timing" * Impose consistency replace obs_earnings_hourly = 0 if les_c3 == 2 | les_c3 == 3 @@ -3710,174 +3376,582 @@ count if obs_earnings_hourly == 0 & les_c3 == 1 & yplgrs_annual[_n+1] == 0 & /// // accounted for all cases /* -Missing wage observations: -1- almost all due to being the last observation in individual's panel -2- missing activity information -3- missing adjacent observation +Missing wage observations: +1- almost all due to being the last observation in individual's panel +2- missing activity information +3- missing adjacent observation + +Zero wage observations +4- next year is missing labour income information +5- next year reports zero labour income + +How to address each case: +- uprate previously reported wages +- use last years earnings and this years hours +- use next years wages + +- use hot deck imputation + +https://bdl.stat.gov.pl/bdl/dane/podgrup/tablica + +*/ +* Average gross wages +gen avg_wage_5 = 2506.93 +gen avg_wage_6 = 2636.81 +gen avg_wage_7 = 2866.04 +gen avg_wage_8 = 3158.48 +gen avg_wage_9 = 3315.38 +gen avg_wage_10 = 3435.00 +gen avg_wage_11 = 3625.21 +gen avg_wage_12 = 3744.38 +gen avg_wage_13 = 3877.43 +gen avg_wage_14 = 4003.99 +gen avg_wage_15 = 4150.86 +gen avg_wage_16 = 4290.52 +gen avg_wage_17 = 4527.89 +gen avg_wage_18 = 4834.76 +gen avg_wage_19 = 5181.63 +gen avg_wage_20 = 5523.32 +gen avg_wage_21 = 6001.02 +gen avg_wage_22 = 6705.62 +gen avg_wage_23 = 7595.30 + +replace obs_earnings_hourly = . if obs_earnings_hourly == 0 & les_c3 == 1 + +gen x = 1 if les_c3 == 1 & obs_earnings_hourly == . + +* Imputation +forvalues i = 6/23 { + + local j = `i'-1 + + gen nwage_growth_`j'`i' = avg_wage_`i'/avg_wage_`j' + + gen inflation_change_`j'`i' = CPI_`i'/CPI_`j' + + gen growth_factor_`j'`i' = nwage_growth_`j'`i'/inflation_change_`j'`i' + + * Use last years wages + replace obs_earnings_hourly = /// + obs_earnings_hourly[_n-1] * growth_factor_`j'`i' /// + if idperson == idperson[_n-1] & les_c3 == 1 & les_c3[_n-1] == 1 & /// + swv == 2000 +`i' & obs_earnings_hourly == . + + * Use the next years wages + replace obs_earnings_hourly = /// + obs_earnings_hourly[_n+1] / growth_factor_`j'`i' /// + if idperson == idperson[_n+1] & les_c3 == 1 & les_c3[_n+1] == 1 & /// + swv == 2000 +`i' & obs_earnings_hourly == . + + * Use last years earnings and this years hours + replace obs_earnings_hourly = /// + (yplgrs_mnth/(lhw*4.33)) * growth_factor_`j'`i' if /// + obs_earnings_hourly == . & swv == 2000 + `i' & yplgrs_mnth != 0 + +} + +gen flag_wage_imp_panel = (x == 1 & obs_earnings_hourly != . ) + +label var flag_wage_imp_panel /// + "FLAG: wage imputed using surrounding panel information and uprating" + +count if obs_earnings_hourly == . // 25,041 +count if obs_earnings_hourly == . & idperson != idperson[_n+1] // 14,613 +count if obs_earnings_hourly == . & idperson == idperson[_n+1] & /// + les_c3 == -9 // 408 +count if obs_earnings_hourly == . & idperson == idperson[_n+1] & /// + les_c3 == 1 & swv != swv[_n+1] - 1 // 89 + +count if obs_earnings_hourly == . & les_c3 == 1 & yplgrs_annual[_n+1] == 0 & /// + flag_missing_lbr_income[_n+1] == 1 & idperson == idperson[_n+1] // 605 +count if obs_earnings_hourly == . & les_c3 == 1 & yplgrs_annual[_n+1] == 0 & /// + flag_missing_lbr_income[_n+1] == 0 & idperson == idperson[_n+1] // 9,363 + +count if obs_earnings_hourl == 0 & les_c3 == 1 // 0 + +* Use hot deck imputation for the remaining missing observations among the +* working + +gen flag_wage_hotdeck = (les_c3 == 1 & missing(obs_earnings_hourly)) + +lab var flag_wage_hotdeck "FLAG: wage imputed using hotdeck imputation" + +* Strata +cap drop ageband +gen ageband = floor(dag/10)*10 +replace ageband = 60 if ageband == 70 + // group 70+ year olds with 60+ to ensure matches + +cap drop stratum +egen stratum = group(ageband drgn1 dgn swv), label(strutum, replace) + +* Define donor pool +preserve + +keep if les_c3 == 1 & obs_earnings_hourly != . +keep obs_earnings_hourly stratum idperson swv +bys stratum (idperson swv): gen draw = _n +bys stratum (idperson swv): gen n_donors = _N +rename obs_earnings_hourly donor_wages +drop idperson swv +save "$dir_data/temp_wages_donors", replace + +keep stratum n_donors +bys stratum: keep if _n == 1 +save "$dir_data/temp_donorsN", replace + +restore + +* Attached number of donors in each stratum +merge m:1 stratum using "$dir_data/temp_donorsN", nogen + +* Assign random donor +gen draw = . + +sort stratum idperson swv + +by stratum (idperson swv): replace draw = ceil(runiform()*n_donors[1]) if /// + flag_wage_hotdeck == 1 & n_donors > 0 + +* Attach donor +merge m:1 stratum draw using "$dir_data/temp_wages_donors", /// + keepusing(donor_wages draw) + +drop if _m == 2 +drop _m + +replace obs_earnings_hourly = donor_wage if flag_wage_hotdeck == 1 + +drop donor_wage ageband stratum dra n_donor + +count if obs_earnings_hourly == . & les_c3 == 1 + +* Lagged wage +xtset idperson swv + +gen l1_obs_earnings_hourly = . + +replace l1_obs_earnings_hourly = l.obs_earnings_hourly +lab var l1_obs_earnings_hourly /// + "Observed hourly real wages, emp and self-emp, t-1, adjusted for timing" + +sum obs_earnings_hourly if les_c3 == 1 +sum obs_earnings_hourly if les_c3 == 2 +sum obs_earnings_hourly if les_c3 == 3 +sum obs_earnings_hourly if les_c3 == -9 + +drop yplgrs_annual yplgrs_mnth + + +/************** GROSS REAL MONTHLY PERSONAL EMPLOYMENT INCOME *****************/ +/* +Use wage and hours worked info instead of reported amounts in py010g py050g +Use real wages therefore already in real terms. +*/ +/* +egen yplgrs = rowtotal(py010g py050g) +replace yplgrs = yplgrs / 12 + +fre yplgrs if yplgrs < 0 // 0 obs + +* Impose non-negativity +replace yplgrs = 0 if yplgrs < 0 + +*/ + +gen yplgrs = obs_earnings_hourly * lhw * 4.33 +assert yplgrs >= 0 + +count if yplgrs == . // 8,461 + +* Checks +assert yplgrs == 0 if les_c4 != 1 & les_c4 > 0 +assert obs_earnings_hourly == 0 if les_c4 != 1 & les_c4 > 0 + +sum obs_earnings_hourly if les_c3 == 2 +count if obs_earnings_hourly == . & les_c3 == 2 +count if lhw == . & les_c3 == 2 + +sum obs_earnings_hourly if les_c3 == 3 +count if obs_earnings_hourly == . & les_c3 == 3 +count if lhw == . & les_c3 == 3 +// all missing for those who are working + +count if obs_earnings_hourly == . & les_c3 < 0 +count if lhw == . & les_c3 < 0 +// if missing some, missing all relevant info + + +/**************** GROSS NOMINAL MONTHLY PERSONAL CAPITAL INCOME ***************/ +/* +UK version: +gen ypncp = /// + asinh((fimninvnet_dv+fimnmisc_dv+fimnprben_dv)*gross_net_ratio*(1/CPI)) + +1 - fimninvnet_dv: Investment income + +2 - fimnmisc_dv: Net miscellaneous income. Educational grant + (not student loan or tuition fee loan), payments from a + family member not living here, or any other regular payment + (not asked in Wave 1). + +3 - fimnprben_dv: Net private benefit income. Trade union/friendly society + payment, maintenance or alimony, or sickness and accident + insurance. + +EU SILC version see above. +NOTE: The raw variables have no missing or negative values. + +*/ + +* Household level variables are assigned to all adult hh members +* ==> split them equally among all adults in hh +gen adult = (dag >= $age_adult) //18 yo and over +bysort stm idhh : egen n_adults = total(adult) + +lab var n_adults "Number of adults in hh" + +gen child = (dag < $age_adult) //below 18 yo +bysort stm idhh : egen n_child = total(child) + +lab var n_child "Number of children in hh" + +* NOTE: No negative values or missing values +foreach var in hy080g hy110g hy040g hy090g { + + gen `var'_pc = `var'/n_adults + replace `var'_pc = 0 if child == 1 + +} + +egen ypncp_temp = rowtotal(hy080g_pc hy110g_pc hy040g_pc hy090g_pc) +gen ypncp = ypncp_temp / 12 + +* Check for missing values == if missing on all the components +count if hy080g == . & hy110g == . & hy040g == . & hy090g == . // 0 obs +count if hy080g == . | hy110g == . | hy040g == . | hy090g == . + + +/*********** GROSS NONMINAL MONTHLY PERSONAL PRIVATE PENSION INCOME ***********/ +/* +UK version: +fimnpen_dv: Monthly amount of net pension income + +EU SILC version +py080g: Pension from individual private plans (gross) + +NOTE: The raw variable has many missing (.) values. +*/ + +gen ypnoab = py080g / 12 + +* Code missing as zero +recode ypnoab (. = 0) + +sum ypnoab +sum ypnoab if year == 2013 +sum ypnoab if year == 2016 +sum ypnoab if year == 2019 +sum ypnoab if year == 2023 + +count if py080g == . & dag >= 16 + + +/*********** GROSS NOMINAL MONTHLY PERSONAL NON-BENEFIT INCOME ****************/ +/* +Note: This is supposed to mirror UKMOD market income + + = employment income + private pensions income + capital income + +Use components instead of raw vars so that changes feed through +*/ +/* +egen ypnb_temp = rowtotal(py010g py050g py080g hy080g_pc hy110g_pc /// + hy040g_pc hy090g_pc) +gen ypnb = ypnb_temp / 12 + +fre ypnb if ypnb < 0 +/* obs with negative income (due to negative self-employment income) but many of +these are close to zero ==> recode them to zero */ + +* Impose non-negativity +replace ypnb = 0 if ypnb < 0 + +sum ypnb +assert ypnb >= 0 +*/ + +* Adjust gross eomployment income (yplgrs) so in nominal terms +gen temp_yplgrs = yplgrs * (CPI/100) + +egen ypnb = rowtotal(temp_yplgrs ypncp ypnoab) + +sum ypnb if year == 2013 +sum ypnb if year == 2016 +sum ypnb if year == 2019 +sum ypnb if year == 2023 + +* Check for missing values == if missing on all the components +count if py080g >= . & hy080g >= . & /// + hy110g >= . & hy040g >= . & hy090g >= . + +count if (py080g >= . | hy080g >= . | /// + hy110g >= . | hy040g >= . | hy090g >= .) & dag >= 16 + +count if dag >= 16 +//=> 20% of adult observations have some missing income information + + +/****** GROSS NOMINAL MONTHLY PERSONAL NON-EMPLOYMENT NON-BENEFIT INCOME ******/ +/* + = capital income + private pension income + +UK version: egen yptc = rowtotal(fimnpen_dv fimnmisc_dv inc_stp inc_tu inc_ma) + +EU SILC use the same variables as indicated above. +*/ + +egen yptc = rowtotal(ypncp ypnoab) + + +/************* SPOUSE GROSS PERSONAL MONTHLY NON-BENEFIT INCOME ***************/ +preserve +keep swv idperson idhh ypnb +rename ypnb ypnbsp +rename idperson idpartner +save "$dir_data/temp_ypnb", replace +restore + +merge m:1 swv idpartner idhh using "$dir_data/temp_ypnb" +keep if _merge == 1 | _merge == 3 +drop _merge + + +/************* EQUIV HH/BEN UNIT GROSS MONTHLY NON-BENEFIT INCOME *************/ +/* +Couples = sum of partners incomes. Singles = own income +*/ +sum ypnb ypnbsp + +egen yhhnb = rowtotal(ypnb ypnbsp) if dhhtp_c4 == 1 | dhhtp_c4 == 2 + +replace yhhnb = ypnb if dhhtp_c4 == 3 | dhhtp_c4 == 4 + +* Equivalise +replace yhhnb = (yhhnb/moecd_eq) + +sum yhhnb +sum yhhnb if year == 2013 +sum yhhnb if year == 2016 +sum yhhnb if year == 2019 +sum yhhnb if year == 2023 + + +/****************** NOMINAL MONTHLY PERSONAL DISPOSABLE INCOME *****************/ + +* Create hh value of company car variable +replace py021g = 0 if py021g == . +bysort stm idhh : egen hh_comp_car = total(py021g) + +* Hh disp net company car +gen ydisp_hh = hy020 - hh_comp_car + +* Split hh level vars into individual amounts +gen ydisp = ydisp_hh/n_adults +replace ydisp = 0 if child == 1 + +* Create monthly amount +replace ydisp = ydisp / 12 + + +/************************ REAL MONTHLY GROSS INCOMES **************************/ +* Adjust for inflation: +* NOTE: yplgrs already in real terms as derived from real wages +replace ypnb = ypnb/(CPI/100) +replace yptc = yptc/(CPI/100) +replace ypnbsp = ypnbsp/(CPI/100) +replace ypncp = ypncp/(CPI/100) +replace ypnoab = ypnoab/(CPI/100) +replace yhhnb = yhhnb/(CPI/100) +replace ydisp = ydisp/(CPI/100) + +lab var ypnb "Gross real monthly personal non-benefit income" +lab var yptc "Gross real monthly personal non-employment, non-benefit income" +lab var yplgrs "Gross real monthly personal employment income" +lab var ypnbsp "Spouse's gross real monthly personal non-benefit income" +lab var ypncp "Gross real monthly personal capital income" +lab var ypnoab "Gross real monthly personal private pension income" +lab var yhhnb "Equivalized gross real monthly non-benefit hh income" +lab var ydisp "Disposable real monthly personal income" + +gen ypnoab_lvl = ypnoab + + +/*********** INVERSE HYPERBOLIC SINE REAL MONTHLY GROSS INCOMES ***************/ +/* +This (monotonic) transformation is useful for data that exhibit highly skewed +distributions, as it can help stabilize variance and normalise the +distribution. +*/ +gen ypnbihs_dv = asinh(ypnb) +gen yptciihs_dv = asinh(yptc) +gen yplgrs_dv = asinh(yplgrs) +gen ypnbihs_dv_sp = asinh(ypnbsp) +replace ypncp = asinh(ypncp) +replace ypnoab = asinh(ypnoab) +gen yhhnb_asinh = asinh(yhhnb) + +lab var ypnbihs_dv "Gross real monthly personal non-benefit income, asinh" +lab var yptciihs_dv /// + "Gross real monthly personal non-employment, non-benefit income, asinh" +lab var yplgrs_dv "Gross real monthly personal employment income, asinh" +lab var ypnbihs_dv_sp /// + "Spouse's gross real monthly personal non-benefit income, asinh" +lab var ypncp "Gross real monthly personal capital income, asinh" +lab var ypnoab "Gross real monthly personal private pension income, asinh" +lab var yhhnb_asinh "Gross real monthly household non-benefit income, asinh" + +/* +sum ypnbihs_dv ypnbihs_dv_sp yptciihs_dv yplgrs_dv ypncp ypnoab +*/ -Zero wage observations -4- next year is missing labour income information -5- next year reports zero labour income +/************************ LOG CAPTIAL INCOME **********************************/ -How to address each case: -- uprate previously reported wages -- use last years earnings and this years hours -- use next years wages +gen ln_ypncp = ln(sinh(ypncp)) + +lab var ln_ypncp "Gross real monthly personal non-employment capital income, ln" + -- use hot deck imputation +/***** GROSS REAL MONTHLY EQUIV HOUSEHOLD NON-BENEFIT INCOME QUINTILES ********/ +sum yhhnb_asinh -https://bdl.stat.gov.pl/bdl/dane/podgrup/tablica +/* +cap drop ydses* +forvalues stm=2005/2020 { + xtile ydses_c5_`stm' = yhhnb_asinh if depChild != 1 & stm==`stm', nq(5) + bys idhh: egen ydses_c5_tmp_`stm' = max(ydses_c5_`stm') if stm==`stm' + replace ydses_c5_`stm' = ydses_c5_tmp_`stm' if missing(ydses_c5_`stm') + drop ydses_c5_tmp_`stm' +} -*/ -* Average gross wages -gen avg_wage_5 = 2506.93 -gen avg_wage_6 = 2636.81 -gen avg_wage_7 = 2866.04 -gen avg_wage_8 = 3158.48 -gen avg_wage_9 = 3315.38 -gen avg_wage_10 = 3435.00 -gen avg_wage_11 = 3625.21 -gen avg_wage_12 = 3744.38 -gen avg_wage_13 = 3877.43 -gen avg_wage_14 = 4003.99 -gen avg_wage_15 = 4150.86 -gen avg_wage_16 = 4290.52 -gen avg_wage_17 = 4527.89 -gen avg_wage_18 = 4834.76 -gen avg_wage_19 = 5181.63 -gen avg_wage_20 = 5523.32 -gen avg_wage_21 = 6001.02 -gen avg_wage_22 = 6705.62 -gen avg_wage_23 = 7595.30 +egen ydses_c5 = rowtotal(ydses_c5_2005 ydses_c5_2006 ydses_c5_2007 /// + ydses_c5_2008 ydses_c5_2009 ydses_c5_2010 ydses_c5_2011 ydses_c5_2012 /// + ydses_c5_2013 ydses_c5_2014 ydses_c5_2015 ydses_c5_2016 ydses_c5_2017 /// + ydses_c5_2018 ydses_c5_2019 ydses_c5_2020) +recode ydses_c5 (0=-9) +drop ydses_c5_2* +bys stm: fre ydses_c5 +*/ -replace obs_earnings_hourly = . if obs_earnings_hourly == 0 & les_c3 == 1 +/* +Problem: if many observations in yhhnb_asinh have exactly the same value, +xtile would group them into a single quintile, causing one or more quintiles to +have very few observations. +This results in 2nd quintile being extremely small compared to the first +quintile, which probably has many similar values +Adding a very small random amount to yhhnb_asinh can help differentiate tied +values enough to distribute them more evenly across quintiles without distorting +the data meaningfully. +*/ +sort idperson swv -gen x = 1 if les_c3 == 1 & obs_earnings_hourly == . +gen yhhnb_asinh_jittered = yhhnb_asinh + runiform() * 1e-5 -* Imputation -forvalues i = 6/23 { - - local j = `i'-1 - - gen nwage_growth_`j'`i' = avg_wage_`i'/avg_wage_`j' - - gen inflation_change_`j'`i' = CPI_`i'/CPI_`j' - - gen growth_factor_`j'`i' = nwage_growth_`j'`i'/inflation_change_`j'`i' - - * Use last years wages - replace obs_earnings_hourly = /// - obs_earnings_hourly[_n-1] * growth_factor_`j'`i' /// - if idperson == idperson[_n-1] & les_c3 == 1 & les_c3[_n-1] == 1 & /// - swv == 2000 +`i' & obs_earnings_hourly == . - - * Use the next years wages - replace obs_earnings_hourly = /// - obs_earnings_hourly[_n+1] / growth_factor_`j'`i' /// - if idperson == idperson[_n+1] & les_c3 == 1 & les_c3[_n+1] == 1 & /// - swv == 2000 +`i' & obs_earnings_hourly == . +cap drop ydses* +forvalues stm = 2005/2023 { - * Use last years earnings and this years hours - replace obs_earnings_hourly = /// - (yplgrs_mnth/(lhw*4.33)) * growth_factor_`j'`i' if /// - obs_earnings_hourly == . & swv == 2000 + `i' & yplgrs_mnth != 0 + xtile ydses_c5_`stm' = yhhnb_asinh_jittered if depChild != 1 & /// + stm == `stm', nq(5) -} - -gen flag_wage_imp_panel = (x == 1 & obs_earnings_hourly != . ) - -label var flag_wage_imp_panel /// - "FLAG: wage imputed using surrounding panel information and uprating" - -count if obs_earnings_hourly == . // 25,041 -count if obs_earnings_hourly == . & idperson != idperson[_n+1] // 14,613 -count if obs_earnings_hourly == . & idperson == idperson[_n+1] & /// - les_c3 == -9 // 408 -count if obs_earnings_hourly == . & idperson == idperson[_n+1] & /// - les_c3 == 1 & swv != swv[_n+1] - 1 // 89 - -count if obs_earnings_hourly == . & les_c3 == 1 & yplgrs_annual[_n+1] == 0 & /// - flag_missing_lbr_income[_n+1] == 1 & idperson == idperson[_n+1] // 605 -count if obs_earnings_hourly == . & les_c3 == 1 & yplgrs_annual[_n+1] == 0 & /// - flag_missing_lbr_income[_n+1] == 0 & idperson == idperson[_n+1] // 9,363 + bys idhh: egen ydses_c5_tmp_`stm' = max(ydses_c5_`stm') if stm == `stm' -count if obs_earnings_hourl == 0 & les_c3 == 1 // 0 + replace ydses_c5_`stm' = ydses_c5_tmp_`stm' if missing(ydses_c5_`stm') + drop ydses_c5_tmp_`stm' -* Use hot deck imputation for the remaining missing observations among the -* working +} -gen flag_wage_hotdeck = (les_c3 == 1 & missing(obs_earnings_hourly)) +egen ydses_c5 = rowtotal(ydses_c5_2005 ydses_c5_2006 ydses_c5_2007 /// + ydses_c5_2008 ydses_c5_2009 ydses_c5_2010 ydses_c5_2011 ydses_c5_2012 /// + ydses_c5_2013 ydses_c5_2014 ydses_c5_2015 ydses_c5_2016 /// + ydses_c5_2017 ydses_c5_2018 ydses_c5_2019 ydses_c5_2020 ydses_c5_2021 /// + ydses_c5_2022 ydses_c5_2023) +recode ydses_c5 (0 = -9) +drop ydses_c5_2* +bys stm: fre ydses_c5 -lab var flag_wage_hotdeck "FLAG: wage imputed using hotdeck imputation" +lab var ydses_c5 "Gross real monthly household non-benefit income quintiles" -* Strata -cap drop ageband -gen ageband = floor(dag/10)*10 -replace ageband = 60 if ageband == 70 - // group 70+ year olds with 60+ to ensure matches -cap drop stratum -egen stratum = group(ageband drgn1 dgn swv), label(strutum, replace) +/***** COUPLE DIFFERENCE IN GROSS REAL MONTHLY PERSONAL NON-BENEFIT INCOME ****/ +gen ynbcpdf_dv = ypnbihs_dv - ypnbihs_dv_sp +recode ynbcpdf_dv (. = -999) if idpartner < 0 +recode ynbcpdf_dv (. = -999) +sum ynbcpdf_dv -* Define donor pool -preserve +lab var ynbcpdf_dv /// +"Difference between own and spouse's gross personal non-benefit income, asinh" -keep if les_c3 == 1 & obs_earnings_hourly != . -keep obs_earnings_hourly stratum idperson swv -bys stratum (idperson swv): gen draw = _n -bys stratum (idperson swv): gen n_donors = _N -rename obs_earnings_hourly donor_wages -drop idperson swv -save "$dir_data/temp_wages_donors", replace -keep stratum n_donors -bys stratum: keep if _n == 1 -save "$dir_data/temp_donorsN", replace +/****************************** GROSS NET RATIO ******************************/ +/* +There are no net incomes in EU-SILC, will be computed using EUROMOD anyway +*/ +gen gross_net_ratio = 1 -restore -* Attached number of donors in each stratum -merge m:1 stratum using "$dir_data/temp_donorsN", nogen +/***************************** HOME OWNERSHIP *********************************/ +/* +Dhh_owned is the definition used in the initial population and in the model +predicting house ownership in the homeownership process of the simulation. +Thi variable is updated in the benefit unit constrcution do file. +*/ +// bys swv: fre hh021 +gen dhh_owned = 0 +replace dhh_owned = 1 if hh021 == 1 | hh021 == 2 -* Assign random donor -gen draw = . +lab var dhh_owned "Home ownership dummy" -sort stratum idperson swv +fre dhh_owned +tab dhh_owned year, col -by stratum (idperson swv): replace draw = ceil(runiform()*n_donors[1]) if /// - flag_wage_hotdeck == 1 & n_donors > 0 -* Attach donor -merge m:1 stratum draw using "$dir_data/temp_wages_donors", /// - keepusing(donor_wages draw) +/**************************** DISABILITY BENEFIT ******************************/ +/* +In EU-SILC, the variables +- py130n: (disability benefits net), +- py130g: (disability benefits gross), +- py131g: (contributory and means-tested), +- py132g: (contributory and non means-tested), +- py133g: (non-contributory and means-tested), +- py134g: (non-contributory and non means-tested) -drop if _m == 2 -drop _m - -replace obs_earnings_hourly = donor_wage if flag_wage_hotdeck == 1 +All may contain information on disability benefits. -drop donor_wage ageband stratum dra n_donor +For Poland, py131g only has zero entries -count if obs_earnings_hourly == . & les_c3 == 1 +The code below may well be PL specific as some of the coding of these variables +changes between countries. +I expect that there is probably a better/more efficient way of constructing this +code. +*/ +recode py130n (0 = -9)(. = -9), gen(py130nr) +recode py130g (0 = -9)(. = -9), gen(py130gr) +recode py132g (0 = -9)(. = -9), gen(py132gr) +recode py133g (0 = -9)(. = -9), gen(py133gr) +recode py134g (0 = -9)(. = -9), gen(py134gr) -* Lagged wage -xtset idperson swv +gen bdi = 0 +replace bdi = 1 if py130gr >= 1 | py130gr >= 1 | py132gr >= 1 | /// + py133gr >= 1 | py134gr >= 1 +lab val bdi dummy -gen l1_obs_earnings_hourly = . +lab var bdi "Disability benefits (dummy)" -replace l1_obs_earnings_hourly = l.obs_earnings_hourly -lab var l1_obs_earnings_hourly /// - "Observed hourly wages, emp and self-emp, t-1, adjusted for timing" - -sum obs_earnings_hourly if les_c3 == 1 -sum obs_earnings_hourly if les_c3 == 2 -sum obs_earnings_hourly if les_c3 == 3 -sum obs_earnings_hourly if les_c3 == -9 +drop py130nr py130gr py132gr py133gr py134gr + +fre bdi +tab bdi year, col -/* -Note that annual labour income is not aligned with activity status and hours, -but hourly wage is. -*/ /*********************** EDUCATION STATUS - IMPUTATION 2 **********************/ /* AB: At the point missing education level for those that transition out of @@ -3976,7 +4050,6 @@ foreach k in 1 2 3 { } - * Impute cap drop missing_edu gen missing_edu = (deh_c3 == -9) @@ -4106,6 +4179,7 @@ graph drop _all drop dgn2 dag2 dagsq2 drgn12 les_c42 dcpst2 ydses_c52 p1* p2 p3 rnd imp_deh* + /******************** UPDATE PARTNER'S EDUCATION STATUS ***********************/ preserve @@ -4139,6 +4213,7 @@ bys swv: sum dehsp_c4 if dehsp_c4 > 0 sort idperson swv + /***************************** WEIGHTS ****************************************/ /* Clare's notes: @@ -4758,6 +4833,7 @@ Using the rescaled longitudinal weight did not work => use the rescaled base weight */ + /*************************** CONSISTENCY CHECKS *******************************/ * Economic activity tab les_c3 les_c4 @@ -4799,6 +4875,9 @@ sum obs_earnings_hourly if les_c3 != 1 sum obs_earnings_hourly if les_c4 == 1 sum obs_earnings_hourly if les_c4 != 1 +sum yplgrs_dv if les_c3 == 1 +sum yplgrs_dv if les_c3 != 1 + * Partnership tab dun dcpst @@ -4816,6 +4895,7 @@ tab ded deh_c4 tab deh_c3 deh_c4 + /*************************** KEEP RELEVANT WAVES ******************************/ /* Initial populations: longitudinal SILC for 2011-2023 @@ -4826,12 +4906,14 @@ keep if swv >= 2010 save "$dir_data/02_pre_drop.dta", replace + /**************************** SENSE CHECK PLOTS *******************************/ //do "$dir_do/02_01_checks" graph drop _all + /*********************** CREATE ASSUMPTION DESCRIPTIVES **********************/ * Health imputation @@ -5129,29 +5211,31 @@ putexcel D70 = ("All") /*************************** KEEP REQUIRED VARIABLES **************************/ keep idhh idperson idpartner idfather idmother dct drgn1 dnc02 dnc dgn dgnsp /// - dag dagsq dhe dhesp dcpst ded deh_c3 deh_c4 der dehsp_c3 dehm_c3 dehf_c3 /// - dehmf_c3 dcpen dcpyy dcpex dcpagdf dlltsd dlrtrd drtren dlftphm /// + dag dagsq dhe dhesp dcpst ded deh_c3 deh_c4 der dehsp_c3 dehm_c4 dehf_c4 /// + dehmf_c4 dcpen dcpyy dcpex dcpagdf dlltsd dlrtrd drtren dlftphm /// dhhtp_c4 dimlwt dimxwt dhhwt dwt les_c3 les_c4 lessp_c3 lessp_c4 /// lesdf_c4 ydses_c5 ypnbihs_dv yptciihs_dv yplgrs_dv ynbcpdf_dv ypncp /// ln_ypncp ypnoab swv sedex ssscp sprfm sedag stm dagsp lhw der /// adultchildflag sedcsmpl sedrsmpl scedsmpl dhh_owned dchpd dagpns /// - dagpns_sp CPI dlltsd_sp ypnoab_lvl flag_* Int_Date unemp yplgrs liwwh /// - dagpns_y dagpns_y1 dagpns_y_sp dagpns_y1_sp obs_earnings_hourly /// - l1_obs_earnings_hourly l1_les_c3 l1_les_c4 new_rel dcpyy_st student /// + dagpns_sp CPI dlltsd_sp ypnoab_lvl ydisp flag_* Int_Date unemp yplgrs /// + liwwh dagpns_y dagpns_y1 dagpns_y_sp dagpns_y1_sp obs_earnings_hourly /// + l1_obs_earnings_hourly l1_les_c3 l1_les_c4 new_rel dcpyy_st studentflag /// dcpyy_st dhhtp_c8 dehsp_c4 widow rb110 flag_deceased flag_deceased_sp sort swv idhh idperson + /************************* RECODE MISSING VALUES ******************************/ foreach var in idhh idperson idpartner idfather idmother dct drgn1 dnc02 /// dnc dgn dgnsp dag dagsq dhe dhesp dcpst ded deh_c3 deh_c4 der dehsp_c3 /// - dehm_c3 dehf_c3 dehmf_c3 dcpen dcpyy dcpex dlltsd dlrtrd drtren /// + dehm_c4 dehf_c4 dehmf_c4 dcpen dcpyy dcpex dlltsd dlrtrd drtren /// dlftphm dhhtp_c4 les_c3 les_c4 lessp_c3 lessp_c4 lesdf_c4 ydses_c5 /// swv sedex ssscp sprfm sedag stm dagsp lhw der dhh_owned /// dchpd dagpns dagpns_sp CPI dlltsd_sp flag* unemp liwwh /// dagpns_y dagpns_y1 dagpns_y_sp dagpns_y1_sp obs_earnings_hourly /// l1_obs_earnings_hourly l1_les_c3 l1_les_c4 new_rel dcpyy_st new_rel /// - dcpyy_st dhhtp_c8 student dehsp_c4 widow flag_deceased flag_deceased_sp { + dcpyy_st dhhtp_c8 studentflag dehsp_c4 widow flag_deceased /// + flag_deceased_sp { qui recode `var' (-9/-1 = -9) (. = -9) @@ -5207,15 +5291,16 @@ local files_to_drop mother_dchpd.dta temp_orig_econ_status.dta temp_orig_edu.dta + temp_orig_occu.dta temp_dagpns_y.dta temp_depChild_mother.dta temp_depChild_father.dta - temp_dehsp.dta temp_mother_info.dta temp_father_info.dta temp_donorsN.dta temp_lhw_donors.dta temp_wages_donors.dta + temp_rel_end.dta ; #delimit cr diff --git a/input_processing/data_construction/PL/03_create_benefit_units_PL.do b/input_processing/data_construction/PL/03_create_benefit_units_PL.do index a12df04..41266d3 100644 --- a/input_processing/data_construction/PL/03_create_benefit_units_PL.do +++ b/input_processing/data_construction/PL/03_create_benefit_units_PL.do @@ -833,19 +833,19 @@ count if dagsp == -9 & idpartner != -9 // 0 obs replace dropObs = 1 if dagsp == -9 & idpartner != -9 * Health status - remove household if missing for those 16+ -count if (dhe == -9 ) & dag > ${age_sample_min} +count if (dhe == -9 ) & dag > ${age_becomes_semi_responsible} // 0 obs due to imputation -count if (dhe == -9 ) & dag > 0 & dag <= ${age_sample_min} +count if (dhe == -9 ) & dag > 0 & dag <= ${age_becomes_semi_responsible} // 0 obs due to imputation -replace dropObs = 1 if (dhe == -9) & dag > ${age_sample_min} +replace dropObs = 1 if (dhe == -9) & dag > ${age_becomes_semi_responsible} * Health status of spouse - remove household if missing but ind has a spouse count if dhesp == -9 & idpartner != -9 // 0 obs replace dropObs = 1 if (dhesp == -9) & idpartner != -9 * Education - remove household if missing education level for 16+ -count if deh_c3 == -9 & dag >= ${age_sample_min} & ded == 0 -replace dropObs = 1 if deh_c3 == -9 & dag >= ${age_sample_min} & /// +count if deh_c3 == -9 & dag >= ${age_becomes_semi_responsible} & ded == 0 +replace dropObs = 1 if deh_c3 == -9 & dag >= ${age_becomes_semi_responsible} & /// ded == 0 * Education of spouse - remove household if missing but individual has a spouse @@ -857,12 +857,12 @@ count if dcpst == -9 // 0 obs replace dropObs = 1 if dcpst == -9 * Activity status -count if les_c3 == -9 & dag >= ${age_sample_min} -replace dropObs = 1 if les_c3 == -9 & dag >= ${age_sample_min} +count if les_c3 == -9 & dag >= ${age_becomes_semi_responsible} +replace dropObs = 1 if les_c3 == -9 & dag >= ${age_becomes_semi_responsible} * Activity status with retirement as a separate category -count if les_c4 == -9 & dag >= ${age_sample_min} -replace dropObs = 1 if les_c4 == -9 & dag >= ${age_sample_min} +count if les_c4 == -9 & dag >= ${age_becomes_semi_responsible} +replace dropObs = 1 if les_c4 == -9 & dag >= ${age_becomes_semi_responsible} * Partner's activity status count if lessp_c3 == -9 & idpartner != -9 // 2,536 obs @@ -879,29 +879,29 @@ replace dropObs = 1 if dhhtp_c4 == -9 * Income * Gross personal non-benefit income //==> no missing values by construction, theoretically can be zero -count if ypnbihs_dv == 0 & dag >= ${age_sample_min} -count if ypnbihs_dv > 0 & dag >= ${age_sample_min} +count if ypnbihs_dv == 0 & dag >= ${age_becomes_semi_responsible} +count if ypnbihs_dv > 0 & dag >= ${age_becomes_semi_responsible} * Gross personal employment income //==> no missing values by construction but theoretically can be zero -count if yplgrs_dv < 0 & dag >= ${age_sample_min} -count if yplgrs_dv == 0 & dag >= ${age_sample_min} -count if yplgrs_dv > 0 & dag >= ${age_sample_min} +count if yplgrs_dv < 0 & dag >= ${age_becomes_semi_responsible} +count if yplgrs_dv == 0 & dag >= ${age_becomes_semi_responsible} +count if yplgrs_dv > 0 & dag >= ${age_becomes_semi_responsible} * Household income quintile //==> a few missing values for kids who live w/t other adults -count if ydses_c5 == -9 & dag >= ${age_sample_min} // 0 obs +count if ydses_c5 == -9 & dag >= ${age_becomes_semi_responsible} // 0 obs * Gross personal non-employment capital income //==> no missing values by construction -count if ypncp < 0 & dag >= ${age_sample_min} // 0 obs -count if ypncp == 0 & dag >= ${age_sample_min} -count if ypncp > 0 & dag >= ${age_sample_min} +count if ypncp < 0 & dag >= ${age_becomes_semi_responsible} // 0 obs +count if ypncp == 0 & dag >= ${age_becomes_semi_responsible} +count if ypncp > 0 & dag >= ${age_becomes_semi_responsible} -replace dropObs = 1 if ypnbihs_dv == -9 & dag >= ${age_sample_min} -replace dropObs = 1 if yplgrs_dv == -9 & dag >= ${age_sample_min} +replace dropObs = 1 if ypnbihs_dv == -9 & dag >= ${age_becomes_semi_responsible} +replace dropObs = 1 if yplgrs_dv == -9 & dag >= ${age_becomes_semi_responsible} replace dropObs = 1 if ydses_c5 == -9 -replace dropObs = 1 if ypncp == -9 & dag >= ${age_sample_min} +replace dropObs = 1 if ypncp == -9 & dag >= ${age_becomes_semi_responsible} * Indicator for households with missing values @@ -1003,7 +1003,6 @@ drop dncold dnc02old * Home ownership variable - preserve egen tag_bu_wave = tag(idbenefitunit swv) @@ -1044,7 +1043,7 @@ save "$dir_data/temp_dhh_owned", replace restore -rename dhh_owned dhh_owned_old +rename dhh_owned dhh_owned_orig merge 1:1 idperson swv using "$dir_data/temp_dhh_owned" @@ -1052,6 +1051,18 @@ drop _m replace dhh_owned = 0 if dhh_owned == . +rename dhh_owned dhh_owned_ind + +lab var dhh_owned_ind "Home ownership flag, only = 1 for benefit unit head" + +gen dhh_owned = dhh_owned_ind + +bysort idbenefitunit swv (dhh_owned): replace dhh_owned = dhh_owned[_N] + +lab var dhh_owned "Home ownership flag, = 1 for all benefit unit members" + +sort idperson swv + /*************************** UPDATE FLAG EXCEL FILE ***************************/ @@ -1142,6 +1153,7 @@ local files_to_drop orphans.dta temp_depChild_mother.dta temp_depChild_father.dta + temp_dhh_owned.dta ; #delimit cr // cr stands for carriage return diff --git a/input_processing/data_construction/PL/05_drop_hholds_and_slice_PL.do b/input_processing/data_construction/PL/05_drop_hholds_slice_and_refactoring_PL.do similarity index 55% rename from input_processing/data_construction/PL/05_drop_hholds_and_slice_PL.do rename to input_processing/data_construction/PL/05_drop_hholds_slice_and_refactoring_PL.do index 6eb075b..ccee4ea 100644 --- a/input_processing/data_construction/PL/05_drop_hholds_and_slice_PL.do +++ b/input_processing/data_construction/PL/05_drop_hholds_slice_and_refactoring_PL.do @@ -73,7 +73,7 @@ sort idperson swv //cf _all using "$dir_data/${country}_pooled_ipop.dta" -save "$dir_data/${country}_pooled_ipop.dta", replace +save "$dir_data/${country}_pooled_ipop_pre.dta", replace // panel dataset with missing values removed /*************************** GENERATE FREQUENCY WEIGHTS ***********************/ @@ -128,6 +128,7 @@ forvalues yy = $first_sim_year/$last_sim_year { * Load pooled data with missing values removed use "$dir_data/${country}_pooled_ipop.dta", clear + rename *, l * Limit year @@ -153,7 +154,7 @@ forvalues yy = $first_sim_year/$last_sim_year { * Check for number of adults drop adult child adult_count adult_count2 //drop old vars - gen child = dag < $age_becomes_responsible + gen child = dag < ${age_becomes_responsible} gen adult = 1 - child bys stm idhh: egen adult_count = sum(adult) bys stm idbenefitunit: egen adult_count2 = sum(adult) @@ -162,7 +163,7 @@ forvalues yy = $first_sim_year/$last_sim_year { * Check for orphans assert (idfather > 0 | idmother > 0) if /// - (dag > 0 & dag < $age_becomes_responsible) + (dag > 0 & dag < ${age_becomes_responsible}) * Check weight is not zero and non-missing assert dwt > 0 & dwt < . @@ -170,38 +171,145 @@ forvalues yy = $first_sim_year/$last_sim_year { cap gen one = 1 sum one [w = dwt] - *Limit saved variables + * Limit saved variables keep idhh idbenefitunit idperson idpartner idmother idfather swv dgn dag /// - dcpst dnc02 dnc ded deh_c3 deh_c4 sedex les_c3 dlltsd dhe ydses_c5 /// - yplgrs_dv ypnbihs_dv yptciihs_dv dhhtp_c8 ssscp dcpen dcpyy dcpex /// - dcpagdf ynbcpdf_dv der sedag sprfm dagsp dehsp_c3 dehsp_c4 dhesp /// - lessp_c3 dehm_c3 dehf_c3 stm lesdf_c4 dhh_owned lhw drgn1 dct /// - dwt_sampling les_c4 lessp_c4 adultchildflag dwt obs_earnings_hourly /// - l1_obs_earnings_hourly ypncp ypnoab l1_les_c3 l1_les_c4 liwwh + dnc02 dnc ded deh_c3 deh_c4 sedex dlltsd dhe ydses_c5 yplgrs_dv /// + ypnbihs_dv yptciihs_dv dcpyy dcpagdf ynbcpdf_dv der dehm_c4 dehf_c4 stm /// + dhh_owned lhw drgn1 dct les_c4 adultchildflag dwt obs_earnings_hourly /// + l1_obs_earnings_hourly ypncp ypnoab ydisp l1_les_c4 liwwh order idhh idbenefitunit idperson idpartner idmother idfather swv dgn /// - dag dcpst dnc02 dnc ded deh_c3 deh_c4 sedex les_c3 dlltsd dhe ydses_c5 /// - yplgrs_dv ypnbihs_dv yptciihs_dv dhhtp_c8 ssscp dcpen dcpyy dcpex /// - dcpagdf ynbcpdf_dv der sedag sprfm dagsp dehsp_c3 dehsp_c4 dhesp /// - lessp_c3 dehm_c3 dehf_c3 stm lesdf_c4 dhh_owned lhw drgn1 dct /// - dwt_sampling les_c4 lessp_c4 adultchildflag dwt obs_earnings_hourly /// - l1_obs_earnings_hourly ypncp ypnoab l1_les_c3 l1_les_c4 liwwh + dag dnc02 dnc ded deh_c3 deh_c4 sedex dlltsd dhe ydses_c5 yplgrs_dv /// + ypnbihs_dv yptciihs_dv dcpyy dcpagdf ynbcpdf_dv der dehm_c4 dehf_c4 stm /// + dhh_owned lhw drgn1 dct les_c4 adultchildflag dwt obs_earnings_hourly /// + l1_obs_earnings_hourly ypncp ypnoab ydisp l1_les_c4 liwwh recode idhh idbenefitunit idperson idpartner idmother idfather swv dgn /// - dag dcpst dnc02 dnc ded deh_c3 deh_c4 sedex les_c3 dlltsd dhe ydses_c5 /// - yplgrs_dv ypnbihs_dv yptciihs_dv dhhtp_c8 ssscp dcpen dcpyy dcpex /// - dcpagdf ynbcpdf_dv der sedag sprfm dagsp dehsp_c3 dehsp_c4 dhesp /// - lessp_c3 dehm_c3 dehf_c3 stm lesdf_c4 dhh_owned lhw drgn1 dct /// - dwt_sampling les_c4 lessp_c4 adultchildflag dwt obs_earnings_hourly /// - l1_obs_earnings_hourly ypncp ypnoab l1_les_c3 l1_les_c4 liwwh /// - (missing = -9) - - gsort idhh idbenefitunit idperson - save "$dir_data/population_initial_${country}_${year}.dta", replace - - recode dgn (-9 = 0) + dag dnc02 dnc ded deh_c3 deh_c4 sedex dlltsd dhe ydses_c5 /// + yplgrs_dv ypnbihs_dv yptciihs_dv dcpyy dcpagdf ynbcpdf_dv der /// + dehm_c4 dehf_c4 stm dhh_owned lhw drgn1 dct les_c4 adultchildflag dwt /// + obs_earnings_hourly l1_obs_earnings_hourly ypncp ypnoab ydisp l1_les_c4 /// + liwwh (missing = -9) + + * Rename Variables following new Codebook + + * Identifiers + rename idhh idHh + rename idbenefitunit idBu + rename idperson idPers + rename idpartner idPartner + rename idmother idMother + rename idfather idFather + + * Time + rename stm statInterviewYear + rename swv statCollectionWave + + * Location + rename drgn1 demRgn + rename dct demCountry + + * Weights + rename dwt wgtCrossMainSurvey + + * Demographics + rename dgn demMaleFlag + rename dag demAge + //rename dcpst demPartnerStatus + rename dnc02 demNChild0to2 + rename dnc demNChild + //rename ssscp demPartnerSameSexFlag + //rename dcpen demEnterPartnerFlag + rename dcpyy demPartnerNYear + //rename dcpex demExitPartnerFlag + rename dcpagdf demAgePartnerDiff + //rename sedag demAgeEduRangeFlag + //rename sprfm demFertFlag + //rename dchpd demNChild0 + //rename dagsp demAgePartner + rename adultchildflag demAdultChildFlag + //rename dhhtp_c4 demCompHhC4 + //rename dhhtp_c8 demCompHhC8 + //rename multiplier demPopSurveyShare + //rename dot demEthnC4 + //rename dot01 demEthnC6 + + * Education + rename deh_c3 eduHighestC3 + rename deh_c4 eduHighestC4 + //rename dehsp_c3 eduHighestPartnerC3 + //rename dehsp_c4 eduHighestPartnerC4 + rename ded eduSpellFlag + rename sedex eduExitSampleFlag + rename der eduReturnFlag + rename dehm_c4 eduHighestMotherC4 + rename dehf_c4 eduHighestFatherC4 + + * Labour market + //rename les_c3 labStatusC3 + rename les_c4 labC4 + rename l1_les_c4 labC4L1 + //rename lessp_c3 labStatusPartnerC3 + //rename lessp_c4 labStatusPartnerC4 + //rename lesdf_c4 labStatusPartnerAndOwnC4 + rename lhw labHrsWorkWeek + //rename l1_lhw labHrsWorkWeekL1 + + * Income, labour, wealth + rename obs_earnings_hourly labWageHrly + rename l1_obs_earnings_hourly labWageHrlyL1 + + //rename liquid_wealth wealthLiq + //rename tot_pen wealthPensValue + //rename nvmhome wealthPrptyValue + + //rename total_wealth wealthTotValue + //rename mortgage_debt wealthMortgageDebtValue + //rename housing_wealth wealthPrptyValue + //rename total_pensions wealthPensValue + + rename ydses_c5 yHhQuintilesMonthC5 + rename ynbcpdf_dv yPersAndPartnerGrossDiffMonth + rename dhh_owned wealthPrptyFlag + + //rename econ_benefits yBenReceivedFlag + //rename econ_benefits_nonuc yBenNonUCReceivedFlag + //rename econ_benefits_uc yBenUCReceivedFlag + + rename ypncp yCapitalPersMonth + rename ypnoab yPensPersGrossMonth + rename yplgrs_dv yEmpPersGrossMonth + rename ypnbihs_dv yNonBenPersGrossMonth + rename yptciihs_dv yMiscPersGrossMonth + rename ydisp yPersDispMonth + + //rename unemp labUnempFlag + rename liwwh labEmpNyear + + * Health & wellbeing + rename dlltsd healthDsblLongtermFlag + rename dhe healthSelfRated + //rename dhesp healthPartnerSelfRated + //rename dhm healthWbScore0to36 + //rename dhm_ghq healthPsyDstrss0to12 + //rename dhe_mcs healthMentalMcs + //rename dhe_pcs healthPhysicalPcs + //rename dhe_mcssp healthMentalPartnerMcs + //rename dhe_pcssp healthPhysicalPartnerPcs + //rename dls demLifeSatScore0to10 + //rename financial_distress yFinDstrssFlag + + gsort idHh idBu idPers + + save "$dir_data/refactored/population_initial_${country}_${year}.dta", /// + replace + + recode demMaleFlag (-9 = 0) + export delimited using /// - "$dir_data/population_initial_${country}_${year}.csv", nolabel replace + "$dir_data/refactored/population_initial_${country}_${year}.csv", /// + nolabel replace + } cap log close diff --git a/input_processing/data_construction/PL/extra_var_info/.DS_Store b/input_processing/data_construction/PL/extra_var_info/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0= 16 & l.les_c4 != 4 & l.les_c4 != 2) replace der = . if der == -9 * Estimation -probit der i.Dgn Dag Dag_sq i.Dcpst_Partnered li.Deh_c4_High /// +probit der i.Dgn Dag Dag_sq li.Dcpst_Partnered li.Deh_c4_High /// li.Deh_c4_Low li.Les_c3_NotEmployed li.Les_c3_Employed l.Dnc l.Dnc02 /// $regions Year_transformed Year_transformed_sq Y2021 if /// ${e1b_if_condition} [pw=dwt], vce(robust) diff --git a/input_processing/regression_estimates/PL/02_reg_leave_parental_home_PL.do b/input_processing/regression_estimates/PL/02_reg_leave_parental_home_PL.do index d044e8c..414bdca 100644 --- a/input_processing/regression_estimates/PL/02_reg_leave_parental_home_PL.do +++ b/input_processing/regression_estimates/PL/02_reg_leave_parental_home_PL.do @@ -179,7 +179,7 @@ xtset idperson swv fre dlftphm if (ded == 0 & dag >= 18) * Estimation -probit dlftphm i.Dgn Dag Dag_sq i.Deh_c3_Medium i.Deh_c3_Low /// +probit dlftphm i.Dgn Dag Dag_sq li.Deh_c4_Medium li.Deh_c4_Low /// li.Les_c3_Student li.Les_c3_NotEmployed li.Ydses_c5_Q2 li.Ydses_c5_Q3 /// li.Ydses_c5_Q4 li.Ydses_c5_Q5 $regions Year_transformed /// Year_transformed_sq i.Y2016 i.Y2018 if ${p1_if_condition} [pw=dwt], /// diff --git a/input_processing/regression_estimates/PL/03_reg_partnership_PL.do b/input_processing/regression_estimates/PL/03_reg_partnership_PL.do index ca5a37f..8ef678d 100644 --- a/input_processing/regression_estimates/PL/03_reg_partnership_PL.do +++ b/input_processing/regression_estimates/PL/03_reg_partnership_PL.do @@ -240,9 +240,13 @@ gen L1_Dnc = l.Dnc gen L1_Dehsp_c3_Medium = l.Dehsp_c3_Medium * Generate interactions -gen Les_c4_Student_Dgn = Dgn * Les_c4_Student -gen Les_c4_NotEmployed_Dgn = Dgn * Les_c4_NotEmployed -gen Les_c4_Retired_Dgn = Dgn * Les_c4_Retired +gen Dgn_Les_c4_Student = Dgn * Les_c4_Student +gen Dgn_Les_c4_NotEmployed = Dgn * Les_c4_NotEmployed +gen Dgn_Les_c4_Retired = Dgn * Les_c4_Retired + +gen Dgn_Les_c4_Student_L1 = Dgn * l.Les_c4_Student +gen Dgn_Les_c4_NotEmployed_L1 = Dgn * l.Les_c4_NotEmployed +gen Dgn_Les_c4_Retired_L1 = Dgn * l.Les_c4_Retired gen Ded_Dag = Ded * Dag gen Ded_Dag_sq = Ded * Dag_sq @@ -285,8 +289,8 @@ probit dcpen c.Dag c.Dag_sq Dgn lc.Dnc lc.Dnc02 li.Ydses_c5_Q2 /// Ded_Dgn Ded_Dnc_L1 Ded_Dnc02_L1 Ded_Ydses_c5_Q2_L1 Ded_Ydses_c5_Q3_L1 /// Ded_Ydses_c5_Q4_L1 Ded_Ydses_c5_Q5_L1 i.Deh_c4_Na i.Deh_c4_High /// i.Deh_c4_Low li.Les_c4_Student li.Les_c4_NotEmployed /// - li.Les_c4_Retired li.Les_c4_Student_Dgn li.Les_c4_NotEmployed_Dgn /// - li.Les_c4_Retired_Dgn i.Dhe_Fair i.Dhe_Good i.Dhe_VeryGood /// + li.Les_c4_Retired Dgn_Les_c4_Student_L1 Dgn_Les_c4_NotEmployed_L1 /// + Dgn_Les_c4_Retired_L1 i.Dhe_Fair i.Dhe_Good i.Dhe_VeryGood /// i.Dhe_Excellent $regions Year_transformed if /// ${u1_if_condition} [pw=dwt], vce(robust) diff --git a/input_processing/regression_estimates/PL/07_reg_retirement_PL.do b/input_processing/regression_estimates/PL/07_reg_retirement_PL.do index 32348c9..4d914d4 100644 --- a/input_processing/regression_estimates/PL/07_reg_retirement_PL.do +++ b/input_processing/regression_estimates/PL/07_reg_retirement_PL.do @@ -290,8 +290,8 @@ graph combine ret2010 ret2011 ret2012 ret2013 ret2014 ret2015 ret2016 ret2017 re xtset idperson swv -probit drtren i.Dgn Dag Dag_sq i.Elig_pen i.Elig_pen_L1 i.Deh_c4_Medium /// - i.Deh_c4_Low i.Reached_Retirement_Age li.Les_c3_NotEmployed /// +probit drtren i.Dgn Dag Dag_sq i.Elig_pen i.Elig_pen_L1 li.Deh_c4_Medium /// + li.Deh_c4_Low i.Reached_Retirement_Age li.Les_c3_NotEmployed /// li.Ydses_c5_Q2 li.Ydses_c5_Q3 li.Ydses_c5_Q4 li.Ydses_c5_Q5 li.Dlltsd /// $regions Year_transformed Post2015 /// if ${r1a_if_condition} [pw=dwt], vce(robust) @@ -316,7 +316,7 @@ title("Process R1a: Probability of Retirement, Single") /// gen in_sample = e(sample) predict p -* Save sample for estimte validation +* Save sample for estimate validation save "$dir_data/R1a_sample", replace * Store model summary statistics @@ -494,7 +494,7 @@ xtset idperson swv * Estimation probit drtren i.Dgn Dag Dag_sq i.Elig_pen i.Elig_pen_L1 /// - i.Deh_c4_Medium i.Deh_c4_Low i.Reached_Retirement_Age /// + li.Deh_c4_Medium li.Deh_c4_Low i.Reached_Retirement_Age /// li.Les_c3_NotEmployed i.Reached_Retirement_Age_Les /// li.Ydses_c5_Q2 li.Ydses_c5_Q3 li.Ydses_c5_Q4 li.Ydses_c5_Q5 /// li.Dlltsd i.Reached_Retirement_Age_Sp i.Elig_pen_Sp i.Elig_pen_L1_Sp /// diff --git a/input_processing/regression_estimates/PL/08_reg_wages_PL.do b/input_processing/regression_estimates/PL/08_reg_wages_PL.do index 2606e28..546df28 100644 --- a/input_processing/regression_estimates/PL/08_reg_wages_PL.do +++ b/input_processing/regression_estimates/PL/08_reg_wages_PL.do @@ -21,6 +21,9 @@ * * Update the winsorization process if alter data * Update CPI if apply to a different country +* +* TO DO: Explore using the centering adjustment when adding +* random draw: -e(sigma)^2/2 *******************************************************************************/ clear all @@ -244,14 +247,14 @@ gen pred_hourly_wage = . /******************** WAGES: FEMALE, NO PREV WAGE OBSERVED ********************/ -global wage_eqn "lwage_hour dag dagsq i.deh_c3 i.deh_c3#c.dag i.dhe i.drgn1 i.pt real_wage_growth y2020 y2021" -global seln_eqn "i.L1les_c3 dag dagsq i.deh_c3 i.deh_c3#c.dag i.mar i.child i.dhe i.drgn1 y2020 y2021" +global wage_eqn "lwage_hour dag dagsq ib1.deh_c4 ib1.deh_c4#c.dag i.dhe i.drgn1 i.pt real_wage_growth y2020 y2021" +global seln_eqn "i.L1les_c3 dag dagsq ib1.deh_c4 ib1.deh_c4#c.dag li.mar li.child i.dhe i.drgn1 y2020 y2021" local filter = "${W1fa_if_condition} & previouslyWorking == 0" heckman $wage_eqn if ${W1fa_if_condition}, select($seln_eqn) twostep mills(lambda) -* Save raw restults +* Save raw results outreg2 stats(coef se pval) using "$dir_raw_results/wages/W1fa.doc", replace /// title("Heckman-corrected wage equation estimated on the sample of women who were not in employment last year") /// ctitle(Not working women) label side dec(2) noparen @@ -357,8 +360,8 @@ restore * Labelling putexcel set "$dir_work/reg_wages_${country}", sheet("W1fa") modify -local var_list Dag Dag_sq Deh_c3_Medium Deh_c3_Low Deh_c3_Medium_Dag /// - Deh_c3_Low_Dag Dhe_Fair Dhe_Good Dhe_VeryGood Dhe_Excellent /// +local var_list Dag Dag_sq Deh_c4_Medium Deh_c4_Low Deh_c4_Medium_Dag /// + Deh_c4_Low_Dag Dhe_Fair Dhe_Good Dhe_VeryGood Dhe_Excellent /// PL4 PL5 PL6 PL10 Pt RealWageGrowth Y2020 Y2021 Constant InverseMillsRatio putexcel A1 = "REGRESSOR" @@ -425,8 +428,8 @@ putexcel set "$dir_work/reg_employmentSelection_${country}", /// sheet("W1fa-sel") modify local var_list Les_c3_Student_L1 Les_c3_NotEmployed_L1 Dag Dag_sq /// - Deh_c3_Medium Deh_c3_Low Deh_c3_Medium_Dag Deh_c3_Low_Dag /// - Dcpst_Partnered D_Children Dhe_Fair Dhe_Good /// + Deh_c4_Medium Deh_c4_Low Deh_c4_Medium_Dag Deh_c4_Low_Dag /// + Dcpst_Partnered_L1 D_Children_L1 Dhe_Fair Dhe_Good /// Dhe_VeryGood Dhe_Excellent PL4 PL5 PL6 PL10 Y2020 Y2021 /// Constant @@ -461,8 +464,8 @@ cap drop lambda /********************* WAGES: MALE, NO PREV WAGE OBSERVED *********************/ -global wage_eqn "lwage_hour dag dagsq i.deh_c3 i.deh_c3#c.dag i.dhe i.drgn1 i.pt real_wage_growth y2020 y2021" -global seln_eqn "i.L1les_c3 dag dagsq i.deh_c3 i.deh_c3#c.dag i.mar i.child i.dhe i.drgn1 y2020 y2021" +global wage_eqn "lwage_hour dag dagsq i.deh_c4 i.deh_c4#c.dag i.dhe i.drgn1 i.pt real_wage_growth y2020 y2021" +global seln_eqn "i.L1les_c3 dag dagsq i.deh_c4 i.deh_c4#c.dag li.mar li.child i.dhe i.drgn1 y2020 y2021" local filter = "${W1ma_if_condition} & previouslyWorking == 0" heckman $wage_eqn if ${W1ma_if_condition}, select($seln_eqn) /// @@ -478,7 +481,7 @@ gen in_sample_mnpw = e(sample) gen epsilon = rnormal()*e(sigma) replace pred_hourly_wage = exp(lwage_hour_hat + epsilon) if `filter' - + * Save sample for validation save "$dir_data/Male_NPW_sample", replace cap drop pred epsilon @@ -566,8 +569,8 @@ restore * Labelling putexcel set "$dir_work/reg_wages_${country}", sheet("W1ma") modify -local var_list Dag Dag_sq Deh_c3_Medium Deh_c3_Low Deh_c3_Medium_Dag /// - Deh_c3_Low_Dag Dhe_Fair Dhe_Good Dhe_VeryGood Dhe_Excellent /// +local var_list Dag Dag_sq Deh_c4_Medium Deh_c4_Low Deh_c4_Medium_Dag /// + Deh_c4_Low_Dag Dhe_Fair Dhe_Good Dhe_VeryGood Dhe_Excellent /// PL4 PL5 PL6 PL10 Pt RealWageGrowth Y2020 Y2021 Constant InverseMillsRatio putexcel A1 = "REGRESSOR" @@ -635,8 +638,8 @@ putexcel set "$dir_work/reg_employmentSelection_${country}", /// sheet("W1ma-sel") modify local var_list Les_c3_Student_L1 Les_c3_NotEmployed_L1 Dag Dag_sq /// - Deh_c3_Medium Deh_c3_Low Deh_c3_Medium_Dag Deh_c3_Low_Dag /// - Dcpst_Partnered D_Children Dhe_Fair Dhe_Good /// + Deh_c4_Medium Deh_c4_Low Deh_c4_Medium_Dag Deh_c4_Low_Dag /// + Dcpst_Partnered_L1 D_Children_L1 Dhe_Fair Dhe_Good /// Dhe_VeryGood Dhe_Excellent PL4 PL5 PL6 PL10 Y2020 Y2021 /// Constant @@ -668,11 +671,11 @@ foreach var in `var_list' { cap drop lambda - +*/ /********************** WAGES: FEMALE, PREV WAGE OBSERVED *********************/ -global wage_eqn "lwage_hour L1.lwage_hour dag dagsq i.deh_c3 i.deh_c3#c.dag i.dhe i.drgn1 i.pt real_wage_growth y2020 y2021" -global seln_eqn "dag dagsq i.deh_c3 i.deh_c3#c.dag i.mar i.child i.dhe i.drgn1 y2020 y2021" +global wage_eqn "lwage_hour L1.lwage_hour dag dagsq i.deh_c4 i.deh_c4#c.dag i.dhe i.drgn1 i.pt real_wage_growth y2020 y2021" +global seln_eqn "dag dagsq i.deh_c4 i.deh_c4#c.dag li.mar li.child i.dhe i.drgn1 y2020 y2021" heckman $wage_eqn if ${W1fb_if_condition}, select($seln_eqn) twostep @@ -775,8 +778,8 @@ restore * Labelling putexcel set "$dir_work/reg_wages_${country}", sheet("W1fb") modify -local var_list L1_log_hourly_wage Dag Dag_sq Deh_c3_Medium Deh_c3_Low /// - Deh_c3_Medium_Dag Deh_c3_Low_Dag Dhe_Fair Dhe_Good Dhe_VeryGood /// +local var_list L1_log_hourly_wage Dag Dag_sq Deh_c4_Medium Deh_c4_Low /// + Deh_c4_Medium_Dag Deh_c4_Low_Dag Dhe_Fair Dhe_Good Dhe_VeryGood /// Dhe_Excellent PL4 PL5 PL6 PL10 Pt RealWageGrowth Y2020 Y2021 Constant /// InverseMillsRatio @@ -809,13 +812,15 @@ foreach var in `var_list' { * Calculate RMSE // Note: Sigma reported in the estimated regressions is the standard deviation // of the residuals (=RMSE assuming residuals are normally distributed) + +preserve + +keep if ${W1fb_if_condition} + cap drop residuals squared_residuals gen residuals = lwage_hour - lwage_hour_hat gen squared_residuals = residuals^2 -preserve - -keep if `filter' sum squared_residuals di "RMSE for Employed women: " sqrt(r(mean)) @@ -846,8 +851,8 @@ putexcel set "$dir_work/reg_employmentSelection_${country}", /// sheet("W1fb-sel") modify local var_list Dag Dag_sq /// - Deh_c3_Medium Deh_c3_Low Deh_c3_Medium_Dag Deh_c3_Low_Dag /// - Dcpst_Partnered D_Children Dhe_Fair Dhe_Good /// + Deh_c4_Medium Deh_c4_Low Deh_c4_Medium_Dag Deh_c4_Low_Dag /// + Dcpst_Partnered_L1 D_Children_L1 Dhe_Fair Dhe_Good /// Dhe_VeryGood Dhe_Excellent PL4 PL5 PL6 PL10 Y2020 Y2021 /// Constant @@ -881,12 +886,27 @@ cap drop lambda /*********************** WAGES: MEN, PREV WAGE OBSERVED ***********************/ +/* +NOTE: Explored using log age due to signs of age and age squared, but in +age validaition there is very little difference - main contrast among those +age > 65. +*/ + + +global wage_eqn "lwage_hour L1.lwage_hour dag dagsq i.deh_c4 i.deh_c4#c.dag i.dhe i.drgn1 i.pt real_wage_growth y2020 y2021" +global seln_eqn "dag dagsq i.deh_c4 i.deh_c4#c.dag li.mar li.child i.dhe i.drgn1 y2020 y2021" +*/ +/* +gen ldag = ln(dag) + +global wage_eqn "lwage_hour L1.lwage_hour ldag i.deh_c4 i.deh_c4#c.ldag i.dhe i.drgn1 i.pt real_wage_growth y2020 y2021" +global seln_eqn "ldag i.deh_c4 i.deh_c4#c.ldag i.mar i.child i.dhe i.drgn1 y2020 y2021" +*/ -global wage_eqn "lwage_hour L1.lwage_hour dag dagsq i.deh_c3 i.deh_c3#c.dag i.dhe i.drgn1 i.pt real_wage_growth y2020 y2021" -global seln_eqn "dag dagsq i.deh_c3 i.deh_c3#c.dag i.mar i.child i.dhe i.drgn1 y2020 y2021" heckman $wage_eqn if ${W1mb_if_condition}, select($seln_eqn) twostep + * Obtain predicted values (log wage) with selection correction predict pred if ${W1mb_if_condition}, ycond // ycond -> include IMR in prediction @@ -894,10 +914,14 @@ replace lwage_hour_hat = pred if ${W1mb_if_condition} gen in_sample_mpw = e(sample) + * Correct bias transforming from log to levels gen epsilon = rnormal()*e(sigma) replace pred_hourly_wage = exp(lwage_hour_hat + epsilon) if ${W1mb_if_condition} + +gen pred_level_noshock = exp(lwage_hour_hat) + * Save sample for validation save "$dir_data/Male_PW_sample", replace @@ -983,8 +1007,8 @@ restore * Labelling putexcel set "$dir_work/reg_wages_${country}", sheet("W1mb") modify -local var_list L1_log_hourly_wage Dag Dag_sq Deh_c3_Medium Deh_c3_Low /// - Deh_c3_Medium_Dag Deh_c3_Low_Dag Dhe_Fair Dhe_Good Dhe_VeryGood /// +local var_list L1_log_hourly_wage Dag Dag_sq Deh_c4_Medium Deh_c4_Low /// + Deh_c4_Medium_Dag Deh_c4_Low_Dag Dhe_Fair Dhe_Good Dhe_VeryGood /// Dhe_Excellent PL4 PL5 PL6 PL10 Pt RealWageGrowth Y2020 Y2021 Constant /// InverseMillsRatio @@ -1023,7 +1047,7 @@ gen squared_residuals = residuals^2 preserve -keep if `filter' +keep if ${W1mb_if_condition} sum squared_residuals di "RMSE for Employed men: " sqrt(r(mean)) @@ -1054,8 +1078,8 @@ putexcel set "$dir_work/reg_employmentSelection_${country}", /// sheet("W1mb-sel") modify local var_list Dag Dag_sq /// - Deh_c3_Medium Deh_c3_Low Deh_c3_Medium_Dag Deh_c3_Low_Dag /// - Dcpst_Partnered D_Children Dhe_Fair Dhe_Good /// + Deh_c4_Medium Deh_c4_Low Deh_c4_Medium_Dag Deh_c4_Low_Dag /// + Dcpst_Partnered_L1 D_Children_L1 Dhe_Fair Dhe_Good /// Dhe_VeryGood Dhe_Excellent PL4 PL5 PL6 PL10 Y2020 Y2021 /// Constant @@ -1123,7 +1147,7 @@ replace les_c3 = orig_les_c3 drop orig_les_c3 */ -save "$dir_data/${country}-_pooled_ipop_wages.dta", replace +save "$dir_data/${country}-_pooled_ipop2.dta", replace capture log close diff --git a/input_processing/regression_estimates/PL/10_parametric_matching_process_PL.do b/input_processing/regression_estimates/PL/10_parametric_matching_process_PL.do index bf2a4c1..6c1646b 100644 --- a/input_processing/regression_estimates/PL/10_parametric_matching_process_PL.do +++ b/input_processing/regression_estimates/PL/10_parametric_matching_process_PL.do @@ -16,7 +16,7 @@ set maxvar 30000 * Call dataset with Heckman estimates -use "$dir_data/${country}-_pooled_ipop_wages.dta", clear +use "$dir_data/${country}-_pooled_ipop2.dta", clear sort idperson stm xtset idperson stm @@ -83,7 +83,7 @@ drop if missing(dagDifference) | missing(predictedWageDifference) sum dagDifference predictedWageDifference //Get sample mean and std dev -putexcel set "$dir_work/scenario_parametricMatching_PL", replace +putexcel set "$dir_work/scenario_parametricMatching_PL", sheet("Parameters") replace putexcel A1 = ("Parameter") putexcel A2 = ("mean_dag_diff") putexcel A3 = ("mean_wage_diff") diff --git a/input_processing/regression_estimates/PL/11_spec_diagnostic_tests_PL.do b/input_processing/regression_estimates/PL/11_spec_diagnostic_tests_PL.do deleted file mode 100644 index 9341f3e..0000000 --- a/input_processing/regression_estimates/PL/11_spec_diagnostic_tests_PL.do +++ /dev/null @@ -1,81 +0,0 @@ -/******************************************************************************* -* PROJECT: SimPaths EU -* SECTION: Regression estimates -* OBJECT: Diagnostics -* AUTHORS: Ashley Burdett -* LAST UPDATE: Jan 2026 -* COUNTRY: Poland -******************************************************************************** -* NOTES: -*******************************************************************************/ - -* Test when fail eigenvalue tests in any of the regression models - -/* -Faiture of any of the processes is due to a multicollinearity issue, which can -prevent SimPaths from being able to invert the var-cov matrix. - -To investigate which variable is creating the issue you need to run -collinearity diagnostic tests as the conditions that break the do-files does not -provide any diagnostic information. This is most strighfroeardly done using -"collin". - -This command should be run after the regression model and does not permit index -or time series operators. - -Example below: - -VIF >10 suggests problematic. - -*/ - -gen l_Dnc = l.Dnc -gen l_Dnc02 = l.Dnc02 -gen l_Ydses_c5_Q2 = l.Ydses_c5_Q2 -gen l_Ydses_c5_Q3 = l.Ydses_c5_Q3 -gen l_Ydses_c5_Q4 = l.Ydses_c5_Q4 -gen l_Ydses_c5_Q5 = l.Ydses_c5_Q5 -gen l_Les_c4_Student = l.Les_c4_Student -gen l_Les_c4_NotEmployed = l.Les_c4_NotEmployed -gen l_Les_c4_Retired = l.Les_c4_Retired -gen l_Les_c4_Student_Dgn = l.Les_c4_Student_Dgn -gen l_Les_c4_NotEmployed_Dgn = l.Les_c4_NotEmployed_Dgn -gen l_Les_c4_Retired_Dgn = l.Les_c4_Retired_Dgn - - -collin Dag Dag_sq Dgn l_Dnc l_Dnc02 l_Ydses_c5_Q2 l_Ydses_c5_Q3 /// - l_Ydses_c5_Q4 l_Ydses_c5_Q5 Ded_Dag Ded_Dag_sq Ded_Dgn Ded_Dnc_L1 /// - Ded_Dnc02_L1 Ded_Ydses_c5_Q2_L1 Ded_Ydses_c5_Q3_L1 Ded_Ydses_c5_Q4_L1 /// - Ded_Ydses_c5_Q5_L1 Deh_c4_Na Deh_c4_High /// - Deh_c4_Low l_Les_c4_Student l_Les_c4_NotEmployed /// - l_Les_c4_Retired l_Les_c4_Student_Dgn l_Les_c4_NotEmployed_Dgn /// - l_Les_c4_Retired_Dgn Dhe_Fair Dhe_Good Dhe_VeryGood /// - Dhe_Excellent PL4 PL5 PL6 PL10 Year_transformed Y2020 Y2021 Y2022 if /// - ${u1_if_condition} - - - -gen l_Dhe_Fair = l.Dhe_Fair -gen l_Dhe_Good = l.Dhe_Good -gen l_Dhe_VeryGood = l.Dhe_VeryGood -gen l_Dhe_Excellent = l.Dhe_Excellent -gen l_Ln_Ypncp = l.Ln_Ypncp -gen l_Yplgrs_dv = l.Yplgrs_dv -gen l2_Yplgrs_dv = l2.Yplgrs_dv -gen l2_Ln_Ypncp = l2.Ln_Ypncp -gen l_Les_c4_Student = l.Les_c4_Student -gen l_Les_c4_NotEmployed = l.Les_c4_NotEmployed -gen l_Les_c4_Retired = l.Les_c4_Retired -gen l_Dhhtp_c4_CoupleChildren = l.Dhhtp_c4_CoupleChildren -gen l_Dhhtp_c4_SingleNoChildren = l.Dhhtp_c4_SingleNoChildren -gen l_Dhhtp_c4_SingleChildren = l.Dhhtp_c4_SingleChildren - -collin Dgn Dag Dag_sq l_Dhe_Fair l_Dhe_Good l_Dhe_VeryGood /// - l_Dhe_Excellent l_Ln_Ypncp l_Yplgrs_dv /// - l2_Yplgrs_dv l2_Ln_Ypncp Ded_Dgn Ded_Dag Ded_Dag_sq /// - Ded_Ln_Ypncp_L1 Ded_Yplgrs_dv_L1 Ded_Yplgrs_dv_L2 Ded_Ln_Ypncp_L2 /// - Deh_c4_Low Deh_c4_Medium Deh_c4_High l_Les_c4_Student /// - l_Les_c4_NotEmployed l_Les_c4_Retired l_Dhhtp_c4_CoupleChildren /// - l_Dhhtp_c4_SingleNoChildren l_Dhhtp_c4_SingleChildren PL4 PL5 PL6 PL10 /// - Year_transformed /// - if ${i1b_if_condition} diff --git a/validation/01_estimate_validation/do_files/00_master_estimate_validation_PL.do b/validation/01_estimate_validation/do_files/00_master_estimate_validation_PL.do index d04c652..5de2018 100644 --- a/validation/01_estimate_validation/do_files/00_master_estimate_validation_PL.do +++ b/validation/01_estimate_validation/do_files/00_master_estimate_validation_PL.do @@ -24,6 +24,10 @@ set matsize 1000 //*C:/Users/Aleksandra/Box //*/Users/ashleyburdett/Library/CloudStorage/Box-Box/CeMPA shared area/_SimPaths/_SimPathsEU/validation/01_estimate_validation/PL/TIDIED/with_time_trend +* Individual main path +global dir_ind "/Users/ashleyburdett/Library/CloudStorage/Box-Box" + + * Working directory which contains sub-folders and will contain formatted output global dir_work "/Users/ashleyburdett/Library/CloudStorage/Box-Box/CeMPA shared area/_SimPaths/_SimPathsEU/validation/01_estimate_validation/PL/with_time_trend" @@ -31,7 +35,7 @@ global dir_work "/Users/ashleyburdett/Library/CloudStorage/Box-Box/CeMPA shared global dir_do "$dir_work/do_files" * Directory which contains data files generated in the do files -global dir_data "/Users/ashleyburdett/Library/CloudStorage/Box-Box/CeMPA shared area/_SimPaths/_SimPathsEU/regression_estimates/PL/with_time_trend/data" +global dir_data "/Users/ashleyburdett/Library/CloudStorage/Box-Box/CeMPA shared area/_SimPaths/_SimPathsEU/input_processing/regression_estimates/PL/with_time_trend/data" * Directory containing internal validation output global dir_internal_validation "$dir_work/graphs" @@ -48,92 +52,11 @@ global first_sim_year "2011" global last_sim_year "2023" -* Define threshold ages -/* -Ages used for specifying samples. - -ENSURE THE SAME AS THE GLOBALS USED IN THE INTIIAL POPULATIONS MASTER FILE -*/ - -* Age become an adult in various dimensions -global age_becomes_responsible 18 - -global age_becomes_semi_responsible 16 - -global age_seek_employment 16 - -global age_leave_school 16 - -global age_form_partnership 18 - -global age_have_child_min 18 - -global age_leave_parental_home 18 - -global age_own_home 18 - -* Age can/must/cannot make various transitions -global age_max_dep_child 17 - -global age_adult 18 - -global age_can_retire 50 - -global age_force_retire 75 - -global age_force_leave_spell1_edu 30 - -global age_have_child_max 49 // allow this to be led by the data - - /******************************************************************************* -* PROCESS IF CONDITIONS +* DEFINE PARAMETERS & PROCESS IF CONDITIONS *******************************************************************************/ -* Education -global e1a_if_condition "dag >= ${age_leave_school} & dag < ${age_force_leave_spell1_edu} & l.les_c4 == 2 & flag_deceased != 1" - -global e1b_if_condition "dag >= ${age_leave_school} & l.les_c4 != 4 & l.les_c4 != 2 & flag_deceased != 1" - -global e2_if_condition "dag >= ${age_leave_school} & l.les_c4 == 2 & les_c4 != 2 & flag_deceased != 1" - -* Leave the parental home -global p1_if_condition "ded == 0 & dag >= ${age_leave_parental_home} & flag_deceased != 1" - -* Partnership -global u1_if_condition "dag >= ${age_form_partnership} & ssscp != 1 & flag_deceased != 1" - -global u2_if_condition "dgn == 0 & dag >= ${age_form_partnership} & l.ssscp != 1 & dag < ${age_cannot_separate} & flag_deceased != 1 & flag_deceased != 1" - -* Fertility -global f1_if_condition "dag >= ${age_have_child_min} & dag <= ${age_have_child_max} & dgn == 0 & flag_deceased != 1" - -* Health -global h1_if_condition "dag >= ${age_becomes_semi_responsible} & flag_dhe_imp == 0 & flag_deceased != 1" - -global h2_if_condition "dag >= ${age_becomes_semi_responsible} & ded == 0 & flag_deceased != 1" - -* Home ownership -global ho1_if_condition "dag >= ${age_own_home} & flag_deceased != 1" - -* Retirment -global r1a_if_condition "dcpst == 2 & dag >= ${age_can_retire} & flag_deceased != 1" - -global r1b_if_condition "ssscp != 1 & dcpst == 1 & dag >= ${age_can_retire} & flag_deceased != 1" - -* WAGES -global W1fa_if_condition "dgn == 0 & dag >= ${age_seek_employment} & dag <= ${age_force_retire} & flag_deceased != 1" - -global W1ma_if_condition "dgn == 1 & dag >= ${age_seek_employment} & dag <= ${age_force_retire} & flag_deceased != 1" - -global W1fb_if_condition "dgn == 0 & dag >= ${age_seek_employment} & dag <= ${age_force_retire} & previouslyWorking == 1 & flag_deceased != 1" - -global W1mb_if_condition "dgn == 1 & dag >= ${age_seek_employment} & dag <= ${age_force_retire} & previouslyWorking == 1 & flag_deceased != 1" - -* CAPITAL INCOME -global i1a_if_condition "dag >= ${age_becomes_semi_responsible} & flag_deceased != 1" - -global i1b_if_condition "dag >= ${age_becomes_semi_responsible} & receives_ypncp == 1 & flag_deceased != 1" +do "$dir_ind/CeMPA shared area/_SimPaths/_SimPathsEU/input_processing/00_master_conditions.do" /******************************************************************************* diff --git a/validation/01_estimate_validation/do_files/03_estimate_validation_partnership_PL.do b/validation/01_estimate_validation/do_files/03_estimate_validation_partnership_PL.do index 0b5c784..0a54041 100644 --- a/validation/01_estimate_validation/do_files/03_estimate_validation_partnership_PL.do +++ b/validation/01_estimate_validation/do_files/03_estimate_validation_partnership_PL.do @@ -18,9 +18,9 @@ ******************************************************************************** -****************************************************** -* U1a: Partnership formation, left initial edu spell * -****************************************************** +***************************** +* U1: Partnership formation * +***************************** * Overall use "$dir_data/U1_sample", clear @@ -275,6 +275,7 @@ graph drop _all restore + ******************************* * U2: Partnership termination * ******************************* diff --git a/validation/01_estimate_validation/do_files/08_estimate_validation_wages_PL.do b/validation/01_estimate_validation/do_files/08_estimate_validation_wages_PL.do index 8a755fb..b50a1f5 100644 --- a/validation/01_estimate_validation/do_files/08_estimate_validation_wages_PL.do +++ b/validation/01_estimate_validation/do_files/08_estimate_validation_wages_PL.do @@ -3,18 +3,12 @@ * SECTION: Wages * OBJECT: Internal validation * AUTHORS: Ashley Burdett, Aleksandra Kolndrekaj -* LAST UPDATE: JAn 2026 +* LAST UPDATE: Feb 2026 * COUNTRY: Poland ******************************************************************************** -* NOTES: Compares predicted values to the observed values of the -* 3 education processes estimated. -* Individual heterogeneity added to the standard predicted -* values form the using a random draw like in stochasitic -* imputation. The pooled mean is obtained as in multiple -* imputation by repeating the random draw 20 times for each -* process. +* NOTES: * -* Run after "reg_income_PL.do" +* ******************************************************************************** /******************** WAGES: FEMALE, NO PREV WAGE OBSERVED *********************/ @@ -45,6 +39,38 @@ graph export /// sum wage_hour if `filter' & (!missing(wage_hour)) & in_sample_fnpw == 1 [aw=dwt] sum pred_hourly_wage if `filter' & (!missing(wage_hour)) & /// in_sample_fnpw == 1 [aw=dwt] + + +* Mean by age + +use "$dir_data/Female_NPW_sample", clear + +preserve + collapse (mean) wage_hour pred_hourly_wage if ${W1fa_if_condition} & /// + lwage_hour != . , by(dag) + + twoway (scatter wage_hour dag, mcolor(grey%40)) /// + (line pred_hourly_wage dag, lcolor(blue) lwidth(medthick)), /// + title("Observed vs. Predicted Wages ") /// + xtitle("Age") ytitle("Hourly Wage") /// + legend(label(1 "Observed Mean") label(2 "Predicted ")) /// + graphregion(color(white)) +restore + + +preserve + collapse (mean) lwage_hour lwage_hour_hat if ${W1fa_if_condition} & /// + lwage_hour != . , by(dag) + + twoway (scatter lwage_hour dag, mcolor(grey%40)) /// + (line lwage_hour_hat dag, lcolor(blue) lwidth(medthick)), /// + title("Observed vs. Predicted Wages ") /// + xtitle("Age") ytitle("Log Hourly Wage") /// + legend(label(1 "Observed Mean") label(2 "Predicted ")) /// + graphregion(color(white)) +restore + + /********************* WAGES: MALE, NO PREV WAGE OBSERVED *********************/ @@ -75,6 +101,36 @@ graph export /// sum wage_hour if `filter' & (!missing(wage_hour)) & in_sample_mnpw == 1 [aw=dwt] sum pred_hourly_wage if `filter' & (!missing(wage_hour)) & /// in_sample_mnpw == 1 [aw=dwt] + + +* Mean by age + +use "$dir_data/Male_NPW_sample", clear + +preserve + collapse (mean) wage_hour pred_hourly_wage if ${W1ma_if_condition} & /// + lwage_hour != . , by(dag) + + twoway (scatter wage_hour dag, mcolor(grey%40)) /// + (line pred_hourly_wage dag, lcolor(blue) lwidth(medthick)), /// + title("Observed vs. Predicted Wages ") /// + xtitle("Age") ytitle("Hourly Wage") /// + legend(label(1 "Observed Mean") label(2 "Predicted ")) /// + graphregion(color(white)) +restore + + +preserve + collapse (mean) lwage_hour lwage_hour_hat if ${W1ma_if_condition} & /// + lwage_hour != . , by(dag) + + twoway (scatter lwage_hour dag, mcolor(grey%40)) /// + (line lwage_hour_hat dag, lcolor(blue) lwidth(medthick)), /// + title("Observed vs. Predicted Wages ") /// + xtitle("Age") ytitle("Log Hourly Wage") /// + legend(label(1 "Observed Mean") label(2 "Predicted ")) /// + graphregion(color(white)) +restore /********************** WAGES: FEMALE, PREV WAGE OBSERVED *********************/ @@ -103,6 +159,36 @@ sum wage_hour if ${W1fb_if_condition} [aw=dwt] sum pred_hourly_wage if ${W1fb_if_condition} & (!missing(wage_hour)) [aw=dwt] +* Mean by age + +use "$dir_data/Female_PW_sample", clear + +preserve + collapse (mean) wage_hour pred_hourly_wage if ${W1fb_if_condition} & /// + lwage_hour != . , by(dag) + + twoway (scatter wage_hour dag, mcolor(grey%40)) /// + (line pred_hourly_wage dag, lcolor(blue) lwidth(medthick)), /// + title("Observed vs. Predicted Wages") /// + xtitle("Age") ytitle("Hourly Wage") /// + legend(label(1 "Observed Mean") label(2 "Predicted ")) /// + graphregion(color(white)) +restore + + +preserve + collapse (mean) lwage_hour lwage_hour_hat if ${W1fb_if_condition} & /// + lwage_hour != . , by(dag) + + twoway (scatter lwage_hour dag, mcolor(grey%40)) /// + (line lwage_hour_hat dag, lcolor(blue) lwidth(medthick)), /// + title("Observed vs. Predicted Wages") /// + xtitle("Age") ytitle("Log Hourly Wage") /// + legend(label(1 "Observed Mean") label(2 "Predicted ")) /// + graphregion(color(white)) +restore + + /*********************** WAGES:MALE, PREV WAGE OBSERVED ***********************/ use "$dir_data/Male_PW_sample", clear @@ -129,8 +215,35 @@ sum wage_hour if ${W1fb_if_condition} [aw=dwt] sum pred_hourly_wage if ${W1fb_if_condition} & (!missing(wage_hour)) [aw=dwt] -graph drop _all +* Mean by age +use "$dir_data/Male_PW_sample", clear +preserve + collapse (mean) wage_hour pred_hourly_wage if ${W1mb_if_condition} & /// + lwage_hour != . , by(dag) + + twoway (scatter wage_hour dag, mcolor(grey%40)) /// + (line pred_hourly_wage dag, lcolor(blue) lwidth(medthick)), /// + title("Observed vs. Predicted Wages ") /// + xtitle("Age") ytitle("Hourly Wage") /// + legend(label(1 "Observed Mean") label(2 "Predicted ")) /// + graphregion(color(white)) +restore + + +preserve + collapse (mean) lwage_hour lwage_hour_hat if ${W1mb_if_condition} & /// + lwage_hour != . , by(dag) + + twoway (scatter lwage_hour dag, mcolor(grey%40)) /// + (line lwage_hour_hat dag, lcolor(blue) lwidth(medthick)), /// + title("Observed vs. Predicted Wages ") /// + xtitle("Age") ytitle("Log Hourly Wage") /// + legend(label(1 "Observed Mean") label(2 "Predicted ")) /// + graphregion(color(white)) +restore +graph drop _all + diff --git a/validation/02_simulation_validation/.DS_Store b/validation/02_simulation_validation/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..8a100a3824455423525b4c2f1eff3f7fa0033fa1 GIT binary patch literal 6148 zcmeHK%}T>S5T0$TO(;SS3WAq_*NQD|>A_2g^#zRRL8UgNYA|L?liEWm%%-U~ zoLtiEOv*SY>|t;ojb?-T_OVQ|VU&y}svrtSm~wRyC83;oa+-vxs`Yiiwk>;5-QZ5@7($n$-!XZv!Ca#*2ccHR=a`j+xuFQPI{F=z4#L&QBQwAZ zEHhBn(>nG4lke~U%SAk62AF|=#ek^v{l14=GQD+WbJS}c)EiV1%F8u=l%SznG3HV$ d-bGb{euoT1*I=#@Jt+JmplINM8TeHO-T@WJO@{yg literal 0 HcmV?d00001 diff --git a/validation/02_simulation_validation/do_files/.DS_Store b/validation/02_simulation_validation/do_files/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0= 0 & demAge < 15 +replace ageGroup = 1 if demAge >= 15 & demAge < 20 +replace ageGroup = 2 if demAge >= 20 & demAge < 25 +replace ageGroup = 3 if demAge >= 25 & demAge < 30 +replace ageGroup = 4 if demAge >= 30 & demAge < 35 +replace ageGroup = 5 if demAge >= 35 & demAge < 40 +replace ageGroup = 6 if demAge >= 40 & demAge < 60 +replace ageGroup = 7 if demAge >= 60 & demAge < 80 +replace ageGroup = 8 if demAge >= 80 & demAge <= 100 + +label def ageGroup /// + 0 "ageGroup_0_14" /// + 1 "ageGroup_15_19" /// + 2 "ageGroup_20_24" /// + 3 "ageGroup_25_29" /// + 4 "ageGroup_30_34" /// + 5 "ageGroup_35_39" /// + 6 "ageGroup_40_59" /// + 7 "ageGroup_60_79" /// + 8 "ageGroup_80_100" /// + +label val ageGroup ageGroup + +gen ageGroup2 = . +replace ageGroup2 = 0 if demAge >= 16 & demAge < 25 +replace ageGroup2 = 1 if demAge >= 25 & demAge < 30 +replace ageGroup2 = 2 if demAge >= 30 & demAge < 35 +replace ageGroup2 = 3 if demAge >= 35 & demAge < 40 +replace ageGroup2 = 4 if demAge >= 40 & demAge < 45 +replace ageGroup2 = 5 if demAge >= 45 & demAge < 50 +replace ageGroup2 = 6 if demAge >= 50 & demAge < 55 +replace ageGroup2 = 7 if demAge >= 55 & demAge < 60 +replace ageGroup2 = 8 if demAge >= 60 & demAge <= 65 + +label def ageGrouplb2 /// + 0 "ageGroup_16_24" /// + 1 "ageGroup_25_29" /// + 2 "ageGroup_30_34" /// + 3 "ageGroup_35_39" /// + 4 "ageGroup_40_44" /// + 5 "ageGroup_45_49" /// + 6 "ageGroup_50_54" /// + 7 "ageGroup_55_59" /// + 8 "ageGroup_60_65" /// + +label val ageGroup2 ageGrouplb2 + + +* Max benefit unit age +bys run year idBu: egen demAgeBuMax = max(demAge) + +* Partnership status +gen demPartnerStatus_coded = . +replace demPartnerStatus_coded = 1 if demPartnerStatus == "Partnered" +replace demPartnerStatus_coded = 2 if demPartnerStatus == "Single" + +drop demPartnerStatus +rename demPartnerStatus_coded demPartnerStatus + +gen sim_partnered = (demPartnerStatus == 1) +gen sim_single = (demPartnerStatus == 2) + +replace idPartner = "" if idPartner == "null" +destring idPartner , replace +gen sim_has_partner = (idPartner != .) + + +* Number of children +gen child = (demAge < ${age_become_responsible}) +bys run year idBu: egen sim_demNChild = total(child) + +gen child02 = (demAge < 3) +bys run year idBu: egen sim_demNChild0to2 = total(child02) + +gen child00 = (demAge < 1) +bys run year idBu: egen sim_demNChild0 = total(child00) + +gen sim_new_born = (demMaleFlag == 0 & sim_demNChild0 > 0 & /// + sim_demNChild0 != . & demAge >= 18) + +gen children_0 = (sim_demNChild == 0) +gen children_1 = (sim_demNChild == 1) +gen children_2 = (sim_demNChild == 2) +gen children_3plus = (sim_demNChild >= 3) + + +* Interact partnership status and number of children +foreach var1 in sim_partnered sim_single { + + foreach var2 in children_0 children_1 children_2 children_3plus { + + gen `var1'_`var2' = (`var1' & `var2') + + } +} + + +** EDUCATION +* Education dummies +gen sim_edu_na = (eduHighestC4 == "NotAssigned") +gen sim_edu_high = (eduHighestC4 == "High") +gen sim_edu_med = (eduHighestC4 == "Medium") +gen sim_edu_low = (eduHighestC4 == "Low") + + +** HEALTH +* Disabled / LT sick +gen sim_healthDsblLongtermFlag = (healthDsblLongtermFlag == "True") + +* Self rated heath +gen sim_healthSelfRated = . +replace sim_healthSelfRated = 1 if healthSelfRated == "Poor" +replace sim_healthSelfRated = 2 if healthSelfRated == "Fair" +replace sim_healthSelfRated = 3 if healthSelfRated == "Good" +replace sim_healthSelfRated = 4 if healthSelfRated == "VeryGood" +replace sim_healthSelfRated = 5 if healthSelfRated == "Excellent" + +lab def sim_healthSelfRated 1 "Poor" 2 "Fair" 3 "Good" 4 "VeryGood" /// + 5 "Excellent" + +lab val sim_healthSelfRated sim_healthSelfRated + + +** LABOUR MARKET + +* Economic activity dummies +gen sim_employed = (labC4 == "EmployedOrSelfEmployed") +gen sim_student = (labC4 == "Student") +gen sim_inactive = (labC4 == "NotEmployed") +gen sim_retired = (labC4 == "Retired") + + +* Hours worked weekly (continuous) +gen sim_labHrsWorkWeek = labHrsWorkWeek + + +* Hours worked weekly (categories) +/* +For Poland these categries are symmetric cross genders. +*/ +* Address generic lables +replace labHrsWorkEnumWeek = "ZERO" if labHrsWorkEnumWeek == "null" +replace labHrsWorkEnumWeek = "TWENTY" if labHrsWorkEnumWeek == "CATEGORY_PL_1" +replace labHrsWorkEnumWeek = "FORTY" if labHrsWorkEnumWeek == "CATEGORY_PL_2" +replace labHrsWorkEnumWeek = "FIFTY" if labHrsWorkEnumWeek == "CATEGORY_PL_3" + +gen sim_labHrsWorkEnumWeek = labHrsWorkEnumWeek + +gen sim_labHrsWorkEnum_no = . +replace sim_labHrsWorkEnum_no = 0 if labHrsWorkEnumWeek == "ZERO" +replace sim_labHrsWorkEnum_no = 20 if labHrsWorkEnumWeek == "TWENTY" +replace sim_labHrsWorkEnum_no = 40 if labHrsWorkEnumWeek == "FORTY" +replace sim_labHrsWorkEnum_no = 50 if labHrsWorkEnumWeek == "FIFTY" + +* Categorical variable +gen sim_cat_hours = . +replace sim_cat_hours = 1 if labHrsWorkEnumWeek == "ZERO" +replace sim_cat_hours = 2 if labHrsWorkEnumWeek == "TWENTY" +replace sim_cat_hours = 3 if labHrsWorkEnumWeek == "FORTY" +replace sim_cat_hours = 4 if labHrsWorkEnumWeek == "FIFTY" + +tab labHrsWorkEnumWeek year + + +* Hourly wage +gen sim_pred_wage = labWageHrly + + +** INCOME (ANNUAL) +/* +Amounts of personal income stored with the IHS trasnformation. +Benefit Unit level measure (gross and dispoable income) are stored without the +transformation. +*/ + +* Destring individual amounts +destring yNonBenPersGrossMonth yEmpPersGrossMonth yCapitalPersMonth /// + yPensPersGrossMonth, replace ignore("null" "NaN") + + +* Annual individual gross employment income +* Convert to levels +gen yEmpPersGrossLevelMonth = sinh(yEmpPersGrossMonth) +* Convert to annual +gen sim_yEmpPersGrossLevelYear = yEmpPersGrossLevelMonth * 12 + +* Annual benefit unit gross employment income +bys run year idBu: egen sim_yEmpBuGrossLevelYear = /// + total(sim_yEmpPersGrossLevelYear) + + +* Annual individual capital income +* Convert to levels +gen yCapitalPersLevelMonth = sinh(yCapitalPersMonth) +* Convert to annual +gen sim_yCapitalPersLevelYear = yCapitalPersLevelMonth * 12 + +* Annual benefit unit capital income +bys run year idBu: egen sim_yCapitalBuLevelYear = /// + total(sim_yCapitalPersLevelYear) + + +* Annual individual gross private pension income +* Convert to levels +gen yPensPersGrossLevelMonth = 0 +* Convert to annual +gen sim_yPensPersGrossLevelYear = yPensPersGrossLevelMonth * 12 + +* Annual benefit unit gross private pension income +bys run year idBu: egen sim_yPensBuGrossLevelYear = /// + total(sim_yPensPersGrossLevelYear) + + +* Annual individual gross non-benefit income +* Converts to levels +gen yNonBenPersGrossLevelMonth = sinh(yNonBenPersGrossMonth) +* Convert to annual +gen sim_yNonBenPersGrossLevelYear = sim_yPensPersGrossLevelYear + /// + sim_yCapitalPersLevelYear + sim_yEmpPersGrossLevelYear + +// gen sim_yNonBenPersGrossLevelYear = yNonBenPersGrossLevelMonth * 12 + +* Annual benefit unit gross non-benefit income +gen sim_yNonBenBuGrossLevelYear = sim_yPensBuGrossLevelYear + /// + sim_yCapitalBuLevelYear + sim_yEmpBuGrossLevelYear + + +* Annual benefit unit gross income (level, non-benefit) +/* +Note this should be the same as sim_yNonBenBuGrossLevelYear +*/ +gen sim_yGrossBuLevelMonth = yGrossMonth +gen sim_yGrossBuLevelYear = sim_yGrossBuLevelMonth * 12 + +* Check +gen diff = sim_yGrossBuLevelYear - sim_yNonBenBuGrossLevelYear + +hist diff // very close + +replace sim_yGrossBuLevelYear = sim_yNonBenBuGrossLevelYear + +gen sim_yGrossPersLevelYear = sim_yNonBenPersGrossLevelYear + + +* Annual benefit unit disposable (level) +gen yDispBuLevelMonth = yDispMonth +gen sim_yDispBuLevelYear = yDispBuLevelMonth * 12 + + +* Annual benefit unit equivlaized disposable income (BU, level) +gen sim_yDispEquivYear = yDispEquivYear + + +* Benefit unit - Net transfers +gen sim_net_transfers = sim_yDispBuLevelYear - sim_yNonBenBuGrossLevelYear + + +* Restrict sample to relevant valdiation years +keep if year >= ${min_sim_year} +keep if year <= ${max_sim_year} + +drop diff + +save "$dir_data/simulation_sample.dta", replace + + +graph drop _all diff --git a/validation/02_simulation_validation/do_files/02_prepare_EU_SILC_data.do b/validation/02_simulation_validation/do_files/02_prepare_EU_SILC_data.do deleted file mode 100644 index 6b8ecc4..0000000 --- a/validation/02_simulation_validation/do_files/02_prepare_EU_SILC_data.do +++ /dev/null @@ -1,32 +0,0 @@ -/******************************************************************************* -* PROJECT: SimPaths EU -* SECTION: Validation -* OBJECT: SILC data pre-processing -* AUTHORS: Daria Popova, Ashley Burdett -* LAST UPDATE: Nov 2025 (AB) -* COUNTRY: Poland - -* NOTES: This file computes the additional variables needed from SILC -* that are not in the initial populations data. -* - disposable income -* -*******************************************************************************/ - -* Annual individual real disposable income - -use "$dir_init_pop_data/02_pre_drop.dta", clear - -gen valid_y_disp_ind_yr = (hy020/hhsize - py021g) - -replace valid_y_disp_ind_yr = (hy020/hhsize) if py021g == . - -replace valid_y_disp_ind_yr = 0 if valid_y_disp_ind_yr < 0 -assert valid_y_disp_ind_yr >= 0 - -replace valid_y_disp_ind_yr = valid_y_disp_ind_yr / (CPI/100) - -keep valid_y_disp_ind_yr idperson swv - - - -save "$dir_data/silc_ind_dispos_y.dta", replace diff --git a/validation/02_simulation_validation/do_files/03_create_EU_SILC_benefit_units.do b/validation/02_simulation_validation/do_files/03_create_EU_SILC_benefit_units.do deleted file mode 100644 index 7651702..0000000 --- a/validation/02_simulation_validation/do_files/03_create_EU_SILC_benefit_units.do +++ /dev/null @@ -1,446 +0,0 @@ -******************************************************************************** -* PROJECT: ESPON -* SECTION: Validation -* OBJECT: Benefit unit creation -* AUTHORS: Daria Popova, Ashley Burdett -* LAST UPDATE: Feb 2025 (AB) -* COUNTRY: Poland - -* DESCRIPTION: Screens data and identifies benefit units - -* NOTES: -******************************************************************************** - -cd "${dir_data}" - -use "${country}-eusilc_validation_sample_prep1.dta", clear - -fre swv - - -/********************** Rules and assumptions ********************************** -1. Each HH can contain: Responsible Male, and/or Responsible Female, Children, -Other members. In the simulation everyone starts as "Other member" and is -assigned one of the roles in the HH. - - 1.1. Responsible male and female create a partnership couple leading the HH. - Any additional couple creates new HH. A couple with / composed of people - under the age to leave home (18) will still leave together and set up a new - HH. - - 1.1.1. Children should follow the mother if she's moving to a new HH. - - 1.2. After the above there should be only singles left in addition to the - leading couple. If they are above 18, they will leave and set up their own - HH. - - 1.3. After the above there should only be children left in addition to the - original HH. Children will live with mother if defined in the data, - otherwise with father. If neither exists, they will be considered as - orphans. - - 1.4. Orphans are assigned a woman or a man from the household in which they - live as a parent. -*/****************************************************************************** - -* Adult is defined as 18 or over, or if married or has their own kids -* (DP: last condition added to avoid splitting kids from their teenager parents) -gen child = dag < $age_become_responsible & dcpst!=1 - -* Count number of dep children of each person -* For mother -count -preserve -sort swv idhh idperson -save "$dir_data/motherinfo.dta", replace - -keep swv idhh idmother child -rename idmother idperson -bysort swv idperson: egen int n_child_mother = total(child) - //number of dependent children who have this idmother - -duplicates drop swv idperson, force -drop child -save "$dir_data/motherinfo.dta", replace -restore - -sort swv idhh idperson -merge m:1 swv idhh idperson using "$dir_data/motherinfo.dta" -fre _merge -drop if _merge == 2 -drop _merge -count -recode n_child_mother (. = 0) - -* For father -count -preserve -sort swv idhh idperson -save "$dir_data/fatherinfo.dta", replace - -keep swv idhh idfather child -rename idfather idperson -bysort swv idperson: egen int n_child_father = total(child) - //number of dependent children who have this idfather - -duplicates drop swv idperson, force -drop child -save "$dir_data/fatherinfo.dta", replace -restore - -sort swv idhh idperson -merge m:1 swv idhh idperson using "$dir_data/fatherinfo.dta" -fre _merge -drop if _merge == 2 -drop _merge -count -recode n_child_father (. = 0) - -gen n_child = n_child_mother+n_child_father - //n of kids this individual has ==> no double count because father's kids - //will be in their line while mothers kids will be in their line - -sum n_child_mother if n_child_mother > 0 -sum n_child_father if n_child_father > 0 -sum n_child if n_child > 0 - -order swv idhh idperson idpartner idmother idfather dag n_child, last - -count if child == 1 & n_child > 0 //42 obs who are kids but have their own kids -replace child = 0 if n_child > 0 //rule out - -gen adult = 1 - child -sum child adult //81% adults - -gen partnered = (idpartner > 0) - -* Check if there are hhlds without adult -assert child == 1 - adult -cap drop num_adults -bys swv idhh: egen num_adults = total(adult) -fre num_adults //8 obs have no adults - -fre swv idhh if num_adults == 0 - tab dag if num_adults == 0 //==> these are 16/17 yo kids living alone - -* Define benefit units -cap gen long idbenefitunit = . -cap gen long idbupartner = . -format idbenefitunit %19.0g -format idbupartner %19.0g - -** Create benefit units -* Assign first couples -order swv idhh idbenefitunit idbupartner idperson idpartner idmother /// - idfather dag n_child, last - -gsort swv idhh -partnered -dag idperson / -/* -sort hh members in descending order by partnership status and then age -(this ensures that partnered adults go first) -*/ - -bys swv idhh: replace idbenefitunit = idperson[1] - //oldest person becomes head of first benefit unit - -bys swv idhh: replace idbupartner = idpartner[1] - //partner of oldest person becomes first benefit unit partner - -replace idbupartner = . if idbupartner == -9 - -* Remove those who do not belong to first benefit unit -replace idbupartner = . if (adult == 1 & idperson != idbenefitunit & /// - idpartner != idbenefitunit) - //remove partner id for those who are not head or partner - -replace idbenefitunit = . if (adult == 1 & idperson != idbenefitunit & /// - idpartner != idbenefitunit) - //remove other adults who are not head or partner - -replace idbupartner = . if (child == 1 & idfather != idbenefitunit & /// - idmother != idbenefitunit & ((idfather != idbupartner & /// - idmother != idbupartner) | idbupartner < 0)) - //remove partner id for kids that are not head's or partner's - -replace idbenefitunit = . if (child == 1 & idfather != idbenefitunit & /// - idmother != idbenefitunit & ((idfather != idbupartner & /// - idmother != idbupartner) & idbupartner > 0)) - //remove kids that are not head's or partner's - -* Create new ben unit for single adults in hh -replace idbenefitunit = idperson if (missing(idbenefitunit) & adult == 1 & /// - (missing(idpartner) | idpartner < 0)) - -// Loop over number of extra couples residing in the hh that constitute an -// additional benefit unit -forvalues i = 1/3 { - - //count if adult == 1 & idbenefitunit == . & partnered == 1 - //8 partnered adults still have no benefit unit - //list idperson if adult == 1 & idbenefitunit == . & partnered == 1 - - gsort swv idhh -partnered idbenefitunit -dag idperson - //sort so those with a partner who have been assigned a ben unit come - //before those who haven't - - - bys swv idhh: replace idbenefitunit = idperson if /// - (missing(idbenefitunit) & adult == 1 & !missing(idbenefitunit[_n-1]) & /// - idpartner != idbenefitunit[_n-1]) & idbupartner[_n-1] != . - //added the final condition to ensure only one additional benefit unit - //is created - - //ensure the partner is assigned to the same benefit unit if don't align - //by age - replace idbupartner = idpartner if (missing(idbupartner) & /// - idbenefitunit == idperson & !missing(idpartner) & idpartner > 0) - - replace idbenefitunit = idbenefitunit[_n-1] if idhh == idhh[_n-1] & /// - swv == swv[_n-1] & idbenefitunit == . // fill down idbu for household - - replace idbenefitunit = . if child == 1 & partnered == 0 & /// - idbenefitunit != idmother & idbenefitunit != idfather - //keep ben unit info for children of the first benefit unit - - replace idbenefitunit = . if idbenefitunit != idpartner & /// - idbupartner == . & partnered == 1 - //remove if this individual is in a partnership and the id doesn't - //correspond to their partner - - replace idbupartner = idperson if idbenefitunit != . & /// - idbupartner == . & partnered == 1 - //the person who caught the last condition is the benefit units partner - -} - -* Done? Any unassigned couples? -count if adult == 1 & idbenefitunit == . & partnered == 1 - // 0 partnered adults still have no benefit unit -recode idbupartner (. = -9) - -* Check if all adults are assigned to ben units -count if adult == 1 & idbenefitunit == . // 0 -assert idbenefitunit != . if adult == 1 - -** Assign remaining children to benefit unit -* Assign children to their mothers' benunits (where they are heads or partners) -forvalues i = 1/20 { - replace idbenefitunit = idbenefitunit[_n-`i'] if idmother > 0 & /// - missing(idbenefitunit) & child == 1 & /// - (idmother == idbenefitunit[_n-`i'] | idmother == idbupartner[_n-`i']) -} - -* If some kids are still not assigned - assign them to father's ben units -forvalues i = 1/20 { - replace idbenefitunit = idbenefitunit[_n-`i'] if idfather > 0 & /// - missing(idbenefitunit) & child == 1 & /// - (idfather == idbenefitunit[_n-`i'] | idfather == idbupartner[_n-`i']) -} - -* Check if all kids are assigned -count if child == 1 & idbenefitunit == . //864 kids are still not assigned - -* Address orphans -*bys swv idhh: replace idbenefitunit = idbenefitunit[1] if /// -* missing(idbenefitunit) & orphan ==1 - //for now assign orphans to the first benunit -cap drop orphan -gen orphan = (idfather < 0 & idmother < 0 & child == 1) -fre orphan if idbenefitunit == . //864 => all remaining are orphans - -cap drop n_orphan -bys stm idhh: egen n_orphan = sum(orphan) - //count N of orphans per household ==> can be up to 10! -fre n_orphan -/* -n_orphan - - | Freq. Percent Valid Cum. ---------------+-------------------------------------------- -Valid 0 | 508512 99.51 99.51 99.51 - 1 | 1906 0.37 0.37 99.88 - 2 | 352 0.07 0.07 99.95 - 3 | 107 0.02 0.02 99.97 - 4 | 48 0.01 0.01 99.98 - 5 | 56 0.01 0.01 99.99 - 6 | 9 0.00 0.00 100.00 - 7 | 10 0.00 0.00 100.00 - 10 | 12 0.00 0.00 100.00 - Total | 511012 100.00 100.00 ------------------------------------------------------------ - -*/ -order stm idhh idperson idpartner idfather idmother dag dgn adult orphan /// - n_orphan, last - -* Create variables storing ages for all orphans in hh -preserve -keep if n_orphan > 0 -keep stm idhh idperson idpartner idfather idmother dag dgn adult orphan n_orphan -keep if orphan == 1 -bys stm idhh: gen orphan_number = _n if orphan == 1 - -// Loop over each possible orphan and create corresponding age variables -forvalues i = 1/10 { - bys stm idhh: egen temp_dag_orphan`i' = sum(dag) if orphan_number == `i' - bys stm idhh: egen dag_orphan`i' = sum(temp_dag_orphan`i') - drop temp_dag_orphan`i' -} - -save "$dir_data/orphans.dta", replace -restore - -count - -* Add info on orphan's age to the main dataset -merge 1:1 stm idhh idperson using "$dir_data/orphans.dta", /// - keepusing(dag_orphan* orphan_number) -keep if _merge==1 | _merge ==3 -drop _merge -count - -sum n_orphan -local max_orphan = r(max) - -// Loop over the number of orphans in a hh -forvalues i = 1/`max_orphan' { - - * Create age difference between them and each adult in the hh - gen temp_target_age`i' = dag_orphan`i'+20 if dag_orphan`i' > 0 - bys stm idhh: egen target_age`i' = mean(temp_target_age`i') - gen agediff`i' = abs(dag -target_age`i') if adult == 1 - - * Select new parent for each orphan who's age is closest to target age - sort stm idhh agediff`i' idperson - by stm idhh: gen newparent`i' = _n - by stm idhh: replace newparent`i' = 0 if _n > 1 - replace newparent`i' = . if n_orphan == 0 - - drop dag_orphan`i' temp_target_age`i' target_age`i' agediff`i' - - * Assign this parent's idperson as orphan's idmother or idfather - cap drop temp_idmother_orphan`i' - gen double temp_idmother_orphan`i' = idperson if newparent`i' == 1 & /// - dgn == 0 - bys stm idhh: egen idmother_orphan`i' = max(temp_idmother_orphan`i') - format idmother_orphan`i' %19.0g - replace idmother_orphan`i' = 0 if orphan == 0 - drop temp_idmother_orphan`i' - - cap drop temp_idfather_orphan`i' - gen double temp_idfather_orphan`i' = idperson if newparent`i' == 1 & /// - dgn == 1 - bys stm idhh: egen idfather_orphan`i' = max(temp_idfather_orphan`i') - format idfather_orphan`i' %19.0g - replace idfather_orphan`i' = 0 if orphan == 0 - drop temp_idfather_orphan`i' - -} - -* Create newidmother for orphans -cap gen newidmother = . -cap gen newidfather = . - -// Loop over the number of orphan in a hh -forvalues i = 1/`max_orphan' { - replace newidmother = idmother_orphan`i' if orphan_number == `i' - replace newidfather = idfather_orphan`i' if orphan_number == `i' -} - -format newidmother %19.0g -format newidfather %19.0g - -* Replace idmother/idfather of former orphans -replace idmother = newidmother if orphan == 1 -replace idfather = newidfather if orphan == 1 - -drop newparent* idmother_orphan* idfather_orphan* - -* Assign orphans to their new mothers' benunits (they are heads or partners) -gsort swv idhh -dag -partnered -idperson - -forvalues i = 1/13 { - replace idbenefitunit = idbenefitunit[_n-`i'] if idmother > 0 & /// - missing(idbenefitunit) & orphan == 1 & /// - (idmother == idbenefitunit[_n-`i'] | idmother == idbupartner[_n-`i']) -} - -* If some orphans are still not assinged - asign them to father's benunits -forvalues i = 1/13 { - replace idbenefitunit = idbenefitunit[_n-`i'] if idfather > 0 & /// - missing(idbenefitunit) & orphan == 1 & /// - (idfather == idbenefitunit[_n-`i'] | idfather == idbupartner[_n-`i']) -} - -bys stm idhh idbenefitunit: egen temp_idbupartner = max(idbupartner) -fre temp_idbupartner if orphan == 1 -replace idbupartner = temp_idbupartner if orphan == 1 - //fill in benefit unit partner id - -* Assign them a second parent if first parent partnered -replace idfather = idbenefitunit if idmother == idbupartner & orphan == 1 -replace idfather = idbupartner if idmother == idbenefitunit & orphan == 1 - -** Run checks -* Check if all kids are assigned -count if idbenefitunit == . // 1 -count if child == 1 & idbenefitunit == . //2 obs are still not assigned -count if child == 1 & idbenefitunit == . & orphan == 1 - -drop if child == 1 & idbenefitunit == . & orphan == 1 - -fre adult child orphan dag if idbenefitunit == . -fre idperson if orphan == 1 & missing(idbenefitunit) - -* Check if everyone is assigned to benunits at this point -count if idbenefitunit == . -assert idbenefitunit != . -assert idbenefitunit != -9 - -* Check that everyone in benuint has the same benunit partner id assigned -//AB: idbupartner added as a secondary sorting variable to ensure replicability -assert idbupartner != . -bys swv idbenefitunit (idbupartner): replace idbupartner = idbupartner[1] if /// - idbupartner != idbupartner[1] - //(8,024 real changes made) this applies to children missing other parents - //information -assert idbupartner != idbenefitunit - -* Screen out benefit units with multiple adults of same sex -gen adultMan = adult * (dgn == 1) -gen adultWoman = adult * (dgn == 0) -gsort swv idbenefitunit -bys swv idbenefitunit: egen sumMen = sum(adultMan) -bys swv idbenefitunit: egen sumWomen = sum(adultWoman) -tab swv sumMen -tab swv sumWomen -if ${use_assert} assert sumMen < 2 & sumWomen < 2 - //this is not the case I suppose because we kept same sex couples - -* Check for duplicates in terms of swv and idperson -duplicates report swv idperson -duplicates report stm idperson //no such cases - -sort swv idbenefitunit idperson - -drop child n_child_mother n_child_father partnered num_adults n_child orphan /// - adult n_orphan orphan_number newidmother newidfather temp_idbupartner /// - adultMan adultWoman sumMen sumWomen - -save "$dir_data/${country}-eusilc_validation_sample_prep2.dta", replace - - -******************************************************************************** -* Clean-up and exit -******************************************************************************** -#delimit ; -local files_to_drop - motherinfo.dta - fatherinfo.dta - orphans.dta - ; -#delimit cr // cr stands for carriage return - -foreach file of local files_to_drop { - erase "$dir_data/`file'" -} diff --git a/validation/02_simulation_validation/do_files/03_create_EU_SILC_validation_targets.do b/validation/02_simulation_validation/do_files/03_create_EU_SILC_validation_targets.do new file mode 100644 index 0000000..52c79f4 --- /dev/null +++ b/validation/02_simulation_validation/do_files/03_create_EU_SILC_validation_targets.do @@ -0,0 +1,381 @@ +/******************************************************************************* +* PROJECT: SimPaths EU +* SECTION: Validation +* OBJECT: Targets +* AUTHORS: Patryk Bronka, Ashley Burdett, Daria Popova +* LAST UPDATE: April 2026 (AB) +* COUNTRY: PL +* DESCRIPTION: This file creates validation targets using longitudinal EU +* SILC data +* generated by do files +********************************************************************************* +* NOTES: +* +*******************************************************************************/ + +* Generate/Tidy required variables + +* Load initial populations +use "$dir_init_pop_data/${country}_pooled_ipop.dta", clear + + +** IDENTIFIERS +rename idhh idHh +rename idbenefitunit idBu +rename idperson idPers +rename idpartner idPartner +rename idmother idMother +rename idfather idFather +rename swv statCollectionWave + + +** TIME +fre stm +keep if stm <= $max_year +gen year = stm + + +** DEMOGRAPHICS + +* Gender +rename dgn demMaleFlag + +replace demMaleFlag = . if demMaleFlag < 0 + + +* Age +rename dag demAge + +replace demAge = . if demAge < 0 + +* Age groups +gen ageGroup = . +replace ageGroup = 0 if demAge >= 0 & demAge < 15 +replace ageGroup = 1 if demAge >= 15 & demAge < 20 +replace ageGroup = 2 if demAge >= 20 & demAge < 25 +replace ageGroup = 3 if demAge >= 25 & demAge < 30 +replace ageGroup = 4 if demAge >= 30 & demAge < 35 +replace ageGroup = 5 if demAge >= 35 & demAge < 40 +replace ageGroup = 6 if demAge >= 40 & demAge < 60 +replace ageGroup = 7 if demAge >= 60 & demAge < 80 +replace ageGroup = 8 if demAge >= 80 & demAge <= 100 + +label def ageGrouplb /// + 0 "ageGroup_0_14" /// + 1 "ageGroup_15_19" /// + 2 "ageGroup_20_24" /// + 3 "ageGroup_25_29" /// + 4 "ageGroup_30_34" /// + 5 "ageGroup_35_39" /// + 6 "ageGroup_40_59" /// + 7 "ageGroup_60_79" /// + 8 "ageGroup_80_100" /// + +label val ageGroup ageGrouplb +fre ageGroup + +gen ageGroup2 = . +replace ageGroup2 = 0 if demAge >= 16 & demAge < 25 +replace ageGroup2 = 1 if demAge >= 25 & demAge < 30 +replace ageGroup2 = 2 if demAge >= 30 & demAge < 35 +replace ageGroup2 = 3 if demAge >= 35 & demAge < 40 +replace ageGroup2 = 4 if demAge >= 40 & demAge < 45 +replace ageGroup2 = 5 if demAge >= 45 & demAge < 50 +replace ageGroup2 = 6 if demAge >= 50 & demAge < 55 +replace ageGroup2 = 7 if demAge >= 55 & demAge < 60 +replace ageGroup2 = 8 if demAge >= 60 & demAge <= 65 + +label def ageGrouplb2 /// + 0 "ageGroup_16_24" /// + 1 "ageGroup_25_29" /// + 2 "ageGroup_30_34" /// + 3 "ageGroup_35_39" /// + 4 "ageGroup_40_44" /// + 5 "ageGroup_45_49" /// + 6 "ageGroup_50_54" /// + 7 "ageGroup_55_59" /// + 8 "ageGroup_60_65" /// + +label val ageGroup2 ageGrouplb2 +fre ageGroup2 + + +* Partnership status +rename dcpst demPartnerStatus + +gen valid_partnered = (demPartnerStatus == 1) +gen valid_single = (demPartnerStatus == 2) + +replace valid_partnered = . if demPartnerStatus == . | demPartnerStatus < 0 +replace valid_single = . if demPartnerStatus == . | demPartnerStatus < 0 + + +* Number of children +rename dnc demNChild +rename dnc02 demNChild0to2 + +gen new_born = (demAge == 0 & demNChild0to2 != 0) +bysort idBu year (new_born): gen demNChild0 = (new_born[_N] == 1) + +gen children_0 = (demNChild == 0) +gen children_1 = (demNChild == 1) +gen children_2 = (demNChild == 2) +gen children_3plus = (demNChild >= 3 & demNChild != .) + +* Interaction of partnership status and number of children +foreach var1 in valid_partnered valid_single { + + foreach var2 in children_0 children_1 children_2 children_3plus { + + gen `var1'_`var2' = (`var1' & `var2') + + } + +} + +* Have a new born +gen valid_new_born = (dchpd > 0 & dchpd != .) + +order valid_new_born dchpd + + +** EDUCATION +* Attainment dummies +rename deh_c4 eduHighestC4 + +gen valid_edu_na = (eduHighestC4 == 0) +gen valid_edu_high = (eduHighestC4 == 1) +gen valid_edu_med = (eduHighestC4 == 2) +gen valid_edu_low = (eduHighestC4 == 3) + +gen deh_flag = /// + (flag_deh_imp_mono == 1 | flag_deh_imp_reg == 1 | flag_dehsp_imp_reg == 1) + +replace valid_edu_na = . if eduHighestC4 == . | eduHighestC4 < 0 | deh_flag == 1 +replace valid_edu_high = . if eduHighestC4 == . | eduHighestC4 < 0 | /// + deh_flag == 1 +replace valid_edu_med = . if eduHighestC4 == . | eduHighestC4 < 0 | /// + deh_flag == 1 +replace valid_edu_low = . if eduHighestC4 == . | eduHighestC4 < 0 | /// + deh_flag == 1 + + +** HEALTH +* Disabed / LT sick +rename dlltsd healthDsblLongtermFlag + +gen valid_healthDsblLongtermFlag = healthDsblLongtermFlag +replace valid_healthDsblLongtermFlag = . if valid_healthDsblLongtermFlag < 0 + +* Self rated health +rename dhe valid_healthSelfRated + +replace valid_healthSelfRated = . if valid_healthSelfRated < 0 | /// + flag_dhe_imp == 1 + + +** LABOUR MARKET +* Economic activity dummies +rename les_c3 labC3 +rename les_c4 labC4 + +gen valid_employed = (labC4 == 1) +gen valid_student = (labC4 == 2) +gen valid_inactive = (labC4 == 3) +gen valid_retired = (labC4 == 4) + +replace valid_employed = . if labC4 < 0 | labC4 == . +replace valid_student = . if labC4 < 0 | labC4 == . +replace valid_inactive = . if labC4 < 0 | labC4 == . +replace valid_retired = . if labC4 < 0 | labC4 == . + +* Hours worked weekly (continuous) +rename lhw labHrsWorkWeek + +gen valid_labHrsWorkWeek = labHrsWorkWeek + +* Hours worked weekly (categories) +gen valid_labHrsWorkEnumWeek = "ZERO" +replace valid_labHrsWorkEnumWeek = "TWENTY" if labHrsWorkWeek >= 1 & /// + labHrsWorkWeek < 40 +replace valid_labHrsWorkEnumWeek = "FORTY" if labHrsWorkWeek == 40 +replace valid_labHrsWorkEnumWeek = "FIFTY" if labHrsWorkWeek > 40 & /// + !missing(labHrsWorkWeek) + +gen valid_labHrsWorkEnum_no = . +replace valid_labHrsWorkEnum_no = 0 if valid_labHrsWorkEnumWeek == "ZERO" +replace valid_labHrsWorkEnum_no = 20 if valid_labHrsWorkEnumWeek == "TWENTY" +replace valid_labHrsWorkEnum_no = 40 if valid_labHrsWorkEnumWeek == "FORTY" +replace valid_labHrsWorkEnum_no = 50 if valid_labHrsWorkEnumWeek == "FIFTY" + +* Categorical variable +gen valid_cat_hours = . +replace valid_cat_hours = 1 if valid_labHrsWorkEnumWeek == "ZERO" +replace valid_cat_hours = 2 if valid_labHrsWorkEnumWeek == "TWENTY" +replace valid_cat_hours = 3 if valid_labHrsWorkEnumWeek == "FORTY" +replace valid_cat_hours = 4 if valid_labHrsWorkEnumWeek == "FIFTY" + +* Hourly wage +// obs_earnings_hourly - alternative only containing observed wages +// pred_hourly_wage - alternative containing predicted wages +gen valid_wage = obs_earnings_hourly +replace valid_wag = . if obs_earnings_hourly < 0 +replace valid_wage = . if valid_wage == 0 & labC4 == 1 + + +** INCOME (ANNUAL) +/* +Amounts of personal income stored with the IHS transformation. +Benefit Unit level measure (gross and disposable income) are stored without the +transformation. + +No missing observations in income amounts. +*/ + +* Annual individual employment gross income +rename yplgrs_dv yEmpPersGrossMonth + +sum yEmpPersGrossMonth +count if yEmpPersGrossMonth == . + +* Convert to levels +gen yEmpPersGrossLevelMonth = sinh(yEmpPersGrossMonth) +* Convert to annual +gen valid_yEmpPersGrossLevelYear = yEmpPersGrossLevelMonth * 12 + +* Annual benefit unit gross employment income +bys year idBu: egen valid_yEmpBuGrossLevelYear = /// + total(valid_yEmpPersGrossLevelYear) + + +* Annual individual capital income +rename ypncp yCapitalPersMonth + +sum yCapitalPersMonth +count if yCapitalPersMonth == . + +* Convert to levels +gen yCapitalPersLevelMonth = sinh(yCapitalPersMonth) +* Convert to annual +gen valid_yCapitalPersLevelYear = yCapitalPersLevelMonth * 12 + +* Annual benefit unit capital income +bys year idBu: egen valid_yCapitalBuLevelYear = /// + total(valid_yCapitalPersLevelYear) + + +* Annual individual gross private pension income +rename ypnoab yPensPersGrossMonth + +sum yPensPersGrossMonth +count if yPensPersGrossMonth == . + +* Convert to levels +gen yPensPersGrossLevelMonth = 0 +* Convert to annual +gen valid_yPensPersGrossLevelYear = yPensPersGrossLevelMonth * 12 + +* Annual benefit unit gross private pension income +bys year idBu: egen valid_yPensBuGrossLevelYear = /// + total(valid_yPensPersGrossLevelYear) + + +* Annual individual gross non-benefit income +/* +rename ypnbihs_dv yNonBenPersGrossMonth + +* Convert to levels +gen yNonBenPersGrossLevelMonth = sinh(yNonBenPersGrossMonth) +* Convert to annual +gen valid_yNonBenPersGrossLevelYear = yNonBenPersGrossLevelMonth * 12 +*/ +egen valid_yNonBenPersGrossLevelYear = /// + rowtotal(valid_yPensPersGrossLevelYear valid_yCapitalPersLevelYear /// + valid_yEmpPersGrossLevelYear) + +* Annual benefit unit gross non-benefit income +bys year idBu: egen valid_yNonBenBuGrossLevelYear = /// + total(valid_yNonBenPersGrossLevelYear) + + +* Annual benefit unit gross income (level, non-benefit) +/* +Gross income is the same as non-benefit private income. +*/ +gen valid_yGrossBuLevelYear = valid_yNonBenBuGrossLevelYear + +gen valid_yGrossPersLevelYear = valid_yNonBenPersGrossLevelYear + + +* Annual benefit unit disposable income (level) +rename ydisp yDispPersMonth +* Convert to annual +gen valid_yDispPersYear = yDispPersMonth * 12 + +* Convert to benefit unit +bys year idBu: egen valid_yDispBuLevelYear = total(valid_yDispPersYear) + + +* Benefit unit - Net transfers +gen valid_net_transfers = valid_yDispBuLevelYear - valid_yNonBenBuGrossLevelYear + + +* Equivalised disposable income per benefit unit + +* Compute equivalence scale +* Idenifty types of children +gen is_older_child = 1 if inrange(demAge,14,18) & (idMother < . | idFather < .) +gen is_child = 1 if demAge < 14 & (idMother < . | idFather < .) + +* Sum up number in hh +bysort idHh: egen num_older_children = total(is_older_child) +bysort idHh: egen num_children = total(is_child) + +* Compute Modified OECD equivalence scale + +gen moecd_eq = . +replace moecd_eq = 1.5 if dhhtp_c4 == 1 +replace moecd_eq = 0.3 * num_children + 0.5 * num_older_children + 1.5 if /// + dhhtp_c4 == 2 +replace moecd_eq = 1 if dhhtp_c4 == 3 +replace moecd_eq = 0.3 * num_children + 0.5 * num_older_children + 1 if /// + dhhtp_c4 == 4 + +* Apply equivalence scale +gen valid_yDispBuEquivYear = valid_yDispBuLevelYear / moecd_eq + +drop is_older_child is_child moecd_eq + + +* Minimum wage variable +gen min_wage = 8.66 if year == 2011 +replace min_wage = 9.38 if year == 2012 +replace min_wage = 10.00 if year == 2013 +replace min_wage = 10.5 if year == 2014 +replace min_wage = 10.64 if year == 2015 +replace min_wage = 11.56 if year == 2016 +replace min_wage = 12.50 if year == 2017 +replace min_wage = 13.13 if year == 2018 +replace min_wage = 14.06 if year == 2019 +replace min_wage = 16.25 if year == 2020 +replace min_wage = 17.50 if year == 2021 +replace min_wage = 18.81 if year == 2022 +replace min_wage = 22.8 if year == 2023 + +* Convert into real terms +replace min_wage = min_wage * (CPI/100) + +gen valid_wage_hour_adj_mw = valid_wage +replace valid_wage_hour_adj_mw = min_wage if valid_wage < min_wage + +replace valid_wage_hour_adj = valid_wage +replace valid_wage_hour_adj = . if valid_wage < min_wage + + +* Restrict sample to relevant validation years +drop if year < ${min_sim_year} +drop if year > ${max_sim_year} + + +save "$dir_data/${country}-eusilc_validation_sample.dta", replace + diff --git a/validation/02_simulation_validation/do_files/04_01_plot_activity_status.do b/validation/02_simulation_validation/do_files/04_01_plot_activity_status.do new file mode 100644 index 0000000..7845fdf --- /dev/null +++ b/validation/02_simulation_validation/do_files/04_01_plot_activity_status.do @@ -0,0 +1,2286 @@ +/******************************************************************************* +* PROJECT: SimPaths EU +* SECTION: Validation +* OBJECT: Economic Activity Status plots +* AUTHORS: Ashley Burdett +* LAST UPDATE: 4/26 +* COUNTRY: PL +* DESCRIPTION: This do file plots validation graphs for economic activity +* status (4 cat). +******************************************************************************** +* NOTES: +*******************************************************************************/ + +clear all + +******************************************************************************** +* 0 : Programmes +******************************************************************************** + +* Time series plot, all activity statuses +cap program drop make_activity_plot + +program define make_activity_plot + syntax, subtitle(string) saving(string) note(string) + + twoway /// + (rarea sim_employed_high sim_employed_low year, sort color(green%20) legend(label(1 "Employed, SimPaths"))) /// + (line valid_employed year, sort color(green) legend(label(2 "Employed, UKHLS"))) /// + (rarea sim_student_high sim_student_low year, sort color(blue%20) legend(label(3 "Students, SimPaths"))) /// + (line valid_student year, sort color(blue) legend(label(4 "Students, UKHLS"))) /// + (rarea sim_inactive_high sim_inactive_low year, sort color(red%20) legend(label(5 "Non-employed, SimPaths"))) /// + (line valid_inactive year, sort color(red) legend(label(6 "Non-employed, UKHLS"))) /// + (rarea sim_retired_high sim_retired_low year, sort color(grey%20) legend(label(7 "Retired, SimPaths"))) /// + (line valid_retired year, sort color(grey) legend(label(8 "Retired, UKHLS"))), /// + title("Economic Activity Status") /// + subtitle("`subtitle'") /// + xtitle("Year", size(small)) /// + ytitle("Share", size(small)) /// + xlabel(, labsize(small)) /// + ylabel(, labsize(small)) /// + graphregion(color(white)) /// + legend(size(small)) /// + note(`note', size(vsmall)) + + graph export "$dir_output_files/economic_activity/`saving'.jpg", replace width(2400) height(1350) quality(100) + +end + + +* Time series plot, non-employed statuses only +* Time series plot all +cap program drop make_activity_ne_plot + +program define make_activity_ne_plot + syntax, subtitle(string) saving(string) note(string) + + twoway /// + (rarea sim_student_high sim_student_low year, sort color(blue%20) legend(label(1 "Students, SimPaths"))) /// + (line valid_student year, sort color(blue) legend(label(2 "Students, UKHLS"))) /// + (rarea sim_inactive_high sim_inactive_low year, sort color(red%20) legend(label(3 "Non-employed, SimPaths"))) /// + (line valid_inactive year, sort color(red) legend(label(4 "Non-employed, UKHLS"))) /// + (rarea sim_retired_high sim_retired_low year, sort color(grey%20) legend(label(5 "Retired, SimPaths"))) /// + (line valid_retired year, sort color(grey) legend(label(6 "Retired, UKHLS"))), /// + title("Non-Employed Economic Activity Status") /// + subtitle("`subtitle'") /// + xtitle("Year", size(small)) /// + ytitle("Share", size(small)) /// + xlabel(, labsize(small)) /// + ylabel(, labsize(small)) /// + graphregion(color(white)) /// + legend(size(small)) /// + note(`note', size(vsmall)) + + graph export "$dir_output_files/economic_activity/`saving'.jpg", replace width(2400) height(1350) quality(100) +end + + +******************************************************************************** +* 1 : Mean values over time +******************************************************************************** +******************************************************************************** +* 1.1 : Mean values over time - Economic activity status +******************************************************************************** +******************************************************************************** +* 1.1.1 : Young people (16-30) +******************************************************************************** + +* Prepare validation data +use year dwt valid_employed valid_student valid_inactive demAge /// + valid_retired using "$dir_data/${country}-eusilc_validation_sample.dta", /// + clear + +drop if demAge > 30 +drop if demAge < 16 + +collapse (mean) valid_employed valid_student valid_inactive valid_retired /// + [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_employed sim_student sim_inactive sim_retired demAge using /// + "$dir_data/simulation_sample.dta", clear + +drop if demAge > 30 +drop if demAge < 16 + +collapse (mean) sim_employed sim_student sim_inactive sim_retired, /// + by(run year) + +collapse (mean) sim_employed sim_student sim_inactive sim_retired /// + (sd) sim_employed_sd = sim_employed /// + sim_student_sd = sim_student /// + sim_inactive_sd = sim_inactive /// + sim_retired_sd = sim_retired /// + , by(year) + +* Compute 95% confidence interval +foreach varname in sim_employed sim_student sim_inactive sim_retired { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +make_activity_plot, /// + subtitle("Ages 16-30") /// + saving("validation_${country}_activity_status_ts_16_30_both") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired.""') + + +******************************************************************************** +* 1.1.1.1 : Young people (16-30), by gender +******************************************************************************** + +* Prepare validation data +use year dwt valid_employed valid_student valid_inactive demAge demMaleFlag /// + valid_retired using "$dir_data/${country}-eusilc_validation_sample.dta", /// + clear + +drop if demAge > 30 +drop if demAge < 16 + +collapse (mean) valid_employed valid_student valid_inactive valid_retired /// + [aw = dwt], by(year demMaleFlag) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_employed sim_student sim_inactive sim_retired demAge /// + demMaleFlag using "$dir_data/simulation_sample.dta", clear + +drop if demAge > 30 +drop if demAge < 16 + +collapse (mean) sim_employed sim_student sim_inactive sim_retired, /// + by(run year demMaleFlag) + +collapse (mean) sim_employed sim_student sim_inactive sim_retired /// + (sd) sim_employed_sd = sim_employed /// + sim_student_sd = sim_student /// + sim_inactive_sd = sim_inactive /// + sim_retired_sd = sim_retired /// + , by(year demMaleFlag) + +* Compute 95% confidence interval +foreach varname in sim_employed sim_student sim_inactive sim_retired { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year demMaleFlag using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figures + +* Males +preserve + +keep if demMaleFlag == 1 + +make_activity_plot, /// + subtitle("Ages 16-30, males") /// + saving("validation_${country}_activity_status_ts_16_30_male") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired.""') + +restore + +* Female + +keep if demMaleFlag == 0 + +* Plot figure +make_activity_plot, /// + subtitle("Ages 16-30, females") /// + saving("validation_${country}_activity_status_ts_16_30_female") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired.""') + + +******************************************************************************** +* 1.1.2 : Working age (16-65) +******************************************************************************** + +* Prepare validation data +use idPers year dwt demMaleFlag demAge valid_employed valid_student /// + valid_inactive valid_retired using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if inrange(demAge,16,65) + +collapse (mean) valid_employed valid_student valid_inactive valid_retired /// + [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_employed sim_student sim_inactive sim_retired demMaleFlag /// + demAge using "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if inrange(demAge,16,65) + +collapse (mean) sim_employed sim_student sim_inactive sim_retired, /// + by(run year) + +collapse (mean) sim_employed sim_student sim_inactive sim_retired /// + (sd) sim_employed_sd = sim_employed /// + sim_student_sd = sim_student /// + sim_inactive_sd = sim_inactive /// + sim_retired_sd = sim_retired /// + , by(year) + +foreach varname in sim_employed sim_student sim_inactive sim_retired { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +make_activity_plot, /// + subtitle("Ages 16-65") /// + saving("validation_${country}_activity_status_ts_16_65_both") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired.""') + + +******************************************************************************** +* 1.1.2.1 : Working age (16-65), by gender +******************************************************************************** + +* Prepare validation data +use idPers year dwt demMaleFlag demAge valid_employed valid_student /// + valid_inactive valid_retired using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if inrange(demAge,16,65) + + +collapse (mean) valid_employed valid_student valid_inactive valid_retired /// + [aw = dwt], by(year demMaleFlag) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_employed sim_student sim_inactive sim_retired demMaleFlag /// + demAge using "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if inrange(demAge,16,65) + +collapse (mean) sim_employed sim_student sim_inactive sim_retired, /// + by(run year demMaleFlag) + +collapse (mean) sim_employed sim_student sim_inactive sim_retired /// + (sd) sim_employed_sd = sim_employed /// + sim_student_sd = sim_student /// + sim_inactive_sd = sim_inactive /// + sim_retired_sd = sim_retired /// + , by(year demMaleFlag) + +foreach varname in sim_employed sim_student sim_inactive sim_retired { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year demMaleFlag using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figures + +* Male +preserve + +keep if demMaleFlag == 1 + +make_activity_plot, /// + subtitle("Ages 16-65, males") /// + saving("validation_${country}_activity_status_ts_16_65_male") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired.""') + +restore + +* Female + +keep if demMaleFlag == 0 + +make_activity_plot, /// + subtitle("Ages 16-65, females") /// + saving("validation_${country}_activity_status_ts_16_65_female") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired.""') + +graph drop _all + + +******************************************************************************** +* 1.1.2.2 : Working age (18-65) by partnership status +******************************************************************************** + +* Prepare validation data +use year dwt valid_employed valid_student valid_inactive valid_retired /// + demPartnerStatus demMaleFlag demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if inrange(demAge,18,65) + +collapse (mean) valid_employed valid_student valid_inactive valid_retired /// + [aw = dwt], by(year demPartnerStatus) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_employed sim_student sim_inactive sim_retired /// + demPartnerStatus demMaleFlag demAge using /// + "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if inrange(demAge,18,65) + +collapse (mean) sim_employed sim_student sim_inactive sim_retired, /// + by(run year demPartnerStatus) + +collapse (mean) sim_employed sim_student sim_inactive sim_retired /// + (sd) sim_employed_sd = sim_employed /// + sim_student_sd = sim_student /// + sim_inactive_sd = sim_inactive /// + sim_retired_sd = sim_retired /// + , by(year demPartnerStatus) + +foreach varname in sim_employed sim_student sim_inactive sim_retired { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year demPartnerStatus using "$dir_data/temp_valid_stats.dta", /// + keep(3) nogen + +* Plot figures + +* Partnered +preserve + +keep if demPartnerStatus == 1 + +make_activity_plot, /// + subtitle("Ages 18-65, partnered") /// + saving("validation_${country}_activity_status_ts_18_65_both_partnered") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired.""') + +restore + +* Single +keep if demPartnerStatus == 2 + +make_activity_plot, /// + subtitle("Ages 18-65, single") /// + saving("validation_${country}_activity_status_ts_18_65_both_single") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired.""') + +graph drop _all + + +******************************************************************************** +* 1.1.2.2.1 : Working age (18-65), by partnership status, by gender +******************************************************************************** + +* Prepare validation data +use year dwt valid_employed valid_student valid_inactive valid_retired /// + demPartnerStatus demMaleFlag demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if inrange(demAge,18,65) + +collapse (mean) valid_employed valid_student valid_inactive valid_retired /// + [aw = dwt], by(year demPartnerStatus demMaleFlag) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_employed sim_student sim_inactive sim_retired /// + demPartnerStatus demMaleFlag demAge using /// + "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if inrange(demAge,18,65) + +collapse (mean) sim_employed sim_student sim_inactive sim_retired, /// + by(run year demPartnerStatus demMaleFlag) + +collapse (mean) sim_employed sim_student sim_inactive sim_retired /// + (sd) sim_employed_sd = sim_employed /// + sim_student_sd = sim_student /// + sim_inactive_sd = sim_inactive /// + sim_retired_sd = sim_retired /// + , by(year demPartnerStatus demMaleFlag) + +foreach varname in sim_employed sim_student sim_inactive sim_retired { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year demPartnerStatus demMaleFlag using /// + "$dir_data/temp_valid_stats.dta", keep(3) nogen + + +* Plot figures +foreach g in 0 1 { + local gname = cond(`g'==1, "male", "female") + + foreach p in 1 2 { + local pname = cond(`p'==1, "partnered", "single") + + preserve + keep if demMaleFlag == `g' & demPartnerStatus == `p' + + make_activity_plot, /// + subtitle("Ages 18-65, `pname' `gname's") /// + saving("validation_${country}_activity_status_ts_18_65_`gname'_`pname'") /// + note(`""Notes: ..." "..." "') + restore + } +} + +graph drop _all + + +******************************************************************************** +* 1.1.3 : Female working age (16-60) +******************************************************************************** + +* Prepare validation data +use year dwt valid_employed valid_student valid_inactive demMaleFlag demAge /// + valid_retired using "$dir_data/${country}-eusilc_validation_sample.dta", /// + clear + +* Select sample +keep if inrange(demAge,16,60) + +collapse (mean) valid_employed valid_student valid_inactive valid_retired /// + [aw = dwt], by(year demMaleFlag) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_employed sim_student sim_inactive sim_retired demMaleFlag /// + demAge using "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if inrange(demAge,16,60) + +collapse (mean) sim_employed sim_student sim_inactive sim_retired, /// + by(run year demMaleFlag) + +collapse (mean) sim_employed sim_student sim_inactive sim_retired /// + (sd) sim_employed_sd = sim_employed /// + sim_student_sd = sim_student /// + sim_inactive_sd = sim_inactive /// + sim_retired_sd = sim_retired /// + , by(year demMaleFlag) + +foreach varname in sim_employed sim_student sim_inactive sim_retired { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year demMaleFlag using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Females +keep if demMaleFlag == 0 + +* Plot figure +make_activity_plot, /// + subtitle("Ages 16-60, females") /// + saving("validation_${country}_activity_status_ts_16_60_female") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired.""') + + +******************************************************************************** +* 1.1.4 : All ages +******************************************************************************** + +* Prepare validation data +use year dwt valid_employed valid_student valid_inactive demMaleFlag /// + valid_retired demAge labC4 using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +collapse (mean) valid_employed valid_student valid_inactive valid_retired /// + [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_employed sim_student sim_inactive sim_retired demMaleFlag /// + demAge labC4 using "$dir_data/simulation_sample.dta", clear + +collapse (mean) sim_employed sim_student sim_inactive sim_retired, /// + by(run year) + +collapse (mean) sim_employed sim_student sim_inactive sim_retired /// + (sd) sim_employed_sd = sim_employed /// + sim_student_sd = sim_student /// + sim_inactive_sd = sim_inactive /// + sim_retired_sd = sim_retired /// + , by(year) + +foreach varname in sim_employed sim_student sim_inactive sim_retired { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + + +* Plot figure +make_activity_plot, /// + subtitle("All ages") /// + saving("validation_${country}_activity_status_ts_all_both") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired.""') + +graph drop _all + + +******************************************************************************** +* 1.1.4.1 : All ages, by gender +******************************************************************************** + +* Prepare validation data +use year dwt valid_employed valid_student valid_inactive demMaleFlag /// + valid_retired demAge labC4 using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +collapse (mean) valid_employed valid_student valid_inactive valid_retired /// + [aw = dwt], by(year demMaleFlag) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_employed sim_student sim_inactive sim_retired demMaleFlag /// + demAge labC4 using "$dir_data/simulation_sample.dta", clear + +collapse (mean) sim_employed sim_student sim_inactive sim_retired, /// + by(run year demMaleFlag) + +collapse (mean) sim_employed sim_student sim_inactive sim_retired /// + (sd) sim_employed_sd = sim_employed /// + sim_student_sd = sim_student /// + sim_inactive_sd = sim_inactive /// + sim_retired_sd = sim_retired /// + , by(year demMaleFlag) + +foreach varname in sim_employed sim_student sim_inactive sim_retired { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year demMaleFlag using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure + +* Males +preserve +keep if demMaleFlag == 1 + +make_activity_plot, /// + subtitle("All ages, males") /// + saving("validation_${country}_activity_status_ts_all_male") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired.""') + +restore + +* Females +keep if demMaleFlag == 0 + +make_activity_plot, /// + subtitle("All ages, females") /// + saving("validation_${country}_activity_status_ts_all_female") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired.""') + +graph drop _all + + +******************************************************************************** +* 1.1.5 : Adult population 18+ +******************************************************************************** + +* Prepare validation data +use year dwt valid_employed valid_student valid_inactive demMaleFlag demAge /// + valid_retired using "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +drop if demAge < 18 + +collapse (mean) valid_employed valid_student valid_inactive valid_retired /// + [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_employed sim_student sim_inactive sim_retired demMaleFlag /// + demAge using "$dir_data/simulation_sample.dta", clear + +drop if demAge < 18 + +collapse (mean) sim_employed sim_student sim_inactive sim_retired, /// + by(run year) + +collapse (mean) sim_employed sim_student sim_inactive sim_retired /// + (sd) sim_employed_sd = sim_employed /// + sim_student_sd = sim_student /// + sim_inactive_sd = sim_inactive /// + sim_retired_sd = sim_retired /// + , by(yea) + +foreach varname in sim_employed sim_student sim_inactive sim_retired { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +make_activity_plot, /// + subtitle("Ages 18+") /// + saving("validation_${country}_activity_status_ts_18plus_both") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired.""') + + +******************************************************************************** +* 1.1.5.1 : Adult population 18+, by gender +******************************************************************************** + +* Prepare validation data +use year dwt valid_employed valid_student valid_inactive demMaleFlag demAge /// + valid_retired using "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +drop if demAge < 18 + +collapse (mean) valid_employed valid_student valid_inactive valid_retired /// + [aw = dwt], by(year demMaleFlag) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_employed sim_student sim_inactive sim_retired demMaleFlag /// + demAge using "$dir_data/simulation_sample.dta", clear + +drop if demAge < 18 + +collapse (mean) sim_employed sim_student sim_inactive sim_retired, /// + by(run year demMaleFlag) + +collapse (mean) sim_employed sim_student sim_inactive sim_retired /// + (sd) sim_employed_sd = sim_employed /// + sim_student_sd = sim_student /// + sim_inactive_sd = sim_inactive /// + sim_retired_sd = sim_retired /// + , by(yea demMaleFlag) + +foreach varname in sim_employed sim_student sim_inactive sim_retired { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year demMaleFlag using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figures + +* Males +preserve + +keep if demMaleFlag == 1 + +make_activity_plot, /// + subtitle("Ages 18+, males") /// + saving("validation_${country}_activity_status_ts_18plus_male") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired.""') + +restore + +* Females +keep if demMaleFlag == 0 + +make_activity_plot, /// + subtitle("Ages 18+, females") /// + saving("validation_${country}_activity_status_ts_18plus_female") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired.""') + +graph drop _all + + +******************************************************************************** +* 1.1.6 : Labour supply age group (16-75) +******************************************************************************** + +* Prepare validation data +use year dwt valid_employed valid_student valid_inactive demMaleFlag demAge /// + valid_retired using "$dir_data/${country}-eusilc_validation_sample.dta", /// + clear + +* Select sample +keep if inrange(demAge,18,75) + +collapse (mean) valid_employed valid_student valid_inactive valid_retired /// + [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_employed sim_student sim_inactive sim_retired demMaleFlag /// + demAge using "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if inrange(demAge,18,75) + +collapse (mean) sim_employed sim_student sim_inactive sim_retired, /// + by(run year) + +collapse (mean) sim_employed sim_student sim_inactive sim_retired /// + (sd) sim_employed_sd = sim_employed /// + sim_student_sd = sim_student /// + sim_inactive_sd = sim_inactive /// + sim_retired_sd = sim_retired /// + , by(year) + +foreach varname in sim_employed sim_student sim_inactive sim_retired { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +make_activity_plot, /// + subtitle("Ages 16-75") /// + saving("validation_${country}_activity_status_ts_16_75_both") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired.""') + + +******************************************************************************** +* 1.1.6.1 : Labour supply age group (16-75), by gender +******************************************************************************** + +* Prepare validation data +use year dwt valid_employed valid_student valid_inactive demMaleFlag demAge /// + valid_retired using "$dir_data/${country}-eusilc_validation_sample.dta", /// + clear + +* Select sample +keep if inrange(demAge,18,75) + +collapse (mean) valid_employed valid_student valid_inactive valid_retired /// + [aw = dwt], by(year demMaleFlag) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_employed sim_student sim_inactive sim_retired demMaleFlag /// + demAge using "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if inrange(demAge,18,75) + +collapse (mean) sim_employed sim_student sim_inactive sim_retired, /// + by(run year demMaleFlag) + +collapse (mean) sim_employed sim_student sim_inactive sim_retired /// + (sd) sim_employed_sd = sim_employed /// + sim_student_sd = sim_student /// + sim_inactive_sd = sim_inactive /// + sim_retired_sd = sim_retired /// + , by(year demMaleFlag) + +foreach varname in sim_employed sim_student sim_inactive sim_retired { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year demMaleFlag using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figures + +* Male +preserve + +keep if demMaleFlag == 1 + +make_activity_plot, /// + subtitle("Ages 16-75, males") /// + saving("validation_${country}_activity_status_ts_16_75_male") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired.""') + +restore + +* Female +keep if demMaleFlag == 0 + +* Plot figure +make_activity_plot, /// + subtitle("Ages 16-75, females") /// + saving("validation_${country}_activity_status_ts_16_75_female") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired.""') + +graph drop _all + + +******************************************************************************** +* 1.2 : Mean values over time, share employed +******************************************************************************** + +******************************************************************************** +* 1.2.1 : Mean values over time, share employed, by age group, by gender +******************************************************************************** + +* Prepare validation data +use year dwt demMaleFlag ageGroup valid_employed demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +gen employed_f = (valid_employed) if demMaleFlag == 0 +gen employed_m = (valid_employed) if demMaleFlag == 1 + +drop if ageGroup == 0 | ageGroup == 8 + +collapse (mean) employed_f employed_m [aw=dwt], /// + by(ageGroup year) + +drop if missing(ageGroup) + +reshape wide employed_f employed_m, i(year) j(ageGroup) + +forvalues i = 1(1)7 { + + rename employed_f`i' employed_f_`i'_valid + rename employed_m`i' employed_m_`i'_valid + +} + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year demMaleFlag ageGroup sim_employed using /// + "$dir_data/simulation_sample.dta", clear + +gen employed_f = (sim_employed) if demMaleFlag == 0 +gen employed_m = (sim_employed) if demMaleFlag == 1 + +drop if ageGroup == 0 | ageGroup == 8 + +collapse (mean) employed_f employed_m, by(ageGroup run year) +drop if missing(ageGroup) + +reshape wide employed_f employed_m, i(year run) j(ageGroup) + +forvalues i = 1(1)7 { + + rename employed_f`i' employed_f_`i'_sim + rename employed_m`i' employed_m_`i'_sim + +} + +collapse (mean) employed* /// + (sd) sd_employed_f_1_sim=employed_f_1_sim /// + sd_employed_f_2_sim=employed_f_2_sim /// + sd_employed_f_3_sim=employed_f_3_sim /// + sd_employed_f_4_sim=employed_f_4_sim /// + sd_employed_f_5_sim=employed_f_5_sim /// + sd_employed_f_6_sim=employed_f_6_sim /// + sd_employed_f_7_sim=employed_f_7_sim /// + sd_employed_m_1_sim=employed_m_1_sim /// + sd_employed_m_2_sim=employed_m_2_sim /// + sd_employed_m_3_sim=employed_m_3_sim /// + sd_employed_m_4_sim=employed_m_4_sim /// + sd_employed_m_5_sim=employed_m_5_sim /// + sd_employed_m_6_sim=employed_m_6_sim /// + sd_employed_m_7_sim=employed_m_7_sim /// + , by(year) + + +forvalues i = 1(1)7 { + + gen employed_f_`i'_sim_high = /// + employed_f_`i'_sim + 1.96*sd_employed_f_`i'_sim + gen employed_f_`i'_sim_low = /// + employed_f_`i'_sim - 1.96*sd_employed_f_`i'_sim + gen employed_m_`i'_sim_high = /// + employed_m_`i'_sim + 1.96*sd_employed_m_`i'_sim + gen employed_m_`i'_sim_low = /// + employed_m_`i'_sim - 1.96*sd_employed_m_`i'_sim + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figures + +* Define the age labels in a local macro +local age_labels `" "16-19" "20-24" "25-29" "30-34" "35-39" "40-59" "60-79" "' + +foreach vble in "employed_f" "employed_m" { + + *Loop through the 7 age groups + forvalues i = 1/7 { + + * Extract the label for the current index i + local title : word `i' of `age_labels' + + twoway (rarea `vble'_`i'_sim_high `vble'_`i'_sim_low year, /// + sort color(green%20) /// + legend(label(1 "SimPaths") position(6) rows(1))) /// + (line `vble'_`i'_valid year, sort color(green) /// + legend(label(2 "UKHLS"))), /// + title("Age `title'") /// + name(`vble'_`i', replace) /// + ylabel(0.2(0.4)1) /// + xtitle("") /// + graphregion(color(white)) + } + + * Determine gender subtitle for the combined plot + local gsubtitle = cond("`vble'" == "employed_m", "Males", "Females") + local gsuffix = cond("`vble'" == "employed_m", "male", "female") + + * Combine plots + grc1leg `vble'_1 `vble'_2 `vble'_3 `vble'_4 `vble'_5 `vble'_6 `vble'_7, /// + title("Share Employed by Age Group") /// + subtitle("`gsubtitle'") /// + legendfrom(`vble'_1) /// + ycomm /// + graphregion(color(white)) /// + note("Notes: ", size(vsmall)) + + * 5. Export + graph export "$dir_output_files/economic_activity/validation_${country}_employed_ts_age_groups_`gsuffix'.jpg", /// + replace width(2400) height(1350) quality(100) + +} + +graph drop _all + + +******************************************************************************** +* 1.3 : Mean values over time, non-employed shares +******************************************************************************** + +******************************************************************************** +* 1.3.1 : Non-employed shares, working age (16-65) +******************************************************************************** + +* Prepare validation data +use idPers year dwt valid_employed valid_student valid_inactive /// + valid_retired demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if inrange(demAge,16,65) + +collapse (mean) valid_student valid_inactive valid_retired /// + [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_employed sim_student sim_inactive sim_retired demAge /// + using "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if inrange(demAge,16,65) + +collapse (mean) sim_student sim_inactive sim_retired, /// + by(run year) + +collapse (mean) sim_student sim_inactive sim_retired /// + (sd) sim_student_sd = sim_student /// + sim_inactive_sd = sim_inactive /// + sim_retired_sd = sim_retired /// + , by(year) + +foreach varname in sim_student sim_inactive sim_retired { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + + +* Plot figure +make_activity_ne_plot, /// + subtitle("Ages 16-65") /// + saving("validation_${country}_activity_status_ts_not_employed_16_65_both") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. Demonimator is the full population.""') + + +******************************************************************************** +* 1.3.1.1 : Non-employed shares, Working age (16-65), by gender +******************************************************************************** + +* Prepare validation data +use idPers year dwt valid_employed valid_student valid_inactive /// + valid_retired demAge demMaleFlag using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if inrange(demAge,16,65) + +collapse (mean) valid_student valid_inactive valid_retired /// + [aw = dwt], by(year demMaleFlag) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_employed sim_student sim_inactive sim_retired demAge /// + demMaleFlag using "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if inrange(demAge,16,65) + +collapse (mean) sim_student sim_inactive sim_retired, /// + by(run year demMaleFlag) + +collapse (mean) sim_student sim_inactive sim_retired /// + (sd) sim_student_sd = sim_student /// + sim_inactive_sd = sim_inactive /// + sim_retired_sd = sim_retired /// + , by(year demMaleFlag) + +foreach varname in sim_student sim_inactive sim_retired { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year demMaleFlag using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figures + +* Males +preserve + +keep if demMaleFlag == 1 + +make_activity_ne_plot, /// + subtitle("Ages 16-65, males") /// + saving("validation_${country}_activity_status_ts_not_employed_16_65_male") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. Demonimator is the full population.""') + +restore + +* Females +keep if demMaleFlag == 0 + +* Plot figure +make_activity_ne_plot, /// + subtitle("Ages 16-65, females") /// + saving("validation_${country}_activity_status_ts_not_employed_16_65_female") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. Demonimator is the full population.""') + +graph drop _all + + +******************************************************************************** +* 1.3.1.2 : Non-employed shares, working age (16-65), by partnership status +******************************************************************************** + +* Prepare validation data +use year dwt valid_employed valid_student valid_inactive valid_retired /// + demPartnerStatus demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if inrange(demAge,18,65) + +collapse (mean) valid_student valid_inactive valid_retired /// + [aw = dwt], by(year demPartnerStatus) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_employed sim_student sim_inactive sim_retired /// + demPartnerStatus demMaleFlag demAge using /// + "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if inrange(demAge,18,65) + +* Compute mean and sd +collapse (mean) sim_student sim_inactive sim_retired, /// + by(run year demPartnerStatus) + +collapse (mean) sim_student sim_inactive sim_retired /// + (sd) sim_student_sd = sim_student /// + sim_inactive_sd = sim_inactive /// + sim_retired_sd = sim_retired /// + , by(year demPartnerStatus) + +* Approx 95% confidence interval +foreach varname in sim_student sim_inactive sim_retired { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year demPartnerStatus using "$dir_data/temp_valid_stats.dta", /// + keep(3) nogen + + +* Plot figure + +* Partnered +preserve + +keep if demPartnerStatus == 1 + +make_activity_ne_plot, /// + subtitle("Ages 18-65, partnered") /// + saving("validation_${country}_activity_status_ts_not_employed_18_65_partnered") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. Demonimator is the full population.""') + +restore + +* Single +keep if demPartnerStatus == 2 + +make_activity_ne_plot, /// + subtitle("Ages 18-65, singles") /// + saving("validation_${country}_activity_status_ts_not_employed_18_65_single") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. Demonimator is the full population.""') + +graph drop _all + + +******************************************************************************** +* 1.3.1.3 : Non-employed shares, working age (18-65), by partnership status, +* by gender +******************************************************************************** + +* Prepare validation data +use year dwt valid_employed valid_student valid_inactive valid_retired /// + demPartnerStatus demMaleFlag demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if inrange(demAge,18,65) + +collapse (mean) valid_student valid_inactive valid_retired /// + [aw = dwt], by(year demPartnerStatus demMaleFlag) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_employed sim_student sim_inactive sim_retired /// + demPartnerStatus demMaleFlag demAge using /// + "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if inrange(demAge,18,65) + +* Compute mean and sd +collapse (mean) sim_student sim_inactive sim_retired, /// + by(run year demPartnerStatus demMaleFlag) + +collapse (mean) sim_student sim_inactive sim_retired /// + (sd) sim_student_sd = sim_student /// + sim_inactive_sd = sim_inactive /// + sim_retired_sd = sim_retired /// + , by(year demPartnerStatus demMaleFlag) + +* Approx 95% confidence interval +foreach varname in sim_student sim_inactive sim_retired { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year demPartnerStatus demMaleFlag using /// + "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figures + +foreach g in 1 0 { + * Define gender labels + local gname = cond(`g' == 1, "male", "female") + local gtitle = cond(`g' == 1, "males", "females") + + foreach p in 1 2 { + * Define partnership labels + local pname = cond(`p' == 1, "partnered", "single") + + preserve + * Filter data + keep if demMaleFlag == `g' & demPartnerStatus == `p' + + * Generate the plot + make_activity_ne_plot, /// + subtitle("Ages 18-65, `pname' `gtitle'") /// + saving("validation_${country}_activity_status_ts_not_employed_18_65_`gname'_`pname'") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. Demonimator is the full population.""') + restore + + } +} + +graph drop _all + + +******************************************************************************** +* 1.3.2 : Non-employed shares, Female working age (16-60) +******************************************************************************** + +* Prepare validation data +use year dwt valid_employed valid_student valid_inactive demMaleFlag demAge /// + valid_retired using "$dir_data/${country}-eusilc_validation_sample.dta", /// + clear + +* Select sample +keep if inrange(demAge,16,60) + +drop if demMaleFlag == 1 +drop valid_employed demMaleFlag + +collapse (mean) valid_student valid_inactive valid_retired /// + [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_employed sim_student sim_inactive sim_retired demMaleFlag /// + demAge using "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if inrange(demAge,16,60) + +drop if demMaleFlag == 1 +drop sim_employed demMaleFlag + +collapse (mean) sim_student sim_inactive sim_retired, /// + by(run year) + +collapse (mean) sim_student sim_inactive sim_retired /// + (sd) sim_student_sd = sim_student /// + sim_inactive_sd = sim_inactive /// + sim_retired_sd = sim_retired /// + , by(year) + +foreach varname in sim_student sim_inactive sim_retired { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + + +* Plot figure +make_activity_ne_plot, /// + subtitle("Ages 16-60, females") /// + saving("validation_${country}_activity_status_ts_not_employed_16_60_female") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. Demonimator is the full population.""') + + +******************************************************************************** +* 1.3.3 : Non-employed shares, all ages +******************************************************************************** + +* Prepare validation data +use year dwt valid_employed valid_student valid_inactive demMaleFlag /// + valid_retired using "$dir_data/${country}-eusilc_validation_sample.dta", clear + +drop valid_employed + +collapse (mean) valid_student valid_inactive valid_retired /// + [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_employed sim_student sim_inactive sim_retired /// + demMaleFlag using "$dir_data/simulation_sample.dta", clear + +drop sim_employed + +collapse (mean) sim_student sim_inactive sim_retired, /// + by(run year) + +collapse (mean) sim_student sim_inactive sim_retired /// + (sd) sim_student_sd = sim_student /// + sim_inactive_sd = sim_inactive /// + sim_retired_sd = sim_retired /// + , by(year) + +foreach varname in sim_student sim_inactive sim_retired { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +make_activity_ne_plot, /// + subtitle("All ages") /// + saving("validation_${country}_activity_status_ts_not_employed_all_both") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. Demonimator is the full population.""') + + +******************************************************************************** +* 1.3.3.1 : Non-employed shares, all ages, by gender +******************************************************************************** + +* Prepare validation data +use year dwt valid_employed valid_student valid_inactive demMaleFlag /// + valid_retired using "$dir_data/${country}-eusilc_validation_sample.dta", clear + +drop valid_employed + +collapse (mean) valid_student valid_inactive valid_retired /// + [aw = dwt], by(year demMaleFlag) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_employed sim_student sim_inactive sim_retired /// + demMaleFlag using "$dir_data/simulation_sample.dta", clear + +drop sim_employed + +collapse (mean) sim_student sim_inactive sim_retired, /// + by(run year demMaleFlag) + +collapse (mean) sim_student sim_inactive sim_retired /// + (sd) sim_student_sd = sim_student /// + sim_inactive_sd = sim_inactive /// + sim_retired_sd = sim_retired /// + , by(year demMaleFlag) + +foreach varname in sim_student sim_inactive sim_retired { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year demMaleFlag using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figures + +* Males +preserve + +keep if demMaleFlag == 1 + +* Plot figure +make_activity_ne_plot, /// + subtitle("All ages, males") /// + saving("validation_${country}_activity_status_ts_not_employed_all_male") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. Demonimator is the full population.""') + +restore + +* Females +keep if demMaleFlag == 0 + +* Plot figure +make_activity_ne_plot, /// + subtitle("All ages, females") /// + saving("validation_${country}_activity_status_ts_not_employed_all_female") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. Demonimator is the full population.""') + +graph drop _all + + +******************************************************************************** +* 1.3.4 : Non-employed shares, adult population 18+ +******************************************************************************** + +* Prepare validation data +use year dwt valid_employed valid_student valid_inactive demMaleFlag demAge /// + valid_retired using "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +drop if demAge < 18 + +collapse (mean) valid_student valid_inactive valid_retired /// + [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_employed sim_student sim_inactive sim_retired demMaleFlag /// + demAge using "$dir_data/simulation_sample.dta", clear + +* Select sample +drop if demAge < 18 + +collapse (mean) sim_student sim_inactive sim_retired, /// + by(run year) + +collapse (mean) sim_student sim_inactive sim_retired /// + (sd) sim_student_sd = sim_student /// + sim_inactive_sd = sim_inactive /// + sim_retired_sd = sim_retired /// + , by(year) + +foreach varname in sim_student sim_inactive sim_retired { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +make_activity_ne_plot, /// + subtitle("Ages 18+") /// + saving("validation_${country}_activity_status_ts_not_employed_18plus_both") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. Demonimator is the full population.""') + + +******************************************************************************** +* 1.3.4.1 : Non-employed shares, adult population 18+, by gender +******************************************************************************** + +* Prepare validation data +use year dwt valid_employed valid_student valid_inactive demMaleFlag demAge /// + valid_retired using "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +drop if demAge < 18 + +collapse (mean) valid_student valid_inactive valid_retired /// + [aw = dwt], by(year demMaleFlag) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_employed sim_student sim_inactive sim_retired demMaleFlag /// + demAge using "$dir_data/simulation_sample.dta", clear + +* Select sample +drop if demAge < 18 + +collapse (mean) sim_student sim_inactive sim_retired, /// + by(run year demMaleFlag) + +collapse (mean) sim_student sim_inactive sim_retired /// + (sd) sim_student_sd = sim_student /// + sim_inactive_sd = sim_inactive /// + sim_retired_sd = sim_retired /// + , by(year demMaleFlag) + +foreach varname in sim_student sim_inactive sim_retired { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year demMaleFlag using "$dir_data/temp_valid_stats.dta", keep(3) nogen + + +* Plot figure + +* Males +preserve + +keep if demMaleFlag == 1 + +make_activity_ne_plot, /// + subtitle("Ages 18+, males") /// + saving("validation_${country}_activity_status_ts_not_employed_18plus_male") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. Demonimator is the full population.""') + +restore + +* Females +keep if demMaleFlag == 0 + +make_activity_ne_plot, /// + subtitle("Ages 18+, females") /// + saving("validation_${country}_activity_status_ts_not_employed_18plus_female") /// + note(`""Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. Demonimator is the full population.""') + +graph drop _all + + +******************************************************************************** +* 1.4 Mean values over time, share students +******************************************************************************** + +******************************************************************************** +* 1.4.1 Share of students, by age group +******************************************************************************** + +* Prepare validation data +use year dwt demMaleFlag ageGroup valid_student demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +gen student = valid_student + +* Select sample +drop if ageGroup == 0 | ageGroup == 8 + +* Compute means +collapse (mean) student [aw=dwt], by(ageGroup year) + +drop if missing(ageGroup) + +* Restructure data +reshape wide student , i(year) j(ageGroup) + +forvalues i = 1(1)7 { + + rename student`i' student_`i'_valid + +} + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year demMaleFlag ageGroup sim_student using /// + "$dir_data/simulation_sample.dta", clear + +gen student = sim_student + +* Compute means +collapse (mean) student, by(ageGroup run year) + +drop if missing(ageGroup) + +* Restructure data +reshape wide student, i(year run) j(ageGroup) + +forvalues i=1(1)7{ + + rename student`i' student_`i'_sim + +} + +collapse (mean) student* /// + (sd) sd_student_1_sim =student_1_sim /// + sd_student_2_sim = student_2_sim /// + sd_student_3_sim = student_3_sim /// + sd_student_4_sim = student_4_sim /// + sd_student_5_sim = student_5_sim /// + sd_student_6_sim = student_6_sim /// + sd_student_7_sim = student_7_sim /// + , by(year) + + +forvalues i = 1(1)7 { + + gen student_`i'_sim_high = student_`i'_sim + 1.96*sd_student_`i'_sim + gen student_`i'_sim_low = student_`i'_sim - 1.96*sd_student_`i'_sim + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figures +* Define the specific age titles in a local macro +local age_titles `" "16-19" "20-24" "25-29" "30-34" "35-39" "40-59" "' + +* Loop through the 6 groups +forvalues i = 1/6 { + + * Extract the corresponding title from the macro + local title : word `i' of `age_titles' + + twoway (rarea student_`i'_sim_high student_`i'_sim_low year, /// + sort color(blue%20) /// + legend(label(1 "SimPaths") position(6) rows(1))) /// + (line student_`i'_valid year, sort color(blue) /// + legend(label(2 "UKHLS"))), /// + title("Age `title'") /// + name(student_`i', replace) /// + ylabel(0(0.4)0.8) /// // Note: Standard Stata syntax is 0(step)max + xtitle("") /// + graphregion(color(white)) +} + +* 3. Combine and Save +grc1leg student_1 student_2 student_3 student_4 student_5 student_6 , /// + title("Share of Students by Age Group") /// + legendfrom(student_1) /// + graphregion(color(white)) /// + note("Notes: ", size(vsmall)) + +graph export /// +"$dir_output_files/economic_activity/validation_${country}_students_ts_age_groups_both.jpg", /// + replace width(2400) height(1350) quality(100) + +graph drop _all + + +******************************************************************************** +* 1.5 Mean values over time - Partners combined status +******************************************************************************** + +* LF Non-employed partners with LF Non-employed + +* Prepare validation data +use year dwt valid_employed valid_student valid_inactive valid_retired demAge /// + demPartnerStatus idPers idPartner idBu idHh /// + using "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Only keep those with a partner +keep if idPartner != -9 + +sort idPartner year + +* Address multiple partners +gen to_drop = 1 if idPartner == idPartner[_n-1] & year == year[_n-1] +replace to_drop = 1 if to_drop[_n+1] == 1 & idPartner == idPartner[_n+1] + +* Collect partner employement information +preserve + +drop idPartner demAge +rename idPers idPartner +rename valid_* valid_ptnr_* +rename to_drop to_drop_ptnr + +save "$dir_data/temp_valid_partner.dta", replace + +restore + +* Address multiple partners +drop if to_drop == 1 + +* Merge in partner info +merge 1:1 year idPartner using "$dir_data/temp_valid_partner.dta" + +drop if to_drop_ptnr == 1 + +* Only keep those in which partner's info is available +keep if _m == 3 + +* Select sample +keep if valid_inactive == 1 + +keep if inrange(demAge,18,65) + +collapse (mean) valid_ptnr_inactive [aw=dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulation data +use year sim_employed sim_student sim_inactive sim_retired demAge run /// + idPers idPartner idBu /// + using "$dir_data/simulation_sample.dta", clear + +* Only keep those with a partner +keep if idPartner != . + +* Collect partner employement information +preserve + +drop idPartner demAge +rename idPers idPartner +rename sim_* sim_ptnr_* + +save "$dir_data/temp_sim_partner.dta", replace + +restore + +* Merge in partner info +merge 1:1 year idPartner run using "$dir_data/temp_sim_partner.dta" +drop _m + +* Compute share of those who are non-employed and in a partnership whose partner +* is also non-emplyed compared to working + +* Select sample +keep if sim_inactive == 1 + +keep if inrange(demAge,18,65) + + +* Compute mean and sd +collapse (mean) sim_ptnr_inactive, by(run year) + +collapse (mean) sim_ptnr_inactive /// + (sd) sim_ptnr_inactive_sd = sim_ptnr_inactive /// + , by(year) + +* Compute 95% confidence interval +foreach varname in sim_ptnr_inactive { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +* Combine datasets +merge 1:1 year using "$dir_data/temp_valid_stats.dta" +keep if _m == 3 +drop _m + +* Plot +twoway /// +(rarea sim_ptnr_inactive_high sim_ptnr_inactive_low year, sort /// + color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_ptnr_inactive year, sort color(green) /// + legend(label(2 " UKHLS"))), /// + title("Economic Activity Status") /// + subtitle("Share of LF non-employed partnered & partner LF non-employed") /// + xtitle("Year", size(small)) /// + ytitle("Share", size(small)) /// + graphregion(color(white)) /// + xlabel(, labsize(small)) /// + ylabel(, labsize(small)) /// + legend(size(vsmall)) /// + note("Notes: Ages 18-65 included in sample. Non-employed includes the unemployed and inactive (homemakers, incapacity, carers," "discouraged workers etc.) minus students and retired. ", /// + size(vsmall)) + +graph export /// +"$dir_output_files/economic_activity/validation_${country}_activity_status_ts_partnerhip_shares_non_non_18_65.jpg", /// + replace width(2400) height(1350) quality(100) + + +* LF Non-employed partners with not LF +* Prepare validation data +use year dwt valid_employed valid_student valid_inactive valid_retired /// + demAge demPartnerStatus idPers idPartner idBu idHh using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Only keep those with a partner +keep if idPartner != -9 + +sort idPartner year + +* Address multiple partners +gen to_drop = 1 if idPartner == idPartner[_n-1] & year == year[_n-1] +replace to_drop = 1 if to_drop[_n+1] == 1 & idPartner == idPartner[_n+1] + +* Collect partner employement information +preserve + +drop idPartner demAge +rename idPers idPartner +rename valid_* valid_ptnr_* +rename to_drop to_drop_ptnr + +save "$dir_data/temp_valid_partner.dta", replace + +restore + +* Address multiple partners +drop if to_drop == 1 + +* Merge in partner info +merge 1:1 year idPartner using "$dir_data/temp_valid_partner.dta" + +drop if to_drop_ptnr == 1 + +* Only keep those in which partner's info is available +keep if _m == 3 + +* Select sample +keep if valid_inactive == 1 + +keep if inrange(demAge,18,65) + +gen valid_partner_nlf = 0 +replace valid_partner_nlf = 1 if valid_ptnr_student == 1 | /// + valid_ptnr_retired ==1 + +collapse (mean) valid_partner_nlf [aw=dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulation data +use year sim_employed sim_student sim_inactive sim_retired demAge run /// + idPers idPartner idBu /// + using "$dir_data/simulation_sample.dta", clear + +* Only keep those with a partner +keep if idPartner != . + +* Collect partner employement information +preserve + +drop idPartner demAge +rename idPers idPartner +rename sim_* sim_ptnr_* + +save "$dir_data/temp_sim_partner.dta", replace + +restore + +* Merge in partner info +merge 1:1 year idPartner run using "$dir_data/temp_sim_partner.dta" +drop _m + +* Compute share of those who are non-employed and in a partnership whose partner +* is also non-emplyed compared to working + +* Select sample +keep if sim_inactive == 1 + +keep if inrange(demAge,18,65) + +gen sim_partner_nlf = 0 +replace sim_partner_nlf = 1 if sim_ptnr_student == 1 | sim_ptnr_retired == 1 + + +* Compute mean and sd +collapse (mean) sim_partner_nlf, by(run year) + +collapse (mean) sim_partner_nlf /// + (sd) sim_partner_nlf_sd = sim_partner_nlf /// + , by(year) + +* Compute 95% confidence interval +foreach varname in sim_partner_nlf { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +* Combine datasets +merge 1:1 year using "$dir_data/temp_valid_stats.dta" +keep if _m == 3 +drop _m + +* Plot +twoway /// +(rarea sim_partner_nlf_high sim_partner_nlf_low year, sort /// + color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_partner_nlf year, sort color(green) /// + legend(label(2 " UKHLS"))), /// + title("Economic Activity Status") /// + subtitle("Share of LF non-employed partnered & partner not LF") /// + xtitle("Year", size(small)) /// + ytitle("Share", size(small)) /// + graphregion(color(white)) /// + xlabel(, labsize(small)) /// + ylabel(, labsize(small)) /// + legend(size(vsmall)) /// + note("Notes: Ages 18-65 included in sample. Not LF includes student and retired here.", /// + size(vsmall)) + +graph export /// + "$dir_output_files/economic_activity/validation_${country}_activity_status_ts_partnerhip_shares_non_notlf_18_65.jpg", /// + replace width(2400) height(1350) quality(100) + + +* Employed partnered with employed + +* Prepare validation data +use year dwt valid_employed valid_student valid_inactive valid_retired /// + demAge demPartnerStatus idPers idPartner idBu idHh /// + using "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Only keep those with a partner +keep if idPartner != -9 + +sort idPartner year + +* Address multiple partners +gen to_drop = 1 if idPartner == idPartner[_n-1] & year == year[_n-1] +replace to_drop = 1 if to_drop[_n+1] == 1 & idPartner == idPartner[_n+1] + +* Collect partner employement information +preserve + +drop idPartner demAge +rename idPers idPartner +rename valid_* valid_ptnr_* +rename to_drop to_drop_ptnr + +save "$dir_data/temp_valid_partner.dta", replace + +restore + +* Address multiple partners +drop if to_drop == 1 + +* Merge in partner info +merge 1:1 year idPartner using "$dir_data/temp_valid_partner.dta" + +drop if to_drop_ptnr == 1 + +* Only keep those in which partner's info is available +keep if _m == 3 + +* Select sample +keep if valid_employed == 1 + +keep if inrange(demAge,18,65) + +collapse (mean) valid_ptnr_employed [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulation data +use year sim_employed sim_student sim_inactive sim_retired demAge run /// + idPers idPartner idBu /// + using "$dir_data/simulation_sample.dta", clear + +* Only keep those with a partner +keep if idPartner != . + +* Collect partner employement information +preserve + +drop idPartner demAge +rename idPers idPartner +rename sim_* sim_ptnr_* + +save "$dir_data/temp_sim_partner.dta", replace + +restore + +* Merge in partner info +merge 1:1 year idPartner run using "$dir_data/temp_sim_partner.dta" +drop _m + +* Compute share of those who are non-employed and in a partnership whose partner +* is also non-emplyed compared to working + +* Select sample +keep if sim_employed == 1 + +keep if inrange(demAge,18,65) + +* Compute mean and sd +collapse (mean) sim_ptnr_employed, by(run year) + +collapse (mean) sim_ptnr_employed /// + (sd) sim_ptnr_employed_sd = sim_ptnr_employed /// + , by(year) + +* Compute 95% confidence interval +foreach varname in sim_ptnr_employed { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + + +merge 1:1 year using "$dir_data/temp_valid_stats.dta" +keep if _m == 3 +drop _m + + +twoway /// +(rarea sim_ptnr_employed_high sim_ptnr_employed_low year, sort /// + color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_ptnr_employed year, sort color(green) /// + legend(label(2 " UKHLS"))), /// + title("Economic Activity Status") /// + subtitle("Share of employed partnered whose partner is also employed") /// + xtitle("Year", size(small)) /// + ytitle("Share", size(small)) /// + graphregion(color(white)) /// + xlabel(, labsize(small)) /// + ylabel(, labsize(small)) /// + legend(size(vsmall)) /// + note("Notes: Ages 18-65. ", /// + size(vsmall)) + +graph export /// + "$dir_output_files/economic_activity/validation_${country}_activity_status_ts_partnerhip_shares_emp_emp_18_65.jpg", /// + replace width(2400) height(1350) quality(100) + + + +* Employed share patterned with LF non-employed + +* Prepare validation data +use year dwt valid_employed valid_student valid_inactive valid_retired demAge /// + demPartnerStatus idPers idPartner idBu idHh /// + using "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Only keep those with a partner +keep if idPartner != -9 + +sort idPartner year + +* Address multiple partners +gen to_drop = 1 if idPartner == idPartner[_n-1] & year == year[_n-1] +replace to_drop = 1 if to_drop[_n+1] == 1 & idPartner == idPartner[_n+1] + +* Collect partner employement information +preserve + +drop idPartner demAge +rename idPers idPartner +rename valid_* valid_ptnr_* +rename to_drop to_drop_ptnr + +save "$dir_data/temp_valid_partner.dta", replace + +restore + +* Address multiple partners +drop if to_drop == 1 + +* Merge in partner info +merge 1:1 year idPartner using "$dir_data/temp_valid_partner.dta" + +drop if to_drop_ptnr == 1 + +* Only keep those in which partner's info is available +keep if _m == 3 + +* Select sample +keep if valid_employed == 1 + +drop if demAge > 65 +drop if demAge < 18 + +collapse (mean) valid_ptnr_inactive [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulation data +use year sim_employed sim_student sim_inactive sim_retired demAge run /// + idPers idPartner idBu /// + using "$dir_data/simulation_sample.dta", clear + +* Only keep those with a partner +keep if idPartner != . + +* Collect partner employement information +preserve + +drop idPartner demAge +rename idPers idPartner +rename sim_* sim_ptnr_* + +save "$dir_data/temp_sim_partner.dta", replace + +restore + +* Merge in partner info +merge 1:1 year idPartner run using "$dir_data/temp_sim_partner.dta" +drop _m + +* Compute share of those who are non-employed and in a partnership whose partner +* is also non-emplyed compared to working + +* Select sample +keep if sim_employed == 1 + +drop if demAge > 65 +drop if demAge < 18 + +* Compute mean and sd +collapse (mean) sim_ptnr_inactive, by(run year) + +collapse (mean) sim_ptnr_inactive /// + (sd) sim_ptnr_inactive_sd = sim_ptnr_inactive /// + , by(year) + +* Compute 95% confidence interval +foreach varname in sim_ptnr_inactive { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + + +merge 1:1 year using "$dir_data/temp_valid_stats.dta" +keep if _m == 3 +drop _m + + +twoway /// +(rarea sim_ptnr_inactive_high sim_ptnr_inactive_low year, sort /// + color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_ptnr_inactive year, sort color(green) /// + legend(label(2 " UKHLS"))), /// + title("Economic Activity Status") /// + subtitle("Share of employed partnered & partner is non-employed") /// + xtitle("Year", size(small)) /// + ytitle("Share", size(small)) /// + graphregion(color(white)) /// + xlabel(, labsize(small)) /// + ylabel(, labsize(small)) /// + legend(size(vsmall)) /// + note("Notes: Ages 18-65.", /// + size(vsmall)) + + +graph export /// + "$dir_output_files/economic_activity/validation_${country}_activity_status_ts_partnerhip_shares_emp_non_18_65.jpg", /// + replace width(2400) height(1350) quality(100) + + +* Employed share patterned not not lf + +* Prepare validation data +use year dwt valid_employed valid_student valid_inactive valid_retired /// + demAge demPartnerStatus idPers idPartner idBu idHh /// + using "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Only keep those with a partner +keep if idPartner != -9 + +sort idPartner year + +* Address multiple partners +gen to_drop = 1 if idPartner == idPartner[_n-1] & year == year[_n-1] +replace to_drop = 1 if to_drop[_n+1] == 1 & idPartner == idPartner[_n+1] + +* Collect partner employement information +preserve + +drop idPartner demAge +rename idPers idPartner +rename valid_* valid_ptnr_* +rename to_drop to_drop_ptnr + +save "$dir_data/temp_valid_partner.dta", replace + +restore + +* Address multiple partners +drop if to_drop == 1 + +* Merge in partner info +merge 1:1 year idPartner using "$dir_data/temp_valid_partner.dta" + +drop if to_drop_ptnr == 1 + +* Only keep those in which partner's info is available +keep if _m == 3 + +* Select sample +keep if valid_employed == 1 + +drop if demAge > 65 +drop if demAge < 18 + +gen valid_ptnr_out = 0 +replace valid_ptnr_out = valid_ptnr_student + valid_ptnr_retired + +collapse (mean) valid_ptnr_out [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulation data +use year sim_employed sim_student sim_inactive sim_retired demAge run /// + idPers idPartner idBu /// + using "$dir_data/simulation_sample.dta", clear + +* Only keep those with a partner +keep if idPartner != . + +* Collect partner employement information +preserve + +drop idPartner demAge +rename idPers idPartner +rename sim_* sim_ptnr_* + +save "$dir_data/temp_sim_partner.dta", replace + +restore + +* Merge in partner info +merge 1:1 year idPartner run using "$dir_data/temp_sim_partner.dta" +drop _m + +* Compute share of those who are non-employed and in a partnership whose partner +* is also non-emplyed compared to working + +* Select sample +keep if sim_employed == 1 + +drop if demAge > 65 +drop if demAge < 18 + + +gen sim_ptnr_out = 0 +replace sim_ptnr_out = sim_ptnr_student + sim_ptnr_retired + + +* Compute mean and sd +collapse (mean) sim_ptnr_out, by(run year) + +collapse (mean) sim_ptnr_out /// + (sd) sim_ptnr_out_sd = sim_ptnr_out /// + , by(year) + +* Compute 95% confidence interval +foreach varname in sim_ptnr_out { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta" +keep if _m == 3 +drop _m + +twoway /// +(rarea sim_ptnr_out_high sim_ptnr_out_low year, sort /// + color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_ptnr_out year, sort color(green) /// + legend(label(2 " UKHLS"))), /// + title("Economic Activity Status") /// + subtitle("Share of employed partnered & partner is not LF") /// + xtitle("Year", size(small)) /// + ytitle("Share", size(small)) /// + graphregion(color(white)) /// + xlabel(, labsize(small)) /// + ylabel(, labsize(small)) /// + legend(size(vsmall)) /// + note("Notes: Ages 18-65. ", /// + size(vsmall)) + +graph export /// +"$dir_output_files/economic_activity/validation_${country}_activity_status_ts_partnerhip_shares_emp_notlf_18_65.jpg", /// + replace width(2400) height(1350) quality(100) + + +graph drop _all diff --git a/validation/02_simulation_validation/do_files/04_02_plot_education_level.do b/validation/02_simulation_validation/do_files/04_02_plot_education_level.do new file mode 100644 index 0000000..4549f20 --- /dev/null +++ b/validation/02_simulation_validation/do_files/04_02_plot_education_level.do @@ -0,0 +1,721 @@ +******************************************************************************** +* PROJECT: SimPaths EU +* SECTION: Validation +* OBJECT: Education +* AUTHORS: Ashley Burdett +* LAST UPDATE: April 2026 (AB) +* COUNTRY: PL +******************************************************************************** +* NOTES: This do file plots simulated and UKHLS education. +* Unable to look at transitions because use X-sectional +* SILC data. +******************************************************************************** + +******************************************************************************** +* 0 : Programmes +******************************************************************************** + +* Time series plot, all +cap program drop make_edu_plot + +program define make_edu_plot + syntax, subtitle(string) saving(string) note(string) + + twoway /// + (rarea sim_edu_high_high sim_edu_high_low year, sort color(green%20) /// + legend(label(1 "High education, SimPaths"))) /// + (line valid_edu_high year, sort color(green) /// + legend(label(2 "High education, UKHLS"))) /// + (rarea sim_edu_med_high sim_edu_med_low year, sort color(blue%20) /// + legend(label(3 "Medium education, SimPaths"))) /// + (line valid_edu_med year, sort color(blue) /// + legend(label(4 "Medium education, UKHLS"))) /// + (rarea sim_edu_low_high sim_edu_low_low year, sort color(red%20) /// + legend(label(5 "Low education, SimPaths"))) /// + (line valid_edu_low year, sort color(red) /// + legend(label(6 "Low education, UKHLS"))) /// + (rarea sim_edu_na_high sim_edu_na_low year, sort color(purple%20) /// + legend(label(7 "Initial education spell, SimPaths"))) /// + (line valid_edu_na year, sort color(purple) /// + legend(label(8 "Initial education spell, UKHLS"))), /// + title("Educational Attainment") /// + subtitle("`subtitle'") /// + xtitle("Year", size(small)) /// + ytitle("Share", size(small)) /// + graphregion(color(white)) /// + xlabel(, labsize(small)) /// + ylabel(, labsize(small)) /// + legend(size(small)) /// + note(`note', size(vsmall)) + + graph export "$dir_output_files/education/`saving'.jpg", replace width(2400) height(1350) quality(100) +end + +******************************************************************************** +* 1 : Mean values over time +******************************************************************************** + +******************************************************************************** +* 1.1 : Educational attainment +******************************************************************************** + +******************************************************************************** +* 1.1.1 : Educational attainment - 16-65 +******************************************************************************** + +* Prepare validation data +use year dwt valid_edu_high valid_edu_med valid_edu_low valid_edu_na /// + demAge labC4 using "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if inrange(demAge,16,65) + +* Compute annual shares +collapse (mean) valid_edu_high valid_edu_med valid_edu_low valid_edu_na /// + [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_edu_high sim_edu_med sim_edu_low sim_edu_na labC4 /// + demAge using "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if inrange(demAge,16,65) + +* Compute shares and standard deviation +collapse (mean) sim_edu_high sim_edu_med sim_edu_low sim_edu_na, by(run year) + +collapse (mean) sim_edu_high sim_edu_med sim_edu_low sim_edu_na /// + (sd) sim_edu_high_sd = sim_edu_high /// + sim_edu_med_sd = sim_edu_med /// + sim_edu_low_sd = sim_edu_low /// + sim_edu_na_sd = sim_edu_na /// + , by(year) + +* Approx 95% confidence interval +foreach varname in sim_edu_high sim_edu_med sim_edu_low sim_edu_na { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +* Combine datasets +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +make_edu_plot, /// + subtitle("Ages 16-65") /// + saving("validation_${country}_education_ts_16_65_both") /// + note(`""Notes:""') + + +******************************************************************************** +* 1.1.2 : Educational attainment - 16-65, by gender +******************************************************************************** + +* Prepare validation data +use year dwt valid_edu_high valid_edu_med valid_edu_low valid_edu_na /// + demMaleFlag labC4 demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if inrange(demAge,16,65) + +* Compute annual shares +collapse (mean) valid_edu_high valid_edu_med valid_edu_low valid_edu_na /// + [aw = dwt], by(year demMaleFlag) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_edu_high sim_edu_med sim_edu_low sim_edu_na demMaleFlag /// + labC4 demAge using "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if inrange(demAge,16,65) + +* Compute shares and sd +collapse (mean) sim_edu_high sim_edu_med sim_edu_low sim_edu_na, /// + by(run year demMaleFlag) + +collapse (mean) sim_edu_high sim_edu_med sim_edu_low sim_edu_na /// + (sd) sim_edu_high_sd = sim_edu_high /// + (sd) sim_edu_med_sd = sim_edu_med /// + (sd) sim_edu_low_sd = sim_edu_low /// + (sd) sim_edu_na_sd = sim_edu_na /// + , by(year demMaleFlag ) + +* Approx 95% confidence interval +foreach varname in sim_edu_high sim_edu_med sim_edu_low sim_edu_na { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +* Combine datasets +merge 1:1 year demMaleFlag using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Female +preserve + +keep if demMaleFlag == 0 + +* Plot figure +make_edu_plot, /// + subtitle("Ages 16-65, females") /// + saving("validation_${country}_education_ts_16_65_female") /// + note(`""Notes:""') + +restore + +* male +preserve + +keep if demMaleFlag == 1 + +* Plot figure +make_edu_plot, /// + subtitle("Ages 16-65, males") /// + saving("validation_${country}_education_ts_16_65_male") /// + note(`""Notes:""') + +restore + + +******************************************************************************** +* 1.1.3 : Educational attainment - 16-30 +******************************************************************************** + +* Prepare validation data +use year dwt valid_edu_high valid_edu_med valid_edu_low valid_edu_na /// + demAge labC4 demAge using "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +drop if demAge > 30 +drop if demAge < 16 +drop labC4 + +* Compute shares +collapse (mean) valid_edu_high valid_edu_med valid_edu_low valid_edu_na /// + [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_edu_high sim_edu_med sim_edu_low sim_edu_na demAge labC4 /// + using "$dir_data/simulation_sample.dta", clear + +* Select sample +drop if demAge > 30 +drop if demAge < 16 + +* Compute shares and sd +collapse (mean) sim_edu_high sim_edu_med sim_edu_low sim_edu_na, by(run year) + +collapse (mean) sim_edu_high sim_edu_med sim_edu_low sim_edu_na /// + (sd) sim_edu_high_sd = sim_edu_high /// + sim_edu_med_sd = sim_edu_med /// + sim_edu_low_sd = sim_edu_low /// + sim_edu_na_sd = sim_edu_na /// + , by(year) + +* Approx 95% confidence interval +foreach varname in sim_edu_high sim_edu_med sim_edu_low sim_edu_na { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +* Combine datasets +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +make_edu_plot, /// + subtitle("Ages 16-30") /// + saving("validation_${country}_education_ts_16_30_both") /// + note(`""Notes:""') + + +******************************************************************************** +* 1.1.4 : Educational attainment - 16-30, by gender +******************************************************************************** +* Prepare validation data +use year dwt valid_edu_high valid_edu_med valid_edu_low valid_edu_na demAge /// + demMaleFlag labC4 demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select smaple +drop if demAge > 30 +drop if demAge < 16 +drop labC4 + +* Compute shares +collapse (mean) valid_edu_high valid_edu_med valid_edu_low valid_edu_na /// + [aw = dwt], by(year demMaleFlag) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_edu_high sim_edu_med sim_edu_low sim_edu_na demAge /// + demMaleFlag labC4 using "$dir_data/simulation_sample.dta", clear + +* Select sample +drop if demAge > 30 +drop if demAge < 16 + +* Cmpute shares and sd +collapse (mean) sim_edu_high sim_edu_med sim_edu_low sim_edu_na, /// + by(run year demMaleFlag) + +collapse (mean) sim_edu_high sim_edu_med sim_edu_low sim_edu_na /// + (sd) sim_edu_high_sd = sim_edu_high /// + (sd) sim_edu_med_sd = sim_edu_med /// + (sd) sim_edu_low_sd = sim_edu_low /// + (sd) sim_edu_na_sd = sim_edu_na /// + , by(year demMaleFlag) + +* Approx 95% confidence interval +foreach varname in sim_edu_high sim_edu_med sim_edu_low sim_edu_na { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +* Combine datasets +merge 1:1 year demMaleFlag using "$dir_data/temp_valid_stats.dta", keep(3) nogen + + +* Female +preserve + +keep if demMaleFlag == 0 + +* Plot figure +make_edu_plot, /// + subtitle("Ages 16-30, females") /// + saving("validation_${country}_education_ts_16_30_female") /// + note(`""Notes:""') + +restore + +* male +preserve + +keep if demMaleFlag == 1 + +* Plot figure +make_edu_plot, /// + subtitle("Ages 16-30, males") /// + saving("validation_${country}_education_ts_16_30_male") /// + note(`""Notes:""') + +restore + + +******************************************************************************** +* 1.1.5 : Educational attainment - 31-40 +******************************************************************************** + +* Prepare validation data +use year dwt valid_edu_high valid_edu_med valid_edu_low valid_edu_na /// + demAge labC4 demAge using "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +drop if demAge > 40 +drop if demAge < 31 +drop labC4 + +* Compute shares +collapse (mean) valid_edu_high valid_edu_med valid_edu_low valid_edu_na /// + [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_edu_high sim_edu_med sim_edu_low sim_edu_na demAge labC4 /// + using "$dir_data/simulation_sample.dta", clear + +* Select sample +drop if demAge > 40 +drop if demAge < 31 + +* Compute shares and sd +collapse (mean) sim_edu_high sim_edu_med sim_edu_low sim_edu_na, by(run year) + +collapse (mean) sim_edu_high sim_edu_med sim_edu_low sim_edu_na /// + (sd) sim_edu_high_sd = sim_edu_high /// + sim_edu_med_sd = sim_edu_med /// + sim_edu_low_sd = sim_edu_low /// + sim_edu_na_sd = sim_edu_na /// + , by(year) + +* Approx 95% confidence interval +foreach varname in sim_edu_high sim_edu_med sim_edu_low sim_edu_na { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +* Combine datasets +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +make_edu_plot, /// + subtitle("Ages 31-40") /// + saving("validation_${country}_education_ts_31_40_both") /// + note(`""Notes:""') + + +******************************************************************************** +* 1.1.6 : Educational attainment 31-40, by gender +******************************************************************************** +* Prepare validation data +use year dwt valid_edu_high valid_edu_med valid_edu_low valid_edu_na demAge /// + demMaleFlag labC4 demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select smaple +drop if demAge > 40 +drop if demAge < 31 +drop labC4 + +* Compute shares +collapse (mean) valid_edu_high valid_edu_med valid_edu_low valid_edu_na /// + [aw = dwt], by(year demMaleFlag) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_edu_high sim_edu_med sim_edu_low sim_edu_na demAge /// + demMaleFlag labC4 using "$dir_data/simulation_sample.dta", clear + +* Select sample +drop if demAge > 40 +drop if demAge < 31 + +* Cmpute shares and sd +collapse (mean) sim_edu_high sim_edu_med sim_edu_low sim_edu_na, /// + by(run year demMaleFlag) + +collapse (mean) sim_edu_high sim_edu_med sim_edu_low sim_edu_na /// + (sd) sim_edu_high_sd = sim_edu_high /// + (sd) sim_edu_med_sd = sim_edu_med /// + (sd) sim_edu_low_sd = sim_edu_low /// + (sd) sim_edu_na_sd = sim_edu_na /// + , by(year demMaleFlag) + +* Approx 95% confidence interval +foreach varname in sim_edu_high sim_edu_med sim_edu_low sim_edu_na { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +* Combine datasets +merge 1:1 year demMaleFlag using "$dir_data/temp_valid_stats.dta", keep(3) nogen + + +* Female +preserve + +keep if demMaleFlag == 0 + +* Plot figure +make_edu_plot, /// + subtitle("Ages 31-40, females") /// + saving("validation_${country}_education_ts_31_40_female") /// + note(`""Notes:""') + +restore + +* male +preserve + +keep if demMaleFlag == 1 + +* Plot figure +make_edu_plot, /// + subtitle("Ages 31-40, males") /// + saving("validation_${country}_education_ts_31_40_male") /// + note(`""Notes:""') + +restore + + +******************************************************************************** +* 1.1.7 : Educational attainment - 41-65 +******************************************************************************** + +* Prepare validation data +use year dwt valid_edu_high valid_edu_med valid_edu_low valid_edu_na /// + demAge labC4 demAge using "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +drop if demAge > 65 +drop if demAge < 41 +drop labC4 + +* Compute shares +collapse (mean) valid_edu_high valid_edu_med valid_edu_low valid_edu_na /// + [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_edu_high sim_edu_med sim_edu_low sim_edu_na demAge labC4 /// + using "$dir_data/simulation_sample.dta", clear + +* Select sample +drop if demAge > 65 +drop if demAge < 41 + +* Compute shares and sd +collapse (mean) sim_edu_high sim_edu_med sim_edu_low sim_edu_na, by(run year) + +collapse (mean) sim_edu_high sim_edu_med sim_edu_low sim_edu_na /// + (sd) sim_edu_high_sd = sim_edu_high /// + sim_edu_med_sd = sim_edu_med /// + sim_edu_low_sd = sim_edu_low /// + sim_edu_na_sd = sim_edu_na /// + , by(year) + +* Approx 95% confidence interval +foreach varname in sim_edu_high sim_edu_med sim_edu_low sim_edu_na { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +* Combine datasets +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +make_edu_plot, /// + subtitle("Ages 41-65") /// + saving("validation_${country}_education_ts_41_65_both") /// + note(`""Notes:""') + + +******************************************************************************** +* 1.1.8 : Educational attainment 41-65, by gender +******************************************************************************** +* Prepare validation data +use year dwt valid_edu_high valid_edu_med valid_edu_low valid_edu_na demAge /// + demMaleFlag labC4 demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select smaple +drop if demAge > 65 +drop if demAge < 41 +drop labC4 + +* Compute shares +collapse (mean) valid_edu_high valid_edu_med valid_edu_low valid_edu_na /// + [aw = dwt], by(year demMaleFlag) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_edu_high sim_edu_med sim_edu_low sim_edu_na demAge /// + demMaleFlag labC4 using "$dir_data/simulation_sample.dta", clear + +* Select sample +drop if demAge > 65 +drop if demAge < 41 + +* Cmpute shares and sd +collapse (mean) sim_edu_high sim_edu_med sim_edu_low sim_edu_na, /// + by(run year demMaleFlag) + +collapse (mean) sim_edu_high sim_edu_med sim_edu_low sim_edu_na /// + (sd) sim_edu_high_sd = sim_edu_high /// + (sd) sim_edu_med_sd = sim_edu_med /// + (sd) sim_edu_low_sd = sim_edu_low /// + (sd) sim_edu_na_sd = sim_edu_na /// + , by(year demMaleFlag) + +* Approx 95% confidence interval +foreach varname in sim_edu_high sim_edu_med sim_edu_low sim_edu_na { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +* Combine datasets +merge 1:1 year demMaleFlag using "$dir_data/temp_valid_stats.dta", keep(3) nogen + + +* Female +preserve + +keep if demMaleFlag == 0 + +* Plot figure +make_edu_plot, /// + subtitle("Ages 41-65, females") /// + saving("validation_${country}_education_ts_41_65_female") /// + note(`""Notes:""') + +restore + +* Male +preserve + +keep if demMaleFlag == 1 + +* Plot figure +make_edu_plot, /// + subtitle("Ages 41-65, males") /// + saving("validation_${country}_education_ts_41_65_male") /// + note(`""Notes:""') + +restore + + +******************************************************************************** +* 1.1.9 : Educational attainment - 66-70 +******************************************************************************** + +* Prepare validation data +use year dwt valid_edu_high valid_edu_med valid_edu_low valid_edu_na /// + demAge labC4 demAge using "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +drop if demAge > 70 +drop if demAge < 66 +drop labC4 + +* Compute shares +collapse (mean) valid_edu_high valid_edu_med valid_edu_low valid_edu_na /// + [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year sim_edu_high sim_edu_med sim_edu_low sim_edu_na demAge labC4 /// + using "$dir_data/simulation_sample.dta", clear + +* Select sample +drop if demAge > 70 +drop if demAge < 66 + +* Compute shares and sd +collapse (mean) sim_edu_high sim_edu_med sim_edu_low sim_edu_na, by(run year) + +collapse (mean) sim_edu_high sim_edu_med sim_edu_low sim_edu_na /// + (sd) sim_edu_high_sd = sim_edu_high /// + sim_edu_med_sd = sim_edu_med /// + sim_edu_low_sd = sim_edu_low /// + sim_edu_na_sd = sim_edu_na /// + , by(year) + +* Approx 95% confidence interval +foreach varname in sim_edu_high sim_edu_med sim_edu_low sim_edu_na { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +* Combine datasets +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +make_edu_plot, /// + subtitle("Ages 66-70") /// + saving("validation_${country}_education_ts_66_70_both") /// + note(`""Notes:""') + + +******************************************************************************** +* 1.2 : Educational attainment when leave education +******************************************************************************** + +******************************************************************************** +* 1.2.1 : Educational attainment when leave education - 16 - 65 +******************************************************************************** + +* Prepare validation data +use year idPers dwt valid_edu_high valid_edu_med valid_edu_low labC4 /// + demAge using "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if inrange(demAge,16,65) + +* Select relevant observations +sort idPers year +gen left_edu = 1 if idPers == idPers[_n-1] & /// + labC4 != 2 & labC4[_n-1] == 2 & year == year[_n-1]+1 + +keep if left_edu == 1 + +collapse (mean) valid_edu_high valid_edu_med valid_edu_low [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year idPers sim_edu_high sim_edu_med sim_edu_low labC4 demAge /// + using "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if inrange(demAge,16,65) + +* Select relevant observations +sort idPers year +gen left_edu_sim = 1 if idPers == idPers[_n-1] & /// + labC4 != "Student" & labC4[_n-1] == "Student" & year == year[_n-1]+1 + +keep if left_edu_sim == 1 + +collapse (mean) sim_edu_high sim_edu_med sim_edu_low, by(run year) + +collapse (mean) sim_edu_high sim_edu_med sim_edu_low /// + (sd) sim_edu_high_sd = sim_edu_high /// + sim_edu_med_sd = sim_edu_med /// + sim_edu_low_sd = sim_edu_low /// + , by(year) + +foreach varname in sim_edu_high sim_edu_med sim_edu_low { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +twoway /// +(rarea sim_edu_high_high sim_edu_high_low year, sort color(green%20) /// + legend(label(1 "High education, simulated"))) /// +(line valid_edu_high year, sort color(green) /// + legend(label(2 "High education, UKHLS"))) /// +(rarea sim_edu_med_high sim_edu_med_low year, sort color(blue%20) /// + legend(label(3 "Medium education, simulated"))) /// +(line valid_edu_med year, sort color(blue) /// + legend(label(4 "Medium education, UKHLS"))) /// +(rarea sim_edu_low_high sim_edu_low_low year, sort color(red%20) /// + legend(label(5 "Low education, simulated"))) /// +(line valid_edu_low year, sort color(red) /// + legend(label(6 "Low education, UKHLS"))), /// + title("Educational Attainment When Leave Education") /// + subtitle("Ages 16-65") /// + xtitle("Year", size(small)) /// + ytitle("Share", size(small)) /// + graphregion(color(white)) /// + xlabel(, labsize(small)) /// + ylabel(, labsize(small)) /// + legend(size(small)) /// + note("Notes: ", /// + size(vsmall)) + +graph export /// +"$dir_output_files/education/validation_${country}_leave_education_ts_16_65_both.jpg", /// + replace width(2400) height(1350) quality(100) + +graph drop _all diff --git a/validation/02_simulation_validation/do_files/04_03_plot_gross_income.do b/validation/02_simulation_validation/do_files/04_03_plot_gross_income.do new file mode 100644 index 0000000..8c7aa81 --- /dev/null +++ b/validation/02_simulation_validation/do_files/04_03_plot_gross_income.do @@ -0,0 +1,991 @@ +******************************************************************************** +* PROJECT: SimPaths EU +* SECTION: Validation +* OBJECT: Gross income +* AUTHORS: Ashley Burdett +* LAST UPDATE: April 2026 +* COUNTRY: PL +******************************************************************************** +* NOTES: +******************************************************************************** + +******************************************************************************** +* 1 : Mean values over time +******************************************************************************** + +******************************************************************************** +* 1.1 : Mean values over time - Benefit unit amounts +******************************************************************************** + +* Prepare validation data +use year dwt idBu idPers demAge valid_yGrossBuLevelYear using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if demAge >= 16 + +* Keep one observation per benefit unit +bysort year idBu: gen first_person = (_n == 1) +keep if first_person == 1 + +* Trim outliers +if "$trim_outliers" == "true" { + + sum valid_yGrossBuLevelYear, d + + replace valid_yGrossBuLevelYear = . if /// + valid_yGrossBuLevelYear < r(p1) | /// + valid_yGrossBuLevelYear > r(p99) + +} + +collapse (mean) valid_yGrossBuLevelYear [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year idPers idBu demAge sim_yGrossBuLevelYear using /// + "$dir_data/simulation_sample.dta", clear + +keep if demAge >= 16 + +* Keep one observation per benefit unit +bysort run year idBu: gen first_person = (_n == 1) +keep if first_person == 1 + +* Trim outliers +if "$trim_outliers" == "true" { + + sum sim_yGrossBuLevelYear, d + + replace sim_yGrossBuLevelYear = . if sim_yGrossBuLevelYear < r(p1) | /// + sim_yGrossBuLevelYear > r(p99) + +} + +collapse (mean) sim_yGrossBuLevelYear, by(run year) + +collapse (mean) sim_yGrossBuLevelYear /// + (sd) sim_yGrossBuLevelYear_sd = sim_yGrossBuLevelYear /// + , by(year) + +foreach varname in sim_yGrossBuLevelYear { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + + +* Plot figure +twoway /// + (rarea sim_yGrossBuLevelYear_high sim_yGrossBuLevelYear_low year, /// + sort color(green%20) legend(label(1 "SimPaths"))) /// + (line valid_yGrossBuLevelYear year, sort color(green) /// + legend(label(2 "SILC"))), /// + title("Benefit Unity Gross Income") /// + subtitle("") /// + xtitle("Year", size(small)) /// + ytitle("Euro per year", size(small)) /// + ylabel(,labsize(small)) /// + xlabel(,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: Series represents average benefit unit gross income through time. Gross income is the sum of captial income, private" "pension income and employment income. One observation per benefit unit plotted. Amounts in 2015 prices. Top and" "bottom percentiles trimmed.", /// + size(vsmall)) + +graph export /// +"$dir_output_files/income/gross_income/validation_${country}_gross_income_bu_ts.jpg", /// + replace width(2400) height(1350) quality(100) + + +******************************************************************************** +* 1.2 : Mean values over time, individual level amounts +******************************************************************************** + +* Prepare validation data +use year demAge dwt valid_yGrossPersLevelYear using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if inrange(demAge,18,65) + +* Trim outliers +if "$trim_outliers" == "true" { + + sum valid_yGrossPersLevelYear, d + + replace valid_yGrossPersLevelYear = . if /// + valid_yGrossPersLevelYear < r(p1) | /// + valid_yGrossPersLevelYear > r(p99) + +} + +collapse (mean) valid_yGrossPersLevelYear [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year demAge sim_yGrossPersLevelYear using /// + "$dir_data/simulation_sample.dta", clear + +keep if inrange(demAge,18,65) + +* Trim outliers +if "$trim_outliers" == "true" { + + sum sim_yGrossPersLevelYear, d + + replace sim_yGrossPersLevelYear = . if /// + sim_yGrossPersLevelYear < r(p1) | /// + sim_yGrossPersLevelYear > r(p99) + +} + +collapse (mean) sim_yGrossPersLevelYear, by(run year) + +collapse (mean) sim_yGrossPersLevelYear /// + (sd) sim_yGrossPersLevelYear_sd = sim_yGrossPersLevelYear, /// + by(year) + +foreach varname in sim_yGrossPersLevelYear{ + + gen `varname'_hi = `varname' + 1.96*`varname'_sd + gen `varname'_lo = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +twoway /// +(rarea sim_yGrossPersLevelYear_hi sim_yGrossPersLevelYear_lo /// + year, sort color(green%20) /// + legend(label(1 "SimPaths"))) /// +(line valid_yGrossPersLevelYear year, sort color(green) /// + legend(label(2 "SILC"))), /// + title("Individual Gross Income") /// + subtitle("Ages 18-65") /// + xtitle("Year", size(small)) /// + ytitle("Euro per year", size(small)) /// + ylabel(,labsize(small)) /// + xlabel(,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: Series represents average individual gross income through time. Gross income is the sum of captial income, private pension" "income and employment income. Values in 2015 prices. Top and bottom percentiles trimmed.", /// + size(vsmall)) + +graph export /// +"$dir_output_files/income/gross_income/validation_${country}_ind_gross_income_ts_18_65_both.jpg", /// + replace width(2400) height(1350) quality(100) + + +******************************************************************************** +* 1.2.1 : Mean values over time, individual level amounts, by gender +******************************************************************************** + +* Prepare validation data +use year demAge dwt valid_yGrossPersLevelYear demMaleFlag using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if inrange(demAge,18,65) +keep if demMaleFlag == 1 + +* Trim outliers +if "$trim_outliers" == "true" { + + sum valid_yGrossPersLevelYear, d + + replace valid_yGrossPersLevelYear = . if /// + valid_yGrossPersLevelYear < r(p1) | /// + valid_yGrossPersLevelYear > r(p99) + +} + +collapse (mean) valid_yGrossPersLevelYear [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year demAge sim_yGrossPersLevelYear demMaleFlag using /// + "$dir_data/simulation_sample.dta", clear + +keep if inrange(demAge,18,65) +keep if demMaleFlag == 1 + +* Trim outliers +if "$trim_outliers" == "true" { + + sum sim_yGrossPersLevelYear, d + + replace sim_yGrossPersLevelYear = . if /// + sim_yGrossPersLevelYear < r(p1) | /// + sim_yGrossPersLevelYear > r(p99) + +} + +collapse (mean) sim_yGrossPersLevelYear, by(run year) + +collapse (mean) sim_yGrossPersLevelYear /// + (sd) sim_yGrossPersLevelYear_sd = /// + sim_yGrossPersLevelYear, by(year) + +foreach varname in sim_yGrossPersLevelYear { + + gen `varname'_hi = `varname' + 1.96*`varname'_sd + gen `varname'_lo = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +twoway /// +(rarea sim_yGrossPersLevelYear_hi sim_yGrossPersLevelYear_lo /// + year, sort color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_yGrossPersLevelYear year, sort color(green) /// + legend(label(2 "SILC"))), /// + title("Individual Gross Income") /// + subtitle("Ages 18-65, males") /// + xtitle("Year", size(small)) /// + ytitle("Euro per year", size(small)) /// + ylabel(,labsize(small)) /// + xlabel(,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: Series represents average individual gross income through time. Gross income is the sum of captial income, private pension" "income and employment income. Values in 2015 prices. Top and bottom percentiles trimmed.", /// + size(vsmall)) + +graph export /// +"$dir_output_files/income/gross_income/validation_${country}_ind_gross_income_ts_18_65_male.jpg", /// + replace width(2400) height(1350) quality(100) + + +* Female +* Prepare validation data +use year demAge dwt valid_yGrossPersLevelYear demMaleFlag using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if inrange(demAge,18,65) + +keep if demMaleFlag == 0 + +* Trim outliers +if "$trim_outliers" == "true" { + + sum valid_yGrossPersLevelYear, d + + replace valid_yGrossPersLevelYear = . if /// + valid_yGrossPersLevelYear < r(p1) | /// + valid_yGrossPersLevelYear > r(p99) + +} + +collapse (mean) valid_yGrossPersLevelYear [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year demAge sim_yGrossPersLevelYear demMaleFlag using /// + "$dir_data/simulation_sample.dta", clear + +keep if inrange(demAge,18,65) + +keep if demMaleFlag == 0 + +* Trim outliers +if "$trim_outliers" == "true" { + + sum sim_yGrossPersLevelYear, d + + replace sim_yGrossPersLevelYear= . if /// + sim_yGrossPersLevelYear< r(p1) | /// + sim_yGrossPersLevelYear> r(p99) + +} + +collapse (mean) sim_yGrossPersLevelYear, by(run year) + +collapse (mean) sim_yGrossPersLevelYear /// + (sd) sim_yGrossPersLevelYear_sd = /// + sim_yGrossPersLevelYear, by(year) + +foreach varname in sim_yGrossPersLevelYear{ + + gen `varname'_hi = `varname' + 1.96*`varname'_sd + gen `varname'_lo = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +twoway /// +(rarea sim_yGrossPersLevelYear_hi /// + sim_yGrossPersLevelYear_lo year, sort color(green%20) /// + legend(label(1 "SimPaths"))) /// +(line valid_yGrossPersLevelYear year, sort color(green) /// + legend(label(2 "SILC"))), /// + title("Individual Gross Income") /// + subtitle("Ages 18-65, females") /// + xtitle("Year", size(small)) /// + ytitle("Euro per year", size(small)) /// + ylabel(,labsize(small)) /// + xlabel(,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: Series represents average individual gross through time. Gross income is the sum of captial income, private pension" "income and employment income. Values in 2015 prices. Top and bottom percentiles trimmed.", /// + size(vsmall)) + +graph export /// +"$dir_output_files/income/gross_income/validation_${country}_ind_gross_income_ts_18_65_female.jpg", /// + replace width(2400) height(1350) quality(100) + +graph drop _all + + +/******************************************************************************* +* 2 : Histograms +*******************************************************************************/ + +/******************************************************************************* +* 2.1 : Histograms - Benefit unit gross income by year, and by category of +weekly labour supply +*******************************************************************************/ + +* Prepare validation data +use year demAge dwt valid_yGrossBuLevelYear valid_labHrsWorkEnumWeek /// + using "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if inrange(demAge,18,65) + +* Trim outliers +if "$trim_outliers" == "true" { + + sum valid_yGrossBuLevelYear, d + + replace valid_yGrossBuLevelYear = . if /// + valid_yGrossBuLevelYear < r(p1) | /// + valid_yGrossBuLevelYear > r(p99) + +} + +* Prepare info needed for dynamic y axis labels +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + twoway__histogram_gen valid_yGrossBuLevelYear if year == `year', /// + width(750) den gen(d_valid v2) + + qui sum d_valid + gen max_d_valid_`year' = r(max) + + drop d_valid v2 + + foreach ls in $ls_cat { + + twoway__histogram_gen valid_yGrossBuLevelYear if /// + year == `year' & valid_labHrsWorkEnumWeek == "`ls'", width(750) /// + den gen(d_valid v2) + + qui sum d_valid + gen max_d_valid_`year'_`ls' = r(max) + + drop d_valid v2 + + } + +} + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year demAge sim_yGrossBuLevelYear sim_labHrsWorkEnumWeek using /// + "$dir_data/simulation_sample.dta", clear + +keep if inrange(demAge,18,65) + +* Trim outliers +if "$trim_outliers" == "true" { + + sum sim_yGrossBuLevelYear, d + + replace sim_yGrossBuLevelYear = . if /// + sim_yGrossBuLevelYear < r(p1) | sim_yGrossBuLevelYear > r(p99) + +} + +keep if run == 1 + +append using "$dir_data/temp_valid_stats.dta" + +* Plot sub-figures +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +//local year = 2010 + +forval year = `min_year'/`max_year' { + + * Prepare info needed for dynamic y axis labels + twoway__histogram_gen sim_yGrossBuLevelYear if year == `year', /// + width(750) den gen(d_sim v1) + + qui sum d_sim + gen max_d_sim = r(max) + + gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim + replace max_value = max_d_sim if max_value == . + + quietly sum max_value, meanonly + if (r(N) == 0 | missing(r(max)) | r(max) <= 0) { + local max_y = 1 + local steps = 0.3333333 + } + else { + local max_y = 1.25*r(max) + local steps = `max_y'/3 + } + + + twoway (hist sim_yGrossBuLevelYear if year == `year', width(750) /// + color(green%30) legend(label(1 "SimPaths"))) /// + (hist valid_yGrossBuLevelYear if year == `year', width(750) /// + color(red%30) legend(label(2 "SILC"))) , /// + title("ALL hours") /// + name(gross_inc_`year'_all, replace) /// + xtitle("Euro", size(small)) /// + ytitle("Density", size(small)) /// + xlabel(,labsize(vsmall) angle(forty_five)) /// + ylabel(0(`steps')`max_y',labsize(vsmall)) /// + graphregion(color(white)) + + drop d_sim v1 max_d_sim max_value + + foreach ls in $ls_cat { + + * Prepare info needed for dynamic y axis labels + twoway__histogram_gen sim_yGrossBuLevelYear if /// + year == `year' & sim_labHrsWorkEnumWeek == "`ls'", width(750) /// + den gen(d_sim v1) + + qui sum d_sim + gen max_d_sim = r(max) + + gen max_value = max_d_valid_`year'_`ls' if /// + max_d_valid_`year'_`ls' > max_d_sim + replace max_value = max_d_sim if max_value == . + + quietly sum max_value, meanonly + if (r(N) == 0 | missing(r(max)) | r(max) <= 0) { + local max_y = 1 + local steps = 0.3333333 + } + else { + local max_y = 1.25*r(max) + local steps = `max_y'/3 + } + + * Plot by weekly hours work + twoway (hist sim_yGrossBuLevelYear if year == `year' & /// + sim_labHrsWorkEnumWeek == "`ls'", width(750) color(green%30) /// + legend(label(1 "SimPaths"))) /// + (hist valid_yGrossBuLevelYear if year == `year' & /// + valid_labHrsWorkEnumWeek == "`ls'", width(750) color(red%30) /// + legend(label(2 "SILC"))) , /// + title("`ls' hours") /// + name(gross_inc_`year'_`ls', replace) /// + xtitle("Euro", size(small)) /// + ytitle("Density", size(small)) /// + xlabel(,labsize(vsmall) angle(forty_five)) /// + ylabel(0(`steps')`max_y',labsize(vsmall)) /// + legend(size(small)) /// + graphregion(color(white)) + + drop d_sim v1 max_d_sim max_value + + } +} + +* Combine plots by year +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forvalues year = `min_year'/`max_year' { + + grc1leg gross_inc_`year'_all /// + gross_inc_`year'_ZERO /// + gross_inc_`year'_TWENTY /// + gross_inc_`year'_FORTY /// + gross_inc_`year'_FIFTY , /// + title("Benefit Unit Gross Income by Weekly Hours of Work") /// + subtitle("`year'") /// + legendfrom(gross_inc_`year'_ZERO) /// + rows(2) /// + graphregion(color(white)) /// + note("Notes: Amounts in Euro per year, 2015 prices. Gross income is the sum of capital income, private pension income and employment income." "Individual observations of benefit unit amounts plotted.", /// + size(vsmall)) + + graph export "$dir_output_files/income/gross_income/validation_${country}_gross_income_bu_dist_`year'_18_65.png", /// + replace width(2400) height(1350) + +} + +graph drop _all + + +/******************************************************************************* +* 2.2 : Histograms - Individual gross income by year, and by category of weekly +labour supply, by gender +*******************************************************************************/ + +* Males + +* Prepare validation data +use year demAge dwt valid_yGrossBuLevelYear valid_labHrsWorkEnumWeek /// + demMaleFlag using "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if inrange(demAge,18,65) + +keep if demMaleFlag == 1 +drop demMaleFlag + +* Trim outliers +if "$trim_outliers" == "true" { + + sum valid_yGrossBuLevelYear, d + + replace valid_yGrossBuLevelYear = . if /// + valid_yGrossBuLevelYear < r(p1) | /// + valid_yGrossBuLevelYear > r(p99) + +} + + +* Prepare info needed for dynamic y axis labels +qui sum year +local min_year = 2011 +local max_year = r(max) +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + twoway__histogram_gen valid_yGrossBuLevelYear if /// + year == `year', width(750) den gen(d_valid v2) + + qui sum d_valid + gen max_d_valid_`year' = r(max) + + drop d_valid v2 + + foreach ls in $ls_cat { + + twoway__histogram_gen valid_yGrossBuLevelYear if /// + year == `year' & valid_labHrsWorkEnumWeek == "`ls'", width(750) /// + den gen(d_valid v2) + + qui sum d_valid + gen max_d_valid_`year'_`ls' = r(max) + + drop d_valid v2 + + } +} + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year demAge sim_yGrossBuLevelYear sim_labHrsWorkEnumWeek /// + demMaleFlag using "$dir_data/simulation_sample.dta", clear + +keep if inrange(demAge,18,65) + +keep if demMaleFlag == 1 +drop demMaleFlag + +* Trim outliers +if "$trim_outliers" == "true" { + + sum sim_yGrossBuLevelYear, d + + replace sim_yGrossBuLevelYear= . if /// + sim_yGrossBuLevelYear < r(p1) | /// + sim_yGrossBuLevelYear > r(p99) + +} + +keep if run == 1 + +append using "$dir_data/temp_valid_stats.dta" + +* Plot sub-figures +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + * Prepare info needed for dynamic y axis labels + twoway__histogram_gen sim_yGrossBuLevelYear if year == `year', /// + width(750) den gen(d_sim v1) + + qui sum d_sim + gen max_d_sim = r(max) + + gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim + replace max_value = max_d_sim if max_value == . + + quietly sum max_value, meanonly + if (r(N) == 0 | missing(r(max)) | r(max) <= 0) { + local max_y = 1 + local steps = 0.3333333 + } + else { + local max_y = 1.25*r(max) + local steps = `max_y'/3 + } + + * Plot all hours + twoway (hist sim_yGrossBuLevelYear if year == `year', width(750) /// + color(green%30) legend(label(1 "SimPaths"))) /// + (hist valid_yGrossBuLevelYear if year == `year', width(750) /// + color(red%30) legend(label(2 "SILC"))) , /// + title("ALL hours") /// + name(ind_gross_inc_`year'_all, replace) /// + xtitle("Euro", size(small)) /// + ytitle("Density", size(small)) /// + xlabel(,labsize(vsmall) angle(forty_five)) /// + ylabel(0(`steps')`max_y', labsize(vsmall)) /// + graphregion(color(white)) + + drop d_sim v1 max_d_sim max_value + + foreach ls in $ls_cat { + + * Prepare info needed for dynamic y axis labels + twoway__histogram_gen sim_yGrossBuLevelYear if /// + year == `year' & sim_labHrsWorkEnumWeek == "`ls'", width(750) /// + den gen(d_sim v1) + + qui sum d_sim + gen max_d_sim = r(max) + + gen max_value = max_d_valid_`year'_`ls' if /// + max_d_valid_`year'_`ls' > max_d_sim + replace max_value = max_d_sim if max_value == . + + quietly sum max_value, meanonly + if (r(N) == 0 | missing(r(max)) | r(max) <= 0) { + local max_y = 1 + local steps = 0.3333333 + } + else { + local max_y = 1.25*r(max) + local steps = `max_y'/3 + } + + * Plot by weekly hours work + twoway (hist sim_yGrossBuLevelYear if year == `year' & /// + sim_labHrsWorkEnumWeek == "`ls'", width(750) color(green%30) /// + legend(label(1 "SimPaths"))) /// + (hist valid_yGrossBuLevelYear if year == `year' & /// + valid_labHrsWorkEnumWeek == "`ls'", width(750) color(red%30) /// + legend(label(2 "SILC"))) , /// + title("`ls' hours") /// + name(ind_gross_inc_`year'_`ls', replace) /// + xtitle("Euro", size(small)) /// + ytitle("Density", size(small)) /// + xlabel(,labsize(vsmall) angle(forty_five)) /// + ylabel(0(`steps')`max_y', labsize(vsmall)) /// + legend(size(small)) /// + graphregion(color(white)) + + drop d_sim v1 max_d_sim max_value + + } +} + +* Combine plots by year +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forvalues year = `min_year'/`max_year' { + + grc1leg ind_gross_inc_`year'_all /// + ind_gross_inc_`year'_ZERO /// + ind_gross_inc_`year'_TWENTY /// + ind_gross_inc_`year'_FORTY /// + ind_gross_inc_`year'_FIFTY , /// + title("Individual Gross Income by Weekly Hours of Work") /// + subtitle("`year', males") /// + legendfrom(ind_gross_inc_`year'_ZERO) /// + rows(2) /// + graphregion(color(white)) /// + note("Notes: Amounts in Euro per year, 2015 prices. Sample include males age 18-65. Top and bottom percentiles trimmed. Gross income is" "the sum of capital income, private pension income and employment income.", /// + size(vsmall)) + + graph export "$dir_output_files/income/gross_income/validation_${country}_ind_gross_income_dist_`year'_male.png", /// + replace width(2400) height(1350) + +} + +graph drop _all + + +* Females + +* Prepare validation data +use year demAge dwt valid_yGrossBuLevelYear valid_labHrsWorkEnumWeek /// + demMaleFlag using "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if inrange(demAge,18,65) + +keep if demMaleFlag == 0 +drop demMaleFlag + +* Trim outliers +if "$trim_outliers" == "true" { + + sum valid_yGrossBuLevelYear, d + + replace valid_yGrossBuLevelYear = . if /// + valid_yGrossBuLevelYear < r(p1) | /// + valid_yGrossBuLevelYear > r(p99) + +} + + +* Prepare info needed for dynamic y axis labels +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + twoway__histogram_gen valid_yGrossBuLevelYear if /// + year == `year' , width(750) den gen(d_valid v2) + + qui sum d_valid + gen max_d_valid_`year' = r(max) + + drop d_valid v2 + + foreach ls in $ls_cat { + + twoway__histogram_gen valid_yGrossBuLevelYear if /// + year == `year' & valid_labHrsWorkEnumWeek == "`ls'", width(750) /// + den gen(d_valid v2) + + qui sum d_valid + gen max_d_valid_`year'_`ls' = r(max) + + drop d_valid v2 + + } +} + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year demAge sim_yGrossBuLevelYear sim_labHrsWorkEnumWeek /// + demMaleFlag using "$dir_data/simulation_sample.dta", clear + +keep if inrange(demAge,18,65) + +keep if demMaleFlag == 0 +drop demMaleFlag + +* Trim outliers +if "$trim_outliers" == "true" { + + sum sim_yGrossBuLevelYear, d + + replace sim_yGrossBuLevelYear = . if sim_yGrossBuLevelYear< r(p1) | /// + sim_yGrossBuLevelYear> r(p99) + +} + +keep if run == 1 + + +append using "$dir_data/temp_valid_stats.dta" + +* Plot sub-figures +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + * Prepare info needed for dynamic y axis labels + twoway__histogram_gen sim_yGrossBuLevelYear if year == `year', /// + width(750) den gen(d_sim v1) + + qui sum d_sim + gen max_d_sim = r(max) + + gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim + replace max_value = max_d_sim if max_value == . + + sum max_value + local max_y = 1.25*r(max) + local steps = `max_y'/3 + + * Plot all hours + twoway (hist sim_yGrossBuLevelYear if year == `year', width(750) /// + color(green%30) legend(label(1 "SimPaths"))) /// + (hist valid_yGrossBuLevelYear if year == `year', width(750) /// + color(red%30) legend(label(2 "SILC"))) , /// + title("ALL hours") /// + name(ind_gross_inc_`year'_all, replace) /// + xtitle("Euro", size(small)) /// + ytitle("Density", size(small)) /// + xlabel(,labsize(vsmall) angle(forty_five)) /// + ylabel(0(`steps')`max_y', labsize(vsmall)) /// + legend(size(small)) /// + graphregion(color(white)) + + drop d_sim v1 max_d_sim max_value + + foreach ls in $ls_cat { + + * Prepare info needed for dynamic y axis labels + twoway__histogram_gen sim_yGrossBuLevelYear if /// + year == `year' & sim_labHrsWorkEnumWeek == "`ls'", /// + width(750) den gen(d_sim v1) + + qui sum d_sim + gen max_d_sim = r(max) + + gen max_value = max_d_valid_`year'_`ls' if /// + max_d_valid_`year'_`ls' > max_d_sim + replace max_value = max_d_sim if max_value == . + + sum max_value + local max_y = 1.25*r(max) + local steps = `max_y'/3 + + * Plot by weekly hours work + twoway (hist sim_yGrossBuLevelYear if year == `year' & /// + sim_labHrsWorkEnumWeek == "`ls'", width(750) /// + color(green%30) legend(label(1 "SimPaths"))) /// + (hist valid_yGrossBuLevelYear if year == `year' & /// + valid_labHrsWorkEnumWeek == "`ls'", width(750) color(red%30) /// + legend(label(2 "SILC"))) , /// + title("`ls' hours") /// + name(ind_gross_inc_`year'_`ls', replace) /// + xtitle("Euro", size(small)) /// + ytitle("Density", size(small)) /// + xlabel(,labsize(vsmall) angle(forty_five)) /// + ylabel(0(`steps')`max_y', labsize(vsmall)) /// + legend(size(small)) /// + graphregion(color(white)) + + drop d_sim v1 max_d_sim max_value + + } +} + +* Combine plots by year +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forvalues year = `min_year'/`max_year' { + + grc1leg ind_gross_inc_`year'_all /// + ind_gross_inc_`year'_ZERO /// + ind_gross_inc_`year'_TWENTY /// + ind_gross_inc_`year'_FORTY /// + ind_gross_inc_`year'_FIFTY, /// + title("Individual Gross Income by Weekly Hours of Work") /// + subtitle("`year', females") /// + legendfrom(ind_gross_inc_`year'_ZERO) /// + rows(2) /// + graphregion(color(white)) /// + note("Notes: Amounts in Euro per year, 2015 prices. Sample include females age 18-65. Top and bottom percentiles trimmed. Gross income is" "the sum of capital income, private pension income and employment income.", /// + size(vsmall)) + + graph export "$dir_output_files/income/gross_income/validation_${country}_ind_gross_income_dist_`year'_female.png", /// + replace width(2400) height(1350) + +} + +graph drop _all + + + +/* + +* Investigation into who the people are with high working hours and low gross +* income +/* +Note plot ben unit observations using individual level data. + +Components of gross income. + +Gross personal income components +• PY010G - Gross employee cash or near cash employee income +• PY050G - Gross cash benefits or losses from self-employment + (including royalties) +• PY080G - Pensions received from individual private plans (other than those + covered under ESSPROS) + +Plus gross income components at household level +• HY040G - Income from rental of a property or land +• HY080G - Regular inter-household cash transfers received +• HY090G - Interests, dividends, profit from capital investments in + unincorporated business +• HY110G - Income received by people aged under 16 +*/ + +* Explore 2018 FIFTY hours +use "$dir_data/SILC_validation_full_sample.dta", clear + +keep if year == 2018 & labHrsWorkEnumWeek == "FIFTY" + +order idperson idbenefit lhw valid_yGrossBuLevelYear /// + y_gross_labour_person valid_wage_hour /// + py010g* py050g py080g /// + hy080g_pc hy110g_pc hy040g_pc hy090g_pc missing* + +fre missing_py010g missing_py050g missing_py080g missing_hy080g /// + missing_hy110g missing_hy040g missing_hy090g missing_lhw if /// + valid_yGrossBuLevelYear == 0 // none missing seems to be in the data + + diff --git a/validation/02_simulation_validation/do_files/04_04_plot_gross_labour_income.do b/validation/02_simulation_validation/do_files/04_04_plot_gross_labour_income.do new file mode 100644 index 0000000..09b7ec1 --- /dev/null +++ b/validation/02_simulation_validation/do_files/04_04_plot_gross_labour_income.do @@ -0,0 +1,583 @@ +******************************************************************************** +* PROJECT: SimPaths EU +* SECTION: Validation +* OBJECT: Gross labour income +* AUTHORS: Ashley Burdett +* LAST UPDATE: Feb 2026 +* COUNTRY: PL +******************************************************************************** +* NOTES: Plotted using individual level data +* => multiple observations per ben unit. +******************************************************************************** + +******************************************************************************** +* 1 : Mean labour income +******************************************************************************** + +******************************************************************************** +* 1.1: Mean labour income - benefit unit +******************************************************************************** + +* Prepare validation data +use year idBu idPers demAge dwt labC4 valid_yEmpBuGrossLevelYear using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Keep only employed individuals +keep if labC4 == 1 + +keep if demAge >= 16 + +* Keep one observatioon per benefit unit +bysort year idBu: gen first_person = (_n == 1) +keep if first_person == 1 + +* Trim outliers +if "$trim_outliers" == "true" { + + sum valid_yEmpBuGrossLevelYear, d + + replace valid_yEmpBuGrossLevelYear = . if /// + valid_yEmpBuGrossLevelYear < r(p1) | valid_yEmpBuGrossLevelYear > r(p99) + +} + +collapse (mean) valid_yEmpBuGrossLevelYear [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare SimPaths data +use run year idPers idBu demAge labC4 sim_yEmpBuGrossLevelYear using /// + "$dir_data/simulation_sample.dta", clear + +* Keep only employed individuals +keep if labC4 == "EmployedOrSelfEmployed" + +keep if demAge >= 16 + +* Keep one observatioon per benefit unit +bysort run year idBu: gen first_person = (_n == 1) +keep if first_person == 1 + +* Trim outliers +if "$trim_outliers" == "true" { + + sum sim_yEmpBuGrossLevelYear, d + + replace sim_yEmpBuGrossLevelYear = . if /// + sim_yEmpBuGrossLevelYear < r(p1) | sim_yEmpBuGrossLevelYear > r(p99) + +} + +collapse (mean) sim_yEmpBuGrossLevelYear, by(run year) + +collapse (mean) sim_yEmpBuGrossLevelYear /// + (sd) sim_yEmpBuGrossLevelYear_sd = sim_yEmpBuGrossLevelYear /// + , by(year) + +foreach varname in sim_yEmpBuGrossLevelYear { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +twoway /// +(rarea sim_yEmpBuGrossLevelYear_high sim_yEmpBuGrossLevelYear_low year, /// + sort color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_yEmpBuGrossLevelYear year, sort color(green) /// + legend(label(2 "SILC"))), /// + title("Benefit Unit Gross Labour Income") /// + subtitle("") /// + xtitle("Year", size(small)) /// + ytitle("Euro per year", size(small)) /// + ylabel(,labsize(small)) /// + xlabel(,labsize(small)) /// + graphregion(color(white)) /// + legend(size(small)) /// + note("Note: Amounts in 2015 prices. Top and bottom percentiles trimmed.", /// + size(vsmall)) + +* Save figure +graph export /// +"$dir_output_files/income/gross_labour_income/validation_${country}_gross_labour_income_bu_ts.jpg", /// + replace width(2400) height(1350) quality(100) + + +******************************************************************************** +* 1.1: Mean labour income - individual +******************************************************************************** + +* Prepare validation data +use year demAge dwt labC4 valid_yEmpPersGrossLevelYear using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Keep only employed individuals +keep if labC4 == 1 + +keep if inrange(demAge,18,65) + +* Trim outliers +if "$trim_outliers" == "true" { + + sum valid_yEmpPersGrossLevelYear, d + + replace valid_yEmpPersGrossLevelYear = . if /// + valid_yEmpPersGrossLevelYear < r(p1) | /// + valid_yEmpPersGrossLevelYear > r(p99) + +} + +collapse (mean) valid_yEmpPersGrossLevelYear [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare SimPaths data +use run year demAge labC4 sim_yEmpPersGrossLevelYear using /// + "$dir_data/simulation_sample.dta", clear + +* Keep only employed individuals +keep if labC4 == "EmployedOrSelfEmployed" + +keep if inrange(demAge,18,65) + +* Trim outliers +if "$trim_outliers" == "true" { + + sum sim_yEmpPersGrossLevelYear, d + + replace sim_yEmpPersGrossLevelYear = . if /// + sim_yEmpPersGrossLevelYear < r(p1) | sim_yEmpPersGrossLevelYear > r(p99) + +} + +collapse (mean) sim_yEmpPersGrossLevelYear, by(run year) + +collapse (mean) sim_yEmpPersGrossLevelYear /// + (sd) sim_yEmpPersGrossLevelYear_sd = sim_yEmpPersGrossLevelYear /// + , by(year) + +foreach varname in sim_yEmpPersGrossLevelYear { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +twoway /// +(rarea sim_yEmpPersGrossLevelYear_high sim_yEmpPersGrossLevelYear_low year, /// + sort color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_yEmpPersGrossLevelYear year, sort color(green) /// + legend(label(2 "SILC"))), /// + title("Gross Labour Income") /// + subtitle("Ages 18-65") /// + xtitle("Year", size(small)) /// + ytitle("Euro per year", size(small)) /// + ylabel(,labsize(small)) /// + xlabel(,labsize(small)) /// + graphregion(color(white)) /// + legend(size(small)) /// + note("Note: Amounts at the individual level, individual data plotted. Statistics calculated on the sample of employed individuals" "ages 18-65. Amounts in 2015 prices. Top and bottom percentiles trimmed.", /// + size(vsmall)) + +* Save figure +graph export /// +"$dir_output_files/income/gross_labour_income/validation_${country}_ind_gross_labour_income_ts_18_65.jpg", /// + replace width(2400) height(1350) quality(100) + + +******************************************************************************** +* 2 : Histograms +******************************************************************************** + +******************************************************************************** +* 2.1 : Histograms - working age, benefit unit +******************************************************************************** + +* Prepare validation data +use year idPers idBu demAge dwt labC4 valid_yEmpBuGrossLevelYear /// + valid_labHrsWorkEnumWeek using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Keep only employed individuals +keep if labC4 == 1 +drop labC4 + +keep if inrange(demAge,18,65) + +* Keep one observatioon per benefit unit +bysort year idBu: gen first_person = (_n == 1) +keep if first_person == 1 + +* Trim outliers +if "$trim_outliers" == "true" { + + sum valid_yEmpBuGrossLevelYear, d + + replace valid_yEmpBuGrossLevelYear = . if /// + valid_yEmpBuGrossLevelYear < r(p1) | valid_yEmpBuGrossLevelYear > r(p99) + +} + +* Prepare info needed for dynamic y axis labels +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + twoway__histogram_gen valid_yEmpBuGrossLevelYear if year == `year', /// + width(750) den gen(d_valid v2) + + qui sum d_valid + gen max_d_valid_`year' = r(max) + + drop d_valid v2 + + foreach ls in $ls_cat { + + twoway__histogram_gen valid_yEmpBuGrossLevelYear if /// + year == `year' & valid_labHrsWorkEnumWeek == "`ls'", width(750) /// + den gen(d_valid v2) + + qui sum d_valid + gen max_d_valid_`year'_`ls' = r(max) + + drop d_valid v2 + + } + +} + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare SimPaths data +use run year idPers idBu demAge labC4 sim_yEmpBuGrossLevelYear /// + sim_labHrsWorkEnumWeek using "$dir_data/simulation_sample.dta", clear + +* Keep only employed individuals +keep if labC4 == "EmployedOrSelfEmployed" +drop labC4 + +keep if inrange(demAge,18,65) + +* Keep one observatioon per benefit unit +bysort run year idBu: gen first_person = (_n == 1) +keep if first_person == 1 + +* Trim outliers +if "$trim_outliers" == "true" { + + sum sim_yEmpBuGrossLevelYear, d + + replace sim_yEmpBuGrossLevelYear = . if /// + sim_yEmpBuGrossLevelYear < r(p1) | sim_yEmpBuGrossLevelYear > r(p99) + + } + +keep if run == 1 + +append using "$dir_data/temp_valid_stats.dta" + +* Plot sub-figures +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + * Prepare info needed for dynamic y axis labels + twoway__histogram_gen sim_yEmpBuGrossLevelYear if year == `year', /// + width(750) den gen(d_sim v1) + + qui sum d_sim + gen max_d_sim = r(max) + + gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim + replace max_value = max_d_sim if max_value == . + + sum max_value + local max_y = 1.25*r(max) + local steps = `max_y'/2 + + + * Plot all hours + twoway (hist sim_yEmpBuGrossLevelYear if year == `year' , width(750) /// + color(green%30) legend(label(1 "SimPaths"))) /// + (hist valid_yEmpBuGrossLevelYear if year == `year' , width(750) /// + color(red%30) legend(label(2 "SILC"))) , /// + subtitle("ALL hours") /// + name(gross_lab_inc_`year'_all, replace) /// + xtitle("Euro", size(small)) /// + ytitle("Density", size(small)) /// + xlabel(,labsize(vsmall) angle(forty_five)) /// + ylabel(0(`steps')`max_y',labsize(vsmall)) /// + graphregion(color(white)) + + + drop d_sim v1 max_d_sim max_value + + * Plot by weekly hours work + foreach ls in $ls_cat_labour { + + * Prepare info needed for dynamic y axis labels + twoway__histogram_gen sim_yEmpBuGrossLevelYear if year == `year' & /// + sim_labHrsWorkEnumWeek == "`ls'", width(750) den gen(d_sim v1) + + qui sum d_sim + gen max_d_sim = r(max) + + gen max_value = max_d_valid_`year'_`ls' if /// + max_d_valid_`year'_`ls' > max_d_sim + replace max_value = max_d_sim if max_value == . + + sum max_value + local max_y = 1.25*r(max) + local steps = `max_y'/2 + + * Plot by weekly hours work + twoway (hist sim_yEmpBuGrossLevelYear if year == `year' & /// + sim_labHrsWorkEnumWeek == "`ls'", width(750) color(green%30) /// + legend(label(1 "SimPaths"))) /// + (hist valid_yEmpBuGrossLevelYear if year == `year' & /// + valid_labHrsWorkEnumWeek == "`ls'", width(750) color(red%30) /// + legend(label(2 "SILC"))) , /// + subtitle("`ls' hours") /// + name(gross_lab_inc_`year'_`ls', replace) /// + xtitle("Euro", size(small)) /// + ytitle("Density", size(small)) /// + xlabel(,labsize(vsmall) angle(forty_five)) /// + ylabel(0(`steps')`max_y',labsize(vsmall)) /// + legend(size(small)) /// + graphregion(color(white)) + + drop d_sim v1 max_d_sim max_value + + } +} + +* Combine plots by year +forvalues year = 2011/2023 { + + grc1leg gross_lab_inc_`year'_all /// + gross_lab_inc_`year'_TWENTY /// + gross_lab_inc_`year'_FORTY /// + gross_lab_inc_`year'_FIFTY, /// + title("Benefit Unit Gross Labour Income by Weekly Hours of Work") /// + subtitle("`year'") /// + legendfrom(gross_lab_inc_`year'_TWENTY) /// + rows(2) /// + graphregion(color(white)) /// + note("Notes: Amounts in Euro per year, 2015 prices. Top and bottom percentiles trimmed. Individual observations of benefit unit amount plotted", /// + size(vsmall)) + + graph export "$dir_output_files/income/gross_labour_income/validation_${country}_gross_labour_income_bu_dist_`year'_18_65.png", /// + replace width(2400) height(1350) + +} + +graph drop _all + + +******************************************************************************** +* 2.1 : Histograms - working age, individual +******************************************************************************** + +* Prepare validation data +use year demAge dwt labC4 valid_yEmpPersGrossLevelYear /// + valid_labHrsWorkEnumWeek using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Keep only employed individuals +keep if labC4 == 1 +drop labC4 + +keep if inrange(demAge,18,65) + +* Trim outliers +if "$trim_outliers" == "true" { + + sum valid_yEmpPersGrossLevelYear, d + + replace valid_yEmpPersGrossLevelYear = . if /// + valid_yEmpPersGrossLevelYear < r(p1) | /// + valid_yEmpPersGrossLevelYear > r(p99) + +} + +* Prepare info needed for dynamic y axis labels +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + twoway__histogram_gen valid_yEmpPersGrossLevelYear if year == `year', /// + width(750) den gen(d_valid v2) + + qui sum d_valid + gen max_d_valid_`year' = r(max) + + drop d_valid v2 + + foreach ls in $ls_cat { + + twoway__histogram_gen valid_yEmpPersGrossLevelYear if /// + year == `year' & valid_labHrsWorkEnumWeek == "`ls'", width(750) /// + den gen(d_valid v2) + + qui sum d_valid + gen max_d_valid_`year'_`ls' = r(max) + + drop d_valid v2 + + } + +} + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare SimPaths data +use run year demAge labC4 sim_yEmpPersGrossLevelYear sim_labHrsWorkEnumWeek /// + using "$dir_data/simulation_sample.dta", clear + +* Keep only employed individuals +keep if labC4 == "EmployedOrSelfEmployed" +drop labC4 + +keep if inrange(demAge,18,65) + +* Trim outliers +if "$trim_outliers" == "true" { + + sum sim_yEmpPersGrossLevelYear, d + + replace sim_yEmpPersGrossLevelYear = . if /// + sim_yEmpPersGrossLevelYear < r(p1) | sim_yEmpPersGrossLevelYear > r(p99) + + } + +keep if run == 1 + +append using "$dir_data/temp_valid_stats.dta" + +* Plot sub-figures +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + * Prepare info needed for dynamic y axis labels + twoway__histogram_gen sim_yEmpPersGrossLevelYear if year == `year', /// + width(750) den gen(d_sim v1) + + qui sum d_sim + gen max_d_sim = r(max) + + gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim + replace max_value = max_d_sim if max_value == . + + sum max_value + local max_y = 1.25*r(max) + local steps = `max_y'/2 + + + * Plot all hours + twoway (hist sim_yEmpPersGrossLevelYear if year == `year' , width(750) /// + color(green%30) legend(label(1 "SimPaths"))) /// + (hist valid_yEmpPersGrossLevelYear if year == `year' , width(750) /// + color(red%30) legend(label(2 "SILC"))) , /// + subtitle("ALL hours") /// + name(gross_lab_inc_`year'_all, replace) /// + xtitle("Euro", size(small)) /// + ytitle("Density", size(small)) /// + xlabel(,labsize(vsmall) angle(forty_five)) /// + ylabel(0(`steps')`max_y',labsize(vsmall)) /// + graphregion(color(white)) + + + drop d_sim v1 max_d_sim max_value + + * Plot by weekly hours work + foreach ls in $ls_cat_labour { + + * Prepare info needed for dynamic y axis labels + twoway__histogram_gen sim_yEmpPersGrossLevelYear if year == `year' & /// + sim_labHrsWorkEnumWeek == "`ls'", width(750) den gen(d_sim v1) + + qui sum d_sim + gen max_d_sim = r(max) + + gen max_value = max_d_valid_`year'_`ls' if /// + max_d_valid_`year'_`ls' > max_d_sim + replace max_value = max_d_sim if max_value == . + + sum max_value + local max_y = 1.25*r(max) + local steps = `max_y'/2 + + * Plot by weekly hours work + twoway (hist sim_yEmpPersGrossLevelYear if year == `year' & /// + sim_labHrsWorkEnumWeek == "`ls'", width(750) color(green%30) /// + legend(label(1 "SimPaths"))) /// + (hist valid_yEmpPersGrossLevelYear if year == `year' & /// + valid_labHrsWorkEnumWeek == "`ls'", width(750) color(red%30) /// + legend(label(2 "SILC"))) , /// + subtitle("`ls' hours") /// + name(gross_lab_inc_`year'_`ls', replace) /// + xtitle("Euro", size(small)) /// + ytitle("Density", size(small)) /// + xlabel(,labsize(vsmall) angle(forty_five)) /// + ylabel(0(`steps')`max_y',labsize(vsmall)) /// + legend(size(small)) /// + graphregion(color(white)) + + drop d_sim v1 max_d_sim max_value + + } +} + +* Combine plots by year +forvalues year = `min_year'/`max_year' { + + grc1leg gross_lab_inc_`year'_all /// + gross_lab_inc_`year'_TWENTY /// + gross_lab_inc_`year'_FORTY /// + gross_lab_inc_`year'_FIFTY, /// + title("Individual Gross Labour Income by Weekly Hours of Work") /// + subtitle("`year'") /// + legendfrom(gross_lab_inc_`year'_TWENTY) /// + rows(2) /// + graphregion(color(white)) /// + note("Notes: Amounts in Euro per year, 2015 prices. Employed 18-65 years olds included in the sample. Top and bottom percentiles trimmed.", /// + size(vsmall)) + + graph export "$dir_output_files/income/gross_labour_income/validation_${country}_ind_gross_labour_income_dist_`year'_both.png", /// + replace width(2400) height(1350) + +} + +graph drop _all + diff --git a/validation/02_simulation_validation/do_files/04_05_plot_capital_income.do b/validation/02_simulation_validation/do_files/04_05_plot_capital_income.do new file mode 100644 index 0000000..5c3e147 --- /dev/null +++ b/validation/02_simulation_validation/do_files/04_05_plot_capital_income.do @@ -0,0 +1,379 @@ +******************************************************************************** +* PROJECT: SimPaths EU +* SECTION: Validation +* OBJECT: Capital income +* AUTHORS: Ashley Burdett +* LAST UPDATE: April 2026 (AB) +* COUNTRY: PL +******************************************************************************** +* NOTES: This do file plots simulated and SILC capital income, +* per benefit unit + +******************************************************************************** + +******************************************************************************** +* 1 : Time series +******************************************************************************** + +******************************************************************************** +* 1.1 : Mean through time, benefit unit +******************************************************************************** + +* Prepare validation data +use year idPers idBu demAge dwt valid_yCapitalBuLevelYear using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if demAge >= 16 + +* Keep one observatioon per benefit unit +bysort year idBu: gen first_person = (_n == 1) +keep if first_person == 1 + +* Trim outliers +/* +if "$trim_outliers" == "true" { + + sum valid_yCapitalBuLevelYear, d + + replace valid_yCapitalBuLevelYear = . if /// + valid_yCapitalBuLevelYear < r(p1) | /// + valid_yCapitalBuLevelYear > r(p99) + +} +*/ + +collapse (mean) valid_yCapitalBuLevelYear [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year idPers idBu demAge sim_yCapitalBuLevelYear using /// + "$dir_data/simulation_sample.dta", clear + +keep if demAge >= 16 + +* Keep one observatioon per benefit unit +bysort run year idBu: gen first_person = (_n == 1) +keep if first_person == 1 + +* Trim outliers +/* +if "$trim_outliers" == "true" { + + sum sim_yCapitalBuLevelYear, d + + replace sim_yCapitalBuLevelYear = . if /// + sim_yCapitalBuLevelYear < r(p1) | sim_yCapitalBuLevelYear > r(p99) + +} +*/ + +collapse (mean) sim_yCapitalBuLevelYear, by(run year) + +collapse (mean) sim_yCapitalBuLevelYear /// + (sd) sim_yCapitalBuLevelYear_sd = sim_yCapitalBuLevelYear /// + , by(year) + +foreach varname in sim_yCapitalBuLevelYear { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +twoway (rarea sim_yCapitalBuLevelYear_high sim_yCapitalBuLevelYear_low year, /// + sort color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_yCapitalBuLevelYear year, sort color(green) /// + legend(label(2 "SILC"))), /// + title("Benefit Unit Capital income") /// + subtitle("") /// + xtitle("Year", size(small)) /// + ytitle("Euro per year", size(small)) /// + ylabel(,labsize(small)) /// + xlabel(,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: Series represents average benefit unit capital income per year. Amounts in 2015 prices.", /// + size(vsmall)) + +* Save figure +graph export /// +"$dir_output_files/income/capital_income/validation_${country}_capital_income_bu_ts.jpg", /// + replace width(2400) height(1350) quality(100) + + +******************************************************************************** +* 1.2 : Share with no capital income, benefit unit +******************************************************************************** + +* Share with no capital income +* Prepare validation data +use year idPers idBu demAge dwt valid_yCapitalBuLevelYear using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if demAge >= 16 + +* Keep one observatioon per benefit unit +bysort year idBu: gen first_person = (_n == 1) +keep if first_person == 1 + +/* +* Trim outliers +if "$trim_outliers" == "true" { + + sum valid_yCapitalBuLevelYear, d + + replace valid_yCapitalBuLevelYear = . if /// + valid_yCapitalBuLevelYear < r(p1) | /// + valid_yCapitalBuLevelYear > r(p99) + +} +*/ + +gen valid_no_capital = (valid_yCapitalBuLevelYear == 0) + +collapse (mean) valid_no_capital [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year idPers idBu demAge sim_yCapitalBuLevelYear using /// + "$dir_data/simulation_sample.dta", clear + +keep if demAge >= 16 + +* Keep one observatioon per benefit unit +bysort run year idBu: gen first_person = (_n == 1) +keep if first_person == 1 + +/* +* Trim outliers +if "$trim_outliers" == "true" { + + sum sim_yCapitalBuLevelYear, d + + replace sim_yCapitalBuLevelYear = . if /// + sim_yCapitalBuLevelYear < r(p1) | sim_yCapitalBuLevelYear > r(p99) + +} +*/ + +gen sim_no_capital = (sim_yCapitalBuLevelYear == 0) + +collapse (mean) sim_no_capital, by(run year) + +collapse (mean) sim_no_capital /// + (sd) sim_no_capital_sd = sim_no_capital /// + , by(year) + +foreach varname in sim_no_capital { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +twoway (rarea sim_no_capital_high sim_no_capital_low year, sort /// + color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_no_capital year, sort color(green) /// + legend(label(2 "SILC"))), /// + title("No Capital Income") /// + subtitle("") /// + xtitle("Year", size(small)) /// + ytitle("Share of benefit units", size(small)) /// + ylabel(,labsize(small)) /// + xlabel(,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: ", /// + size(vsmall)) + +* Save figure +graph export /// +"$dir_output_files/income/capital_income/validation_${country}_no_capital_income_bu_ts.jpg", /// + replace width(2400) height(1350) quality(100) + + +******************************************************************************** +* 2 : Histograms +******************************************************************************** + + +******************************************************************************** +* 2.1 : Benefit unit by year, +******************************************************************************** + +* Prepare validation data +use year idBu demAge dwt valid_yCapitalBuLevelYear using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +drop if demAge < 16 + +* Keep one observation per benefit unit +bysort year idBu: gen first_person = (_n == 1) +keep if first_person == 1 + +* Trim outliers +if "$trim_outliers" == "true" { + + sum valid_yCapitalBuLevelYear, d + + replace valid_yCapitalBuLevelYear = . if /// + valid_yCapitalBuLevelYear < r(p1) | /// + valid_yCapitalBuLevelYear > r(p99) + +} + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year idBu demAge sim_yCapitalBuLevelYear using /// + "$dir_data/simulation_sample.dta", clear + +drop if demAge < 16 + +* Keep one observation per benefit unit +bysort run year idBu: gen first_person = (_n == 1) +keep if first_person == 1 + +* Trim outliers +if "$trim_outliers" == "true" { + + sum sim_yCapitalBuLevelYear, d + + replace sim_yCapitalBuLevelYear = . if /// + sim_yCapitalBuLevelYear < r(p1) | sim_yCapitalBuLevelYear > r(p99) + +} + +append using "$dir_data/temp_valid_stats.dta" + +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + twoway (hist sim_yCapitalBuLevelYear if year == `year', width(50) /// + color(green%30) legend(label(1 "SimPaths"))) /// + (hist valid_yCapitalBuLevelYear if year == `year', /// + width(50) color(red%30) legend(label(2 "SILC"))) , /// + title("Benefit Unit Capital Income") /// + subtitle("`year'") /// + name(capital_inc_`year'_all, replace) /// + ylabel(,labsize(small)) /// + xlabel(,labsize(small)) /// + xtitle("Euro", size(small)) /// + ytitle("Density", size(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: Amounts in Euro per year, 2015 prices. Top and bottom percentiles trimmed.", /// + size(vsmall)) + + graph export /// + "$dir_output_files/income/capital_income/validation_${country}_capital_income_bu_dist_`year'.png", /// + replace width(2560) height(1440) + +} + +******************************************************************************** +* 2.2 : Positive amounts only, benefit unit +******************************************************************************** + +* Prepare validation data +use year idBu demAge dwt valid_yCapitalBuLevelYear using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if demAge >= 16 + +* Keep one observatioon per benefit unit +bysort year idBu: gen first_person = (_n == 1) +keep if first_person == 1 + +* Trim outliers + +if "$trim_outliers" == "true" { + + sum valid_yCapitalBuLevelYear, d + + replace valid_yCapitalBuLevelYear = . if /// + valid_yCapitalBuLevelYear < r(p1) | /// + valid_yCapitalBuLevelYear > r(p99) + +} + + +drop if valid_yCapitalBuLevelYear == 0 + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year idBu demAge sim_yCapitalBuLevelYear using /// + "$dir_data/simulation_sample.dta", clear + +keep if inrange(demAge,18,65) + +* Keep one observatioon per benefit unit +bysort run year idBu: gen first_person = (_n == 1) +keep if first_person == 1 + +* Trim outliers + +if "$trim_outliers" == "true" { + + sum sim_yCapitalBuLevelYear, d + + replace sim_yCapitalBuLevelYear = . if /// + sim_yCapitalBuLevelYear < r(p1) | sim_yCapitalBuLevelYear > r(p99) + +} + +drop if sim_yCapitalBuLevelYear == 0 + +append using "$dir_data/temp_valid_stats.dta" + +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + twoway (hist sim_yCapitalBuLevelYear if year == `year', /// + width(50) color(green%30) legend(label(1 "SimPaths"))) /// + (hist valid_yCapitalBuLevelYear if year == `year', width(50) /// + color(red%30) legend(label(2 "SILC"))) , /// + title("Benefit Unit Capital Income") /// + subtitle("Positive amounts, `year'") /// + name(capital_inc_`year'_all, replace) /// + ylabel(,labsize(small)) /// + xlabel(,labsize(small)) /// + xtitle("Euro", size(small)) /// + ytitle("Density", size(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: Amounts in Euro per year, 2015 prices. Top and bottom percentailes trimmed. ", /// + size(vsmall)) + + graph export /// +"$dir_output_files/income/capital_income/validation_${country}_positive_capital_income_bu_dist_`year'.png", /// + replace width(2560) height(1440) + +} + +graph drop _all diff --git a/validation/02_simulation_validation/do_files/04_07_plot_disposable_income.do b/validation/02_simulation_validation/do_files/04_07_plot_disposable_income.do new file mode 100644 index 0000000..fe0fc43 --- /dev/null +++ b/validation/02_simulation_validation/do_files/04_07_plot_disposable_income.do @@ -0,0 +1,379 @@ +******************************************************************************** +* PROJECT: SimPath EU +* SECTION: Validation +* OBJECT: Disposable income +* AUTHORS: Ashley Burdett +* LAST UPDATE: April 2026 +* COUNTRY: PL +******************************************************************************** +* NOTES: This do file plots simulated and SILC disposable income, +* per benefit unit. Individual level data plotted. +******************************************************************************** + +******************************************************************************** +* 1 : Mean values over time +******************************************************************************** + +******************************************************************************** +* 1.1 : Mean values over time, benefit unit +******************************************************************************** + +* Prepare validation data +use year idBu demAge dwt valid_yDispBuLevelYear using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +drop if demAge < 16 + +* Keep one observation per benefit unit +bysort year idBu: gen first_person = (_n == 1) +keep if first_person == 1 + +* Trim outliers +if "$trim_outliers" == "true" { + + sum valid_yDispBuLevelYear, d + + replace valid_yDispBuLevelYear = . if /// + valid_yDispBuLevelYear < r(p1) | valid_yDispBuLevelYear > r(p99) + +} + +collapse (mean) valid_yDispBuLevelYear [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run idBu year demAge sim_yDispBuLevelYear using /// + "$dir_data/simulation_sample.dta", clear + +drop if demAge < 16 + +* Keep one observation per benefit unit +bysort run year idBu: gen first_person = (_n == 1) +keep if first_person == 1 + + +* Trim outliers +if "$trim_outliers" == "true" { + + sum sim_yDispBuLevelYear, d + + replace sim_yDispBuLevelYear = . if /// + sim_yDispBuLevelYear < r(p1) | sim_yDispBuLevelYear > r(p99) + +} + +collapse (mean) sim_yDispBuLevelYear, by(run year) + +collapse (mean) sim_yDispBuLevelYear /// + (sd) sim_yDispBuLevelYear_sd = sim_yDispBuLevelYear /// + , by(year) + +foreach varname in sim_yDispBuLevelYear { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +twoway (rarea sim_yDispBuLevelYear_high sim_yDispBuLevelYear_low year, /// + sort color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_yDispBuLevelYear year, sort color(green) /// + legend(label(2 "SILC"))), /// + title("Benefit Unit Disposable Income") /// + subtitle("") /// + xtitle("Year", size(small)) /// + ytitle("Euro per year", size(small)) /// + ylabel(,labsize(small)) /// + xlabel(,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: Amounts in Euro per year, 2015 prices. Top and bottom percentiles trimmed.", /// + size(vsmall)) + +graph export /// +"$dir_output_files/income/disposable_income/validation_${country}_disposable_income_bu_ts.jpg", /// + replace + + +******************************************************************************** +* 2 : Histograms +******************************************************************************** + +******************************************************************************** +* 2.1 : By year, benefit unit +******************************************************************************** + +* Prepare validation data +use year idBu demAge dwt valid_yDispBuLevelYear using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Sample selection +drop if demAge < 16 + +* Keep one observation per benefit unit +bysort year idBu: gen first_person = (_n == 1) +keep if first_person == 1 + +* Trim outliers +if "$trim_outliers" == "true" { + + sum valid_yDispBuLevelYear, d + + replace valid_yDispBuLevelYear = . if /// + valid_yDispBuLevelYear < r(p1) | /// + valid_yDispBuLevelYear > r(p99) + +} + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year idBu sim_yDispBuLevelYear demAge using /// + "$dir_data/simulation_sample.dta", clear + +* Sample selection +drop if demAge < 16 + +* Keep one observation per benefit unit +bysort run year idBu: gen first_person = (_n == 1) +keep if first_person == 1 + + +* Trim outliers +if "$trim_outliers" == "true" { + + sum sim_yDispBuLevelYear, d + + replace sim_yDispBuLevelYear = . if /// + sim_yDispBuLevelYear < r(p1) | sim_yDispBuLevelYear > r(p99) + +} + +append using "$dir_data/temp_valid_stats.dta" + +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + twoway (hist sim_yDispBuLevelYear if year == `year', width(750) /// + color(green%30) legend(label(1 "SimPaths"))) /// + (hist valid_yDispBuLevelYear if year == `year', /// + width(750) color(red%30) legend(label(2 "SILC"))) , /// + title("Benefit Unit Disposable Income") /// + subtitle("`year'") /// + name(disp_inc_`year'_all, replace) /// + ylabel(,labsize(small)) /// + xlabel(,labsize(small)) /// + xtitle("Euro", size(small)) /// + ytitle("Density", size(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: Amounts in Euro per year, 2015 prices. Top and bottom percentiles trimmed.", /// + size(vsmall)) + + graph export /// + "$dir_output_files/income/disposable_income/validation_${country}_disposable_income_bu_dist_`year'.png", /// + replace width(2560) height(1440) + +} + +graph drop _all + + +******************************************************************************** +* 2.2 : Histograms - Benefit unit, ages 18-65, by year, by hours of work +******************************************************************************** + +* Prepare validation data +use year demAge dwt valid_yDispBuLevelYear valid_labHrsWorkEnumWeek /// + using "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if inrange(demAge,18,65) + +* Trim outliers +if "$trim_outliers" == "true" { + + sum valid_yDispBuLevelYear, d + + replace valid_yDispBuLevelYear = . if /// + valid_yDispBuLevelYear < r(p1) | valid_yDispBuLevelYear > r(p99) + +} + +* Prepare info needed for dynamic y axis labels +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + twoway__histogram_gen valid_yDispBuLevelYear if year == `year' , /// + width(750) den gen(d_valid v2) + + qui sum d_valid + gen max_d_valid_`year' = r(max) + + drop d_valid v2 + + foreach ls in $ls_cat { + + twoway__histogram_gen valid_yDispBuLevelYear if /// + year == `year' & valid_labHrsWorkEnumWeek == "`ls'", width(750) /// + den gen(d_valid v2) + + qui sum d_valid + gen max_d_valid_`year'_`ls' = r(max) + + drop d_valid v2 + + } +} + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year sim_yDispBuLevelYear sim_labHrsWorkEnumWeek demAge using /// + "$dir_data/simulation_sample.dta", clear + +keep if inrange(demAge,18,65) + +* Trim outliers +if "$trim_outliers" == "true" { + + sum sim_yDispBuLevelYear, d + + replace sim_yDispBuLevelYear = . if /// + sim_yDispBuLevelYear < r(p1) | sim_yDispBuLevelYear > r(p99) + +} + +keep if run == 1 + +append using "$dir_data/temp_valid_stats.dta" + +* Plot sub-figures +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + * Prepare info needed for dynamic y axis labels + twoway__histogram_gen sim_yDispBuLevelYear if year == `year', width(750) /// + den gen(d_sim v1) + + qui sum d_sim + gen max_d_sim = r(max) + + gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim + replace max_value = max_d_sim if max_value == . + + sum max_value + local max_y = 1.25*r(max) + local steps = `max_y'/2 + + * Plot all hours + twoway (hist sim_yDispBuLevelYear if year == `year', width(750) /// + color(green%30) legend(label(1 "SimPaths"))) /// + (hist valid_yDispBuLevelYear if year == `year', width(750) /// + color(red%30) /// + legend(label(2 "SILC"))) , /// + subtitle("ALL hours") /// + name(disp_inc_`year'_all, replace) /// + xtitle("Euro", size(small)) /// + ytitle("Density", size(small)) /// + xlabel(,labsize(vsmall) angle(forty_five)) /// + ylabel(0(`steps')`max_y', labsize(vsmall)) /// + graphregion(color(white)) + + drop d_sim v1 max_d_sim max_value + + foreach ls in $ls_cat { + + * Prepare info needed for dynamic y axis labels + twoway__histogram_gen sim_yDispBuLevelYear if year == `year' & /// + sim_labHrsWorkEnumWeek == "`ls'", width(750) den gen(d_sim v1) + + qui sum d_sim + gen max_d_sim = r(max) + + gen max_value = max_d_valid_`year'_`ls' if /// + max_d_valid_`year'_`ls' > max_d_sim + replace max_value = max_d_sim if max_value == . + + sum max_value + local max_y = 1.25*r(max) + local steps = `max_y'/2 + + * Plot by weekly hours work + twoway (hist sim_yDispBuLevelYear if year == `year' & /// + sim_labHrsWorkEnumWeek == "`ls'", width(750) color(green%30) /// + legend(label(1 "SimPaths"))) /// + (hist valid_yDispBuLevelYear if year == `year' & /// + valid_labHrsWorkEnumWeek == "`ls'", width(750) color(red%30) /// + legend(label(2 "SILC"))) , /// + subtitle("`ls' hours") /// + name(disp_inc_`year'_`ls', replace) /// + xtitle("Euro", size(small)) /// + ytitle("Density", size(small)) /// + xlabel(,labsize(vsmall) angle(forty_five)) /// + ylabel(0(`steps')`max_y', labsize(vsmall)) /// + legend(size(small)) /// + graphregion(color(white)) + + drop d_sim v1 max_d_sim max_value + + } +} + +* Combine plots by year +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forvalues year = `min_year'/`max_year' { + + grc1leg disp_inc_`year'_all /// + disp_inc_`year'_ZERO /// + disp_inc_`year'_TWENTY /// + disp_inc_`year'_FORTY /// + disp_inc_`year'_FIFTY , /// + title("Benefit Unit Disposable Income by Weekly Hours of Work") /// + subtitle("`year'") /// + legendfrom(disp_inc_`year'_ZERO) /// + rows(2) /// + graphregion(color(white)) /// + note("Notes: Amounts in Euro per year, 2015 prices. Indiviudal level data of benefit level amount plotted." "Top and bottom percentiles trimmed.", /// + size(vsmall)) + + graph export /// + "$dir_output_files/income/disposable_income/validation_${country}_disposable_income_bu_dist_`year'_hrs_work.png", /// + replace width(2400) height(1350) + + +} + + +graph drop _all + diff --git a/validation/02_simulation_validation/do_files/04_08_plot_equivalised_disposable_income.do b/validation/02_simulation_validation/do_files/04_08_plot_equivalised_disposable_income.do new file mode 100644 index 0000000..bb50189 --- /dev/null +++ b/validation/02_simulation_validation/do_files/04_08_plot_equivalised_disposable_income.do @@ -0,0 +1,368 @@ +******************************************************************************** +* PROJECT: SimPaths EU +* SECTION: Validation +* OBJECT: Equivalised disposable income +* AUTHORS: Ashley Burdett +* LAST UPDATE: April 2026 +* COUNTRY: PL +******************************************************************************** +* NOTES: This do file plots simulated and SILC equivalised +* disposable income, per benefit unit +******************************************************************************** + +******************************************************************************** +* 1 : Mean values over time, benefit unit +******************************************************************************** + +* Prepare validation data +use year idBu demAge dwt valid_yDispBuEquivYear using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +drop if demAge < 16 + +* Keep one observation per benefit unit +bysort year idBu: gen first_person = (_n == 1) +keep if first_person == 1 + +* Trim outliers +if "$trim_outliers" == "true" { + + sum valid_yDispBuEquivYear, d + + replace valid_yDispBuEquivYear = . if /// + valid_yDispBuEquivYear < r(p1) | valid_yDispBuEquivYear > r(p99) + +} + +collapse (mean) valid_yDispBuEquivYear [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run idBu year demAge sim_yDispEquivYear using /// + "$dir_data/simulation_sample.dta", clear + +drop if demAge < 16 + +* Keep one observation per benefit unit +bysort run year idBu: gen first_person = (_n == 1) +keep if first_person == 1 + +* Trim outliers +if "$trim_outliers" == "true" { + + sum sim_yDispEquivYear, d + + replace sim_yDispEquivYear = . if /// + sim_yDispEquivYear < r(p1) | sim_yDispEquivYear > r(p99) + +} + +collapse (mean) sim_yDispEquivYear, by(run year) + +collapse (mean) sim_yDispEquivYear /// + (sd) sim_yDispEquivYear_sd = sim_yDispEquivYear, by(year) + +foreach varname in sim_yDispEquivYear { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +twoway (rarea sim_yDispEquivYear_high sim_yDispEquivYear_low year, /// + sort color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_yDispBuEquivYear year, sort color(green) /// + legend(label(2 "SILC"))), /// + title("Benefit Unit Equivalised Disposable Income") /// + subtitle("") /// + xtitle("Year", size(small)) /// + ytitle("Euro per year", size(small)) /// + ylabel(,labsize(small)) /// + xlabel(,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: Equivalised disposable income computed by the modified OECD scale. Top and bottom percentiles trimmed. Amounts" "annual, in 2015 prices.", /// + size(vsmall)) + +graph export /// +"$dir_output_files/income/equivalised_disposable_income/validation_${country}_equivalised_disposable_income_bu_ts.jpg", /// + replace width(2400) height(1350) + + +******************************************************************************** +* 2 : Histograms +******************************************************************************** + +******************************************************************************** +* 2.1 : By year, benefit unit +******************************************************************************** + +* Prepare validation data +use year idBu demAge dwt valid_yDispBuEquivYear using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Sample selection +drop if demAge < 16 + +* Keep one observation per benefit unit +bysort year idBu: gen first_person = (_n == 1) +keep if first_person == 1 + +* Trim outliers +if "$trim_outliers" == "true" { + + sum valid_yDispBuEquivYear, d + + replace valid_yDispBuEquivYear = . if /// + valid_yDispBuEquivYear < r(p1) | /// + valid_yDispBuEquivYear > r(p99) + +} + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year idBu sim_yDispEquivYear demAge using /// + "$dir_data/simulation_sample.dta", clear + +* Sample selection +drop if demAge < 16 + +* Keep one observation per benefit unit +bysort run year idBu: gen first_person = (_n == 1) +keep if first_person == 1 + + +* Trim outliers +if "$trim_outliers" == "true" { + + sum sim_yDispEquivYear, d + + replace sim_yDispEquivYear = . if /// + sim_yDispEquivYear < r(p1) | sim_yDispEquivYear > r(p99) + +} + +append using "$dir_data/temp_valid_stats.dta" + +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + twoway (hist sim_yDispEquivYear if year == `year', width(250) /// + color(green%30) legend(label(1 "SimPaths"))) /// + (hist valid_yDispBuEquivYear if year == `year', /// + width(250) color(red%30) legend(label(2 "SILC"))) , /// + title("Benefit Unit Equivalised Disposable Income") /// + subtitle("`year'") /// + name(disp_inc_`year'_all, replace) /// + ylabel(,labsize(small)) /// + xlabel(,labsize(small)) /// + xtitle("Euro", size(small)) /// + ytitle("Density", size(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: Amounts in Euro per year, 2015 prices. Top and bottom percentiles trimmed.", /// + size(vsmall)) + + graph export /// + "$dir_output_files/income/equivalised_disposable_income/validation_${country}_equivalised_disposable_income_bu_dist_`year'.png", /// + replace width(2560) height(1440) + +} + +graph drop _all + + +******************************************************************************** +* 2 : Histograms by year, and by category of weekly labour supply, ben unit +******************************************************************************** + +* Prepare validation data +use year demAge dwt valid_yDispBuEquivYear valid_labHrsWorkEnumWeek using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if inrange(demAge,18,65) + +* Trim outliers +if "$trim_outliers" == "true" { + + sum valid_yDispBuEquivYear, d + + replace valid_yDispBuEquivYear = . if /// + valid_yDispBuEquivYear < r(p1) | valid_yDispBuEquivYear > r(p99) + +} + +* Prepare info needed for dynamic y axis labels +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + twoway__histogram_gen valid_yDispBuEquivYear if year == `year' , /// + width(250) den gen(d_valid v2) + + qui sum d_valid + gen max_d_valid_`year' = r(max) + + drop d_valid v2 + + foreach ls in $ls_cat { + + twoway__histogram_gen valid_yDispBuEquivYear if /// + year == `year' & valid_labHrsWorkEnumWeek == "`ls'", width(250) /// + den gen(d_valid v2) + + qui sum d_valid + gen max_d_valid_`year'_`ls' = r(max) + + drop d_valid v2 + + } +} + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year demAge sim_yDispEquivYear sim_labHrsWorkEnumWeek using /// + "$dir_data/simulation_sample.dta", clear + +keep if inrange(demAge,18,65) + +* Trim outliers +if "$trim_outliers" == "true" { + + sum sim_yDispEquivYear, d + + replace sim_yDispEquivYear = . if /// + sim_yDispEquivYear < r(p1) | sim_yDispEquivYear > r(p99) + +} + +keep if run == 1 + +append using "$dir_data/temp_valid_stats.dta" + +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + * Prepare info needed for dynamic y axis labels + twoway__histogram_gen sim_yDispEquivYear if year == `year', width(250) /// + den gen(d_sim v1) + + qui sum d_sim + gen max_d_sim = r(max) + + gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim + replace max_value = max_d_sim if max_value == . + + sum max_value + local max_y = 1.25*r(max) + local steps = `max_y'/2 + + * Plot all hours + twoway (hist sim_yDispEquivYear if year == `year', width(250) /// + color(green%30) legend(label(1 "SimPaths"))) /// + (hist valid_yDispBuEquivYear if year == `year', width(250) color(red%30) /// + legend(label(2 "SILC"))) , /// + subtitle("ALL hours") /// + xtitle("Euro", size(small)) /// + ytitle("Density", size(small)) /// + name(eqdisp_inc_`year'_all, replace) /// + xlabel(,labsize(vsmall) angle(forty_five)) /// + ylabel(0(`steps')`max_y', labsize(vsmall)) /// + legend(size(small)) /// + graphregion(color(white)) + + drop d_sim v1 max_d_sim max_value + + foreach ls in $ls_cat { + + * Prepare info needed for dynamic y axis labels + twoway__histogram_gen sim_yDispEquivYear if year == `year' & /// + sim_labHrsWorkEnumWeek == "`ls'", width(250) den gen(d_sim v1) + + qui sum d_sim + gen max_d_sim = r(max) + + gen max_value = max_d_valid_`year'_`ls' if /// + max_d_valid_`year'_`ls' > max_d_sim + replace max_value = max_d_sim if max_value == . + + sum max_value + local max_y = 1.25*r(max) + local steps = `max_y'/2 + + twoway (hist sim_yDispEquivYear if year == `year' & /// + sim_labHrsWorkEnumWeek == "`ls'", width(250) /// + color(green%30) legend(label(1 "SimPaths"))) /// + (hist valid_yDispBuEquivYear if year == `year' & /// + valid_labHrsWorkEnumWeek == "`ls'", width(250) color(red%30) /// + legend(label(2 "SILC"))) , /// + subtitle("`ls' hours") /// + name(eqdisp_inc_`year'_`ls', replace) /// + xtitle("Euro", size(small)) /// + ytitle("Density", size(small)) /// + xlabel(,labsize(vsmall) angle(forty_five)) /// + ylabel(0(`steps')`max_y', labsize(vsmall)) /// + legend(size(small)) /// + graphregion(color(white)) + + drop d_sim v1 max_d_sim max_value + + } +} + +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forvalues year = `min_year'/`max_year' { + + grc1leg eqdisp_inc_`year'_all /// + eqdisp_inc_`year'_ZERO /// + eqdisp_inc_`year'_TWENTY /// + eqdisp_inc_`year'_FORTY /// + eqdisp_inc_`year'_FIFTY , /// + title("Equivalised Disposable Income") /// + subtitle("`year'") /// + legendfrom(eqdisp_inc_`year'_all) /// + rows(2) /// + graphregion(color(white)) /// + note("Notes: Distribution of benefit unit equivalised disposable income. Individual level data plotted 18-65 year olds included in sample. Amounts in" "Euro per year, 2015 prices. Top and bottom percentiles trimmed.", /// + size(vsmall)) + + graph export /// + "$dir_output_files/income/equivalised_disposable_income/validation_${country}_equivalised_disposable_inc_dist_`year'.png", /// + replace width(2560) height(1440) + + +} + +graph drop _all + diff --git a/validation/02_simulation_validation/do_files/04_09_plot_hourly_wages.do b/validation/02_simulation_validation/do_files/04_09_plot_hourly_wages.do new file mode 100644 index 0000000..9bf7ec0 --- /dev/null +++ b/validation/02_simulation_validation/do_files/04_09_plot_hourly_wages.do @@ -0,0 +1,572 @@ +******************************************************************************** +* PROJECT: SimPaths EU +* SECTION: Validation +* OBJECT: Hourly wages +* AUTHORS: Ashley Burdett +* LAST UPDATE: April 2026 +* COUNTRY: EU +******************************************************************************** +* NOTES: This master do file organises do files used for validating +* SimPaths model using SILC data. +******************************************************************************** + +******************************************************************************** +* 1 : Mean values over time +******************************************************************************** + +******************************************************************************** +* 1.1 : Mean values over time - 16-65 +******************************************************************************** + +* Prepare validation data +use year demAge dwt labC4 valid_wage using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + + +* Select sample +keep if labC4 == 1 +keep if inrange(demAge,16,65) + +* Trim outliers +if "$trim_outliers" == "true" { + + sum valid_wage, d + + replace valid_wage = . if /// + valid_wage < r(p1) | valid_wage > r(p99) + +} + +* Compute means +collapse (mean) valid_wage [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year labC4 sim_pred_wage demAge using /// + "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if labC4 == "EmployedOrSelfEmployed" +keep if inrange(demAge,16,65) + +* Trim outliers +if "$trim_outliers" == "true" { + + sum sim_pred_wage, d + + replace sim_pred_wage = . if /// + sim_pred_wage < r(p1) | sim_pred_wage > r(p99) + +} + +* Compute means and sd +collapse (mean) sim_pred_wage, by(run year) + +collapse (mean) sim_pred_wage /// + (sd) sim_pred_wage_sd = sim_pred_wage /// + , by(year) + +* Approx 95% confidence interval +foreach varname in sim_pred_wage { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +* Combine datasets +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +twoway (rarea sim_pred_wage_high /// + sim_pred_wage_low year, /// + sort color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_wage year, sort color(green) /// + legend(label(2 "SILC"))), /// + title("Hourly Wage") /// + subtitle("Ages 16-65") /// + xtitle("Year", size(small)) /// + ytitle("Euro per hour", size(small)) /// + ylabel(,labsize(small)) /// + xlabel(,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: Statistics calculated on sample of employed and self-employed individuals. Amounts in 2015 prices.""Top and bottom percentiles trimmed.", /// + size(vsmall)) + +* Save figure +graph export /// +"$dir_output_files/wages/validation_${country}_wages_ts_16_65_both.jpg", /// + replace width(2560) height(1440) quality(100) + + +******************************************************************************** +* 1.2 : Mean values over time - 16-65, by gender +******************************************************************************** + +* Prepare validation data +use year demAge dwt labC4 valid_wage demMaleFlag using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* select sample +keep if labC4 == 1 +keep if inrange(demAge,16,65) + +* Trim outliers +if "$trim_outliers" == "true" { + + sum valid_wage, d + + replace valid_wage = . if /// + valid_wage < r(p1) | valid_wage > r(p99) + +} + +* Compute mean +collapse (mean) valid_wage [aw = dwt], by(year demMaleFlag) + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year labC4 sim_pred_wage demMaleFlag demAge using /// + "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if labC4 == "EmployedOrSelfEmployed" +keep if inrange(demAge,16,65) + +* Trim outliers +if "$trim_outliers" == "true" { + + sum sim_pred_wage , d + + replace sim_pred_wage = . if /// + sim_pred_wage < r(p1) | sim_pred_wage > r(p99) + +} + +collapse (mean) sim_pred_wage, by(run year demMaleFlag) + +collapse (mean) sim_pred_wage /// + (sd) sim_pred_wage_sd = sim_pred_wage /// + , by(year demMaleFlag) + +foreach varname in sim_pred_wage { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year demMaleFlag using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +twoway (rarea sim_pred_wage_high /// + sim_pred_wage_low year if demMaleFlag == 0, /// + sort color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_wage year if demMaleFlag == 0, sort color(green) /// + legend(label(2 "SILC"))), /// + subtitle("Females") /// + name(wages_female, replace) /// + xtitle("Year", size(small)) /// + ytitle("Euro per hour", size(small)) /// + ylabel(,labsize(small)) /// + xlabel(,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) + +twoway (rarea sim_pred_wage_high /// + sim_pred_wage_low year if demMaleFlag == 1, /// + sort color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_wage year if demMaleFlag == 1, sort color(green) /// + legend(label(2 "SILC"))), /// + subtitle("Males") /// + name(wages_male, replace) /// + xtitle("Year", size(small)) /// + ytitle("Euro per hour", size(small)) /// + ylabel(,labsize(small)) /// + xlabel(,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) + + +grc1leg wages_female wages_male, /// + title("Hourly Wage") /// + subtitle("Ages 16-65") /// + legendfrom(wages_female) rows(1) /// + graphregion(color(white)) /// + ycomm /// + note("Notes: Statistics calculated on sample of employed anf self-employed individuals. Amounts in 2015 prices. Top and bottom" "percentiles trimmed.", /// + size(vsmall)) + +* Save figure +graph export /// +"$dir_output_files/wages/validation_${country}_wages_ts_16_65_gender.jpg", /// + replace width(2560) height(1440) quality(100) + +graph drop _all + + +******************************************************************************** +* 2 : Histograms by year +******************************************************************************** + +******************************************************************************** +* 2.1 : Histograms by year - ages 16-65 +******************************************************************************** + +* Prepare validation data +use year demAge dwt labC4 valid_wage demAge flag_wage_imp_panel /// + flag_wage_hotdeck using "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if labC4 == 1 +keep if inrange(demAge,16,65) + +drop labC4 + +* Trim outliers +if "$trim_outliers" == "true" { + + sum valid_wage, d + + replace valid_wage = . if /// + valid_wage < r(p1) | valid_wage > r(p99) + +} + +* Prepare info needed for dynamic y axis labels +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + twoway__histogram_gen valid_wage if year == `year' , /// + bin(10) den gen(d_valid v2) + + qui sum d_valid + gen max_d_valid_`year' = r(max) + + drop d_valid v2 + +} + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year labC4 sim_pred_wage demAge using /// + "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if labC4 == "EmployedOrSelfEmployed" +keep if inrange(demAge,16,65) + +drop labC4 + +* Trim outliers +if "$trim_outliers" == "true" { + + sum sim_pred_wage, d + + replace sim_pred_wage = . if /// + sim_pred_wage < r(p1) | sim_pred_wage > r(p99) + +} + +append using "$dir_data/temp_valid_stats.dta" + +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + * Prepare info needed for dynamic y axis labels + twoway__histogram_gen sim_pred_wage if year == `year', /// + bin(5) den gen(d_sim v1) + + qui sum d_sim + gen max_d_sim = r(max) + + gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim + replace max_value = max_d_sim if max_value == . + + sum max_value + local max_y = 1.25*r(max) + local steps = `max_y'/2 + + * Plot all hours + twoway (hist sim_pred_wage if year == `year', /// + width(0.5) color(green%30) legend(label(1 "SimPaths"))) /// + (hist valid_wage if year == `year', width(0.5) color(red%30) /// + legend(label(2 "SILC"))) , /// + title("Hourly Wage") /// + subtitle("`year'") /// + name(hourly_wages_`year'_all, replace) /// + xtitle("Euro per hour", size(small)) /// + ytitle("Density", size(small)) /// + xlabel(,labsize(small)) /// + ylabel(, labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: Statistics calculated on subsample of employed and self-employed individuals aged 16-65. Amounts in 2015 prices.""Top percentiles and bottom percentiles trimmed.", size(vsmall)) + + graph export /// + "$dir_output_files/wages/validation_${country}_wages_dist_`year'.png", /// + replace width(2400) height(1350) + + drop d_sim v1 max_d_sim max_value + +} + +graph drop _all + + +******************************************************************************** +* 2.2 : Histograms by year - ages 16-65 by gender +******************************************************************************** + +* Females +* Prepare validation data +use year demAge dwt labC4 valid_wage demMaleFlag demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if labC4 == 1 +keep if demMaleFlag == 0 +keep if inrange(demAge,16,65) + +drop labC4 demMaleFlag + +* Trim outliers +if "$trim_outliers" == "true" { + + sum valid_wage, d + + replace valid_wage = . if /// + valid_wage < r(p1) | valid_wage > r(p99) + +} + +* Prepare info needed for dynamic y axis labels +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + twoway__histogram_gen valid_wage if year == `year' , /// + bin(10) den gen(d_valid v2) + + qui sum d_valid + gen max_d_valid_`year' = r(max) + + drop d_valid v2 + +} + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year labC4 sim_pred_wage demMaleFlag demAge using /// + "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if labC4 == "EmployedOrSelfEmployed" +keep if demMaleFlag == 0 +keep if inrange(demAge,16,65) + +drop labC4 demMaleFlag + +* Trim outliers +if "$trim_outliers" == "true" { + + sum sim_pred_wage, d + + replace sim_pred_wage = . if /// + sim_pred_wage < r(p1) | sim_pred_wage > r(p99) + +} + +append using "$dir_data/temp_valid_stats.dta" + +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + * Prepare info needed for dynamic y axis labels + twoway__histogram_gen sim_pred_wage if year == `year', /// + bin(10) den gen(d_sim v1) + + qui sum d_sim + gen max_d_sim = r(max) + + gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim + replace max_value = max_d_sim if max_value == . + + sum max_value + local max_y = 1.25*r(max) + local steps = `max_y'/2 + + * Plot all hours + twoway (hist sim_pred_wage if year == `year', /// + width(0.5) color(green%30) legend(label(1 "SimPaths"))) /// + (hist valid_wage if year == `year', width(0.5) color(red%30) /// + legend(label(2 "SILC"))) , /// + title("Hourly Wage") /// + subtitle("`year', females") /// + name(hourly_wages_`year'_all, replace) /// + xtitle("Euro per hour", size(small)) /// + ytitle("Density", size(small)) /// + xlabel(,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: Statistics calculated on subsample of employed and self-employed individuals aged 16-65. Amounts in 2015 prices.""Top and bottom percentails trimmed.", size(vsmall)) + + graph export /// + "$dir_output_files/wages/validation_${country}_wages_dist_`year'_female.png", /// + replace width(2400) height(1350) + + drop d_sim v1 max_d_sim max_value + +} + + +* Males +* Prepare validation data +use year demAge dwt labC4 valid_wage demMaleFlag using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if labC4 == 1 +keep if demMaleFlag == 1 +drop if inrange(demAge,16,65) + +drop labC4 demMaleFlag + +* Trim outliers +if "$trim_outliers" == "true" { + + sum valid_wage, d + + replace valid_wage = . if /// + valid_wage < r(p1) | valid_wage > r(p99) + +} + +* Prepare info needed for dynamic y axis labels +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + twoway__histogram_gen valid_wage if year == `year' , /// + bin(10) den gen(d_valid v2) + + qui sum d_valid + gen max_d_valid_`year' = r(max) + + drop d_valid v2 + +} + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year labC4 sim_pred_wage demMaleFlag demAge using /// + "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if labC4 == "EmployedOrSelfEmployed" +keep if demMaleFlag == 1 +keep if inrange(demAge,16,65) + +drop labC4 demMaleFlag + +* Trim outliers +if "$trim_outliers" == "true" { + + sum sim_pred_wage, d + + replace sim_pred_wage = . if /// + sim_pred_wage < r(p1) | sim_pred_wage > r(p99) + +} + +append using "$dir_data/temp_valid_stats.dta" + +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + * Prepare info needed for dynamic y axis labels + twoway__histogram_gen sim_pred_wage if year == `year', /// + bin(10) den gen(d_sim v1) + + qui sum d_sim + gen max_d_sim = r(max) + + gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim + replace max_value = max_d_sim if max_value == . + + sum max_value + local max_y = 1.25*r(max) + local steps = `max_y'/2 + + * Plot all hours + twoway (hist sim_pred_wage if year == `year', /// + width(0.5) color(green%30) legend(label(1 "SimPaths"))) /// + (hist valid_wage if year == `year', width(0.5) color(red%30) /// + legend(label(2 "SILC"))) , /// + title("Hourly Wage") /// + subtitle("`year', males") /// + name(hourly_wages_`year'_all, replace) /// + xtitle("Euro per hour", size(small)) /// + ytitle("Density", size(small)) /// + xlabel(,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: Statistics calculated on subsample of employed and self-employed individuals aged 16-65. Amounts in 2015 prices.""Top and bottom percentiles trimmed.", size(vsmall)) + + + graph export /// + "$dir_output_files/wages/validation_${country}_wages_dist_`year'_male.png", /// + replace width(2400) height(1350) + + drop d_sim v1 max_d_sim max_value + + +} + + +graph drop _all diff --git a/validation/02_simulation_validation/do_files/04_10_0_plot_hours_worked.do b/validation/02_simulation_validation/do_files/04_10_0_plot_hours_worked.do new file mode 100644 index 0000000..d448fbf --- /dev/null +++ b/validation/02_simulation_validation/do_files/04_10_0_plot_hours_worked.do @@ -0,0 +1,2077 @@ +******************************************************************************** +* PROJECT: SimPaths EU +* SECTION: Validation +* OBJECT: Hours worked per week +* AUTHORS: Ashley Burdett +* LAST UPDATE: Jan 2026 +* COUNTRY: PL +******************************************************************************** +* NOTES: Current implementation explores the impact how the +* heterogeneity of the upper most category is instructed. +******************************************************************************** + +set seed 12345 + +******************************************************************************** +* UNIFORM HETEROGENIETY +******************************************************************************** + +******************************************************************************** +* 1 : Mean values over time +******************************************************************************** + +******************************************************************************** +* 1.1 : Mean values over time - Ages 16-65 +******************************************************************************** + +* Prepare validation data +use year dwt labC4 valid_labHrsWorkWeek demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if labC4 == 1 +keep if inrange(demAge,16,65) + +* Compute mean +collapse (mean) valid_labHrsWorkWeek [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year idPers labC4 sim_labHrsWorkWeek demAge using /// + "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if inrange(demAge,16,65) + +rename sim_labHrsWorkWeek sim_labHrsWorkWeek + +* Keep only employed individuals +keep if labC4 == "EmployedOrSelfEmployed" + +* Compute mean and sd +collapse (mean) sim_labHrsWorkWeek, by(run year) + +collapse (mean) sim_labHrsWorkWeek /// + (sd) sim_labHrsWorkWeek_sd = sim_labHrsWorkWeek /// + , by(year) + +* Approx 95% confidence interval +foreach varname in sim_labHrsWorkWeek { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +save "$dir_data/temp_sim_mean_uni.dta", replace + +* Combine datasets +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +twoway (rarea sim_labHrsWorkWeek_high sim_labHrsWorkWeek_low year, sort /// + color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_labHrsWorkWeek year, sort color(green) legend(label(2 "SILC"))), /// + title("Average Weekly Hours Worked") /// + subtitle("Ages 16-65") /// + xtitle("Year", size(small)) /// + ytitle("Hours per week", size(small)) /// + ylabel(,labsize(small)) /// + xlabel(,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Note: Statistics calculated on sample of working age employed and self-employed individuals.", /// + size(vsmall)) + +* Save figure +graph export /// +"$dir_output_files/hours_worked/validation_${country}_hours_worked_ts_16_65_both.jpg", /// + replace width(2560) height(1440) quality(100) + + +******************************************************************************** +* 1.2 : Mean values over time - Ages 16-65, by gender +******************************************************************************** + +* Prepare validation data +use year dwt labC4 valid_labHrsWorkWeek demAge demMaleFlag using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if labC4 == 1 +keep if inrange(demAge,16,65) + +* Compute mean +collapse (mean) valid_labHrsWorkWeek [aw = dwt], by(year demMaleFlag) + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year idPers labC4 sim_labHrsWorkWeek demAge demMaleFlag using /// + "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if labC4 == "EmployedOrSelfEmployed" +keep if inrange(demAge,16,65) + +* Compute mean and sd +collapse (mean) sim_labHrsWorkWeek, by(run year demMaleFlag) + +collapse (mean) sim_labHrsWorkWeek /// + (sd) sim_labHrsWorkWeek_sd = sim_labHrsWorkWeek /// + , by(year demMaleFlag) + +* Approx 95% confidence interval +foreach varname in sim_labHrsWorkWeek { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +* Combine datasets +merge 1:1 year demMaleFlag using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure + +* Males +preserve + +keep if demMaleFlag == 1 + +twoway (rarea sim_labHrsWorkWeek_high sim_labHrsWorkWeek_low year, sort /// + color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_labHrsWorkWeek year, sort color(green) legend(label(2 "SILC"))), /// + title("Average Weekly Hours Worked") /// + subtitle("Males, ages 16-65") /// + xtitle("Year", size(small)) /// + ytitle("Hours per week", size(small)) /// + ylabel(,labsize(small)) /// + xlabel(,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Note: Statistics calculated on sample of working age employed and self-employed individuals.", /// + size(vsmall)) + +* Save figure +graph export /// +"$dir_output_files/hours_worked/validation_${country}_hours_worked_ts_16_65_male.jpg", /// + replace width(2560) height(1440) quality(100) + +restore + +* Females + +keep if demMaleFlag == 0 + +twoway (rarea sim_labHrsWorkWeek_high sim_labHrsWorkWeek_low year, sort /// + color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_labHrsWorkWeek year, sort color(green) legend(label(2 "SILC"))), /// + title("Average Weekly Hours Worked") /// + subtitle("Females, ages 16-65") /// + xtitle("Year", size(small)) /// + ytitle("Hours per week", size(small)) /// + ylabel(,labsize(small)) /// + xlabel(,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Note: Statistics calculated on sample of working age employed and self-employed individuals.", /// + size(vsmall)) + +* Save figure +graph export /// +"$dir_output_files/hours_worked/validation_${country}_hours_worked_ts_16_65_female.jpg", /// + replace width(2560) height(1440) quality(100) + + +******************************************************************************** +* 1.3 : Mean values over time - Ages 16-75 +******************************************************************************** + +* Prepare validation data +use year dwt labC4 valid_labHrsWorkWeek demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if labC4 == 1 +keep if inrange(demAge,16,75) + +* Compute mean +collapse (mean) valid_labHrsWorkWeek [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year idPers labC4 sim_labHrsWorkWeek demAge using /// + "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if inrange(demAge,16,75) + +* Keep only employed individuals +keep if labC4 == "EmployedOrSelfEmployed" + +* Compute mean and sd +collapse (mean) sim_labHrsWorkWeek, by(run year) + +collapse (mean) sim_labHrsWorkWeek /// + (sd) sim_labHrsWorkWeek_sd = sim_labHrsWorkWeek /// + , by(year) + +* Approx 95% confidence interval +foreach varname in sim_labHrsWorkWeek { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +save "$dir_data/temp_sim_mean_uni.dta", replace + +* Combine datasets +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +twoway (rarea sim_labHrsWorkWeek_high sim_labHrsWorkWeek_low year, sort /// + color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_labHrsWorkWeek year, sort color(green) legend(label(2 "SILC"))), /// + title("Average Weekly Hours Worked") /// + subtitle("Ages 16-75") /// + xtitle("Year", size(small)) /// + ytitle("Hours per week", size(small)) /// + ylabel(,labsize(small)) /// + xlabel(,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Note: Statistics calculated on sample of working age employed and self-employed individuals.", /// + size(vsmall)) + +* Save figure +graph export /// +"$dir_output_files/hours_worked/validation_${country}_hours_worked_ts_16_75_both.jpg", /// + replace width(2560) height(1440) quality(100) + + +******************************************************************************** +* 1.2 : Mean values over time - Ages 16-75, by gender +******************************************************************************** + +* Prepare validation data +use year dwt labC4 valid_labHrsWorkWeek demAge demMaleFlag using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if labC4 == 1 +keep if inrange(demAge,16,75) + +* Compute mean +collapse (mean) valid_labHrsWorkWeek [aw = dwt], by(year demMaleFlag) + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year idPers labC4 sim_labHrsWorkWeek demAge demMaleFlag using /// + "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if labC4 == "EmployedOrSelfEmployed" +keep if inrange(demAge,16,75) + +* Compute mean and sd +collapse (mean) sim_labHrsWorkWeek, by(run year demMaleFlag) + +collapse (mean) sim_labHrsWorkWeek /// + (sd) sim_labHrsWorkWeek_sd = sim_labHrsWorkWeek /// + , by(year demMaleFlag) + +* Approx 95% confidence interval +foreach varname in sim_labHrsWorkWeek { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +* Combine datasets +merge 1:1 year demMaleFlag using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figures + +* Male +preserve + +keep if demMaleFlag == 1 + +twoway (rarea sim_labHrsWorkWeek_high sim_labHrsWorkWeek_low year, sort /// + color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_labHrsWorkWeek year, sort color(green) legend(label(2 "SILC"))), /// + title("Average Weekly Hours Worked") /// + subtitle("Males, ages 16-75") /// + xtitle("Year", size(small)) /// + ytitle("Hours per week", size(small)) /// + ylabel(,labsize(small)) /// + xlabel(,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Note: Statistics calculated on sample of working age employed and self-employed individuals.", /// + size(vsmall)) + +* Save figure +graph export /// +"$dir_output_files/hours_worked/validation_${country}_hours_worked_ts_16_75_male.jpg", /// + replace width(2560) height(1440) quality(100) + +restore + +* Females + +keep if demMaleFlag == 0 + +twoway (rarea sim_labHrsWorkWeek_high sim_labHrsWorkWeek_low year, /// + sort color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_labHrsWorkWeek year, sort color(green) /// + legend(label(2 "SILC"))), /// + title("Average Weekly Hours Worked") /// + subtitle("Females, ages 16-75") /// + xtitle("Year", size(small)) /// + ytitle("Hours per week", size(small)) /// + ylabel(,labsize(small)) /// + xlabel(,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Note: Statistics calculated on sample of working age employed and self-employed individuals.", /// + size(vsmall)) + +* Save figure +graph export /// +"$dir_output_files/hours_worked/validation_${country}_hours_worked_ts_16_75_female.jpg", /// + replace width(2560) height(1440) quality(100) + + +******************************************************************************** +* 2 : Histograms by year +******************************************************************************** + +******************************************************************************** +* 2.1 : Histograms by year - ages 16-65 +******************************************************************************** + +* Prepare validation data +use year dwt labC4 valid_labHrsWorkWeek demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if labC4 == 1 +keep if inrange(demAge,16,65) + +* Prepare info needed for dynamic y axis labels +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + twoway__histogram_gen valid_labHrsWorkWeek if year == `year' , /// + bin(60) den gen(d_valid v2) + + qui sum d_valid + gen max_d_valid_`year' = r(max) + + drop d_valid v2 + +} + +drop labC4 + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year labC4 idPers sim_labHrsWorkWeek demAge using /// + "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if labC4 == "EmployedOrSelfEmployed" +keep if inrange(demAge,16,65) + +* Combine datasets +append using "$dir_data/temp_valid_stats.dta" + +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + * Prepare info needed for dynamic y axis labels + twoway__histogram_gen sim_labHrsWorkWeek if year == `year', bin(60) /// + den gen(d_sim v1) + + qui sum d_sim + gen max_d_sim = r(max) + + gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim + replace max_value = max_d_sim if max_value == . + + sum max_value + local max_y = 1.25*r(max) + local steps = `max_y'/2 + + twoway (hist sim_labHrsWorkWeek if year == `year', width(1) /// + color(green%30) legend(label(1 "SimPaths"))) /// + (hist valid_labHrsWorkWeek if year == `year', width(1) color(red%30) /// + legend(label(2 "SILC"))), /// + title("Weekly Hours Worked") /// + subtitle(" `year', ages 16-65") /// + xtitle("Hours per week", size(small)) /// + ytitle("Density", size(small)) /// + xlabel(,labsize(small)) /// + ylabel(0(`steps')`max_y', labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Note: Statistics calculated on sample of employed and self-employed individuals.", /// + size(vsmall)) + + graph export /// + "$dir_output_files/hours_worked/validation_${country}_hours_worked_hist_`year'.png", /// + replace width(2400) height(1350) + + drop d_sim v1 max_d_sim max_value + +} + +******************************************************************************** +* 2.2 : Histograms by year - ages 16-65, by gender +******************************************************************************** + +* Female + +* Prepare validation data +use year dwt labC4 valid_labHrsWorkWeek demMaleFlag demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if labC4 == 1 +keep if demMaleFlag == 0 +keep if inrange(demAge,16,65) + +* Prepare info needed for dynamic y axis labels +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + twoway__histogram_gen valid_labHrsWorkWeek if year == `year' , /// + bin(60) den gen(d_valid v2) + + qui sum d_valid + gen max_d_valid_`year' = r(max) + + drop d_valid v2 + +} + +drop labC4 demMaleFlag + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run idPers year labC4 demMaleFlag sim_labHrsWorkWeek demAge using /// + "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if labC4 == "EmployedOrSelfEmployed" +keep if demMaleFlag == 0 +keep if inrange(demAge,16,65) + +* Combine datasets +append using "$dir_data/temp_valid_stats.dta" + +* Plot by year +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + * Prepare info needed for dynamic y axis labels + twoway__histogram_gen sim_labHrsWorkWeek if year == `year', bin(60) /// + den gen(d_sim v1) + + qui sum d_sim + gen max_d_sim = r(max) + + gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim + replace max_value = max_d_sim if max_value == . + + sum max_value + local max_y = 1.25*r(max) + local steps = `max_y'/2 + + twoway (hist sim_labHrsWorkWeek if year == `year', width(1) /// + color(green%30) legend(label(1 "SimPaths"))) /// + (hist valid_labHrsWorkWeek if year == `year', width(1) color(red%30) /// + legend(label(2 "SILC"))), /// + title("Weekly Hours Worked") /// + subtitle("`year', females, ages 16-65") /// + xtitle("Hours per week", size(small)) /// + ytitle("Density", size(small)) /// + xlabel(,labsize(small)) /// + ylabel(0(`steps')`max_y', labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Note: Statistics calculated on sample of employed and self-employed females.", /// + size(vsmall)) + + graph export /// + "$dir_output_files/hours_worked/validation_${country}_hours_worked_hist_`year'_female.png", /// + replace width(2400) height(1350) + + drop d_sim v1 max_d_sim max_value + +} + + +* Male + +* Prepare validation data +use year dwt labC4 valid_labHrsWorkWeek demMaleFlag demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if labC4 == 1 +keep if demMaleFlag == 1 +keep if inrange(demAge,16,65) + +* Prepare info needed for dynamic y axis labels +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + twoway__histogram_gen valid_labHrsWorkWeek if year == `year' , /// + bin(60) den gen(d_valid v2) + + qui sum d_valid + gen max_d_valid_`year' = r(max) + + drop d_valid v2 + +} + +drop labC4 demMaleFlag + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run idPers year labC4 demMaleFlag sim_labHrsWorkWeek demAge using /// + "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if labC4 == "EmployedOrSelfEmployed" +keep if demMaleFlag == 1 +keep if inrange(demAge,16,65) + +* Combine datasets +append using "$dir_data/temp_valid_stats.dta" + +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + * Prepare info needed for dynamic y axis labels + twoway__histogram_gen sim_labHrsWorkWeek if year == `year', bin(60) /// + den gen(d_sim v1) + + qui sum d_sim + gen max_d_sim = r(max) + + gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim + replace max_value = max_d_sim if max_value == . + + sum max_value + local max_y = 1.25*r(max) + local steps = `max_y'/2 + + twoway (hist sim_labHrsWorkWeek if year == `year' , width(1) /// + color(green%30) legend(label(1 "SimPaths"))) /// + (hist valid_labHrsWorkWeek if year == `year' , width(1) color(red%30) /// + legend(label(2 "SILC"))), /// + title("Weekly Hours Worked") /// + subtitle("`year', males, ages 16-65") /// + xtitle("Hours per week", size(small)) /// + ytitle("Density", size(small)) /// + xlabel(,labsize(small)) /// + ylabel(0(`steps')`max_y', labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Note: Statistics calculated on sample of employed and self-employed males.", /// + size(vsmall)) + + + graph export /// + "$dir_output_files/hours_worked/validation_${country}_hours_worked_hist_`year'_male.png", /// + replace width(2400) height(1350) + + drop d_sim v1 max_d_sim max_value +} + + +graph drop _all + + +******************************************************************************** +* 2.3 : Histograms by year - ages 16-75 +******************************************************************************** + +* Prepare validation data +use year dwt labC4 valid_labHrsWorkWeek demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if labC4 == 1 +keep if inrange(demAge,16,75) + +* Prepare info needed for dynamic y axis labels +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + twoway__histogram_gen valid_labHrsWorkWeek if year == `year' , /// + bin(60) den gen(d_valid v2) + + qui sum d_valid + gen max_d_valid_`year' = r(max) + + drop d_valid v2 + +} + +drop labC4 + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year labC4 idPers sim_labHrsWorkWeek demAge using /// + "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if labC4 == "EmployedOrSelfEmployed" +keep if inrange(demAge,16,75) + +* Combine datasets +append using "$dir_data/temp_valid_stats.dta" + +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = 2023 +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + * Prepare info needed for dynamic y axis labels + twoway__histogram_gen sim_labHrsWorkWeek if year == `year', bin(60) /// + den gen(d_sim v1) + + qui sum d_sim + gen max_d_sim = r(max) + + gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim + replace max_value = max_d_sim if max_value == . + + sum max_value + local max_y = 1.25*r(max) + local steps = `max_y'/2 + + twoway (hist sim_labHrsWorkWeek if year == `year', width(1) /// + color(green%30) legend(label(1 "SimPaths"))) /// + (hist valid_labHrsWorkWeek if year == `year', width(1) color(red%30) /// + legend(label(2 "SILC"))), /// + title("Weekly Hours Worked") /// + subtitle("Ages 16-75, `year'") /// + xtitle("Hours per week", size(small)) /// + ytitle("Density", size(small)) /// + xlabel(,labsize(small)) /// + ylabel(0(`steps')`max_y', labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Note: Statistics calculated on sample of employed and self-employed individuals.", /// + size(vsmall)) + + graph export /// + "$dir_output_files/hours_worked/validation_${country}_hours_worked_hist_`year'_16_75.png", /// + replace width(2400) height(1350) + + drop d_sim v1 max_d_sim max_value + +} + +graph drop _all + +/* + +******************************************************************************** +* LOG-NORMAL HETEROGENIETY +******************************************************************************** + +******************************************************************************** +* 0 : IMPUTATION OF valid_labHrsWorkWeek WORK FOR THOSE IN TOP CATEGORY, LOG NORMAL +******************************************************************************** + +* Estimate parameters of truncated log normal distribution fit to SILC +use year dwt labC4 valid_labHrsWorkWeek demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if inrange(demAge,16,65) +keep if labC4 == 1 +//remove those that report working very low >0 valid_labHrsWorkWeek + +drop labC4 + +* Keep those in top valid_labHrsWorkWeek category +keep if valid_labHrsWorkWeek >= 50 & valid_labHrsWorkWeek != . + +* Proportion of the top group that work 40 valid_labHrsWorkWeek +gen exact_40 = (valid_labHrsWorkWeek == 40) + +preserve +collapse (mean) exact_40 [aw=dwt] +local valid_share_40 = exact_40 +restore + +* Create log variable +gen ln_y = ln(valid_labHrsWorkWeek) + +* Non-truncation +sum ln_y + +* Set truncation points (using observed range) +sum valid_labHrsWorkWeek +local a = r(min) +local b = r(max) +local ln_a = ln(`a') +local ln_b = ln(`b') + +* Estimate parameters +truncreg ln_y, ll(`ln_a') ul(`ln_b') nolog + +* Results +matrix b = e(b) +local mu_hat = b[1,1] +local sigma_hat = b[1,2] +local median_est = exp(`mu_hat') +local mean_est = exp(`mu_hat' + `sigma_hat'^2/2) + +* Generate new values directly in simulated dataset +use run idPers year labC4 sim_labHrsWorkWeek using /// + "$dir_data/simulation_sample.dta", clear + +rename sim_labHrsWorkWeek labHrsWorkWeek + +* Select sample +keep if labC4 == "EmployedOrSelfEmployed" + +* Observations to be adjusted +gen top = 1 if labHrsWorkWeek > 35 + +gen new_sim_labHrsWorkWeek = labHrsWorkWeek + +* Calculate the CDF bounds once +local Fa = normal((`ln_a' - `mu_hat')/`sigma_hat') +local Fb = normal((`ln_b' - `mu_hat')/`sigma_hat') + +* For observations with valid_labHrsWorkWeek >= 36, generate random values +replace new_sim_labHrsWorkWeek = exp(`mu_hat' + `sigma_hat' * /// + invnormal(`Fa' + runiform()*(`Fb' - `Fa'))) /// + if top == 1 + +keep run year idPers new_sim_labHrsWorkWeek top + +save "$dir_data/simulation_sample_hrs_adjusted.dta", replace + + +******************************************************************************** +* 1 : Mean values over time +******************************************************************************** + +******************************************************************************** +* 1.1 : Mean values over time - Ages 16-65 +******************************************************************************** + +* Prepare validation data +use year dwt labC4 valid_labHrsWorkWeek demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if labC4 == 1 +keep if inrange(demAge,16,65) + +* Compute mean +collapse (mean) valid_labHrsWorkWeek [aw = dwt], by(year) + +save "$dir_data/temp_valid_mean.dta", replace + +* Prepare simulated data +use run year idPers labC4 sim_labHrsWorkWeek demAge using /// + "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if inrange(demAge,16,65) + +* Merge in new valid_labHrsWorkWeek worked for top category using log normal distribution +merge 1:1 year run idPers using "$dir_data/simulation_sample_hrs_adjusted.dta" + +rename sim_labHrsWorkWeek sim_labHrsWorkWeek_orig +rename new_sim_labHrsWorkWeek sim_labHrsWorkWeek + +* Keep only employed individuals +keep if labC4 == "EmployedOrSelfEmployed" + +* Compute mean and sd +collapse (mean) sim_labHrsWorkWeek, by(run year) + +collapse (mean) sim_labHrsWorkWeek /// + (sd) sim_labHrsWorkWeek_sd = sim_labHrsWorkWeek /// + , by(year) + +* Approx 95% confidence interval +foreach varname in sim_labHrsWorkWeek { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +save "$dir_data/temp_sim_mean_ln.dta", replace + +* Combine datasets +merge 1:1 year using "$dir_data/temp_valid_mean.dta", keep(3) nogen + +* Plot figure +twoway (rarea sim_labHrsWorkWeek_high sim_labHrsWorkWeek_low year, sort /// + color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_labHrsWorkWeek year, sort color(green) legend(label(2 "SILC"))), /// + title("Average Weekly Hours Worked") /// + subtitle("Ages 16-65") /// + xtitle("Year", size(small)) /// + ytitle("Hours per week", size(small)) /// + ylabel(33 [2] 40 ,labsize(small)) /// + xlabel(,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Note: Statistics calculated on sample of working age employed and self-employed individuals. Log-normal heterogeneity" "imposed on top category.", /// + size(vsmall)) + +* Save figure +graph export /// +"$dir_output_files/hours_worked/validation_${country}_hours_worked_ts_16_65_both_ln.jpg", /// + replace width(2560) height(1440) quality(100) + + +******************************************************************************** +* 1.1.1 : Mean values over time - Ages 16-65, by gender +******************************************************************************** + +* Males + +* Prepare validation data +use year dwt labC4 valid_labHrsWorkWeek demAge demMaleFlag using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if labC4 == 1 + +keep if inrange(demAge,16,65) +keep if demMaleFlag == 1 + +* Compute mean +collapse (mean) valid_labHrsWorkWeek [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year idPers labC4 sim_labHrsWorkWeek demAge demMaleFlag using /// + "$dir_data/simulation_sample.dta", clear + +* Merge in new valid_labHrsWorkWeek worked for top category using log normal distribution +merge 1:1 year run idPers using "$dir_data/simulation_sample_hrs_adjusted.dta" +drop _m + +rename sim_labHrsWorkWeek sim_labHrsWorkWeek_orig +rename new_sim_labHrsWorkWeek sim_labHrsWorkWeek + +* Select sample +keep if demMaleFlag == 1 +keep if labC4 == "EmployedOrSelfEmployed" +keep if inrange(demAge,16,65) + +* Compute mean and sd +collapse (mean) sim_labHrsWorkWeek, by(run year) + +collapse (mean) sim_labHrsWorkWeek /// + (sd) sim_labHrsWorkWeek_sd = sim_labHrsWorkWeek /// + , by(year) + +* Approx 95% confidence interval +foreach varname in sim_labHrsWorkWeek { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +* Combine datasets +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +twoway (rarea sim_labHrsWorkWeek_high sim_labHrsWorkWeek_low year, sort /// + color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_labHrsWorkWeek year, sort color(green) legend(label(2 "SILC"))), /// + title("Average Weekly Hours Worked") /// + subtitle("Males, ages 16-65") /// + xtitle("Year", size(small)) /// + ytitle("Hours per week", size(small)) /// + ylabel(35 [2] 43 ,labsize(small)) /// + xlabel(,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Note: Statistics calculated on sample of working age employed and self-employed individuals. Log-normal heterogeneity" "imposed on top category.", /// + size(vsmall)) + +* Save figure +graph export /// +"$dir_output_files/hours_worked/validation_${country}_hours_worked_ts_16_65_male_ln.jpg", /// + replace width(2560) height(1440) quality(100) + + +* Females + +* Prepare validation data +use year dwt labC4 valid_labHrsWorkWeek demAge demMaleFlag using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if labC4 == 1 +keep if inrange(demAge,16,65) +keep if demMaleFlag == 0 + +* Compute mean +collapse (mean) valid_labHrsWorkWeek [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year idPers labC4 sim_labHrsWorkWeek demAge demMaleFlag using /// + "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if inrange(demAge,16,65) + +* Merge in update valid_labHrsWorkWeek worked for top category +merge 1:1 year run idPers using "$dir_data/simulation_sample_hrs_adjusted.dta" +drop _m + +rename sim_labHrsWorkWeek sim_labHrsWorkWeek_orig +rename new_sim_labHrsWorkWeek sim_labHrsWorkWeek + +* Select sample +keep if demMaleFlag == 0 +keep if labC4 == "EmployedOrSelfEmployed" + +* Compute mean and sd +collapse (mean) sim_labHrsWorkWeek, by(run year) + +collapse (mean) sim_labHrsWorkWeek /// + (sd) sim_labHrsWorkWeek_sd = sim_labHrsWorkWeek /// + , by(year) + +* Approx 95% confidnece interval +foreach varname in sim_labHrsWorkWeek { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + + *Combine datasets +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +twoway (rarea sim_labHrsWorkWeek_high sim_labHrsWorkWeek_low year, sort color(green%20) /// + legend(label(1 "SimPaths"))) /// +(line valid_labHrsWorkWeek year, sort color(green) legend(label(2 "SILC"))), /// + title("Average Weekly Hours Worked") /// + subtitle("Females, ages 16-65") /// + xtitle("Year", size(small)) /// + ytitle("Hours per week", size(small)) /// + ylabel(,labsize(small)) /// + xlabel(,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Note: Statistics calculated on sample of working age employed and self-employed individuals. Log-normal heterogeneity" "imposed on top category.", /// + size(vsmall)) + +* Save figure +graph export /// +"$dir_output_files/hours_worked/validation_${country}_hours_worked_ts_16_65_female_ln.jpg", /// + replace width(2560) height(1440) quality(100) + + + +******************************************************************************** +* 2 : Histograms by year +******************************************************************************** + +******************************************************************************** +* 2.1 : Histograms by year - ages 16-65 +******************************************************************************** + +* Prepare validation data +use year dwt labC4 valid_labHrsWorkWeek demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if labC4 == 1 +keep if inrange(demAge,16,65) + +* Prepare info needed for dynamic y axis labels +qui sum year +local min_year = 2019 +local max_year = r(max) +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + twoway__histogram_gen valid_labHrsWorkWeek if year == `year' , /// + bin(60) den gen(d_valid v2) + + qui sum d_valid + gen max_d_valid_`year' = r(max) + + drop d_valid v2 + +} + +drop labC4 + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year labC4 idPers sim_labHrsWorkWeek demAge using /// + "$dir_data/simulation_sample.dta", clear + + +* Merge in new valid_labHrsWorkWeek worked for top category using log normal distribution +merge 1:1 year run idPers using "$dir_data/simulation_sample_hrs_adjusted.dta" +drop _m + +rename sim_labHrsWorkWeek sim_labHrsWorkWeek_orig +rename new_sim_labHrsWorkWeek sim_labHrsWorkWeek + +* Select sample +keep if labC4 == "EmployedOrSelfEmployed" +keep if inrange(demAge,16,65) + +* Combine datasets +append using "$dir_data/temp_valid_stats.dta" + +qui sum year +local min_year = 2019 +local max_year = r(max) +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + * Prepare info needed for dynamic y axis labels + twoway__histogram_gen sim_labHrsWorkWeek if year == `year', bin(60) /// + den gen(d_sim v1) + + qui sum d_sim + gen max_d_sim = r(max) + + gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim + replace max_value = max_d_sim if max_value == . + + sum max_value + local max_y = 1.25*r(max) + local steps = `max_y'/2 + + twoway (hist sim_labHrsWorkWeek if year == `year' /*& labHrsWorkWeek <= 65*/, width(1) color(green%30) /// + legend(label(1 "SimPaths"))) /// + (hist valid_labHrsWorkWeek if year == `year' /*& valid_labHrsWorkWeek <= 65*/, width(1) color(red%30) /// + legend(label(2 "SILC"))), /// + title("Weekly Hours Worked") /// + subtitle("`year', age 16-65") /// + xtitle("Hours per week", size(small)) /// + ytitle("Density", size(small)) /// + xlabel(,labsize(small)) /// + ylabel(0(`steps')`max_y', labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Note: Statistics calculated on sample of employed and self-employed individuals.", /// + size(vsmall)) + + graph export /// + "$dir_output_files/hours_worked/validation_${country}_hours_worked_hist_`year'_ln.png", /// + replace width(2400) height(1350) + + drop d_sim v1 max_d_sim max_value + +} + +******************************************************************************** +* 2.1.1 : Histograms by year - ages 16-65, by gender +******************************************************************************** + +* Female + +* Prepare validation data +use year dwt labC4 valid_labHrsWorkWeek demMaleFlag demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if labC4 == 1 +keep if demMaleFlag == 0 +keep if inrange(demAge,16,65) + +* Prepare info needed for dynamic y axis labels +qui sum year +local min_year = 2019 +local max_year = r(max) +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + twoway__histogram_gen valid_labHrsWorkWeek if year == `year' , /// + bin(60) den gen(d_valid v2) + + qui sum d_valid + gen max_d_valid_`year' = r(max) + + drop d_valid v2 + +} + +drop labC4 demMaleFlag + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run idPers year labC4 demMaleFlag sim_labHrsWorkWeek demAge using /// + "$dir_data/simulation_sample.dta", clear + +* Merge in new valid_labHrsWorkWeek worked for top category using log normal distribution +merge 1:1 year run idPers using "$dir_data/simulation_sample_hrs_adjusted.dta" +drop _m + +rename sim_labHrsWorkWeek sim_labHrsWorkWeek_orig +rename new_sim_labHrsWorkWeek sim_labHrsWorkWeek + +* Select sample +keep if labC4 == "EmployedOrSelfEmployed" +keep if demMaleFlag == 0 +keep if inrange(demAge,16,65) + +* Combine datasets +append using "$dir_data/temp_valid_stats.dta" + +* Plot by year +qui sum year +local min_year = 2019 +local max_year = r(max) +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + * Prepare info needed for dynamic y axis labels + twoway__histogram_gen sim_labHrsWorkWeek if year == `year', bin(60) /// + den gen(d_sim v1) + + qui sum d_sim + gen max_d_sim = r(max) + + gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim + replace max_value = max_d_sim if max_value == . + + sum max_value + local max_y = 1.25*r(max) + local steps = `max_y'/2 + + twoway (hist sim_labHrsWorkWeek if year == `year', width(1) /// + color(green%30) legend(label(1 "SimPaths"))) /// + (hist valid_labHrsWorkWeek if year == `year', width(1) color(red%30) /// + legend(label(2 "SILC"))), /// + title("Weekly Hours Worked") /// + subtitle("`year', females, ages 16-65") /// + xtitle("Hours per week", size(small)) /// + ytitle("Density", size(small)) /// + xlabel(,labsize(small)) /// + ylabel(0(`steps')`max_y', labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Note: Statistics calculated on sample of employed and self-employed females.", /// + size(vsmall)) + + graph export /// + "$dir_output_files/hours_worked/validation_${country}_hours_worked_hist_`year'_female_ln.png", /// + replace width(2400) height(1350) + + drop d_sim v1 max_d_sim max_value + +} + + +* Male + +* Prepare validation data +use year dwt labC4 valid_labHrsWorkWeek demMaleFlag demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if labC4 == 1 +keep if demMaleFlag == 1 +keep if inrange(demAge,16,65) + +* Prepare info needed for dynamic y axis labels +qui sum year +local min_year = 2019 +local max_year = r(max) +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + twoway__histogram_gen valid_labHrsWorkWeek if year == `year' , /// + bin(60) den gen(d_valid v2) + + qui sum d_valid + gen max_d_valid_`year' = r(max) + + drop d_valid v2 + +} + +drop labC4 demMaleFlag + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run idPers year labC4 demMaleFlag sim_labHrsWorkWeek demAge using /// + "$dir_data/simulation_sample.dta", clear + +* Merge in new valid_labHrsWorkWeek worked for top category using log normal distribution +merge 1:1 year run idPers using "$dir_data/simulation_sample_hrs_adjusted.dta" +drop _m + +rename sim_labHrsWorkWeek sim_labHrsWorkWeek_orig +rename new_sim_labHrsWorkWeek sim_labHrsWorkWeek + +* Select sample +keep if labC4 == "EmployedOrSelfEmployed" +keep if demMaleFlag == 1 +keep if inrange(demAge,16,65) + +* Combine datasets +append using "$dir_data/temp_valid_stats.dta" + +qui sum year +local min_year = 2019 +local max_year = r(max) +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + * Prepare info needed for dynamic y axis labels + twoway__histogram_gen sim_labHrsWorkWeek if year == `year', bin(60) /// + den gen(d_sim v1) + + qui sum d_sim + gen max_d_sim = r(max) + + gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim + replace max_value = max_d_sim if max_value == . + + sum max_value + local max_y = 1.25*r(max) + local steps = `max_y'/2 + + twoway (hist sim_labHrsWorkWeek if year == `year' , width(1) /// + color(green%30) legend(label(1 "SimPaths"))) /// + (hist valid_labHrsWorkWeek if year == `year' , width(1) color(red%30) /// + legend(label(2 "SILC"))), /// + title("Weekly Hours Worked") /// + subtitle("`year', males, ages 16-65") /// + xtitle("Hours per week", size(small)) /// + ytitle("Density", size(small)) /// + xlabel(,labsize(small)) /// + ylabel(0(`steps')`max_y', labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Note: Statistics calculated on sample of employed and self-employed males.", /// + size(vsmall)) + + + graph export /// + "$dir_output_files/hours_worked/validation_${country}_hours_worked_hist_`year'_male_ln.png", /// + replace width(2400) height(1350) + + drop d_sim v1 max_d_sim max_value +} + +graph drop _all + + +/* +******************************************************************************** +* LOG-NORMAL HETEROGENIETY WITH SPIKE AT 40 +******************************************************************************** + +******************************************************************************** +* 0 : IMPUTATION OF valid_labHrsWorkWeek WORK FOR THOSE IN TOP CATEGORY, LOG NORMAL WITH MASS +******************************************************************************** +/* +* Load data +use year dwt labC4 valid_labHrsWorkWeek demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if inrange(demAge,16,65) +keep if labC4 == 1 +//remove those that report working very low >0 valid_labHrsWorkWeek + +drop labC4 + +save "$dir_data/temp_valid_stats.dta", replace + +twoway (histogram valid_labHrsWorkWeek, fraction color(ltblue)) + +* Top group only +keep if valid_labHrsWorkWeek > 35 & valid_labHrsWorkWeek != . + +* Proportion of the top group that work 40 valid_labHrsWorkWeek +gen exact_40 = (valid_labHrsWorkWeek == 40) + +preserve +collapse (mean) exact_40 [aw=dwt] +local valid_share_40 = exact_40 +restore + +* Create log variable +gen ln_y = ln(valid_labHrsWorkWeek) + +* Set truncation points (using observed range) +summarize valid_labHrsWorkWeek +local a = r(min) +local b = r(max) +local ln_a = ln(`a') +local ln_b = ln(`b') + +* Estimate parameters +truncreg ln_y, ll(`ln_a') ul(`ln_b') nolog + +* Results +matrix b = e(b) +local mu_hat = b[1,1] +local sigma_hat = b[1,2] +local median_est = exp(`mu_hat') +local mean_est = exp(`mu_hat' + `sigma_hat'^2/2) + +disp "** RESULTS **" +disp "μ (for lnY): " round(`mu_hat', 0.001) +disp "σ (for lnY): " round(`sigma_hat', 0.001) +disp "Estimated median: " round(`median_est', 0.01) +disp "Estimated mean: " round(`mean_est', 0.01) + +* Visualization +range y_plot `a' `b' 150 +gen pdf_fitted = (1/(y_plot*`sigma_hat')) * /// + normalden((ln(y_plot)-`mu_hat')/`sigma_hat') / /// + (normal((`ln_b'-`mu_hat')/`sigma_hat') - /// + normal((`ln_a'-`mu_hat')/`sigma_hat')) + +twoway (histogram valid_labHrsWorkWeek, fraction color(ltblue)) /// + (line pdf_fitted y_plot, color(red) lwidth(*1)), /// + title("Truncated Log-Normal Distribution Fit") /// + legend(order(1 "SILC" 2 "Fitted Distribution")) /// + xtitle("valid_labHrsWorkWeek") /// + ytitle("Density") /// + graphregion(color(white)) /// + note("Note: ", /// + size(vsmall)) + +** Apply to simulated data +* Load simulation data +use run idPers year labC4 sim_labHrsWorkWeek demAge using /// + "$dir_data/simulation_sample.dta", clear + +rename sim_labHrsWorkWeek labHrsWorkWeek + + +* Select sample +keep if labC4 == "EmployedOrSelfEmployed" & inrange(demAge,16,65) + +* Observations to be adjusted +gen top = 1 if labHrsWorkWeek > 35 + +* Add log-normal heterogeneity +gen new_labHrsWorkWeek = labHrsWorkWeek + +* Calculate the CDF bounds once +local Fa = normal((`ln_a' - `mu_hat')/`sigma_hat') +local Fb = normal((`ln_b' - `mu_hat')/`sigma_hat') + +* For observations with valid_labHrsWorkWeek >= 36, generate random values +replace new_labHrsWorkWeek = exp(`mu_hat' + `sigma_hat' * /// + invnormal(`Fa' + runiform()*(`Fb' - `Fa'))) /// + if top == 1 +*/ + + +use "$dir_data/simulation_sample_hrs_adjusted", clear + +replace new_labHrsWorkWeek = round(new_labHrsWorkWeek,1) + +twoway(hist new_labHrsWorkWeek) + + +* Proportion at 40 +gen sim_exact_40 = (new_labHrsWorkWeek == 40) + +preserve +mean sim_exact_40 +local sim_40_share = el(r(table),1,1) +restore + +local add_to_40 = `valid_share_40' - `sim_40_share' + +* Identify candidates (36-39 valid_labHrsWorkWeek) +gen candidate = inrange(new_labHrsWorkWeek, 36, 39) if top == 1 + +* Calculate how many to convert +count if top == 1 +local total_top = r(N) +local num_to_convert = round(`total_top' * `add_to_40') + +* Randomly select candidates +gen u = runiform() if candidate == 1 +gsort u +gen convert = (_n <= `num_to_convert') if candidate == 1 + +* Apply conversion +replace new_labHrsWorkWeek = 40 if convert == 1 + +* Clean up +drop u convert candidate + +twoway hist new_labHrsWorkWeek + +rename new_labHrsWorkWeek new_sim_labHrsWorkWeek + +save "$dir_data/simulation_sample_hrs_adjusted_40.dta", replace + +graph drop _all + +******************************************************************************** +* 1 : Mean values over time +******************************************************************************** + +******************************************************************************** +* 1.1 : Mean values over time - Ages 16-65 +******************************************************************************** + +* Prepare validation data +use year dwt labC4 valid_labHrsWorkWeek demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if labC4 == 1 + +keep if inrange(demAge,16,65) + +* Compute mean +collapse (mean) valid_labHrsWorkWeek [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use run year idPers labC4 sim_labHrsWorkWeek demAge using /// + "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if inrange(demAge,16,65) + +* Merge in new valid_labHrsWorkWeek worked for top category using log normal distribution +merge 1:1 year run idPers using "$dir_data/simulation_sample_hrs_adjusted_40.dta" +keep if _m == 3 +drop _m + +rename sim_labHrsWorkWeek sim_labHrsWorkWeek_orig +rename new_sim_labHrsWorkWeek sim_labHrsWorkWeek + +* Keep only employed individuals +keep if labC4 == "EmployedOrSelfEmployed" + +twoway hist sim_labHrsWorkWeek + +* Compute mean and sd +collapse (mean) sim_labHrsWorkWeek, by(run year) + +collapse (mean) sim_labHrsWorkWeek /// + (sd) sim_labHrsWorkWeek_sd = sim_labHrsWorkWeek /// + , by(year) + +* Approx 95% confidence interval +foreach varname in sim_labHrsWorkWeek { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +save "$dir_data/temp_sim_mean_ln_40.dta", replace + +* Combine datasets +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +twoway (rarea sim_labHrsWorkWeek_high sim_labHrsWorkWeek_low year, sort color(green%20) /// + legend(label(1 "SimPaths"))) /// +(line valid_labHrsWorkWeek year, sort color(green) legend(label(2 "SILC"))), /// + title("Average Weekly Hours Worked") /// + subtitle("Ages 16-65 ") /// + xtitle("Year", size(small)) /// + ytitle("Hours per week", size(small)) /// + ylabel(33 [2] 40 ,labsize(small)) /// + xlabel(,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Note: Statistics calculated on sample of working age employed and self-employed individuals. Log-normal heterogeneity" "imposed on top category with a mass at 40.", /// + size(vsmall)) + +* Save figure +graph export /// +"$dir_output_files/hours_worked/validation_${country}_hours_worked_ts_16_65_both_ln_40.jpg", /// + replace width(2560) height(1440) quality(100) + + +******************************************************************************** +* 1.2 : Mean values over time - Ages 18-65, by gender +******************************************************************************** + +* Males + +* Prepare validation data +use year dwt labC4 valid_labHrsWorkWeek demAge demMaleFlag using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if labC4 == 1 + +keep if inrange(demAge,16,65) +keep if demMaleFlag == 1 + +* Compute mean +collapse (mean) valid_labHrsWorkWeek [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year idPers labC4 sim_labHrsWorkWeek demAge demMaleFlag using /// + "$dir_data/simulation_sample.dta", clear + +* Merge in new valid_labHrsWorkWeek worked for top category using log normal distribution +merge 1:1 year run idPers using "$dir_data/simulation_sample_hrs_adjusted_40.dta" +keep if _m == 3 +drop _m + +rename sim_labHrsWorkWeek sim_labHrsWorkWeek_orig +rename new_sim_labHrsWorkWeek sim_labHrsWorkWeek + +twoway hist sim_labHrsWorkWeek + +* Select sample +keep if demMaleFlag == +keep if labC4 == "EmployedOrSelfEmployed" +keep if inrange(demAge,16,65) + +* Compute mean and sd +collapse (mean) sim_labHrsWorkWeek, by(run year) + +collapse (mean) sim_labHrsWorkWeek /// + (sd) sim_labHrsWorkWeek_sd = sim_labHrsWorkWeek /// + , by(year) + +* Approx 95% confidence interval +foreach varname in sim_labHrsWorkWeek { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +* Combine datasets +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +twoway (rarea sim_labHrsWorkWeek_high sim_labHrsWorkWeek_low year, sort /// + color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_labHrsWorkWeek year, sort color(green) /// + legend(label(2 "SILC"))), /// + title("Average Weekly Hours Worked") /// + subtitle("Males, ages 16-65") /// + xtitle("Year", size(small)) /// + ytitle("Hours per week", size(small)) /// + ylabel(35 [2] 43 ,labsize(small)) /// + xlabel(,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Note: Statistics calculated on sample of working age employed and self-employed individuals. Log-normal heterogeneity" "imposed on top category with a mass at 40.", /// + size(vsmall)) + +* Save figure +graph export /// +"$dir_output_files/hours_worked/validation_${country}_hours_worked_ts_16_65_male_ln_40.jpg", /// + replace width(2560) height(1440) quality(100) + + +* Females + +* Prepare validation data +use year dwt labC4 valid_labHrsWorkWeek demAge demMaleFlag using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if labC4 == 1 +keep if inrange(demAge,16,65) +keep if demMaleFlag == 0 + +* Compute mean +collapse (mean) valid_labHrsWorkWeek [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year idPers labC4 sim_labHrsWorkWeek demAge demMaleFlag using /// + "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if inrange(demAge,16,65) + +* Merge in new valid_labHrsWorkWeek worked for top category using log normal distribution +merge 1:1 year run idPers using "$dir_data/simulation_sample_hrs_adjusted_40.dta" +drop _m + +rename sim_labHrsWorkWeek sim_labHrsWorkWeek_orig +rename new_sim_labHrsWorkWeek sim_labHrsWorkWeek + +* Select sample +keep if demMaleFlag == 0 +keep if labC4 == "EmployedOrSelfEmployed" +keep if inrange(demAge,16,65) + +twoway hist sim_labHrsWorkWeek + +* Compute mean and sd +collapse (mean) sim_labHrsWorkWeek, by(run year) + +collapse (mean) sim_labHrsWorkWeek /// + (sd) sim_labHrsWorkWeek_sd = sim_labHrsWorkWeek /// + , by(year) + +* Approx 95% confidnece interval +foreach varname in sim_labHrsWorkWeek { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + + *Combine datasets +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +twoway (rarea sim_labHrsWorkWeek_high sim_labHrsWorkWeek_low year, /// + sort color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_labHrsWorkWeek year, sort color(green) legend(label(2 "SILC"))), /// + title("Average Weekly Hours Worked") /// + subtitle("Females, ages 16-65") /// + xtitle("Year", size(small)) /// + ytitle("Hours per week", size(small)) /// + ylabel(,labsize(small)) /// + xlabel(,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Note: Statistics calculated on sample of working age employed and self-employed individuals. Log-normal heterogeneity" "imposed on top category with a mass at 40.", /// + size(vsmall)) + +* Save figure +graph export /// +"$dir_output_files/hours_worked/validation_${country}_hours_worked_ts_16_65_female_ln_40.jpg", /// + replace width(2560) height(1440) quality(100) + + + +******************************************************************************** +* 2 : Histograms by year +******************************************************************************** + +******************************************************************************** +* 2.1 : Histograms by year - ages 16-65 +******************************************************************************** + +* Prepare validation data +use year dwt labC4 valid_labHrsWorkWeek demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if labC4 == 1 +keep if inrange(demAge,16,65) + +* Prepare info needed for dynamic y axis labels +qui sum year +local min_year = 2019 +local max_year = r(max) +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + twoway__histogram_gen valid_labHrsWorkWeek if year == `year' , /// + bin(60) den gen(d_valid v2) + + qui sum d_valid + gen max_d_valid_`year' = r(max) + + drop d_valid v2 + +} + +drop labC4 + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year labC4 idPers sim_labHrsWorkWeek demAge using /// + "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if labC4 == "EmployedOrSelfEmployed" +keep if inrange(demAge,16,65) + +* Merge in new valid_labHrsWorkWeek worked for top category using log normal distribution +merge 1:1 year run idPers using "$dir_data/simulation_sample_hrs_adjusted_40.dta" +keep if _m == 3 +drop _m + +rename sim_labHrsWorkWeek sim_labHrsWorkWeek_orig +rename new_sim_labHrsWorkWeek sim_labHrsWorkWeek + +twoway hist sim_labHrsWorkWeek + +* Combine datasets +append using "$dir_data/temp_valid_stats.dta" + +qui sum year +local min_year = 2019 +local max_year = r(max) +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + * Prepare info needed for dynamic y axis labels + twoway__histogram_gen sim_labHrsWorkWeek if year == `year', bin(60) /// + den gen(d_sim v1) + + qui sum d_sim + gen max_d_sim = r(max) + + gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim + replace max_value = max_d_sim if max_value == . + + sum max_value + local max_y = 1.25*r(max) + local steps = `max_y'/2 + + twoway (hist sim_labHrsWorkWeek if year == `year', width(1) /// + color(green%30) legend(label(1 "SimPaths"))) /// + (hist valid_labHrsWorkWeek if year == `year', width(1) color(red%30) /// + legend(label(2 "SILC"))), /// + title("Weekly Hours Worked") /// + subtitle("Ages 16-65, `year'") /// + xtitle("Hours per week", size(small)) /// + ytitle("Density", size(small)) /// + xlabel(,labsize(small)) /// + ylabel(0(`steps')`max_y', labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Note: Statistics calculated on sample of employed and self-employed individuals.", /// + size(vsmall)) + + graph export /// + "$dir_output_files/hours_worked/validation_${country}_hours_worked_hist_`year'_ln_40.png", /// + replace width(2400) height(1350) + + drop d_sim v1 max_d_sim max_value + +} + +******************************************************************************** +* 2.1 : Histograms by year - ages 16-65, by gender +******************************************************************************** + +* Female + +* Prepare validation data +use year dwt labC4 valid_labHrsWorkWeek demMaleFlag demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if labC4 == 1 +keep if demMaleFlag == 0 +keep if inrange(demAge,16,65) + + +* Prepare info needed for dynamic y axis labels +qui sum year +local min_year = 2019 +local max_year = r(max) +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + twoway__histogram_gen valid_labHrsWorkWeek if year == `year' , /// + bin(60) den gen(d_valid v2) + + qui sum d_valid + gen max_d_valid_`year' = r(max) + + drop d_valid v2 + +} + +drop labC4 demMaleFlag + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run idPers year labC4 demMaleFlag sim_labHrsWorkWeek demAge using /// + "$dir_data/simulation_sample.dta", clear + +* Merge in new valid_labHrsWorkWeek worked for top category using log normal distribution +merge 1:1 year run idPers using "$dir_data/simulation_sample_hrs_adjusted_40.dta" +keep if _m == 3 +drop _m + +rename sim_labHrsWorkWeek sim_labHrsWorkWeek_orig +rename new_sim_labHrsWorkWeek sim_labHrsWorkWeek + +* Select sample +keep if labC4 == "EmployedOrSelfEmployed" +keep if demMaleFlag == 0 +keep if inrange(demAge,16,65) + +* Combine datasets +append using "$dir_data/temp_valid_stats.dta" + +* Plot by year +qui sum year +local min_year = 2019 +local max_year = r(max) +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + * Prepare info needed for dynamic y axis labels + twoway__histogram_gen sim_labHrsWorkWeek if year == `year', bin(60) /// + den gen(d_sim v1) + + qui sum d_sim + gen max_d_sim = r(max) + + gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim + replace max_value = max_d_sim if max_value == . + + sum max_value + local max_y = 1.25*r(max) + local steps = `max_y'/2 + + twoway (hist sim_labHrsWorkWeek if year == `year', width(1) /// + color(green%30) legend(label(1 "SimPaths"))) /// + (hist valid_labHrsWorkWeek if year == `year', width(1) color(red%30) /// + legend(label(2 "SILC"))), /// + title("Weekly Hours Worked") /// + subtitle("`year', females, ages 16-65") /// + xtitle("Hours per week", size(small)) /// + ytitle("Density", size(small)) /// + xlabel(,labsize(small)) /// + ylabel(0(`steps')`max_y', labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Note: Statistics calculated on sample of employed and self-employed females.", /// + size(vsmall)) + + graph export /// + "$dir_output_files/hours_worked/validation_${country}_hours_worked_hist_`year'_female_ln_40.png", /// + replace width(2400) height(1350) + + drop d_sim v1 max_d_sim max_value + +} + + +* Male + +* Prepare validation data +use year dwt labC4 valid_labHrsWorkWeek demMaleFlag demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if labC4 == 1 +keep if demMaleFlag == 1 +keep if inrange(demAge,16,65) + + +* Prepare info needed for dynamic y axis labels +qui sum year +local min_year = 2019 +local max_year = r(max) +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + twoway__histogram_gen valid_labHrsWorkWeek if year == `year' , /// + bin(60) den gen(d_valid v2) + + qui sum d_valid + gen max_d_valid_`year' = r(max) + + drop d_valid v2 + +} + +drop labC4 demMaleFlag + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run idPers year labC4 demMaleFlag sim_labHrsWorkWeek demAge using /// + "$dir_data/simulation_sample.dta", clear + +* Merge in new valid_labHrsWorkWeek worked for top category using log normal distribution +merge 1:1 year run idPers using "$dir_data/simulation_sample_hrs_adjusted_40.dta" +keep if _m == 3 +drop _m + +rename sim_labHrsWorkWeek sim_labHrsWorkWeek_orig +rename new_sim_labHrsWorkWeek sim_labHrsWorkWeek + +* Select sample +keep if labC4 == "EmployedOrSelfEmployed" +keep if demMaleFlag == 1 +keep if inrange(demAge,16,65) + +* Combine datasets +append using "$dir_data/temp_valid_stats.dta" + +qui sum year +local min_year = 2019 +local max_year = r(max) +if "$max_sim_year" != "" local max_year = $max_sim_year + + +forval year = `min_year'/`max_year' { + + * Prepare info needed for dynamic y axis labels + twoway__histogram_gen sim_labHrsWorkWeek if year == `year', bin(60) /// + den gen(d_sim v1) + + qui sum d_sim + gen max_d_sim = r(max) + + gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim + replace max_value = max_d_sim if max_value == . + + sum max_value + local max_y = 1.25*r(max) + local steps = `max_y'/2 + + twoway (hist sim_labHrsWorkWeek if year == `year' , width(1) /// + color(green%30) legend(label(1 "SimPaths"))) /// + (hist valid_labHrsWorkWeek if year == `year' , width(1) color(red%30) /// + legend(label(2 "SILC"))), /// + title("Weekly Hours Worked") /// + subtitle("`year', males, ages 16-65") /// + xtitle("Hours per week", size(small)) /// + ytitle("Density", size(small)) /// + xlabel(,labsize(small)) /// + ylabel(0(`steps')`max_y', labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Note: Statistics calculated on sample of employed and self-employed males.", /// + size(vsmall)) + + + graph export /// + "$dir_output_files/hours_worked/validation_${country}_hours_worked_hist_`year'_male_ln_40.png", /// + replace width(2400) height(1350) + + drop d_sim v1 max_d_sim max_value +} + + +graph drop _all diff --git a/validation/02_simulation_validation/do_files/04_10_1_plot_hours_worked_discrete.do b/validation/02_simulation_validation/do_files/04_10_1_plot_hours_worked_discrete.do new file mode 100644 index 0000000..b133fbc --- /dev/null +++ b/validation/02_simulation_validation/do_files/04_10_1_plot_hours_worked_discrete.do @@ -0,0 +1,351 @@ +/******************************************************************************* +* PROJECT: SimPaths EU +* SECTION: Validation +* OBJECT: Hours worked (discrete) +* AUTHORS: Ashley Burdett +* LAST UPDATE: Jan 2026 +* COUNTRY: EU +******************************************************************************** +* NOTES: Need to update to acocunt for additional labour supply +* categories +*******************************************************************************/ + +******************************************************************************** +* 1 : Distribution +******************************************************************************** + +******************************************************************************** +* 1.1 : Distribution, 16-65 +******************************************************************************** + +* Comparison of the discretized labour supply hours + +* Load SILC data +use year dwt labC4 valid_cat_hours valid_labHrsWorkEnum_no demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if labC4 == 1 +drop if valid_labHrsWorkEnum_no == 0 +keep if inrange(demAge,16,65) + +* Hours dummies +tab valid_cat_hours, gen(hours_cat_) + +* Calculate weighted proportions +collapse (mean) hours_cat_* [aw=dwt] + +gen sim = 0 + +save "$dir_data/valid_props", replace + +* Prepare simulated data +use run year labC4 idPers sim_cat_hours sim_labHrsWorkEnum_no demAge using /// + "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if labC4 == "EmployedOrSelfEmployed" +drop if sim_labHrsWorkEnum_no == 0 +keep if inrange(demAge,16,65) + +* Hours dummies +tab sim_cat_hours, gen(hours_cat_) + +* Calculate proportions +collapse (mean) hours_cat_*, by(run) + +collapse (mean) hours_cat_* /// + (sd) hours_cat_1_sd = hours_cat_1 /// + hours_cat_2_sd = hours_cat_2 /// + hours_cat_3_sd = hours_cat_3 + +foreach varname in hours_cat_1 hours_cat_2 hours_cat_3 /// + { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +gen sim = 1 + +* Combine datasets +append using "$dir_data/valid_props" + +* Plot +reshape long hours_cat_@ hours_cat_@_high hours_cat_@_low, i(sim) j(category) + +gen prop_SILC = hours_cat_ if sim == 0 +gen prop_sim = hours_cat_ if sim == 1 + +gen x_SILC = category - 0.2 +gen x_sim = category + 0.2 + +twoway (bar prop_SILC x_SILC, barw(0.4) color(red%50)) /// + (bar prop_sim x_sim, barw(0.4) color(green%50)) /// + (rcap hours_cat__high hours_cat__low x_sim, lcolor(green)), /// + xlabel(1/3, valuelabel) /// + xtitle("Hours Category", size(small)) /// + ytitle("Proportion", size(small)) /// + title("Share in Each Labour Hours Category") /// + subtitle("Ages 16-65") /// + legend(order(1 "SILC" 2 "SimPaths" 3 "95% CI")) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: Years 2011-2023.", size(vsmall)) + +graph export /// + "$dir_output_files/hours_worked/validation_${country}_hours_worked_cat_all.png", /// + replace width(2400) height(1350) + + +******************************************************************************** +* 1.2 : Distribution, 16-65 by year +******************************************************************************** + +* Load SILC data +use year dwt labC4 valid_cat_hours valid_labHrsWorkEnum_no demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if labC4 == 1 +drop if valid_labHrsWorkEnum_no == 0 +keep if inrange(demAge,16,65) + +tab valid_cat_hours, gen(hours_cat_) + +* Calculate weighted proportions by year +collapse (mean) hours_cat_* [aw=dwt], by(year) + +gen sim = 0 + +save "$dir_data/valid_props", replace + +* Load SimPaths data +use run year labC4 idPers sim_cat_hours sim_labHrsWorkEnum_no demAge using /// + "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if labC4 == "EmployedOrSelfEmployed" +drop if sim_labHrsWorkEnum_no == 0 +keep if inrange(demAge,16,65) + +tab sim_cat_hours, gen(hours_cat_) + +* Calculate proportions by run and year +collapse (mean) hours_cat_*, by(run year) + +* Calculate Mean and SD across runs by year +collapse (mean) hours_cat_* /// + (sd) hours_cat_1_sd = hours_cat_1 /// + hours_cat_2_sd = hours_cat_2 /// + hours_cat_3_sd = hours_cat_3, by(year) + +foreach varname in hours_cat_1 hours_cat_2 hours_cat_3 /// + { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd +} + +gen sim = 1 + +* Combine datasets +append using "$dir_data/valid_props" + +* Plot +reshape long hours_cat_@ hours_cat_@_high hours_cat_@_low, i(sim year) /// + j(category) + +gen prop_SILC = hours_cat_ if sim == 0 +gen prop_sim = hours_cat_ if sim == 1 +gen x_SILC = category - 0.2 +gen x_sim = category + 0.2 + +levelsof year, local(years) +foreach y in `years' { + + twoway (bar prop_SILC x_SILC if year == `y', barw(0.4) color(red%50)) /// + (bar prop_sim x_sim if year == `y', barw(0.4) color(green%50)) /// + (rcap hours_cat__high hours_cat__low x_sim if year == `y', lcolor(green)), /// + xlabel(1/3, valuelabel) /// + xtitle("Hours Category", size(small)) /// + ytitle("Proportion", size(small)) /// + title("Share in Each Labour Hours Category") /// + subtitle("`y'") /// + legend(order(1 "SILC" 2 "SimPaths" 3 "95% CI")) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: Ages 16-65. ", size(vsmall)) + + graph export /// + "$dir_output_files/hours_worked/validation_${country}_hours_worked_cat_`y'.png", /// + replace width(2400) height(1350) +} + +graph drop _all + + +******************************************************************************** +* 1.3 : Distribution, 16-65 by year, by gender +******************************************************************************** + +* Load SILC data +use year dwt labC4 valid_cat_hours valid_labHrsWorkEnum_no demAge /// + demMaleFlag using "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +keep if labC4 == 1 +drop if valid_labHrsWorkEnum_no == 0 +keep if inrange(demAge,16,65) + +tab valid_cat_hours, gen(hours_cat_) + +* Calculate weighted proportions by year and gender +collapse (mean) hours_cat_* [aw=dwt], by(year demMaleFlag) + +gen sim = 0 + +save "$dir_data/valid_props", replace + +* Load SimPaths data +use run year labC4 idPers sim_cat_hours sim_labHrsWorkEnum_no demAge /// + demMaleFlag using "$dir_data/simulation_sample.dta", clear + +* Select sample +keep if labC4 == "EmployedOrSelfEmployed" +drop if sim_labHrsWorkEnum_no == 0 +keep if inrange(demAge,16,65) + +tab sim_cat_hours, gen(hours_cat_) + +* Calculate proportions and SD by run, year and gender +collapse (mean) hours_cat_*, by(run year demMaleFlag) + +* Calculate Mean and SD across runs by year and gender +collapse (mean) hours_cat_* /// + (sd) hours_cat_1_sd = hours_cat_1 /// + hours_cat_2_sd = hours_cat_2 /// + hours_cat_3_sd = hours_cat_3, by(year demMaleFlag) + +foreach varname in hours_cat_1 hours_cat_2 hours_cat_3 /// + { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd +} + +gen sim = 1 + +* Combine datasets +append using "$dir_data/valid_props" + +* PLot +* Note: Added demMaleFlag to the identifier i() +reshape long hours_cat_@ hours_cat_@_high hours_cat_@_low, /// + i(sim year demMaleFlag) j(category) + +gen prop_SILC = hours_cat_ if sim == 0 +gen prop_sim = hours_cat_ if sim == 1 +gen x_SILC = category - 0.2 +gen x_sim = category + 0.2 + +* Label gender for plot titles +label define sex_lbl 0 "Females" 1 "Males" +label values demMaleFlag sex_lbl + +levelsof year, local(years) +levelsof demMaleFlag, local(sexes) + +foreach y in `years' { + foreach s in `sexes' { + + * Get the label text + local sextext : label sex_lbl `s' + + twoway (bar prop_SILC x_SILC if year == `y' & demMaleFlag == `s', /// + barw(0.4) color(red%50)) /// + (bar prop_sim x_sim if year == `y' & demMaleFlag == `s', /// + barw(0.4) color(green%50)) /// + (rcap hours_cat__high hours_cat__low x_sim if year == `y' & /// + demMaleFlag == `s', lcolor(green)), /// + xlabel(1/3, valuelabel) /// + xtitle("Hours Category", size(small)) /// + ytitle("Proportion", size(small)) /// + title("Share in Each Labour Hours Category") /// + subtitle("`y', `sextext'") /// + legend(order(1 "SILC" 2 "SimPaths" 3 "95% CI")) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: Comparison for `sextext' in `y'.", size(vsmall)) + + graph export /// + "$dir_output_files/hours_worked/validation_${country}_hours_worked_cat_`y'_`sextext'.png", /// + replace width(2400) height(1350) + } + +} + +graph drop _all + + +/* +******************************************************************************** +* 3 : Mean hours of work, comparison across all options explored, 16-655 +******************************************************************************** + +use "$dir_data/temp_valid_mean_disc", replace + +merge 1:1 year using "$dir_data/temp_valid_mean", nogen + +rename hours valid_hours + +merge 1:1 year using "$dir_data/temp_sim_mean_uni.dta", nogen + +drop sim_labHrsWorkWeek_sim sim_labHrsWorkWeek_sim_sd +rename sim_labHrsWorkWeek_sim_high sim_labHrsWorkWeek_sim_u_high +rename sim_labHrsWorkWeek_sim_low sim_labHrsWorkWeek_sim_u_low + +merge 1:1 year using "$dir_data/temp_sim_mean_ln.dta", nogen + +drop sim_labHrsWorkWeek_sim sim_labHrsWorkWeek_sim_sd +rename sim_labHrsWorkWeek_sim_high sim_labHrsWorkWeek_sim_ln_high +rename sim_labHrsWorkWeek_sim_low sim_labHrsWorkWeek_sim_ln_low + +merge 1:1 year using "$dir_data/temp_sim_mean_ln_40.dta", nogen + +drop sim_labHrsWorkWeek_sim sim_labHrsWorkWeek_sim_sd +rename sim_labHrsWorkWeek_sim_high sim_labHrsWorkWeek_sim_40_high +rename sim_labHrsWorkWeek_sim_low sim_labHrsWorkWeek_sim_40_low + + +* Plot comparison +drop if year < 2011 + +twoway (line valid_hours year, sort color(cranberry) /// + legend(label(1 "SILC, continuous"))) /// +(rarea sim_labHrsWorkWeek_sim_u_high sim_labHrsWorkWeek_sim_u_low year, sort color(purple%20) /// + legend(label(2 "Simulated, uniform"))) /// +(rarea sim_labHrsWorkWeek_sim_ln_high sim_labHrsWorkWeek_sim_ln_low year, sort color(blue%20) /// + legend(label(3 "Simulated, log normal"))) /// +(rarea sim_labHrsWorkWeek_sim_40_high sim_labHrsWorkWeek_sim_40_low year, sort color(green%20) /// + legend(label(4 "Simulated, log normal + 40"))), /// + title("Average Weekly Hours Worked") /// + subtitle("Ages 16-65 ") /// + xtitle("Year", size(small)) /// + ytitle("Hours per week", size(small)) /// + ylabel(33 [2] 40 ,labsize(small)) /// + xlabel(,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Note: Statistics calculated on sample of working age employed and self-employed individuals.", /// + size(vsmall)) + +graph export /// + "$dir_output_files/hours_worked/validation_${country}_hours_worked_comparison.png", /// + replace width(2400) height(1350) + + +//(line valid_disc_hours year, sort color(blue) /// +// legend(label(2 "SILC, discretized"))) /// + \ No newline at end of file diff --git a/validation/02_simulation_validation/do_files/04_11_plot_income_shares.do b/validation/02_simulation_validation/do_files/04_11_plot_income_shares.do new file mode 100644 index 0000000..f54929e --- /dev/null +++ b/validation/02_simulation_validation/do_files/04_11_plot_income_shares.do @@ -0,0 +1,448 @@ +/******************************************************************************* +* PROJECT: SimPaths EU +* SECTION: Validation +* OBJECT: Income shares +* AUTHORS: Patryk Bronka, Ashley Burdett +* LAST UPDATE: Jan 2026 +* COUNTRY: PL +******************************************************************************** +* NOTES: This do file plots simulated and observed income shares and +* incomes by deciles of gross income +* Altered pension age to 65 + +*******************************************************************************/ + +** SimPaths output + + +* Create variables + +use "$dir_data/simulation_sample.dta", clear + +* keep only one observation per benefit unit +sort run idBu year + +* Check data structure +count if year == year[_n-1] & idBu == idBu[_n-1] & /// + sim_yEmpBuGrossLevelYear != sim_yEmpBuGrossLevelYear[_n-1] + +count if year == year[_n-1] & idBu == idBu[_n-1] & /// + sim_yCapitalBuLevelYear != sim_yCapitalBuLevelYear[_n-1] + +count if year == year[_n-1] & idBu == idBu[_n-1] & /// + sim_yPensBuGrossLevelYear != sim_yPensBuGrossLevelYear[_n-1] + + +* Variables of interest + +* Keep one observation per benefit unit +* Create a marker for the first observation in each group +bys run year idBu (demAge): gen byte to_keep = (_n == _N) + +* Keep only the marked rows +keep if to_keep == 1 +drop to_keep + +* Create gross income deciles +sort run idPers year + +xtile sim_decile = sim_yNonBenBuGrossLevelYear , n(10) + +tab sim_decile + +gen zero_gross = (sim_yNonBenBuGrossLevelYear == 0) +tab zero_gross + +/* +8.6% of observations have 0 gross non-benefit income. +Equal shares in deciles. +*/ + +* Genrate share variables +gen sim_share_emp = sim_yEmpBuGrossLevelYear / sim_yNonBenBuGrossLevelYear +gen sim_share_cap = sim_yCapitalBuLevelYear / sim_yNonBenBuGrossLevelYear +gen sim_share_pen = sim_yPensBuGrossLevelYear / sim_yNonBenBuGrossLevelYear + +order idPers idBu year sim_yNonBenBuGrossLevelYear sim_yEmpBuGrossLevelYear /// + sim_yCapitalBuLevelYear sim_yPensBuGrossLevelYear sim_yDispBuLevelYear /// + sim_share_* + +gen check1 = sim_share_emp + sim_share_cap + sim_share_pen +sum check1, det + +order idPers idBu year sim_decile sim_yNonBenBuGrossLevelYear /// + sim_yEmpBuGrossLevelYear sim_yCapitalBuLevelYear /// + sim_yPensBuGrossLevelYear check1 sim_share_* + +drop check* + + +* Plots + +* Sources + +* All +graph bar (mean) sim_yEmpBuGrossLevelYear (mean) sim_yCapitalBuLevelYear /// + (mean) sim_yPensBuGrossLevelYear, over(sim_decile) stack /// + title("SimPaths") /// + legend(order(1 "Labour" 2 "Capital" 3 "Private Pension") /// + position(6) rows(1)) /// + name(simulated_income_comp_all, replace) /// + b1title("Decile", size(small)) /// + ytitle("Euro") /// + ylabel(,labsize(small)) /// + graphregion(color(white)) + +* Oldest <= 65 +preserve + +drop if demAge > 65 + +graph bar (mean) sim_yEmpBuGrossLevelYear (mean) sim_yCapitalBuLevelYear /// + (mean) sim_yPensBuGrossLevelYear, over(sim_decile) stack /// + title("SimPaths") /// + legend(order(1 "Labour" 2 "Capital" 3 "Private Pension") /// + position(6) rows(1)) /// + name(simulated_income_comp_upto65, replace) /// + b1title("Decile", size(small)) /// + ytitle("Euro") /// + ylabel(#5, format(%12.0fc)) /// + ylabel(,labsize(small)) /// + graphregion(color(white)) + +restore + +* Oldest > 65 +preserve + +drop if demAge <= 65 + +graph bar (mean) sim_yEmpBuGrossLevelYear (mean) sim_yCapitalBuLevelYear /// + (mean) sim_yPensBuGrossLevelYear, over(sim_decile) stack /// + title("SimPaths") /// + legend(order(1 "Labour" 2 "Capital" 3 "Private Pension") /// + position(6) rows(1)) /// + name(simulated_income_comp_66plus, replace) /// + b1title("Decile", size(small)) /// + ytitle("Euro") /// + ylabel(#5, format(%12.0fc)) /// + ylabel(,labsize(small)) /// + graphregion(color(white)) + +restore + +* Shares +preserve + +collapse (mean) sim_share_emp sim_share_cap sim_share_pen, /// + by(sim_decile) + +graph bar (asis) sim_share_emp sim_share_cap sim_share_pen, /// + over(sim_decile) stack /// + title("SimPaths") /// + legend(label(1 "Employment") label(2 "Capital") /// + label(3 "Private Pension")) /// + name(simulated_income_share_all, replace) /// + graphregion(color(white)) + +restore + +* Age <= 65 +preserve + +keep if demAge <= 65 + +collapse (mean) sim_share_emp sim_share_cap sim_share_pen, /// + by(sim_decile) + +graph bar (asis) sim_share_emp sim_share_cap sim_share_pen, /// + over(sim_decile) stack /// + title("SimPaths") /// + legend(label(1 "Employment") label(2 "Capital") /// + label(3 "Private Pension")) /// + name(simulated_income_share_upto65, replace) /// + graphregion(color(white)) + +restore + +* Age > 65 +preserve + +keep if demAge > 65 + +collapse (mean) sim_share_emp sim_share_cap sim_share_pen, /// + by(sim_decile) + +graph bar (asis) sim_share_emp sim_share_cap sim_share_pen, /// + over(sim_decile) stack /// + title("SimPaths") /// + legend(label(1 "Employment") label(2 "Capital") /// + label(3 "Private Pension")) /// + name(simulated_income_share_66plus, replace) /// + graphregion(color(white)) + +restore + + +** SILC data + +use "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* keep only one observation per benefit unit +sort idBu year + +* Check data structure +count if year == year[_n-1] & idBu == idBu[_n-1] & /// + valid_yEmpBuGrossLevelYear != valid_yEmpBuGrossLevelYear[_n-1] + +count if year == year[_n-1] & idBu == idBu[_n-1] & /// + valid_yCapitalBuLevelYear != valid_yCapitalBuLevelYear[_n-1] + +count if year == year[_n-1] & idBu == idBu[_n-1] & /// + valid_yPensBuGrossLevelYear != valid_yPensBuGrossLevelYear[_n-1] + +* Variable of interest + +* Keep one observation per benefit unit +* Create a marker for the first observation in each group +bys year idBu (demAge): gen byte to_keep = (_n == _N) + +* Keep only the marked rows +keep if to_keep == 1 +drop to_keep + +* Create gross income deciles +sort idPers year + +xtile valid_decile = valid_yNonBenBuGrossLevelYear , n(10) + +tab valid_decile + +gen zero_gross = (valid_yNonBenBuGrossLevelYear == 0) +tab zero_gross + +/* +19.36% of observations have 0 gross non-benefit income. +Non-equal shares in in bottom two deciles +*/ + +* Genrate share variables +gen valid_share_emp = valid_yEmpBuGrossLevelYear / valid_yNonBenBuGrossLevelYear +gen valid_share_cap = valid_yCapitalBuLevelYear / valid_yNonBenBuGrossLevelYear +gen valid_share_pen = valid_yPensBuGrossLevelYear / valid_yNonBenBuGrossLevelYear + +order idPers idBu year valid_yNonBenBuGrossLevelYear valid_yEmpBuGrossLevelYear /// + valid_yCapitalBuLevelYear valid_yPensBuGrossLevelYear valid_yDispBuLevelYear /// + valid_share_* + +gen check1 = valid_share_emp + valid_share_cap + valid_share_pen +sum check1, det + +order idPers idBu year valid_decile valid_yNonBenBuGrossLevelYear /// + valid_yEmpBuGrossLevelYear valid_yCapitalBuLevelYear /// + valid_yPensBuGrossLevelYear check1 valid_share_* + +drop check* + +* Plots + +* Sources + +* All +graph bar (mean) valid_yEmpBuGrossLevelYear (mean) valid_yCapitalBuLevelYear /// + (mean) valid_yPensBuGrossLevelYear [aw = dwt], over(valid_decile) stack /// + title("SILC") /// + legend(order(1 "Labour" 2 "Capital" 3 "Private Pension") /// + position(6) rows(1)) /// + name(SILC_income_comp_all, replace) /// + b1title("Decile", size(small)) /// + ytitle("Euro") /// + ylabel(#5, format(%12.0fc)) /// + ylabel(,labsize(small)) /// + graphregion(color(white)) + +* Oldest <= 65 +preserve + +drop if demAge > 65 + +graph bar (mean) valid_yEmpBuGrossLevelYear (mean) valid_yCapitalBuLevelYear /// + (mean) valid_yPensBuGrossLevelYear [aw = dwt], over(valid_decile) stack /// + title("SILC") /// + legend(order(1 "Labour" 2 "Capital" 3 "Private Pension") /// + position(6) rows(1)) /// + name(SILC_income_comp_upto65, replace) /// + b1title("Decile", size(small)) /// + ytitle("Euro") /// + ylabel(#5, format(%12.0fc)) /// + ylabel(,labsize(small)) /// + graphregion(color(white)) + +restore + +* Oldest > 65 +preserve + +drop if demAge <= 65 + +graph bar (mean) valid_yEmpBuGrossLevelYear (mean) valid_yCapitalBuLevelYear /// + (mean) valid_yPensBuGrossLevelYear [aw = dwt], over(valid_decile) stack /// + title("SILC") /// + legend(order(1 "Labour" 2 "Capital" 3 "Private Pension") /// + position(6) rows(1)) /// + name(SILC_income_comp_66plus , replace) /// + b1title("Decile", size(small)) /// + ytitle("Euro") /// + ylabel(#5, format(%12.0fc)) /// + ylabel(,labsize(small)) /// + graphregion(color(white)) + +restore + +* Shares + +* All ages +preserve + +collapse (mean) valid_share_emp valid_share_cap valid_share_pen [aw = dwt], /// + by(valid_decile) + +graph bar (asis) valid_share_emp valid_share_cap valid_share_pen, /// + over(valid_decile) stack /// + title("SILC") /// + legend(label(1 "Employment") label(2 "Capital") /// + label(3 "Private Pension")) /// + name(SILC_income_share_all, replace) /// + graphregion(color(white)) +restore + +* Age <= 65 +preserve + +keep if demAge <= 65 + +collapse (mean) valid_share_emp valid_share_cap valid_share_pen [aw = dwt], /// + by(valid_decile) + +graph bar (asis) valid_share_emp valid_share_cap valid_share_pen, /// + over(valid_decile) stack /// + title("SILC") /// + legend(label(1 "Employment") label(2 "Capital") /// + label(3 "Private Pension")) /// + name(SILC_income_share_upto65, replace) /// + graphregion(color(white)) + +restore + +* Age > 65 +preserve + +keep if demAge > 65 + +collapse (mean) valid_share_emp valid_share_cap valid_share_pen [aw = dwt], /// + by(valid_decile) + +graph bar (asis) valid_share_emp valid_share_cap valid_share_pen, /// + over(valid_decile) stack /// + title("SILC") /// + legend(label(1 "Employment") label(2 "Capital") /// + label(3 "Private Pension")) /// + name(SILC_income_share_66plus, replace) /// + graphregion(color(white)) + +restore + + +* Combine plots + +* Composition - All +grc1leg simulated_income_comp_all SILC_income_comp_all, /// + rows(1) ycommon /// + legendfrom(simulated_income_comp_all) /// + graphregion(color(white)) /// + title("Average Benefit Unit Gross Income Sources") /// + subtitle("All age") /// + note("NOTE: Benefit income excluded. Values in real 2015 amounts.", /// + size(vsmall)) + +graph export /// + "$dir_output_files/income/income_shares/validation_${country}_income_levels_all.png", /// + replace width(2400) height(1350) + +* Composition - Working age +grc1leg simulated_income_comp_upto65 SILC_income_comp_upto65, /// + rows(1) ycommon /// + legendfrom(simulated_income_comp_upto65) /// + graphregion(color(white)) /// + title("Average Benefit Unit Gross Income Sources") /// + subtitle("Oldest Working Age, <=65") /// + note("NOTE: Benefit income excluded. Values in real 2015 amounts.", /// + size(vsmall)) + +graph export /// + "$dir_output_files/income/income_shares/validation_${country}_income_levels_upto65.png", /// + replace width(2400) height(1350) + + +* Composition - Retirement age +grc1leg simulated_income_comp_66plus SILC_income_comp_66plus, /// + rows(1) ycommon /// + legendfrom(simulated_income_comp_66plus) /// + graphregion(color(white)) /// + title("Average Benefit Unit Gross Income Sources") /// + subtitle("Oldest Age > 65") /// + note("NOTE: Benefit income excluded. Values in real 2015 amounts.", /// + size(vsmall)) + +graph export /// + "$dir_output_files/income/income_shares/validation_${country}_income_levels_66plus.png", /// + replace width(2400) height(1350) + + + +* Shares - All +grc1leg simulated_income_share_all SILC_income_share_all, /// + rows(1) ycommon /// + legendfrom(simulated_income_share_all) /// + graphregion(color(white)) /// + title("Average Benefit Unit Gross Income Shares") /// + subtitle("All age") /// + note("NOTE: Benefit income excluded. Values in real 2015 amounts.", /// + size(vsmall)) + +graph export /// + "$dir_output_files/income/income_shares/validation_${country}_income_shares_all.png", /// + replace width(2400) height(1350) + +* Shares - Working age +grc1leg simulated_income_share_upto65 SILC_income_share_upto65, /// + rows(1) ycommon /// + legendfrom(simulated_income_share_upto65) /// + graphregion(color(white)) /// + title("Average Benefit Unit Gross Income Shares") /// + subtitle("Oldest Working Age, <=65") /// + note("NOTE: Benefit income excluded. Values in real 2015 amounts.", /// + size(vsmall)) + +graph export /// + "$dir_output_files/income/income_shares/validation_${country}_income_sharess_upto65.png", /// + replace width(2400) height(1350) + + +* Shares - Retirement age +grc1leg simulated_income_share_66plus SILC_income_share_66plus, /// + rows(1) ycommon /// + legendfrom(simulated_income_share_66plus) /// + graphregion(color(white)) /// + title("Average Benefit Unit Gross Income Shares") /// + subtitle("Oldest Age > 65") /// + note("NOTE: Benefit income excluded. Values in real 2015 amounts.", /// + size(vsmall)) + +graph export /// + "$dir_output_files/income/income_shares/validation_${country}_income_sharess_66plus.png", /// + replace width(2400) height(1350) + + +graph drop _all + diff --git a/validation/02_simulation_validation/do_files/04_12_plot_partnership_status.do b/validation/02_simulation_validation/do_files/04_12_plot_partnership_status.do new file mode 100644 index 0000000..999a13b --- /dev/null +++ b/validation/02_simulation_validation/do_files/04_12_plot_partnership_status.do @@ -0,0 +1,613 @@ +******************************************************************************** +* PROJECT: SimPaths EU +* SECTION: Validation +* OBJECT: Partnership +* AUTHORS: Ashley Burdett +* LAST UPDATE: Jan 2026 +* COUNTRY: PL +******************************************************************************** +* NOTES: +******************************************************************************** + +******************************************************************************** +* 1 : Mean values over time +******************************************************************************** + +******************************************************************************** +* 1.1 : Mean values over time - ages 18-65 +******************************************************************************** + +* Prepare validation data +use year demAge dwt valid_partnered valid_single using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if inrange(demAge,18,65) + +* Compute shares +collapse (mean) valid_partnered valid_single [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare SimPaths data +use run year demAge sim_partnered sim_single using /// + "$dir_data/simulation_sample.dta", clear + +keep if inrange(demAge,18,65) + +* Compute shares and sd +collapse (mean) sim_partnered sim_single /// + , by(run year) + +collapse (mean) sim_partnered sim_single /// + (sd) sim_partnered_sd = sim_partnered /// + sim_single_sd = sim_single /// + , by(year) + +* Approx 95% confidence interval +foreach varname in sim_partnered sim_single { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +* Combine datasets +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + + +* Plot figures +* Share partnered +twoway (rarea sim_partnered_high sim_partnered_low year, sort color(green%20) /// + legend(label(1 "SimPaths"))) /// +(line valid_partnered year, sort color(green) /// + legend(label(2 "SILC "))), /// + title("Partnered") /// + subtitle("Ages 18-65") /// + xtitle("Year", size(small)) /// + ytitle("Share", size(small)) /// + xlabel(,labsize(small)) /// + ylabel(0[0.1]0.9, labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: ", size(vsmall)) + +* Save figure +graph export /// +"$dir_output_files/partnership/validation_${country}_partnered_ts_18_65_both.jpg", /// + replace width(2400) height(1350) quality(100) + +* Partnership status shares +twoway (rarea sim_partnered_high sim_partnered_low year, sort color(green%20) /// + legend(label(1 "Partnered, SimPaths"))) /// +(line valid_partnered year, sort color(green) /// + legend(label(2 "Partnered, SILC "))) /// +(rarea sim_single_high sim_single_low year, sort color(red%20) /// + legend(label(3 "Single, SimPaths"))) /// +(line valid_single year, sort color(red) /// + legend(label(4 "Single, SILC "))), /// + title("Partnership status") /// + subtitle("Ages 18-65") /// + xtitle("Year", size(small)) /// + ytitle("Share", size(small)) /// + xlabel(,labsize(small)) /// + ylabel(0[0.1]0.8, labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: ", size(vsmall)) + +graph export /// +"$dir_output_files/partnership/validation_${country}_partnership_ts_18_65_both.jpg", /// + replace width(2400) height(1350) quality(100) + + +******************************************************************************** +* 1.2 : Mean values over time - by age group +******************************************************************************** + +* Define the groupings using a semi-colon or a specific delimiter +local age_cond1 "ageGroup == 2 | ageGroup == 3" +local age_sub1 "Ages 20-29" +local age_suff1 "20_29" + +local age_cond2 "ageGroup == 4 | ageGroup == 5" +local age_sub2 "Ages 30-39" +local age_suff2 "30_39" + +local age_cond3 "ageGroup == 6" +local age_sub3 "Ages 40-59" +local age_suff3 "40_59" + +* Loop through the 3 groups +forvalues i = 1/3 { + + * Validation data + use year demAge dwt valid_partnered valid_single ageGroup using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + + * Select sample + keep if `age_cond`i'' + + collapse (mean) valid_partnered valid_single [aw = dwt], by(year) + tempfile valid_stats + save `valid_stats' + + * Simuated data + use run year demAge sim_partnered sim_single ageGroup using /// + "$dir_data/simulation_sample.dta", clear + + * Select sample + keep if `age_cond`i'' + + collapse (mean) sim_partnered sim_single, by(run year) + + collapse (mean) sim_partnered sim_single /// + (sd) sim_partnered_sd = sim_partnered /// + sim_single_sd = sim_single, by(year) + + foreach varname in sim_partnered sim_single { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + + } + + * Combine + merge 1:1 year using `valid_stats', keep(3) nogen + + twoway (rarea sim_partnered_high sim_partnered_low year, sort color(green%20) /// + legend(label(1 "Partnered, SimPaths"))) /// + (line valid_partnered year, sort color(green) /// + legend(label(2 "Partnered, SILC"))) /// + (rarea sim_single_high sim_single_low year, sort color(red%20) /// + legend(label(3 "Single, SimPaths"))) /// + (line valid_single year, sort color(red) /// + legend(label(4 "Single, SILC"))), /// + title("Partnership status") /// + subtitle("`age_sub`i''") /// + xtitle("Year", size(small)) /// + ytitle("Share", size(small)) /// + xlabel(, labsize(small)) /// + ylabel(0(0.2)1, labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: ", size(vsmall)) + + graph export /// + "$dir_output_files/partnership/validation_${country}_partnership_ts_`age_suff`i''_both.jpg", /// + replace width(2400) height(1350) quality(100) + +} + +graph drop _all + + +******************************************************************************** +* 1.3 : Mean values over time - by children +******************************************************************************** + +* Load validation data +use year demAge dwt valid_partnered_children_0 valid_partnered_children_1 /// + valid_partnered_children_2 valid_partnered_children_3plus /// + valid_single_children_0 valid_single_children_1 /// + valid_single_children_2 valid_single_children_3plus using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +collapse (mean) valid_partnered_children_0 valid_partnered_children_1 /// + valid_partnered_children_2 valid_partnered_children_3plus /// + valid_single_children_0 valid_single_children_1 /// + valid_single_children_2 valid_single_children_3plus /// + [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + +* Load SimPaths data +use run year demAge sim_partnered_children_0 sim_partnered_children_1 /// + sim_partnered_children_2 sim_partnered_children_3plus /// + sim_single_children_0 sim_single_children_1 sim_single_children_2 /// + sim_single_children_3plus /// + using "$dir_data/simulation_sample.dta", clear + +* Compute shares and sd +collapse (mean) sim_partnered_children_0 sim_partnered_children_1 /// + sim_partnered_children_2 sim_partnered_children_3plus /// + sim_single_children_0 sim_single_children_1 /// + sim_single_children_2 sim_single_children_3plus, /// + by(run year) + +collapse (mean) sim_partnered_children_0 sim_partnered_children_1 /// + sim_partnered_children_2 sim_partnered_children_3plus /// + sim_single_children_0 sim_single_children_1 sim_single_children_2 /// + sim_single_children_3plus /// + (sd) sim_partnered_children_0_sd = sim_partnered_children_0 /// + sim_partnered_children_1_sd = sim_partnered_children_1 /// + sim_partnered_children_2_sd = sim_partnered_children_2 /// + sim_partnered_children_3plus_sd = sim_partnered_children_3plus /// + sim_single_children_0_sd = sim_single_children_0 /// + sim_single_children_1_sd = sim_single_children_1 /// + sim_single_children_2_sd = sim_single_children_2 /// + sim_single_children_3plus_sd = sim_single_children_3plus /// + , by(year) + +* Approx 95% confidence interval +foreach varname in sim_partnered_children_0 sim_partnered_children_1 /// + sim_partnered_children_2 sim_partnered_children_3plus sim_single_children_0 /// + sim_single_children_1 sim_single_children_2 sim_single_children_3plus { + + gen `varname'_h = `varname' + 1.96*`varname'_sd + gen `varname'_l = `varname' - 1.96*`varname'_sd + +} + +* Combine datasets +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Label variables +label var sim_partnered_children_0 "No children" +label var sim_partnered_children_1 "1 child" +label var sim_partnered_children_2 "2 children" +label var sim_partnered_children_3plus "3+ children" +label var sim_single_children_0 "No children" +label var sim_single_children_1 "1 child" +label var sim_single_children_2 "2 children" +label var sim_single_children_3plus "3+ children" + +* Plot figures + +* Partnered +foreach varname in partnered_children_0 partnered_children_1 /// + partnered_children_2 partnered_children_3plus { + + local vtext : variable label sim_`varname' + if `"`vtext'"' == "" local vtext "sim_`varname'" + twoway (rarea sim_`varname'_h sim_`varname'_l year, sort color(red%20) /// + legend(label(1 "SimPaths") position(6) rows(1))) /// + (line valid_`varname' year, sort color(red) /// + legend(label(2 "SILC"))), /// + subtitle("`vtext'") /// + name(`varname', replace) /// + ytitle("Share", size(small)) /// + xtitle("") /// + ylabel(0[0.1]0.5,labsize(vsmall)) /// + xlabel(,labsize(vsmall)) /// + legend(size(small)) /// + graphregion(color(white)) + +} + +* Combine plots +grc1leg partnered_children_0 partnered_children_1 partnered_children_2 /// + partnered_children_3plus , /// + title("Share Partnered and Number of Children") /// + legendfrom(partnered_children_0) /// + rows(2) /// + graphregion(color(white)) /// + ycomm /// + note("Notes: Samples contains all individual ages 18-65. ", size(vsmall)) + +graph export /// +"$dir_output_files/partnership/validation_${country}_partnership_children_ts_18_65_partnered.jpg", /// + replace width(2400) height(1350) quality(100) + + +* Single +foreach varname in single_children_0 single_children_1 single_children_2 /// + single_children_3plus { + + local vtext : variable label sim_`varname' + if `"`vtext'"' == "" local vtext "sim_`varname'" + twoway (rarea sim_`varname'_h sim_`varname'_l year, sort color(red%20) /// + legend(label(1 "SimPaths") position(6) rows(1))) /// + (line valid_`varname' year, sort color(red) /// + legend(label(2 "SILC"))), /// + subtitle("`vtext'") /// + name(`varname', replace) /// + ytitle("Share", size(small)) /// + xtitle("") /// + ylabel(0[0.1]0.5,labsize(vsmall)) /// + xlabel(,labsize(vsmall)) /// + legend(size(small)) /// + graphregion(color(white)) + +} + +* Combine plots +grc1leg single_children_0 single_children_1 single_children_2 /// + single_children_3plus , /// + title("Share Single and Number of Children") /// + legendfrom(single_children_0) /// + rows(2) /// + graphregion(color(white)) /// + ycomm /// + note("Notes: Samples contains all individual ages 18-65. ", size(vsmall)) + +graph export /// +"$dir_output_files/partnership/validation_${country}_partnership_children_ts_18_65_single.jpg", /// + replace width(2400) height(1350) quality(100) + + + + +*** Investigate transitions + +** At risk +* Into partnership + +use idPers year dwt valid_partnered valid_single demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if demAge > 17 +keep if demAge < 66 + +sort idPers year +gen form_rel = 0 if valid_partnered[_n-1] == 0 & idPers == idPers[_n-1] +replace form_rel = 1 if valid_partnered == 1 & form_rel == 0 + +drop if form_rel == . + +collapse (mean) form_rel [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use idPers run year demAge sim_partnered sim_single using /// + "$dir_data/simulation_sample.dta", clear + +keep if demAge > 17 +keep if demAge < 66 + +sort run idPers year + +gen sim_form_rel = 0 if sim_partnered[_n-1] == 0 & idPers == idPers[_n-1] +replace sim_form_rel = 1 if sim_partnered == 1 & sim_form_rel == 0 + +drop if sim_form_rel == . + + +collapse (mean) sim_form_rel, by(run year) + +collapse (mean) sim_form_rel /// + (sd) sim_form_rel_sd = sim_form_rel /// + , by(year) + +foreach varname in sim_form_rel { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +drop if year < 2012 + +* Plot figure +twoway (rarea sim_form_rel_high sim_form_rel_low year, sort color(green%20) /// + legend(label(1 "Simulated"))) /// +(line form_rel year, sort color(green) /// + legend(label(2 "SILC "))), /// + title("Share of singles that form partnership") /// + xtitle("Year", size(small)) /// + ytitle("Share", size(small)) /// + ylabel(, labsize(small)) /// + xlabel(,labsize(small)) /// + graphregion(color(white)) /// + note("Notes: Sample contains all individual ages 18-65.", size(vsmall)) + +graph export /// +"$dir_output_files/partnership/validation_${country}_into_partnership_ts_18_65_at_risk.jpg", /// + replace width(2400) height(1350) quality(100) + + +* Out of parnership +use idPers year dwt valid_partnered valid_single demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if demAge > 17 +keep if demAge < 66 + +sort idPers year +gen exit_rel = 0 if valid_partnered[_n-1] == 1 & idPers == idPers[_n-1] +replace exit_rel = 1 if valid_partnered == 0 & exit_rel == 0 + +drop if exit_rel == . + +collapse (mean) exit_rel [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use idPers run year demAge sim_partnered sim_single using /// + "$dir_data/simulation_sample.dta", clear + +keep if demAge > 17 +keep if demAge < 66 + +sort run idPers year + +gen sim_exit_rel = 0 if sim_partnered[_n-1] == 1 & idPers == idPers[_n-1] +replace sim_exit_rel = 1 if sim_partnered == 0 & sim_exit_rel == 0 + +drop if sim_exit_rel == . + +collapse (mean) sim_exit_rel, by(run year) + +collapse (mean) sim_exit_rel /// + (sd) sim_exit_rel_sd = sim_exit_rel /// + , by(year) + +foreach varname in sim_exit_rel { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +drop if year < 2012 + +* Plot figure +twoway (rarea sim_exit_rel_high sim_exit_rel_low year, sort color(green%20) /// + legend(label(1 "Simulated"))) /// +(line exit_rel year, sort color(green) /// + legend(label(2 "SILC "))), /// + title("Share of partnered that exit partnership") /// + xtitle("Year", size(small)) /// + ytitle("Share", size(small)) /// + ylabel(, labsize(small)) /// + xlabel(,labsize(small)) /// + graphregion(color(white)) /// + note("Notes: Sample contains all individual ages 18-65.", size(vsmall)) + +graph export /// +"$dir_output_files/partnership/validation_${country}_exit_partnership_ts_18_65_at_risk.jpg", /// + replace width(2400) height(1350) quality(100) + + +** Whole pop +* Into partnership + +use idPers year dwt valid_partnered valid_single demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if demAge > 17 +keep if demAge < 66 + +sort idPers year + +gen form_rel = 0 if valid_partnered[_n-1] == 0 & idPers == idPers[_n-1] +replace form_rel = 1 if valid_partnered == 1 & form_rel == 0 +replace form_rel = 0 if form_rel == . + +drop if idPers != idPers[_n-1] + +collapse (mean) form_rel [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use idPers run year demAge sim_partnered sim_single using /// + "$dir_data/simulation_sample.dta", clear + +keep if demAge > 17 +keep if demAge < 66 + +sort run idPers year + +gen sim_form_rel = 0 if sim_partnered[_n-1] == 0 & idPers == idPers[_n-1] +replace sim_form_rel = 1 if sim_partnered == 1 & sim_form_rel == 0 +replace sim_form_rel = 0 if sim_form_rel == . + +drop if idPers != idPers[_n-1] + +collapse (mean) sim_form_rel, by(run year) + +collapse (mean) sim_form_rel /// + (sd) sim_form_rel_sd = sim_form_rel /// + , by(year) + +foreach varname in sim_form_rel { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +drop if year < 2012 + +* Plot figure +twoway (rarea sim_form_rel_high sim_form_rel_low year, sort color(green%20) /// + legend(label(1 "Simulated"))) /// +(line form_rel year, sort color(green) /// + legend(label(2 "SILC "))), /// + title("Share of population that form partnership") /// + xtitle("Year", size(small)) /// + ytitle("Share", size(small)) /// + ylabel(, labsize(small)) /// + xlabel(,labsize(small)) /// + graphregion(color(white)) /// + note("Notes: Sample contains all individual ages 18-65.", size(vsmall)) + +graph export /// +"$dir_output_files/partnership/validation_${country}_into_partnership_ts_18_65_all.jpg", /// + replace width(2400) height(1350) quality(100) + + +* Out of parnership +use idPers year dwt valid_partnered valid_single demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if demAge > 17 +keep if demAge < 66 + +sort idPers year + +gen exit_rel = 0 if valid_partnered[_n-1] == 1 & idPers == idPers[_n-1] +replace exit_rel = 1 if valid_partnered == 0 & exit_rel == 0 +replace exit_rel = 0 if exit_rel == . + +drop if idPers != idPers[_n-1] + +collapse (mean) exit_rel [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulated data +use idPers run year demAge sim_partnered sim_single using /// + "$dir_data/simulation_sample.dta", clear + +keep if demAge > 17 +keep if demAge < 66 + +sort run idPers year + +gen sim_exit_rel = 0 if sim_partnered[_n-1] == 1 & idPers == idPers[_n-1] +replace sim_exit_rel = 1 if sim_partnered == 0 & sim_exit_rel == 0 +replace sim_exit_rel = 0 if sim_exit_rel == . + +drop if idPers != idPers[_n-1] + +collapse (mean) sim_exit_rel, by(run year) + +collapse (mean) sim_exit_rel /// + (sd) sim_exit_rel_sd = sim_exit_rel /// + , by(year) + +foreach varname in sim_exit_rel { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +drop if year < 2012 + +* Plot figure +twoway (rarea sim_exit_rel_high sim_exit_rel_low year, sort color(green%20) /// + legend(label(1 "Simulated"))) /// +(line exit_rel year, sort color(green) /// + legend(label(2 "SILC "))), /// + title("Share of population that exit partnership") /// + xtitle("Year", size(small)) /// + ytitle("Share", size(small)) /// + ylabel(, labsize(small)) /// + xlabel(,labsize(small)) /// + graphregion(color(white)) /// + note("Notes: Sample contains all individual ages 18-65.", size(vsmall)) + +graph export /// +"$dir_output_files/partnership/validation_${country}_exit_partnership_ts_18_65_all.jpg", /// + replace width(2400) height(1350) quality(100) + + +graph drop _all + + + + + diff --git a/validation/02_simulation_validation/do_files/04_13_plot_health.do b/validation/02_simulation_validation/do_files/04_13_plot_health.do new file mode 100644 index 0000000..b9337e3 --- /dev/null +++ b/validation/02_simulation_validation/do_files/04_13_plot_health.do @@ -0,0 +1,483 @@ +/******************************************************************************* +* PROJECT: SimPaths EU +* SECTION: Validation +* OBJECT: Health +* AUTHORS: Ashley Burdett +* LAST UPDATE: Jan 2026 +* COUNTRY: PL +******************************************************************************** +* NOTES: +*******************************************************************************/ + +******************************************************************************** +* 1 : Mean values over time +******************************************************************************** + +******************************************************************************** +* 1.1 : Mean values over time - Self rated health, 16-65 +******************************************************************************** + +use year dwt valid_healthSelfRated demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if inrange(demAge,16,65) + +gen health = valid_healthSelfRated + +collapse (mean) health [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare Simulated data +use run year sim_healthSelfRated demAge run using /// + "$dir_data/simulation_sample.dta", clear + +keep if inrange(demAge,16,65) + +gen healthSelfRated = sim_healthSelfRated + +collapse (mean) healthSelfRated, by(year run) + +collapse (mean) healthSelfRated /// + (sd) healthSelfRated_sd = healthSelfRated /// + , by(year) + +* Compute 95% confidence interval +foreach varname in healthSelfRated { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +twoway (rarea healthSelfRated_high healthSelfRated_low year, /// + sort color(green%20) legend(label(1 "SimPaths"))) /// +(line health year, sort color(green) /// + legend(label(2 "SILC"))), /// + title("Self Rated Health") /// + subtitle("Ages 16-65") /// + xtitle("Year", size(small)) /// + ytitle("Score", size(small)) /// + ylabel(,labsize(small)) /// + xlabel(,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: The health variable is a self-assessed variable and follows a 5-point Likert scale (1 = poor, ..., 5 = excellent). ", /// + size(vsmall)) + +graph export /// +"$dir_output_files/health/validation_${country}_self_rated_ts_16_65_both.jpg", /// + replace width(2560) height(1440) quality(100) + + +******************************************************************************** +* 1.2 : Mean values over time - Self rated health, 16-65, by gender +******************************************************************************** + +* Prepare validation data +use year dwt valid_healthSelfRated demAge demMaleFlag using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if inrange(demAge,16,65) + +gen health = valid_healthSelfRated + +collapse (mean) health [aw = dwt], by(year demMaleFlag) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulation data +use run year sim_healthSelfRated demAge demMaleFlag run using "$dir_data/simulation_sample.dta", clear + +keep if inrange(demAge,16,65) + +gen healthSelfRated = sim_healthSelfRated + +collapse (mean) healthSelfRated, by(year demMaleFlag run) + +collapse (mean) healthSelfRated /// + (sd) healthSelfRated_sd = healthSelfRated /// + , by(year demMaleFlag) + +* Compute 95% confidence interval +foreach varname in healthSelfRated { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year demMaleFlag using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +twoway (rarea healthSelfRated_high healthSelfRated_low year if /// + demMaleFlag == 0, sort color(green%20) legend(label(1 "SimPaths"))) /// +(line health year if demMaleFlag == 0, sort color(green) /// + legend(label(2 "SILC"))), /// + subtitle("Females") /// + name(health_female, replace) /// + xtitle("Year", size(small)) /// + ytitle("Score", size(small)) /// + ylabel(3[.2]3.8,labsize(small)) /// + xlabel(,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + + +twoway (rarea healthSelfRated_high healthSelfRated_low year if /// + demMaleFlag == 1, sort color(green%20) legend(label(1 "SimPaths"))) /// +(line health year if demMaleFlag == 1, sort color(green) /// + legend(label(2 "SILC"))), /// + subtitle("Males") /// + name(health_male, replace) /// + xtitle("Year", size(small)) /// + ytitle("Score", size(small)) /// + ylabel(3[.2]3.8,labsize(small)) /// + xlabel(,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + +grc1leg health_female health_male, /// + title("Self Rated Health") /// + subtitle("Ages 16-65") /// + legendfrom(health_female) rows(1) /// + graphregion(color(white)) /// + ycomm /// +note("Notes: The health variable is a self-assessed variable and follows a 5-point Likert scale (1 = poor, ..., 5 = excellent). ", /// + size(vsmall)) + +graph export /// +"$dir_output_files/health/validation_${country}_self_rated_ts_16_65_gender.jpg", /// + replace width(2560) height(1440) quality(100) + + +******************************************************************************** +* 1.3 : Mean values over time - self rated health, by age group and gender +******************************************************************************** + +* Prepare validation data +use year dwt demAge demMaleFlag ageGroup valid_healthSelfRated using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +gen health_m = valid_healthSelfRated if demMaleFlag == 1 +gen health_f = valid_healthSelfRated if demMaleFlag == 0 + +drop if ageGroup == 0 + +collapse (mean) health* [aw = dwt], by(ageGroup year) + +drop if missing(ageGroup) +reshape wide health*, i(year) j(ageGroup) + +forvalues i = 1(1)8 { + + rename health_f`i' health_f_`i'_valid + rename health_m`i' health_m_`i'_valid + +} + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare Simulated data +use run year demMaleFlag ageGroup sim_healthSelfRated using /// + "$dir_data/simulation_sample.dta", clear + +gen health_m = sim_healthSelfRated if demMaleFlag == 1 +gen health_f = sim_healthSelfRated if demMaleFlag == 0 + +collapse (mean) health*, by(ageGroup run year) + +drop if missing(ageGroup) + +reshape wide health*, i(year run) j(ageGroup) + +collapse (mean) health* /// + (sd) health_m_1_sd = health_m1 /// + (sd) health_f_1_sd = health_f1 /// + (sd) health_m_2_sd = health_m2 /// + (sd) health_f_2_sd = health_f2 /// + (sd) health_m_3_sd = health_m3 /// + (sd) health_f_3_sd = health_f3 /// + (sd) health_m_4_sd = health_m4 /// + (sd) health_f_4_sd = health_f4 /// + (sd) health_m_5_sd = health_m5 /// + (sd) health_f_5_sd = health_f5 /// + (sd) health_m_6_sd = health_m6 /// + (sd) health_f_6_sd = health_f6 /// + (sd) health_m_7_sd = health_m7 /// + (sd) health_f_7_sd = health_f7 /// + (sd) health_m_8_sd = health_m8 /// + (sd) health_f_8_sd = health_f8 /// + , by(year) + +forvalues i=1(1)8 { + + gen health_f_`i'_sim_high = health_f`i' + 1.96*health_f_`i'_sd + gen health_f_`i'_sim_low = health_f`i' - 1.96*health_f_`i'_sd + gen health_m_`i'_sim_high = health_m`i' + 1.96*health_m_`i'_sd + gen health_m_`i'_sim_low = health_m`i' - 1.96*health_m_`i'_sd + +} + + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +foreach vble in "health_f" "health_m" { + + twoway (rarea `vble'_1_sim_high `vble'_1_sim_low year, sort /// + color(red%20) legend(label(1 "SimPaths") position(6) rows(1))) /// + (line `vble'_1_valid year, sort color(red) legend(label(2 "SILC"))), /// + subtitle("Age 15-19") /// + name(`vble'_1, replace) /// + xtitle("Year", size(small)) /// + ytitle("Score", size(small)) /// + ylabel(3 [1] 5, labsize(vsmall)) /// + xlabel(,labsize(vsmall)) /// + legend(size(small)) /// + graphregion(color(white)) + + twoway (rarea `vble'_2_sim_high `vble'_2_sim_low year, sort /// + color(red%20) legend(label(1 "SimPaths") position(6) rows(1))) /// + (line `vble'_2_valid year, sort color(red) legend(label(2 "SILC"))), /// + subtitle("Age 20-24") /// + name(`vble'_2, replace) /// + xtitle("Year", size(small)) /// + ytitle("Score", size(small)) /// + ylabel(3 [1] 5, labsize(vsmall)) /// + xlabel(,labsize(vsmall)) /// + legend(size(small)) /// + graphregion(color(white)) + + twoway (rarea `vble'_3_sim_high `vble'_3_sim_low year, sort /// + color(red%20) legend(label(1 "SimPaths") position(6) rows(1))) /// + (line `vble'_3_valid year, sort color(red) legend(label(2 "SILC"))), /// + subtitle("Age 25-29") /// + name(`vble'_3, replace) /// + xtitle("Year", size(small)) /// + ytitle("Score", size(small)) /// + ylabel(3 [1] 5, labsize(vsmall)) /// + xlabel(,labsize(vsmall)) /// + legend(size(small)) /// + graphregion(color(white)) + + twoway (rarea `vble'_4_sim_high `vble'_4_sim_low year, sort /// + color(red%20) legend(label(1 "SimPaths") position(6) rows(1))) /// + (line `vble'_4_valid year, sort color(red) legend(label(2 "SILC"))), /// + subtitle("Age 30-34") /// + name(`vble'_4, replace) /// + xtitle("Year", size(small)) /// + ytitle("Score", size(small)) /// + ylabel(3 [1] 5, labsize(vsmall)) /// + xlabel(,labsize(vsmall)) /// + legend(size(small)) /// + graphregion(color(white)) + + twoway (rarea `vble'_5_sim_high `vble'_5_sim_low year, sort /// + color(red%20) legend(label(1 "SimPaths") position(6) rows(1))) /// + (line `vble'_5_valid year, sort color(red) legend(label(2 "SILC"))), /// + subtitle("Age 35-39") /// + name(`vble'_5, replace) /// + xtitle("Year", size(small)) /// + ytitle("Score", size(small)) /// + ylabel(3 [1] 5, labsize(vsmall)) /// + xlabel(,labsize(vsmall)) /// + legend(size(small)) /// + graphregion(color(white)) + + twoway (rarea `vble'_6_sim_high `vble'_6_sim_low year, sort /// + color(red%20) legend(label(1 "SimPaths") position(6) rows(1))) /// + (line `vble'_6_valid year, sort color(red) legend(label(2 "SILC"))), /// + subtitle("Age 40-59") /// + name(`vble'_6, replace) /// + xtitle("Year", size(small)) /// + ytitle("Score", size(small)) /// + ylabel(3 [1] 5, labsize(vsmall)) /// + xlabel(,labsize(vsmall)) /// + legend(size(small)) /// + graphregion(color(white)) + + twoway (rarea `vble'_7_sim_high `vble'_7_sim_low year, sort /// + color(red%20) legend(label(1 "SimPaths") position(6) rows(1))) /// + (line `vble'_7_valid year, sort color(red) legend(label(2 "SILC"))), /// + subtitle("Age 60-79") /// + name(`vble'_7, replace) /// + xtitle("Year", size(small)) /// + ytitle("Score", size(small)) /// + ylabel(3 [1] 5, labsize(vsmall)) /// + xlabel(,labsize(vsmall)) /// + legend(size(small)) /// + graphregion(color(white)) + + twoway (rarea `vble'_8_sim_high `vble'_8_sim_low year, sort /// + color(red%20) legend(label(1 "SimPaths") position(6) rows(1))) /// + (line `vble'_7_valid year, sort color(red) legend(label(2 "SILC"))), /// + subtitle("Age 80-100") /// + name(`vble'_8, replace) /// + xtitle("Year", size(small)) /// + ytitle("Score", size(small)) /// + ylabel(3 [1] 5, labsize(vsmall)) /// + xlabel(,labsize(vsmall)) /// + legend(size(small)) /// + graphregion(color(white)) +} + +* Save figures +grc1leg health_f_1 health_f_2 health_f_3 health_f_4 health_f_5 /// + health_f_6 health_f_7 health_f_8, /// + title("Self Rated Health") /// + subtitle("Females") /// + legendfrom(health_f_1) /// + graphregion(color(white)) /// + ycomm /// +note("Notes: The health variable is a self-assessed variable and follows a 5-point Likert scale (1 = poor, ..., 5 = excellent). ", /// + size(vsmall)) + +graph export /// + "$dir_output_files/health/validation_${country}_self_rated_ts_age_groups_female.jpg", /// + replace width(2400) height(1350) quality(100) + + +grc1leg health_m_1 health_m_2 health_m_3 health_m_4 health_m_5 /// + health_m_6 health_m_7 health_m_8, /// + title("Self Rated Health") /// + subtitle("Males") /// + legendfrom(health_m_1) /// + graphregion(color(white)) /// + ycomm /// +note("Notes: The health variable is a self-assessed variable and follows a 5-point Likert scale (1 = poor, ..., 5 = excellent). ", /// + size(vsmall)) + +graph export /// + "$dir_output_files/health/validation_${country}_self_rated_ts_age_groups_male.jpg", /// + replace width(2400) height(1350) quality(100) + +graph drop _all + + + +******************************************************************************** +* 2 : Histograms +******************************************************************************** + +******************************************************************************** +* 2.1 : Histograms - Working age +******************************************************************************** + +* Working age +use year dwt valid_healthSelfRated demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if inrange(demAge,16,65) + +gen health = valid_healthSelfRated + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare Simulated data +use run year sim_healthSelfRated demAge run using /// + "$dir_data/simulation_sample.dta", clear + +keep if inrange(demAge,16,65) + +gen healthSelfRated = sim_healthSelfRated + +keep if run == 1 + +append using "$dir_data/temp_valid_stats.dta" + + +* Plot figure +twoway (hist healthSelfRated, width(0.2) color(green%30) /// + legend(label(1 "SimPaths"))) /// +(hist health, width(0.2) color(red%30) legend(label(2 "SILC"))), /// + title("Self Rated Health") /// + subtitle("Ages 16-65") /// + xtitle("Score", size(small)) /// + ytitle("Year", size(small)) /// + xlabel(,labsize(small)) /// + ylabel(,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: The health variable is a self-assessed variable and follows a 5-point Likert scale (1 = poor, ..., 5 = excellent). ", /// + size(vsmall)) + +graph export /// +"$dir_output_files/health/validation_${country}_self_rated_hist_16_65_both.jpg", /// + replace width(2560) height(1440) quality(100) + + +******************************************************************************** +* 2.2 : Histograms - Working age, by gender +******************************************************************************** + +use year dwt demAge valid_healthSelfRated demMaleFlag using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if inrange(demAge,16,65) + +gen health = valid_healthSelfRated + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare Simulated data +use run year demAge sim_healthSelfRated demMaleFlag run using /// + "$dir_data/simulation_sample.dta", clear + +keep if inrange(demAge,16,65) + +gen healthSelfRated = sim_healthSelfRated + +keep if run == 1 + +append using "$dir_data/temp_valid_stats.dta" + + +* Plot figure + +twoway (hist healthSelfRated if demMaleFlag == 0, width(0.2) color(green%30) /// + legend(label(1 "SimPaths"))) /// +(hist health if demMaleFlag == 0, width(0.2) color(red%30) /// + legend(label(2 "SILC"))), /// + subtitle("Females") /// + name(health_female, replace) /// + xtitle("Score", size(small)) /// + ytitle("Density", size(small)) /// + xlabel(,labsize(small)) /// + ylabel(0[.5]2.5,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) + + +twoway (hist healthSelfRated if demMaleFlag == 1, width(0.2) color(green%30) /// + legend(label(1 "SimPaths"))) /// +(hist health if demMaleFlag == 1, width(0.2) color(red%30) /// + legend(label(2 "SILC"))), /// + subtitle("Males") /// + name(health_male, replace) /// + xtitle("Score", size(small)) /// + ytitle("Density", size(small)) /// + xlabel(,labsize(small)) /// + ylabel(0[.5]2.5,labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) + +grc1leg health_female health_male, /// + title("Self Rated Health") /// + subtitle("Ages 16-65") /// + legendfrom(health_male) rows(1) /// + graphregion(color(white)) /// + ycomm /// + note("Notes: The health variable is a self-assessed variable and follows a 5-point Likert scale (1 = poor, ..., 5 = excellent). ", /// + size(vsmall)) + + +graph export /// +"$dir_output_files/health/validation_${country}_self_rated_hist_16_65_gender.jpg", /// + replace width(2560) height(1440) quality(100) + +graph drop _all diff --git a/validation/02_simulation_validation/do_files/04_14_plot_at_risk_of_poverty.do b/validation/02_simulation_validation/do_files/04_14_plot_at_risk_of_poverty.do new file mode 100644 index 0000000..08b0c16 --- /dev/null +++ b/validation/02_simulation_validation/do_files/04_14_plot_at_risk_of_poverty.do @@ -0,0 +1,216 @@ +/******************************************************************************* +* PROJECT: SimPaths EU +* SECTION: Validation +* OBJECT: Risk of poverty +* AUTHORS: Ashley Burdett +* LAST UPDATE: Jan 2026 +* COUNTRY: PL +******************************************************************************** +* NOTES: +*******************************************************************************/ + +******************************************************************************** +* 1 : Mean values over time +******************************************************************************** + +******************************************************************************** +* 1.1 : Mean values over time, working age (18-65) +******************************************************************************** + +* Prepare validation data +use year demAge dwt valid_yDispBuEquivYear using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if inrange(demAge,18,65) + +* Trim outliers +if "$trim_outliers" == "true" { + + sum valid_yDispBuEquivYear, d + + replace valid_yDispBuEquivYear = . if /// + valid_yDispBuEquivYear < r(p1) | valid_yDispBuEquivYear > r(p99) + +} + +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = r(max) +if "$max_sim_year" != "" local max_year = $max_sim_year + + +gen poverty_line = . +forval year = `min_year'/`max_year' { + + sum valid_yDispBuEquivYear if year == `year', d + replace poverty_line = 0.6*r(p50) if year == `year' + +} + +gen arop = (valid_yDispBuEquivYear < poverty_line) + +collapse (mean) arop [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year demAge sim_yDispEquivYear using /// + "$dir_data/simulation_sample.dta", clear + +* Trim outliers +if "$trim_outliers" == "true" { + + sum sim_yDispEquivYear, d + + replace sim_yDispEquivYear = . if /// + sim_yDispEquivYear < r(p1) | sim_yDispEquivYear > r(p99) + +} + +bys run year: egen equivincome_median = median(sim_yDispEquivYear) + +gen poverty_line = 0.6*equivincome_median + +gen arop_sim = (sim_yDispEquivYear < poverty_line) + +collapse (mean) arop_sim, by(run year) + +collapse (mean) arop_sim /// + (sd) arop_sim_sd = arop_sim /// + , by(year) + +foreach varname in arop_sim { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +twoway (rarea arop_sim_high arop_sim_low year, sort color(green%20) /// + legend(label(1 "SimPaths"))) /// +(line arop year, sort color(green) legend(label(2 "SILC"))), /// + title("At Risk of Poverty") /// + subtitle("Ages 18-65") /// + xtitle("Year", size(small)) /// + ytitle("Share", size(small)) /// + xlabel(, labsize(small)) /// + ylabel(, labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Note: Poverty line calculated within each year as 60% of the median equivalised disposable income of benefit unit. Calculated" "using individual level observations.", /// + size(vsmall)) + +* Save figure +graph export "$dir_output_files/poverty/validation_${country}_at_risk_of_poverty_18_${max_age}.jpg", /// + replace width(2560) height(1440) quality(100) + + + +******************************************************************************** +* 1.1 : Mean values over time, 18+ +******************************************************************************** + +* Prepare validation data +use year demAge dwt valid_yDispBuEquivYear using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* Select sample +drop if demAge < 18 + +* Trim outliers +if "$trim_outliers" == "true" { + + sum valid_yDispBuEquivYear, d + + replace valid_yDispBuEquivYear = . if /// + valid_yDispBuEquivYear < r(p1) | valid_yDispBuEquivYear > r(p99) + +} + +qui sum year +local min_year = 2011 +if "$min_sim_year" != "" local min_year = $min_sim_year +local max_year = r(max) +if "$max_sim_year" != "" local max_year = $max_sim_year + + +gen poverty_line = . + +forval year = `min_year'/`max_year' { + + sum valid_yDispBuEquivYear if year == `year', d + replace poverty_line = 0.6*r(p50) if year == `year' + +} + +gen arop = (valid_yDispBuEquivYear < poverty_line) + +collapse (mean) arop [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year demAge sim_yDispEquivYear using /// + "$dir_data/simulation_sample.dta", clear + +* Select sample +drop if demAge < 18 + +* Trim outliers +if "$trim_outliers" == "true" { + + sum sim_yDispEquivYear, d + + replace sim_yDispEquivYear = . if /// + sim_yDispEquivYear < r(p1) | sim_yDispEquivYear > r(p99) + +} + +bys run year: egen equivincome_median = median(sim_yDispEquivYear) + +gen poverty_line = 0.6*equivincome_median + +gen arop_sim = (sim_yDispEquivYear < poverty_line) + +collapse (mean) arop_sim, by(run year) + +collapse (mean) arop_sim /// + (sd) arop_sim_sd = arop_sim /// + , by(year) + +foreach varname in arop_sim { + + gen `varname'_high = `varname' + 1.96*`varname'_sd + gen `varname'_low = `varname' - 1.96*`varname'_sd + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +twoway (rarea arop_sim_high arop_sim_low year, sort color(green%20) /// + legend(label(1 "SimPaths"))) /// +(line arop year, sort color(green) legend(label(2 "SILC"))), /// + title("At Risk of Poverty") /// + subtitle("Ages 18+") /// + xtitle("Year", size(small)) /// + ytitle("Share", size(small)) /// + xlabel(, labsize(small)) /// + ylabel(, labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Note: Poverty line calculated within each year as 60% of the median equivalised disposable income of benefit unit. Calculated" "using individual level observations.", /// + size(vsmall)) + +* Save figure +graph export "$dir_output_files/poverty/validation_${country}_at_risk_of_poverty_18plus.jpg", /// + replace width(2560) height(1440) quality(100) + + +graph drop _all diff --git a/validation/02_simulation_validation/do_files/04_15_plot_inequality.do b/validation/02_simulation_validation/do_files/04_15_plot_inequality.do new file mode 100644 index 0000000..f9b623a --- /dev/null +++ b/validation/02_simulation_validation/do_files/04_15_plot_inequality.do @@ -0,0 +1,457 @@ +******************************************************************************** +* PROJECT: SimPath EU +* SECTION: Validation +* OBJECT: Inequality +* AUTHORS: Ashley Burdett +* LAST UPDATE: 9/2025 (AB) +* COUNTRY: PL +******************************************************************************** +* NOTES: Equivalized disposable income used to created ratios +******************************************************************************** + +//ssc install ineqdeco + +******************************************************************************** +* 1 : Income ratios through time +******************************************************************************** + +******************************************************************************** +* 1.1 : Income ratio, 90/50 +******************************************************************************** + +* Prepare validation data +use year demAge dwt valid_yDispBuEquivYear using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if inrange(demAge,18,65) + +* Trim outliers +if "$trim_outliers" == "true" { + + sum valid_yDispBuEquivYear, d + + replace valid_yDispBuEquivYear = . if /// + valid_yDispBuEquivYear < r(p1) | valid_yDispBuEquivYear > r(p99) + +} + +collapse (p90) p90_disp = valid_yDispBuEquivYear /// + (p50) p50_disp = valid_yDispBuEquivYear /// + [aw = dwt] , by(year) + +gen p90_p50_ratio_disp_obs = p90_disp/p50_disp + +* Align reference years +gen l_p90_p50_ratio_disp_obs = p90_p50_ratio_disp_obs[_n+1] + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year demAge sim_yDispEquivYear using /// + "$dir_data/simulation_sample.dta", clear + +keep if inrange(demAge,18,65) + +* Trim outliers +if "$trim_outliers" == "true" { + + sum sim_yDispEquivYear, d + + replace sim_yDispEquivYear = . if /// + sim_yDispEquivYear < r(p1) | sim_yDispEquivYear > r(p99) + +} + +collapse (p90) p90_disp = sim_yDispEquivYear /// + (p50) p50_disp = sim_yDispEquivYear, by(run year) + +gen p90_p50_ratio_disp = p90_disp/p50_disp + +collapse (mean) p90_p50_ratio_disp /// + (sd) sd_p90_p50_ratio_disp = p90_p50_ratio_disp /// + , by(year) + + foreach var in p90_p50_ratio_disp { + + gen `var'_high = `var' + 1.96*sd_`var' + gen `var'_low = `var' - 1.96*sd_`var' + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + + +* Plot figure +twoway (rarea p90_p50_ratio_disp_high p90_p50_ratio_disp_low year, sort /// + color(green%20) legend(label(1 "SimPaths") position(6) rows(1))) /// +(line p90_p50_ratio_disp_obs year, sort color(green)legend(label(2 "SILC"))), /// + title("P90/P50 Disposable Income Ratio") /// + subtitle("Ages 18-65") /// + xtitle("Year", size(small)) /// + ytitle("Ratio", size(small)) /// + xlabel(, labsize(small)) /// + ylabel(, labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: Ratios computed using individual observations of benefit unit measure of equivalized disposable income.", /// + size(vsmall)) + +* Save figure +graph export "$dir_output_files/inequality/validation_${country}_p90p50.jpg", /// + replace width(2400) height(1350) quality(100) + + +******************************************************************************** +* 1.1 : Income ratio, 90/10 +******************************************************************************** + +* Prepare validation data +use year demAge dwt valid_yDispBuEquivYear using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if inrange(demAge,18,65) + +* Trim outliers +if "$trim_outliers" == "true" { + + sum valid_yDispBuEquivYear, d + + replace valid_yDispBuEquivYear = . if /// + valid_yDispBuEquivYear < r(p1) | valid_yDispBuEquivYear > r(p99) + +} + +collapse (p90) p90_disp = valid_yDispBuEquivYear /// + (p10) p10_disp = valid_yDispBuEquivYear /// + [aw = dwt], by(year) + +gen p90_p10_ratio_disp_obs = p90_disp/p10_disp + +* Align reference years +gen l_p90_p10_ratio_disp_obs = p90_p10_ratio_disp_obs[_n+1] + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year demAge sim_yDispEquivYear using /// + "$dir_data/simulation_sample.dta", clear + +keep if inrange(demAge,18,65) + +* Trim outliers +if "$trim_outliers" == "true" { + + sum sim_yDispEquivYear, d + + replace sim_yDispEquivYear = . if /// + sim_yDispEquivYear < r(p1) | sim_yDispEquivYear > r(p99) + +} + +collapse (p90) p90_disp = sim_yDispEquivYear /// + (p10) p10_disp = sim_yDispEquivYear, by(run year) + +gen p90_p10_ratio_disp = p90_disp/p10_disp + +collapse (mean) p90_p10_ratio_disp /// + (sd) sd_p90_p10_ratio_disp = p90_p10_ratio_disp /// + , by(year) + + foreach var in p90_p10_ratio_disp { + + gen `var'_high = `var' + 1.96*sd_`var' + gen `var'_low = `var' - 1.96*sd_`var' + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + + +* Plot figure +twoway (rarea p90_p10_ratio_disp_high p90_p10_ratio_disp_low year, sort /// + color(green%20) legend(label(1 "SimPaths") position(6) rows(1))) /// +(line p90_p10_ratio_disp_obs year, sort color(green)legend(label(2 "SILC"))), /// + title("P90/P10 Disposable Income Ratio") /// + subtitle("Ages 18-65") /// + xtitle("Year", size(small)) /// + ytitle("Ratio", size(small)) /// + xlabel(, labsize(small)) /// + ylabel(, labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: Ratios computed using individual observations of benefit unit measure of equivalized disposable income.", /// + size(vsmall)) + +* Save figure +graph export "$dir_output_files/inequality/validation_${country}_p90p10.jpg", /// + replace width(2400) height(1350) quality(100) + + +******************************************************************************** +* 1.3 : Gini coefficeint +******************************************************************************** + +* Prepare validation data +use year demAge dwt valid_yDispBuEquivYear using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if inrange(demAge,18,65) + +* Trim outliers +if "$trim_outliers" == "true" { + + sum valid_yDispBuEquivYear, d + + replace valid_yDispBuEquivYear = . if /// + valid_yDispBuEquivYear < r(p1) | valid_yDispBuEquivYear > r(p99) + +} + +* Calulate gini for each year +statsby gini = r(gini), by(year) clear: ineqdeco valid_yDispBuEquivYear [aw=dwt] + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year demAge sim_yDispEquivYear using /// + "$dir_data/simulation_sample.dta", clear + +keep if inrange(demAge,18,65) + +* Trim outliers +if "$trim_outliers" == "true" { + + sum sim_yDispEquivYear, d + + replace sim_yDispEquivYear = . if /// + sim_yDispEquivYear < r(p1) | sim_yDispEquivYear > r(p99) + +} + +* Calculate gini for each year and run +statsby gini = r(gini), by(year run) clear: ineqdeco sim_yDispEquivYear + +* Obtain the mean and standard deviation by year +collapse (mean) gini /// + (sd) gini_sd = gini, by(year) + +* Compute the 95% confidence interval +gen gini_high = gini + 1.96 * gini_sd +gen gini_low = gini - 1.96 * gini_sd + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +twoway (rarea gini_high gini_low year, sort /// + color(green%20) legend(label(1 "SimPaths") position(6) rows(1))) /// +(line gini year, sort color(green)legend(label(2 "SILC"))), /// + title("Gini Coefficient") /// + subtitle("Ages 18-65") /// + xtitle("Year", size(small)) /// + ytitle("Coefficient", size(small)) /// + xlabel(, labsize(small)) /// + ylabel(, labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: Gini coefficient computed using individual observations of benefit unit measure of equivalized disposable income.", /// + size(vsmall)) + +* Save figure +graph export "$dir_output_files/inequality/validation_${country}_gini.jpg", /// + replace width(2400) height(1350) quality(100) + + +graph drop _all + + + +******************************************************************************** +* 1.4 : Net transfers +******************************************************************************** + +use "$dir_data/simulation_sample.dta", clear + +* keep only one observation per benefit unit +sort run idBu year + +* Keep one observation per benefit unit +* Create a marker for the first observation in each group +bys run year idBu (demAge): gen byte to_keep = (_n == _N) + +* Keep only the marked rows +keep if to_keep == 1 +drop to_keep + +* Create gross income deciles +sort run idPers year + +xtile sim_decile = sim_yNonBenBuGrossLevelYear , n(10) + +tab sim_decile + + +* Plots + +* Sources + +* All +graph bar (mean) sim_net_transfers , over(sim_decile) /// + title("SimPaths") /// + name(simulated_net_trans_all, replace) /// + b1title("BU Gross Income Decile", size(small)) /// + ytitle("Euro") /// + ylabel(#5, format(%12.0fc)) /// + ylabel(,labsize(small)) /// + graphregion(color(white)) + + +* Oldest <= 65 +preserve + +drop if demAge > 65 + +graph bar (mean) sim_net_transfers , over(sim_decile) /// + title("SimPaths") /// + name(simulated_net_trans_upto65, replace) /// + b1title("BU Gross Income Decile", size(small)) /// + ytitle("Euro") /// + ylabel(#5, format(%12.0fc)) /// + ylabel(,labsize(small)) /// + graphregion(color(white)) + + +restore + +* Oldest > 65 +preserve + +drop if demAge <= 65 + +graph bar (mean) sim_net_transfers , over(sim_decile) /// + title("SimPaths") /// + name(simulated_net_trans_66plus, replace) /// + b1title("BU Gross Income Decile", size(small)) /// + ytitle("Euro") /// + ylabel(#5, format(%12.0fc)) /// + ylabel(,labsize(small)) /// + graphregion(color(white)) + +restore + + +use "$dir_data/${country}-eusilc_validation_sample.dta", clear + +* keep only one observation per benefit unit +sort idBu year + +* Keep one observation per benefit unit +* Create a marker for the first observation in each group +bys year idBu (demAge): gen byte to_keep = (_n == _N) + +* Keep only the marked rows +keep if to_keep == 1 +drop to_keep + +* Create gross income deciles +sort idPers year + +xtile valid_decile = valid_yNonBenBuGrossLevelYear , n(10) + +tab valid_decile + + +* Plots + +* Sources + +* All +graph bar (mean) valid_net_transfers , over(valid_decile) /// + title("SILC") /// + name(valid_net_trans_all, replace) /// + b1title("BU Gross Income Decile", size(small)) /// + ytitle("Euro") /// + ylabel(#5, format(%12.0fc)) /// + ylabel(,labsize(small)) /// + graphregion(color(white)) + + +* Oldest <= 65 +preserve + +drop if demAge > 65 + +graph bar (mean) valid_net_transfers , over(valid_decile) /// + title("SILC") /// + name(valid_net_trans_upto65, replace) /// + b1title("BU Gross Income Decile", size(small)) /// + ytitle("Euro") /// + ylabel(#5, format(%12.0fc)) /// + ylabel(,labsize(small)) /// + graphregion(color(white)) + + +restore + +* Oldest > 65 +preserve + +drop if demAge <= 65 + +graph bar (mean) valid_net_transfers , over(valid_decile) /// + title("SILC") /// + name(valid_net_trans_66plus, replace) /// + b1title("BU Gross Income Decile", size(small)) /// + ytitle("Euro") /// + ylabel(#5, format(%12.0fc)) /// + ylabel(,labsize(small)) /// + graphregion(color(white)) + +restore + +//net install grc1leg2, from(http://digital.cgdev.org/doc/stata/MO/Misc) + + +* Shares - Retirement age +grc1leg2 simulated_net_trans_all valid_net_trans_all, /// + rows(1) ycommon loff /// + graphregion(color(white)) /// + title("Average Net Transfers") /// + subtitle("All ages") /// + note("NOTE: ", /// + size(vsmall)) + +graph export /// + "$dir_output_files/inequality/validation_${country}_net_transfers_all.png", /// + replace width(2400) height(1350) + + +grc1leg2 simulated_net_trans_upto65 valid_net_trans_upto65 , /// + rows(1) ycommon loff /// + graphregion(color(white)) /// + title("Average Net Transfers") /// + subtitle("Oldest Age <= 65") /// + note("NOTE: ", /// + size(vsmall)) + +graph export /// + "$dir_output_files/inequality/validation_${country}_net_transfers_upto65.png", /// + replace width(2400) height(1350) + + +grc1leg2 simulated_net_trans_66plus valid_net_trans_66plus , /// + rows(1) ycommon loff /// + graphregion(color(white)) /// + title("Average Net Transfers") /// + subtitle("Oldest Age > 65") /// + note("NOTE: ", /// + size(vsmall)) + +graph export /// + "$dir_output_files/inequality/validation_${country}_net_transfers_66plus.png", /// + replace width(2400) height(1350) + +graph drop _all + diff --git a/validation/02_simulation_validation/do_files/04_16_plot_number_children.do b/validation/02_simulation_validation/do_files/04_16_plot_number_children.do new file mode 100644 index 0000000..0512b68 --- /dev/null +++ b/validation/02_simulation_validation/do_files/04_16_plot_number_children.do @@ -0,0 +1,643 @@ +******************************************************************************** +* PROJECT: SimPaths EU +* SECTION: Validation +* OBJECT: Children +* AUTHORS: Ashley Burdett +* LAST UPDATE: Jan 2026 +* COUNTRY: PL +******************************************************************************** +* NOTES: This do file plots simulated and SILC % of benefit units +* with a given number of children +******************************************************************************** + +******************************************************************************** +* 1 : Mean values over time +******************************************************************************** + +******************************************************************************** +* 1.1 : Mean values over time, working age (18-65), children < 18 +******************************************************************************** + +* Prepare validation data +use year demAge idPers idBu dwt children_* using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if inrange(demAge,18,65) + +* Calculate weighted share of benefit units with 0, 1, 2, 3 or more children +collapse (mean) children_* [aw = dwt], by(year) + +foreach varname in children_0 children_1 children_2 children_3p { + + rename `varname' valid_`varname' + +} + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year demAge idBu children_* using /// + "$dir_data/simulation_sample.dta", clear + +keep if inrange(demAge,18,65) + +collapse (mean) children_*, by(run year) + +rename children_3plus children_3p + +collapse (mean) children_* /// + (sd) children_0_sd = children_0 /// + children_1_sd = children_1 /// + children_2_sd = children_2 /// + children_3p_sd = children_3p /// + , by(year) + +foreach varname in children_0 children_1 children_2 children_3p { + + gen sim_`varname'_h = `varname' + 1.96*`varname'_sd + gen sim_`varname'_l = `varname' - 1.96*`varname'_sd + rename `varname' sim_`varname' + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figures +label var sim_children_0 "No children" +label var sim_children_1 "1 child" +label var sim_children_2 "2 children" +label var sim_children_3p "3+ children" + + +twoway (rarea sim_children_0_h sim_children_0_l year, /// + sort color(green%20) legend(label(1 "No children, SimPaths"))) /// +(line valid_children_0 year, sort color(green) /// + legend(label(2 "No children, SILC"))) /// + (rarea sim_children_1_h sim_children_1_l year, sort color(blue%20) /// + legend(label(3 "1 child, SimPaths"))) /// +(line valid_children_1 year, sort color(blue) /// + legend(label(4 "1 child, SILC"))) /// +(rarea sim_children_2_h sim_children_2_l year, sort color(red%20) /// + legend(label(5 "2 children, SimPaths"))) /// +(line valid_children_2 year, sort color(red) /// + legend(label(6 "2 children, SILC"))) /// +(rarea sim_children_3p_h sim_children_3p_l year, sort color(grey%20) /// + legend(label(7 "3+ children, SimPaths"))) /// +(line valid_children_3p year, sort color(grey) /// + legend(label(8 "3+ children, SILC"))), /// + title("Number of Children") /// + subtitle("Ages 18-65") /// + xtitle("Year", size(small)) /// + ytitle("Share", size(small)) ///) /// + xlabel(, labsize(small)) /// + ylabel(, labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: Individual observations plotted.", size(vsmall)) + +* Save figure +graph export "$dir_output_files/children/validation_${country}_children_ts_18_65_both.jpg", /// + replace width(2400) height(1350) quality(100) + + +******************************************************************************** +* 1.2 : Mean values over time, working age (18-65), children < 18, by gender +******************************************************************************** + +* Prepare validation data +use year demAge idPers idBu dwt children_* demMaleFlag using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if inrange(demAge,18,65) + +* Calculate weighted share of benefit units with 0, 1, 2, 3 or more children +collapse (mean) children_* [aw = dwt], by(year demMaleFlag) + +foreach varname in children_0 children_1 children_2 children_3p { + + rename `varname' valid_`varname' + +} + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year demAge idBu children_* demMaleFlag using /// + "$dir_data/simulation_sample.dta", clear + +keep if inrange(demAge,18,65) + +collapse (mean) children_*, by(run year demMaleFlag) + +rename children_3plus children_3p + +collapse (mean) children_* /// + (sd) children_0_sd = children_0 /// + children_1_sd = children_1 /// + children_2_sd = children_2 /// + children_3p_sd = children_3p /// + , by(year demMaleFlag) + +foreach varname in children_0 children_1 children_2 children_3p { + + gen sim_`varname'_h = `varname' + 1.96*`varname'_sd + gen sim_`varname'_l = `varname' - 1.96*`varname'_sd + rename `varname' sim_`varname' + +} + +merge 1:1 year demMaleFlag using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figures +label var sim_children_0 "No children" +label var sim_children_1 "1 child" +label var sim_children_2 "2 children" +label var sim_children_3p "3+ children" + +* Males + +preserve + +keep if demMaleFlag == 1 + +twoway (rarea sim_children_0_h sim_children_0_l year, /// + sort color(green%20) legend(label(1 "No children, SimPaths"))) /// +(line valid_children_0 year, sort color(green) /// + legend(label(2 "No children, SILC"))) /// + (rarea sim_children_1_h sim_children_1_l year, sort color(blue%20) /// + legend(label(3 "1 child, SimPaths"))) /// +(line valid_children_1 year, sort color(blue) /// + legend(label(4 "1 child, SILC"))) /// +(rarea sim_children_2_h sim_children_2_l year, sort color(red%20) /// + legend(label(5 "2 children, SimPaths"))) /// +(line valid_children_2 year, sort color(red) /// + legend(label(6 "2 children, SILC"))) /// +(rarea sim_children_3p_h sim_children_3p_l year, sort color(grey%20) /// + legend(label(7 "3+ children, SimPaths"))) /// +(line valid_children_3p year, sort color(grey) /// + legend(label(8 "3+ children, SILC"))), /// + title("Number of Children") /// + subtitle("Ages 18-65, males") /// + xtitle("Year", size(small)) /// + ytitle("Share", size(small)) ///) /// + xlabel(, labsize(small)) /// + ylabel(, labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: Individual observations plotted.", size(vsmall)) + +* Save figure +graph export "$dir_output_files/children/validation_${country}_children_ts_18_65_male.jpg", /// + replace width(2400) height(1350) quality(100) + +restore + +* Females + +keep if demMaleFlag== 0 + +twoway (rarea sim_children_0_h sim_children_0_l year, /// + sort color(green%20) legend(label(1 "No children, SimPaths"))) /// +(line valid_children_0 year, sort color(green) /// + legend(label(2 "No children, SILC"))) /// + (rarea sim_children_1_h sim_children_1_l year, sort color(blue%20) /// + legend(label(3 "1 child, SimPaths"))) /// +(line valid_children_1 year, sort color(blue) /// + legend(label(4 "1 child, SILC"))) /// +(rarea sim_children_2_h sim_children_2_l year, sort color(red%20) /// + legend(label(5 "2 children, SimPaths"))) /// +(line valid_children_2 year, sort color(red) /// + legend(label(6 "2 children, SILC"))) /// +(rarea sim_children_3p_h sim_children_3p_l year, sort color(grey%20) /// + legend(label(7 "3+ children, SimPaths"))) /// +(line valid_children_3p year, sort color(grey) /// + legend(label(8 "3+ children, SILC"))), /// + title("Number of Children") /// + subtitle("Ages 18-65, females") /// + xtitle("Year", size(small)) /// + ytitle("Share", size(small)) ///) /// + xlabel(, labsize(small)) /// + ylabel(, labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: Individual observations plotted.", size(vsmall)) + +* Save figure +graph export "$dir_output_files/children/validation_${country}_children_ts_18_65_female.jpg", /// + replace width(2400) height(1350) quality(100) + + +******************************************************************************** +* 1.3 : Mean values over time, working age (18-65), children < 3 +******************************************************************************** + +* Prepare validation data +use year demAge idBu dwt demNChild0to2 using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if inrange(demAge,18,65) + +gen child02 = . +replace child02 = 0 if demNChild0to2 == 0 +replace child02 = 1 if demNChild0to2 > 0 & demNChild0to2 != . + +* Calculate weighted share of benefit units with 0, 1, 2, 3 or more children +collapse (mean) child02 [aw = dwt], by(year) + +foreach varname in child02 { + + rename `varname' valid_`varname' + +} + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year demAge idBu sim_demNChild0to2 using /// + "$dir_data/simulation_sample.dta", clear + +gen sim_child02 = . +replace sim_child02 = 0 if sim_demNChild0to2 == 0 +replace sim_child02 = 1 if sim_demNChild0to2 > 0 & sim_demNChild0to2 != . + +collapse (mean) sim_child02, by(run year) + +collapse (mean) sim_child02 /// + (sd) sim_child02_sd = sim_child02 /// + , by(year) + +foreach varname in sim_child02 { + + gen `varname'_h = `varname' + 1.96*`varname'_sd + gen `varname'_l = `varname' - 1.96*`varname'_sd + rename `varname' sim_`varname' + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + + +* Plot figures +twoway (rarea sim_child02_h sim_child02_l year, /// + sort color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_child02 year, sort color(green) /// + legend(label(2 "SILC"))), /// + title("Share With Child 0-2 Years Old") /// + subtitle("Ages 18-65") /// + xtitle("Year", size(small)) /// + ytitle("Share", size(small)) /// + xlabel(, labsize(small)) /// + ylabel(, labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes:", size(vsmall)) + +* Save figure +graph export "$dir_output_files/children/validation_${country}_young_child_ts_18_65_both.jpg", /// + replace width(2400) height(1350) quality(100) + +graph drop _all + + +******************************************************************************** +* 1.4 : Mean values over time, working age (18-65), children < 3, by gender +******************************************************************************** + +* Prepare validation data +use year demAge idBu dwt demNChild0to2 demMaleFlag using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if inrange(demAge,18,65) + +gen child02 = . +replace child02 = 0 if demNChild0to2 == 0 +replace child02 = 1 if demNChild0to2 > 0 & demNChild0to2 != . + +* Calculate weighted share of benefit units with 0, 1, 2, 3 or more children +collapse (mean) child02 [aw = dwt], by(year demMaleFlag) + +foreach varname in child02 { + + rename `varname' valid_`varname' + +} + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year demAge idBu sim_demNChild0to2 demMaleFlag using /// + "$dir_data/simulation_sample.dta", clear + +gen sim_child02 = . +replace sim_child02 = 0 if sim_demNChild0to2 == 0 +replace sim_child02 = 1 if sim_demNChild0to2 > 0 & sim_demNChild0to2 != . + +collapse (mean) sim_child02, by(run year demMaleFlag) + +collapse (mean) sim_child02 /// + (sd) sim_child02_sd = sim_child02 /// + , by(year demMaleFlag) + +foreach varname in sim_child02 { + + gen `varname'_h = `varname' + 1.96*`varname'_sd + gen `varname'_l = `varname' - 1.96*`varname'_sd + rename `varname' sim_`varname' + +} + +merge 1:1 year demMaleFlag using "$dir_data/temp_valid_stats.dta", keep(3) nogen + + +* Plot figures + +* Males +preserve + +keep if demMaleFlag == 1 + +twoway (rarea sim_child02_h sim_child02_l year, /// + sort color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_child02 year, sort color(green) /// + legend(label(2 "SILC"))), /// + title("Share With Child 0-2 Years Old") /// + subtitle("Ages 18-65, males") /// + xtitle("Year", size(small)) /// + ytitle("Share", size(small)) /// + xlabel(, labsize(small)) /// + ylabel(, labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: ", size(vsmall)) + +* Save figure +graph export "$dir_output_files/children/validation_${country}_young_child_ts_18_65_male.jpg", /// + replace width(2400) height(1350) quality(100) + +restore + +* Females +keep if demMaleFlag == 0 + +twoway (rarea sim_child02_h sim_child02_l year, /// + sort color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_child02 year, sort color(green) /// + legend(label(2 "SILC"))), /// + title("Share With Child 0-2 Years Old") /// + subtitle("Ages 18-65, females") /// + xtitle("Year", size(small)) /// + ytitle("Share", size(small)) /// + xlabel(, labsize(small)) /// + ylabel(, labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: ", size(vsmall)) + +* Save figure +graph export "$dir_output_files/children/validation_${country}_young_child_ts_18_65_female.jpg", /// + replace width(2400) height(1350) quality(100) + + +graph drop _all + + + +******************************************************************************** +* 1.5 : Mean values over time, working age (18-65), new born child +******************************************************************************** + +* Prepare validation data +use year demAge idBu dwt demNChild0 using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if inrange(demAge,18,65) + +gen child0 = . +replace child0 = 0 if demNChild0 == 0 +replace child0 = 1 if demNChild0 > 0 & demNChild0 != . + +* Calculate weighted share of benefit units with 0, 1, 2, 3 or more children +collapse (mean) child0 [aw = dwt], by(year) + +foreach varname in child0 { + + rename `varname' valid_`varname' + +} + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year demAge idBu sim_demNChild0 using /// + "$dir_data/simulation_sample.dta", clear + +gen sim_child0 = . +replace sim_child0 = 0 if sim_demNChild0 == 0 +replace sim_child0 = 1 if sim_demNChild0 > 0 & sim_demNChild0 != . + +collapse (mean) sim_child0, by(run year) + +collapse (mean) sim_child0 /// + (sd) sim_child0_sd = sim_child0 /// + , by(year) + +foreach varname in sim_child0 { + + gen `varname'_h = `varname' + 1.96*`varname'_sd + gen `varname'_l = `varname' - 1.96*`varname'_sd + rename `varname' sim_`varname' + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + + +* Plot figures +twoway (rarea sim_child0_h sim_child0_l year, /// + sort color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_child0 year, sort color(green) /// + legend(label(2 "SILC"))), /// + title("Share With New Born Child") /// + subtitle("Ages 18-65") /// + xtitle("Year", size(small)) /// + ytitle("Share", size(small)) /// + xlabel(, labsize(small)) /// + ylabel(, labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: COnstructed from benefit unit information.", size(vsmall)) + +* Save figure +graph export "$dir_output_files/children/validation_${country}_new_born_child_ts_18_65_both.jpg", /// + replace width(2400) height(1350) quality(100) + +graph drop _all + + +******************************************************************************** +* 1.6 : Mean values over time, working age (18-65), new born child, by gender +******************************************************************************** + +* Prepare validation data +use year demAge idBu dwt demNChild0 demMaleFlag using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if inrange(demAge,18,65) + +gen child0 = . +replace child0 = 0 if demNChild0 == 0 +replace child0 = 1 if demNChild0 > 0 & demNChild0 != . + +* Calculate weighted share of benefit units +collapse (mean) child0 [aw = dwt], by(year demMaleFlag) + +foreach varname in child0 { + + rename `varname' valid_`varname' + +} + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year demAge idBu sim_demNChild0 demMaleFlag using /// + "$dir_data/simulation_sample.dta", clear + +gen sim_child0 = . +replace sim_child0 = 0 if sim_demNChild0 == 0 +replace sim_child0 = 1 if sim_demNChild0 > 0 & sim_demNChild0 != . + +collapse (mean) sim_child0, by(run year demMaleFlag) + +collapse (mean) sim_child0 /// + (sd) sim_child0_sd = sim_child0 /// + , by(year demMaleFlag) + +foreach varname in sim_child0 { + + gen `varname'_h = `varname' + 1.96*`varname'_sd + gen `varname'_l = `varname' - 1.96*`varname'_sd + rename `varname' sim_`varname' + +} + +merge 1:1 year demMaleFlag using "$dir_data/temp_valid_stats.dta", keep(3) nogen + + +* Plot figures + +* Males +preserve + +keep if demMaleFlag == 1 + +twoway (rarea sim_child0_h sim_child0_l year, /// + sort color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_child0 year, sort color(green) /// + legend(label(2 "SILC"))), /// + title("Share With New Born Child") /// + subtitle("Ages 18-65, males") /// + xtitle("Year", size(small)) /// + ytitle("Share", size(small)) /// + xlabel(, labsize(small)) /// + ylabel(, labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: ", size(vsmall)) + +* Save figure +graph export "$dir_output_files/children/validation_${country}_new_born_child_ts_18_65_male.jpg", /// + replace width(2400) height(1350) quality(100) + +restore + +* Females +keep if demMaleFlag == 0 + +twoway (rarea sim_child0_h sim_child0_l year, /// + sort color(green%20) legend(label(1 "SimPaths"))) /// +(line valid_child0 year, sort color(green) /// + legend(label(2 "SILC"))), /// + title("Share With New Born Child") /// + subtitle("Ages 18-65, females") /// + xtitle("Year", size(small)) /// + ytitle("Share", size(small)) /// + xlabel(, labsize(small)) /// + ylabel(, labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: ", size(vsmall)) + +* Save figure +graph export "$dir_output_files/children/validation_${country}_new_bron_child_ts_18_65_female.jpg", /// + replace width(2400) height(1350) quality(100) + + + +******************************************************************************** +* 1.3 : Have child +******************************************************************************** + +* Prepare validation data +use year valid_new_born dwt demMaleFlag demAge using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if demMaleFlag == 0 +keep if inrange(demAge,18,40) + +* Calculate share by year +collapse (mean) valid_new_born [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulated data +use run year sim_new_born demMaleFlag demAge using /// + "$dir_data/simulation_sample.dta", clear + +keep if inrange(demAge,18,40) +keep if demMaleFlag == 0 + +collapse (mean) sim_new_born, by(run year) + +collapse (mean) sim_new_born /// + (sd) sim_new_born_sd = sim_new_born /// + , by(year) + +foreach varname in sim_new_born { + + gen `varname'_h = `varname' + 1.96*`varname'_sd + gen `varname'_l = `varname' - 1.96*`varname'_sd + rename `varname' sim_`varname' + +} + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figures + +twoway (rarea sim_new_born_h sim_new_born_l year, /// + sort color(green%20) legend(label(1 "Simulated"))) /// +(line valid_new_born year, sort color(green) /// + legend(label(2 "SILC"))), /// + title("Share of Females with Who Have New Born Baby") /// + subtitle("Age 18-40") /// + xtitle("Year", size(small)) /// + ytitle("Share", size(small)) /// + graphregion(color(white)) /// + xlabel(, labsize(small)) /// + ylabel(, labsize(small)) /// + legend(size(small)) /// + note("Notes: ", size(vsmall)) + +* Save figure +graph export "$dir_output_files/children/validation_${country}_birth_ts_18_40_female.jpg", /// + replace width(2400) height(1350) quality(100) + +graph drop _all diff --git a/validation/02_simulation_validation/do_files/04_17_plot_disability.do b/validation/02_simulation_validation/do_files/04_17_plot_disability.do new file mode 100644 index 0000000..a003615 --- /dev/null +++ b/validation/02_simulation_validation/do_files/04_17_plot_disability.do @@ -0,0 +1,321 @@ +/******************************************************************************* +* PROJECT: SimPaths UEU +* SECTION: Validation +* OBJECT: Disability +* AUTHORS: Ashley Burdett +* LAST UPDATE: Jan 2026 +* COUNTRY: PL +******************************************************************************** +* NOTES: +*******************************************************************************/ + +******************************************************************************** +* 1 : Mean values over time +******************************************************************************** + +******************************************************************************** +* 1.1 : Mean values over time, working age (18-65) +******************************************************************************** + +* Prepare validation data +use year demAge dwt valid_healthDsblLongtermFlag using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if inrange(demAge,18,65) + +collapse (mean) valid_healthDsblLongtermFlag [aw = dwt], by(year) + +save "$dir_data/temp_valid_stats.dta", replace + + +* Prepare simulation data +use year demAge sim_healthDsblLongtermFlag run using /// + "$dir_data/simulation_sample.dta", clear + +keep if inrange(demAge,18,65) + +collapse (mean) sim_healthDsblLongtermFlag, by(run year) + +collapse (mean) sim_healthDsblLongtermFlag /// + (sd) sim_healthDsblLongtermFlag_sd = sim_healthDsblLongtermFlag, /// + by(year) + +gen sim_healthDsblLongtermFlag_high = /// + sim_healthDsblLongtermFlag + 1.96*sim_healthDsblLongtermFlag_sd +gen sim_healthDsblLongtermFlag_low = /// + sim_healthDsblLongtermFlag - 1.96*sim_healthDsblLongtermFlag_sd + +merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen + + +* Plot figure +twoway (rarea sim_healthDsblLongtermFlag_high /// + sim_healthDsblLongtermFlag_low year, sort color(green%20) /// + legend(label(1 "Simulated "))) /// +(line valid_healthDsblLongtermFlag year, sort color(green) /// + legend(label(2 "SILC "))), /// + title("Disabled/Long-term Sick ") /// + subtitle("Ages 18-65") /// + xtitle("Year", size(small)) /// + ytitle("Share", size(small)) /// + xlabel(, labsize(small)) /// + ylabel(, labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: ", size(vsmall)) + +graph export /// +"$dir_output_files/disability/validation_${country}_disability_ts_18_65_both.jpg", /// + replace width(2400) height(1350) quality(100) + + +******************************************************************************** +* 1.2 : Mean values over time, working age (18-65), by gender +******************************************************************************** + +* Prepare validation data +use year demAge dwt valid_healthDsblLongtermFlag demMaleFlag using /// + "$dir_data/${country}-eusilc_validation_sample.dta", clear + +keep if inrange(demAge,18,65) + +collapse (mean) valid_healthDsblLongtermFlag [aw = dwt], by(year demMaleFlag) + +save "$dir_data/temp_valid_stats.dta", replace + +* Prepare simulation data +use year demAge sim_healthDsblLongtermFlag run demMaleFlag using /// + "$dir_data/simulation_sample.dta", clear + +keep if inrange(demAge,18,65) + +collapse (mean) sim_healthDsblLongtermFlag, by(run year demMaleFlag) + +collapse (mean) sim_healthDsblLongtermFlag /// + (sd) sim_healthDsblLongtermFlag_sd = sim_healthDsblLongtermFlag, /// + by(year demMaleFlag) + +gen sim_healthDsblLongtermFlag_high = sim_healthDsblLongtermFlag + /// + 1.96*sim_healthDsblLongtermFlag_sd + +gen sim_healthDsblLongtermFlag_low = sim_healthDsblLongtermFlag - /// + 1.96*sim_healthDsblLongtermFlag_sd + +merge 1:1 year demMaleFlag using "$dir_data/temp_valid_stats.dta", keep(3) nogen + +* Plot figure +twoway (rarea sim_healthDsblLongtermFlag_high /// + sim_healthDsblLongtermFlag_low year if demMaleFlag == 0, /// + sort color(green%20) legend(label(1 "Female, SimPaths"))) /// +(line valid_healthDsblLongtermFlag year if demMaleFlag == 0, sort color(green) /// + legend(label(2 "Female, SILC "))) /// + (rarea sim_healthDsblLongtermFlag_high sim_healthDsblLongtermFlag_low /// + year if demMaleFlag == 1, sort color(red%20) /// + legend(label(3 "Male, SimPaths"))) /// +(line valid_healthDsblLongtermFlag year if demMaleFlag == 1, sort color(red) /// + legend(label(4 "Male, SILC"))), /// + title("Disabled/Long-term Sick ") /// + subtitle("Ages 18-65") /// + xtitle("Year", size(small)) /// + ytitle("Share", size(small)) /// + xlabel(, labsize(small)) /// + ylabel(, labsize(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + note("Notes: ", size(vsmall)) + +graph export /// +"$dir_output_files/disability/validation_${country}_disability_ts_18_65_male_female.jpg", /// + replace width(2560) height(1440) quality(100) + + +******************************************************************************** +* 1.2 : Mean values over time, by age group +******************************************************************************** + +* Prepare validation data +use year demAge dwt valid_healthDsblLongtermFlag demMaleFlag demAge /// + ageGroup using "$dir_data/${country}-eusilc_validation_sample.dta", clear + +drop if ageGroup == 0 + +collapse (mean) valid_healthDsblLongtermFlag [aw=dwt], by(ageGroup year) + +drop if missing(ageGroup) + +reshape wide valid_healthDsblLongtermFlag, i(year) j(ageGroup) + +forvalues i = 1(1)8 { + + rename valid_healthDsblLongtermFlag`i' /// + valid_healthDsblLongtermFlag_`i' + +} + +save "$dir_data/temp_valid_stats_full.dta", replace + + +* Prepare simulation data +use run year sim_healthDsblLongtermFlag ageGroup using /// + "$dir_data/simulation_sample.dta", clear + +collapse (mean) sim_healthDsblLongtermFlag, by(ageGroup run year) + +drop if missing(ageGroup) + +reshape wide sim_healthDsblLongtermFlag, i(year run) j(ageGroup) + +forvalues i = 1(1)8 { + + rename sim_healthDsblLongtermFlag`i' sim_healthDsblLongtermFlag_`i' + +} + +collapse (mean) sim_healthDsblLongtermFlag* /// + (sd) sd_sim_healthDsblLongtermFlag_1 = sim_healthDsblLongtermFlag_1 /// + sd_sim_healthDsblLongtermFlag_2 = sim_healthDsblLongtermFlag_2 /// + sd_sim_healthDsblLongtermFlag_3 = sim_healthDsblLongtermFlag_3 /// + sd_sim_healthDsblLongtermFlag_4 = sim_healthDsblLongtermFlag_4 /// + sd_sim_healthDsblLongtermFlag_5 = sim_healthDsblLongtermFlag_5 /// + sd_sim_healthDsblLongtermFlag_6 = sim_healthDsblLongtermFlag_6 /// + sd_sim_healthDsblLongtermFlag_7 = sim_healthDsblLongtermFlag_7 /// + sd_sim_healthDsblLongtermFlag_8 = sim_healthDsblLongtermFlag_8 /// + , by(year) + +forvalues i = 1(1)8 { + + gen sim_healthDsblLongtermFlag_`i'_h = /// + sim_healthDsblLongtermFlag_`i' + 1.96*sd_sim_healthDsblLongtermFlag_`i' + gen sim_healthDsblLongtermFlag_`i'_l = /// + sim_healthDsblLongtermFlag_`i' - 1.96*sd_sim_healthDsblLongtermFlag_`i' + +} + +recast double year + +merge 1:1 year using "$dir_data/temp_valid_stats_full.dta", keep(3) nogen + +* Plot figures +foreach vble in "healthDsblLongtermFlag" { + + twoway (rarea sim_`vble'_1_h sim_`vble'_1_l year, /// + sort color(red%20) legend(label(1 "SimPaths") position(6) rows(1))) /// + (line valid_`vble'_1 year, sort legend(label(2 "SILC"))), /// + title("Age 15-19") /// + name(`vble'_1, replace) /// + ylabel(, labsize(vsmall)) /// + xlabel(, labsize(vsmall)) /// + ytitle("Share", size(small)) /// + xtitle("Year", size(small)) /// + legend(size(small)) /// + graphregion(color(white)) + + twoway (rarea sim_`vble'_2_h sim_`vble'_2_l year, /// + sort color(red%20) legend(label(1 "SimPaths") position(6) rows(1))) /// + (line valid_`vble'_2 year, sort legend(label(2 "SILC"))), /// + title("Age 20-24") /// + name(`vble'_2, replace) /// + ylabel(, labsize(vsmall)) /// + xlabel(, labsize(vsmall)) /// + ytitle("Share", size(small)) /// + xtitle("Year", size(small)) /// + legend(size(small)) /// + graphregion(color(white)) + + twoway (rarea sim_`vble'_3_h sim_`vble'_3_l year, /// + sort color(red%20) legend(label(1 "SimPaths") position(6) rows(1))) /// + (line valid_`vble'_3 year, sort legend(label(2 "SILC"))), /// + title("Age 25-29") /// + name(`vble'_3, replace) /// + ylabel(, labsize(vsmall)) /// + xlabel(, labsize(vsmall)) /// + ytitle("Share", size(small)) /// + xtitle("Year", size(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + graphregion(color(white)) + + twoway (rarea sim_`vble'_4_h sim_`vble'_4_l year, /// + sort color(red%20) legend(label(1 "SimPaths") position(6) rows(1))) /// + (line valid_`vble'_4 year, sort legend(label(2 "SILC"))), /// + title("Age 30-34") /// + name(`vble'_4, replace) /// + ylabel(, labsize(vsmall)) /// + xlabel(, labsize(vsmall)) /// + ytitle("Share", size(small)) /// + xtitle("Year", size(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + graphregion(color(white)) + + twoway (rarea sim_`vble'_5_h sim_`vble'_5_l year, /// + sort color(red%20) legend(label(1 "SimPaths") position(6) rows(1))) /// + (line valid_`vble'_5 year, sort legend(label(2 "SILC"))), /// + title("Age 35-39") /// + name(`vble'_5, replace) /// + ylabel(, labsize(vsmall)) /// + xlabel(, labsize(vsmall)) /// + ytitle("Share", size(small)) /// + xtitle("Year", size(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + graphregion(color(white)) + + twoway (rarea sim_`vble'_6_h sim_`vble'_6_l year, /// + sort color(red%20) legend(label(1 "SimPaths") position(6) /// + rows(1))) /// + (line valid_`vble'_6 year, sort legend(label(2 "SILC"))), /// + title("Age 40-59") /// + name(`vble'_6, replace) /// + ylabel(, labsize(vsmall)) /// + xlabel(, labsize(vsmall)) /// + ytitle("Share", size(small)) /// + xtitle("Year", size(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + graphregion(color(white)) + + twoway (rarea sim_`vble'_7_h sim_`vble'_7_l year, /// + sort color(red%20) legend(label(1 "SimPaths") position(6) rows(1))) /// + (line valid_`vble'_7 year, sort legend(label(2 "SILC"))), /// + title("Age 60-79") /// + name(`vble'_7, replace) /// + ylabel(, labsize(vsmall)) /// + xlabel(, labsize(vsmall)) /// + ytitle("Share", size(small)) /// + xtitle("Year", size(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + graphregion(color(white)) + + twoway (rarea sim_`vble'_8_h sim_`vble'_8_l year, /// + sort color(red%20) legend(label(1 "SimPaths") position(6) rows(1))) /// + (line valid_`vble'_8 year, sort legend(label(2 "SILC"))), /// + title("Age 80-100") /// + name(`vble'_8, replace) /// + ylabel(, labsize(vsmall)) /// + xlabel(, labsize(vsmall)) /// + ytitle("Share", size(small)) /// + xtitle("Year", size(small)) /// + legend(size(small)) /// + graphregion(color(white)) /// + graphregion(color(white)) + +} + +grc1leg healthDsblLongtermFlag_1 healthDsblLongtermFlag_2 /// + healthDsblLongtermFlag_3 healthDsblLongtermFlag_4 /// + healthDsblLongtermFlag_5 healthDsblLongtermFlag_6 /// + healthDsblLongtermFlag_7 healthDsblLongtermFlag_8, /// + title("Disabled/Long-term Sick by Age Group") /// + legendfrom(healthDsblLongtermFlag_1) /// + graphregion(color(white)) /// + ycomm /// + note("Notes:", size(vsmall)) + +graph export /// +"$dir_output_files/disability/validation_${country}_disability_ts_age_groups_both.jpg", /// + replace width(2400) height(1350) quality(100) + + +graph drop _all diff --git a/validation/02_simulation_validation/do_files/04_18_plot_alignment_targets.do b/validation/02_simulation_validation/do_files/04_18_plot_alignment_targets.do new file mode 100644 index 0000000..b24d423 --- /dev/null +++ b/validation/02_simulation_validation/do_files/04_18_plot_alignment_targets.do @@ -0,0 +1,154 @@ +/******************************************************************************* +* PROJECT: SimPaths EU +* SECTION: Validation +* OBJECT: Alignment targets (refactored variable names) +* AUTHORS: Ashley Burdett +* LAST UPDATE: 05/2026 (refactor) +* COUNTRY: Poland +******************************************************************************** +* NOTES: Refactored to use the new SimPaths EU variable names from +* AlignmentAdjustmentFactors1.csv (align* prefix). +*******************************************************************************/ + +* Ensure output folder exists +capture mkdir "$dir_output_files/alignment_targets" + +/******************************************************************************* +* IMPORT & PREPARE DATA +*******************************************************************************/ + +import delimited "$dir_simulated_data/AlignmentAdjustmentFactors1.csv", /// + clear varnames(1) case(preserve) + +* Restrict sample years +keep if time <= ${max_year} + +rename time year + +* Drop row id (not needed) +capture drop id_AlignmentAdjustmentFactors1 + +save "$dir_data/alignment_targets_raw.dta", replace + + +******************************************************************************** +* 1 : Simulated vs Target pairs +******************************************************************************** + +* Parallel lists: simulated var, target var, title, filename suffix +local sim_vars "alignDsblSimShare alignFertRateSim alignInSchoolSimShare alignRtrdSimShare alignPartnerSimShare alignEmpSimACFShare alignEmpSimACMShare alignEmpSimCouplesShare alignEmpSimFWithDepShare alignEmpSimMWithDepShare alignEmpSimSingleFShare alignEmpSimSingleMShare" + +local tgt_vars "alignDsblTgtShare alignFertRateTarget alignInSchoolTgtShare alignRtrdTgtShare alignPartnerTargetShare alignEmpTgtACFShare alignEmpTgtACMShare alignEmpTgtCouplesShare alignEmpTgtFWithDepShare alignEmpTgtMWithDepShare alignEmpTgtSingleFShare alignEmpTgtSingleMShare" + +local titles `" "Disability share" "Fertility rate" "In school share" "Retirement share" "Share cohabiting" "Employed share - adult children (female)" "Employed share - adult children (male)" "Employed share - couples" "Employed share - female with dependants" "Employed share - male with dependants" "Employed share - single females" "Employed share - single males" "' + +local filenames "disability_share fertility_rate inschool_share retirement_share share_cohabiting employed_ACFemale employed_ACMale employed_couples employed_femaleWithDep employed_maleWithDep employed_singleFemales employed_singleMales" + +local n : word count `sim_vars' + +forvalues i = 1/`n' { + + local sim : word `i' of `sim_vars' + local tgt : word `i' of `tgt_vars' + local ttl : word `i' of `titles' + local fn : word `i' of `filenames' + + use "$dir_data/alignment_targets_raw.dta", clear + keep run year `sim' `tgt' + + * Collapse across runs: mean and sd for simulated and target + collapse (mean) m_sim = `sim' m_tgt = `tgt' /// + (sd) sd_sim = `sim' sd_tgt = `tgt' /// + , by(year) + + * Replace missing sd (single-run years) with 0 so bands still plot + replace sd_sim = 0 if missing(sd_sim) + replace sd_tgt = 0 if missing(sd_tgt) + + * Build 95% bands + gen sim_h = m_sim + 1.96*sd_sim + gen sim_l = m_sim - 1.96*sd_sim + gen tgt_h = m_tgt + 1.96*sd_tgt + gen tgt_l = m_tgt - 1.96*sd_tgt + + twoway (rarea sim_h sim_l year, /// + sort color(green%20)) /// + (line m_sim year, sort color(green) lpattern(solid)) /// + (line m_tgt year, sort color(red) lpattern(dash)), /// + title("`ttl'") /// + xtitle("Year", size(small)) /// + ytitle("Value", size(small)) /// + graphregion(color(white)) /// + xlabel(, labsize(small)) /// + ylabel(, labsize(small)) /// + legend(order(1 "Simulated" 3 "Target") /// + position(6) rows(1) size(small)) /// + note("Notes: Shaded area = mean +/- 1.96*sd across simulation runs.", /// + size(vsmall)) + + graph export /// + "$dir_output_files/alignment_targets/validation_${country}_alignment_`fn'.jpg", /// + replace width(2400) height(1350) quality(100) +} + + +******************************************************************************** +* 2 : Adjustment factors (no target) +******************************************************************************** + +local adj_vars "alignDsblAdj alignFertAdj alignInSchoolAdj alignPartnerAdj alignRtrdAdj alignUtilAdjACF alignUtilAdjACM alignUtilAdjCouple alignUtilAdjFWithDep alignUtilAdjMWithDep alignUtilAdjSingleF alignUtilAdjSingleM" + +local adj_titles `" "Disability adjustment factor" "Fertility adjustment factor" "In school adjustment factor" "Partnership adjustment factor" "Retirement adjustment factor" "Utility adjustment factor - adult children (female)" "Utility adjustment factor - adult children (male)" "Utility adjustment factor - couples" "Utility adjustment factor - female with dependants" "Utility adjustment factor - male with dependants" "Utility adjustment factor - single females" "Utility adjustment factor - single males" "' + +local adj_filenames "adj_disability adj_fertility adj_inschool adj_partnership adj_retirement adj_utility_ACFemale adj_utility_ACMale adj_utility_couples adj_utility_femaleWithDep adj_utility_maleWithDep adj_utility_singleFemales adj_utility_singleMales" + +local na : word count `adj_vars' + +forvalues i = 1/`na' { + + local v : word `i' of `adj_vars' + local ttl : word `i' of `adj_titles' + local fn : word `i' of `adj_filenames' + + use "$dir_data/alignment_targets_raw.dta", clear + capture confirm variable `v' + if _rc { + display as txt "Variable `v' not found in data - skipping." + continue + } + + keep run year `v' + + collapse (mean) m_adj = `v' /// + (sd) sd_adj = `v' /// + , by(year) + + replace sd_adj = 0 if missing(sd_adj) + + gen adj_h = m_adj + 1.96*sd_adj + gen adj_l = m_adj - 1.96*sd_adj + + twoway (rarea adj_h adj_l year, /// + sort color(blue%20)) /// + (line m_adj year, sort color(blue) lpattern(solid)), /// + yline(0, lcolor(black) lpattern(dot)) /// + title("`ttl'") /// + xtitle("Year", size(small)) /// + ytitle("Adjustment factor", size(small)) /// + graphregion(color(white)) /// + xlabel(, labsize(small)) /// + ylabel(, labsize(small)) /// + legend(order(1 "Simulated") /// + position(6) rows(1) size(small)) /// + note("Notes: Shaded area = mean +/- 1.96*sd across simulation runs.", /// + size(vsmall)) + + graph export /// + "$dir_output_files/alignment_targets/validation_${country}_`fn'.jpg", /// + replace width(2400) height(1350) quality(100) +} + +* Clean up +capture erase "$dir_data/alignment_targets_raw.dta" + +graph drop _all diff --git a/validation/02_simulation_validation/do_files/04_create_EU_SILC_validation_targets.do b/validation/02_simulation_validation/do_files/04_create_EU_SILC_validation_targets.do deleted file mode 100644 index 624570c..0000000 --- a/validation/02_simulation_validation/do_files/04_create_EU_SILC_validation_targets.do +++ /dev/null @@ -1,314 +0,0 @@ -/******************************************************************************* -* PROJECT: SimPaths EU -* SECTION: Validation -* OBJECT: Targets -* AUTHORS: Patryk Bronka, Ashley Burdett, Daria Popova -* LAST UPDATE: Nov 2025 (AB) -* COUNTRY: Poland -******************************************************************************** -* DESCRIPTION: This file creates validation targets using longitudinal EU -* SILC data -* generated by do files - - -* NOTES: Consider trimming gross labour income at the -* bottom of the file. -*******************************************************************************/ - -* Load initial populations (from 05_ weight adjusted for grossing) -use "$dir_init_pop_data/${country}_pooled_ipop.dta", clear - -// alternative option would be to use the estimation sample and after benefit units have been created "03_" - - -* Restrict sample to observations up to and including specified maximum year -fre swv -keep if swv <= $max_year -gen year = stm - - -** Age groups -gen ageGroup = . -replace ageGroup = 0 if dag >= 0 & dag <= 14 -replace ageGroup = 1 if dag >= 15 & dag <= 19 -replace ageGroup = 2 if dag >= 20 & dag <= 24 -replace ageGroup = 3 if dag >= 25 & dag <= 29 -replace ageGroup = 4 if dag >= 30 & dag <= 34 -replace ageGroup = 5 if dag >= 35 & dag <= 39 -replace ageGroup = 6 if dag >= 40 & dag <= 59 -replace ageGroup = 7 if dag >= 60 & dag <= 79 -replace ageGroup = 8 if dag >= 80 & dag <= 100 - -label def ageGrouplb /// - 0 "ageGroup_0_14" /// - 1 "ageGroup_15_19" /// - 2 "ageGroup_20_24" /// - 3 "ageGroup_25_29" /// - 4 "ageGroup_30_34" /// - 5 "ageGroup_35_39" /// - 6 "ageGroup_40_59" /// - 7 "ageGroup_60_79" /// - 8 "ageGroup_80_100" /// - -label val ageGroup ageGrouplb -fre ageGroup - -gen ageGroup2 = . -replace ageGroup2 = 0 if dag >= 16 & dag <= 24 -replace ageGroup2 = 1 if dag >= 25 & dag <= 29 -replace ageGroup2 = 2 if dag >= 30 & dag <= 34 -replace ageGroup2 = 3 if dag >= 35 & dag <= 39 -replace ageGroup2 = 4 if dag >= 40 & dag <= 44 -replace ageGroup2 = 5 if dag >= 45 & dag <= 49 -replace ageGroup2 = 6 if dag >= 50 & dag <= 54 -replace ageGroup2 = 7 if dag >= 55 & dag <= 59 -replace ageGroup2 = 8 if dag >= 60 & dag <= 65 - -label def ageGrouplb2 /// - 0 "ageGroup_16_24" /// - 1 "ageGroup_25_29" /// - 2 "ageGroup_30_34" /// - 3 "ageGroup_35_39" /// - 4 "ageGroup_40_44" /// - 5 "ageGroup_45_49" /// - 6 "ageGroup_50_54" /// - 7 "ageGroup_55_59" /// - 8 "ageGroup_60_65" /// - -label val ageGroup2 ageGrouplb2 -fre ageGroup2 - -** Sex -replace dgn = . if dgn < 0 - - -*** Income variables - all annual unless stated - -** Real gross income (non-benefit) -* by individual -gen ypnb = sinh(ypnbihs_dv) -gen valid_y_gross_ind_yr = ypnb * 12 - -* by benefit unit -bys stm idhh idbenefitunit: /// - egen valid_y_gross_bu_yr = total(valid_y_gross_ind_yr) - - -** Disposable income -* by individual -merge 1:1 idperson swv using "$dir_data/silc_ind_dispos_y.dta" -drop if _m == 2 -drop _m - -* by benefit unit -bys stm idhh idbenefitunit: /// - egen valid_y_disp_bu_yr = total(valid_y_disp_ind_yr) - - -** Real gross labour income -* by individual -gen y_gross_labour_ind_yr = sinh(yplgrs_dv) * 12 - -* by benefit unit -bys stm idhh idbenefitunit: /// - egen valid_y_gross_labour_bu_yr = total(y_gross_labour_ind_yr) - -** Real capital income -* by benefit unit -gen y_gross_capital_ind_yr = sinh(ypncp) * 12 - -* by benefit unit -bys stm idhh idbenefitunit: /// - egen valid_y_gross_capital_bu_yr = total(y_gross_capital_ind_yr) - - -* Equivalised disposable income per benefit unit -* Generate number of dependent children in a benefit unit -gen depChild = 1 if (dag >= 0 & dag < $age_become_responsible) -bys swv idhh idbenefitunit: egen dnc_bu = sum(depChild) - -gen depChild02 = 1 if (dag >= 0 & dag <= 2) -bys swv idhh idbenefitunit: egen dnc02_bu = sum(depChild02) - -lab var dnc02 "Number of dependent children 0 - 2" - -* Generate modified-OECD equivalence scale: 1 for the household head, 0.5 for -* additional adults, 0.3 for children < 14 years old -bys swv idhh idbenefitunit: gen people_in_bu = _N -cap drop child -gen child = (dag < 14) -bys swv idhh idbenefitunit: egen children_in_bu = total(child) -gen other_adults = people_in_bu - children_in_bu - 1 - // -1 for the household head - -gen equiv_factor = 1 + (0.5 * other_adults) + (0.3 * children_in_bu) - // Start with 1 because each household must have at least the head -lab var equiv_factor "OECD-modified scale equivalence factor" - -gen valid_y_eq_disp_bu_yr = valid_y_disp_bu_yr / equiv_factor - -drop child people_in_bu child children_in_bu other_adults dnc_bu dnc02_bu - - -** Annual income shares -/* -xtile obs_gross_income_group = valid_y_gross_bu_yr, nq(10) - This is not correct for pooled data - -Problem: if many observations have exactly the same value, xtile would group -them into a single decile, causing one or more deciles to have very few -observations. -Adding a very small random amount can help differentiate tied values enough to -distribute them more evenly across deciles without distorting the data -meaningfully. -*/ -gen valid_y_gross_bu_yr_jit = valid_y_gross_bu_yr + runiform() * 1e-5 - -forvalues stm = 2011/$max_year { - - xtile obs_gross_income_group_`stm' = valid_y_gross_bu_yr_jit if /// - depChild != 1 & stm == `stm', nq(10) - - bys idhh: egen temp_obs_gross_income_group_`stm' = /// - max(obs_gross_income_group_`stm') if stm == `stm' - - replace obs_gross_income_group_`stm' = /// - temp_obs_gross_income_group_`stm' if /// - missing(obs_gross_income_group_`stm') - drop temp_obs_gross_income_group_`stm' - -} - -* Unify into a single variable -egen obs_gross_income_group = rowtotal(obs_gross_income_group_2011 /// - obs_gross_income_group_2012 obs_gross_income_group_2013 /// - obs_gross_income_group_2014 obs_gross_income_group_2015 /// - obs_gross_income_group_2016 obs_gross_income_group_2017 /// - obs_gross_income_group_2018 obs_gross_income_group_2019 /// - obs_gross_income_group_2020 obs_gross_income_group_2021 /// - obs_gross_income_group_2022 obs_gross_income_group_2023) - -drop obs_gross_income_group_2* -bys stm: fre obs_gross_income_group - -** Activity status -* Activity dummies -gen valid_employed = (les_c4 == 1) -gen valid_student = (les_c4 == 2) -gen valid_inactive = (les_c4 == 3) -gen valid_retired = (les_c4 == 4) - -replace valid_employed = . if les_c4 < 0 | les_c4 == . -replace valid_student = . if les_c4 < 0 | les_c4 == . -replace valid_inactive = . if les_c4 < 0 | les_c4 == . -replace valid_retired = . if les_c4 < 0 | les_c4 == . - - -** Education level -* Attainment dummies -replace deh_c3 = 3 if ded == 1 - -gen valid_edu_high = (deh_c3 == 1) -gen valid_edu_med = (deh_c3 == 2) -gen valid_edu_low = (deh_c3 == 3) - -/* -replace valid_edu_high = . if deh_c3 == . | deh_c3 < 0 | deh_flag == 1 -replace valid_edu_med = . if deh_c3 == . | deh_c3 < 0 | deh_flag == 1 -replace valid_edu_low = . if deh_c3 == . | deh_c3 < 0 | deh_flag == 1 -*/ - -** Family -* Partnership status -gen valid_dcpst_p = (dcpst == 1) // partnered -gen valid_dcpst_s = (dcpst == 2) // single - -replace valid_dcpst_p = . if dcpst == . | dcpst < 0 -replace valid_dcpst_s = . if dcpst == . | dcpst < 0 - -* Number of children -gen children_0 = (dnc == 0) -gen children_1 = (dnc == 1) -gen children_2 = (dnc == 2) -gen children_3plus = (dnc >= 3 & dnc != .) - -* Interaction of partnership status and number of children -foreach var1 in valid_dcpst_p valid_dcpst_s { - - foreach var2 in children_0 children_1 children_2 children_3p { - - gen `var1'_`var2' = (`var1' & `var2') - - } - -} - - -** Self-rated health -replace dhe = . if dhe < 0 | dhe_flag == 1 - - -** Hours worked (weekly) - -* Impose consistency with les_c4 -* Prioritize les_c4 as we did with the European models -replace lhw = . if les_c4 != 1 - -count if (lhw == 0 | lhw == .) & les_c4 == 1 -// note that 0s could be generated from missing values in rowtotal function - -tab les_c4 if lhw != 0 & lhw != . - -gen hours = lhw -gen valid_lhw = lhw - - -* Labour supply categories -gen laboursupplyweekly_hu = "ZERO" -replace laboursupplyweekly_hu = "TWENTY" if hours >= 1 & hours < 40 -replace laboursupplyweekly_hu = "FORTY" if hours == 40 -replace laboursupplyweekly_hu = "FIFTY" if hours > 40 & !missing(hours) - - -* Hourly wages -gen valid_wage_hour = . -replace valid_wage_hour = obs_earnings_hourly -replace valid_wage_hour = . if obs_earnings_hourly < 0 - -replace valid_wage_hour = . if valid_wage_hour == 0 & les_c4 == 1 - - -* Minimum wage variable -gen min_wage = 8.66 if swv == 2011 -replace min_wage = 9.38 if swv == 2012 -replace min_wage = 10.00 if swv == 2013 -replace min_wage = 10.5 if swv == 2014 -replace min_wage = 10.64 if swv == 2015 -replace min_wage = 11.56 if swv == 2016 -replace min_wage = 12.50 if swv == 2017 -replace min_wage = 13.13 if swv == 2018 -replace min_wage = 14.06 if swv == 2019 -replace min_wage = 16.25 if swv == 2020 -replace min_wage = 17.50 if swv == 2021 -replace min_wage = 18.81 if swv == 2022 -replace min_wage = 22.8 if swv == 2023 - -* Convert into real terms -replace min_wage = min_wage * (CPI/100) - - -gen valid_wage_hour_adj_mw = valid_wage_hour -replace valid_wage_hour_adj_mw = min_wage if valid_wage_hour < min_wage - -replace valid_wage_hour_adj = valid_wage_hour -replace valid_wage_hour_adj = . if valid_wage_hour < min_wage - - -save "$dir_data/${country}-eusilc_validation_full_sample_long.dta", replace - - -* Restrict sample to individuals between min and max age defined in -* 00_master file -keep if dag>= $min_age & dag <= $max_age - -save "$dir_data/${country}-eusilc_validation_sample_long.dta", replace diff --git a/validation/02_simulation_validation/do_files/05_create_simulated_validation_targets.do b/validation/02_simulation_validation/do_files/05_create_simulated_validation_targets.do deleted file mode 100644 index ce394c8..0000000 --- a/validation/02_simulation_validation/do_files/05_create_simulated_validation_targets.do +++ /dev/null @@ -1,196 +0,0 @@ -******************************************************************************** -* PROJECT: SimPaths EU -* SECTION: Validation -* OBJECT: Validation targets -* AUTHORS: Ashley Burdett -* LAST UPDATE: 11/2025 (AB) -* COUNTRY: Poland - -* NOTES: This file creates validation targets using simulated data -* generated by do file: 01_prepare_simulated_data.do -******************************************************************************** - -* Generate required variables - -use "$dir_data/simulated_data_prep1.dta", clear - -* Sex -gen sim_sex = . -replace sim_sex = 1 if dgn == "Male" -replace sim_sex = 2 if dgn == "Female" - -la def sim_sex_lb 1 "Male" 2 "Female" -la val sim_sex sim_sex_lb - -* Hours worked weekly -replace hoursworkedweekly = "" if hoursworkedweekly == "null" -destring hoursworkedweekly, replace - -* Define age groups -gen ageGroup = . -replace ageGroup = 0 if dag >= 0 & dag <= 14 -replace ageGroup = 1 if dag >= 15 & dag <= 19 -replace ageGroup = 2 if dag >= 20 & dag <= 24 -replace ageGroup = 3 if dag >= 25 & dag <= 29 -replace ageGroup = 4 if dag >= 30 & dag <= 34 -replace ageGroup = 5 if dag >= 35 & dag <= 39 -replace ageGroup = 6 if dag >= 40 & dag <= 59 -replace ageGroup = 7 if dag >= 60 & dag <= 79 -replace ageGroup = 8 if dag >= 80 & dag <= 100 - - -label def ageGrouplb /// - 0 "ageGroup_0_14" /// - 1 "ageGroup_15_19" /// - 2 "ageGroup_20_24" /// - 3 "ageGroup_25_29" /// - 4 "ageGroup_30_34" /// - 5 "ageGroup_35_39" /// - 6 "ageGroup_40_59" /// - 7 "ageGroup_60_79" /// - 8 "ageGroup_80_100" /// - -label val ageGroup ageGrouplb - -gen ageGroup2 = . -replace ageGroup2 = 0 if dag >= 16 & dag <= 24 -replace ageGroup2 = 1 if dag >= 25 & dag <= 29 -replace ageGroup2 = 2 if dag >= 30 & dag <= 34 -replace ageGroup2 = 3 if dag >= 35 & dag <= 39 -replace ageGroup2 = 4 if dag >= 40 & dag <= 44 -replace ageGroup2 = 5 if dag >= 45 & dag <= 49 -replace ageGroup2 = 6 if dag >= 50 & dag <= 54 -replace ageGroup2 = 7 if dag >= 55 & dag <= 59 -replace ageGroup2 = 8 if dag >= 60 & dag <= 65 - -label def ageGrouplb2 /// - 0 "ageGroup_16_24" /// - 1 "ageGroup_25_29" /// - 2 "ageGroup_30_34" /// - 3 "ageGroup_35_39" /// - 4 "ageGroup_40_44" /// - 5 "ageGroup_45_49" /// - 6 "ageGroup_50_54" /// - 7 "ageGroup_55_59" /// - 8 "ageGroup_60_65" /// - -label val ageGroup2 ageGrouplb2 - -* Partnership status -gen sim_dcpst_p = (dcpst == "Partnered") -gen sim_dcpst_s = (dcpst == "Single") - -replace idpartner = "" if idpartner == "null" -destring idpartner , replace -gen sim_has_partner = (idpartner != .) - -* Number of children -gen child = (dag < $age_become_responsible) -bys run year idbenefitunit: egen sim_dnc = total(child) - -gen child02 = (dag < 3) -bys run year idbenefitunit: egen sim_dnc02 = total(child02) - -gen children_0 = (sim_dnc == 0) -gen children_1 = (sim_dnc == 1) -gen children_2 = (sim_dnc == 2) -gen children_3plus = (sim_dnc >= 3) - -* Intersect partnership status and number of children -foreach var1 in sim_dcpst_p sim_dcpst_s { - - foreach var2 in children_0 children_1 children_2 children_3p { - - gen `var1'_`var2' = (`var1' & `var2') - - } -} - -* Activity status -gen sim_employed = (les_c4 == "EmployedOrSelfEmployed") -gen sim_student = (les_c4 == "Student") -gen sim_inactive = (les_c4 == "NotEmployed") -gen sim_retired = (les_c4 == "Retired") - -* Disabled / LT sick -gen sim_dlltsd = (dlltsd == "True") - -* Education -gen sim_edu_high = (deh_c3 == "High") -gen sim_edu_med = (deh_c3 == "Medium") -gen sim_edu_low = (deh_c3 == "Low") - -/* -replace sim_edu_high = . if sim_student | dag < 18 -replace sim_edu_med = . if sim_student | dag < 18 -replace sim_edu_low = . if sim_student | dag < 18 -*/ - -* Hours of work -/* -For Poland these categries are symmetric cross genders. -*/ -* Hours of work -replace laboursupplyweekly = "" if laboursupplyweekly == "null" -replace laboursupplyweekly = "TWENTY" if laboursupplyweekly == "CATEGORY_PL_1" -replace laboursupplyweekly = "FORTY" if laboursupplyweekly == "CATEGORY_PL_2" -replace laboursupplyweekly = "FIFTY" if laboursupplyweekly == "CATEGORY_PL_3" - -gen lhw = . -replace lhw = 0 if laboursupplyweekly == "ZERO" - // Zero = 0 -replace lhw = 20 if laboursupplyweekly == "TWENTY" - // TWENTY = [1,39] -replace lhw = 40 if laboursupplyweekly == "FORTY" - // FORTY = 40 -replace lhw = 50 if laboursupplyweekly == "FIFTY" - // FIFTY = [41,inf)] - - -* Potential earnings -rename fulltimehourlyearningspotential potential_earnings_hourly - -gen sim_y_disp_yr_bu = disposableincomemonthly * 12 -gen sim_y_gross_yr_bu = grossincomemonthly * 12 - - -foreach var in yplgrs_dv_lvl ypncp_lvl ypnoab_lvl { - - replace `var' = `var' * 12 - rename `var' sim_`var' - -} - -gen sim_y_gross_yr = sim_yplgrs_dv_lvl + sim_ypnoab_lvl + sim_ypncp_lvl - -* Aggregate simulated values to benefit unit level. -* Note that sim_y_gross_yr and sim_y_disp_yr are already at BU level. -foreach observed_var in sim_yplgrs_dv_lvl sim_ypnoab_lvl sim_ypncp_lvl { - - bys run year idbenefitunit: egen `observed_var'_bu = total(`observed_var') - -} - -* Generate max age in BU -bys run year idbenefitunit: egen max_age_in_bu = max(dag) - -preserve - -* Restrict sample to observations up to and including specified maximum year -keep if year <= $max_year - -save "$dir_data/simulated_data_full.dta", replace - -restore - - -* Restrict sample to individuals aged 16+ to maintain consistency -keep if dag >= 16 - -* Restrict sample to individuals between min and max age defined in 00_master -keep if dag >= $min_age & dag <= $max_age - -* Restrict sample to observations up to and including specified maximum year -keep if year <= $max_year - -save "$dir_data/simulated_data.dta", replace diff --git a/validation/02_simulation_validation/do_files/06_01_plot_activity_status.do b/validation/02_simulation_validation/do_files/06_01_plot_activity_status.do deleted file mode 100644 index 0d22aa0..0000000 --- a/validation/02_simulation_validation/do_files/06_01_plot_activity_status.do +++ /dev/null @@ -1,2052 +0,0 @@ -/******************************************************************************* -* PROJECT: SimPaths -* SECTION: Validation -* OBJECT: Activity status plots -* AUTHORS: Patryk Bronka, Ashley Burdett -* LAST UPDATE: 11/2025 (AB) -* COUNTRY: Poland - -* NOTES: This do file plots validation graphs for economics activity -* status (4 cat). -*******************************************************************************/ - -******************************************************************************** -* 1 : Mean values over time -******************************************************************************** -******************************************************************************** -* 1.1 : Mean values over time - Economic Activity Status -******************************************************************************** -******************************************************************************** -* 1.1.1 : Young people (18-30) -******************************************************************************** -******************************************************************************** -* 1.1.1.1 : Young people (18-30), All -******************************************************************************** - -* Prepare validation data -use year dwt valid_employed valid_student valid_inactive dag /// - valid_retired using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -drop if dag > 30 - -collapse (mean) valid_employed valid_student valid_inactive valid_retired /// - [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulated data -use run year sim_employed sim_student sim_inactive sim_retired dag using /// - "$dir_data/simulated_data.dta", clear - -drop if dag > 30 - -collapse (mean) sim_employed sim_student sim_inactive sim_retired, /// - by(run year) -collapse (mean) sim_employed sim_student sim_inactive sim_retired /// - (sd) sim_employed_sd = sim_employed /// - sim_student_sd = sim_student /// - sim_inactive_sd = sim_inactive /// - sim_retired_sd = sim_retired /// - , by(year) - -foreach varname in sim_employed sim_student sim_inactive sim_retired { - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - - -collapse (mean) sim* valid*, by(year) - -* Plot figure -twoway /// -(rarea sim_employed_high sim_employed_low year, sort color(green%20) /// - legend(label(1 "Employed, simulated"))) /// -(line valid_employed year, sort color(green) /// - legend(label(2 "Employed, SILC"))) /// -(rarea sim_student_high sim_student_low year, sort color(blue%20) /// - legend(label(3 "Students, simulated"))) /// -(line valid_student year, sort color(blue) /// - legend(label(4 "Students, SILC"))) /// -(rarea sim_inactive_high sim_inactive_low year, sort color(red%20) /// - legend(label(5 "Non-employed, simulated"))) /// -(line valid_inactive year, sort color(red) /// - legend(label(6 "Non-employed, SILC"))) /// -(rarea sim_retired_high sim_retired_low year, sort color(grey%20) /// - legend(label(7 "Retired, simulated"))) /// -(line valid_retired year, sort color(grey) /// - legend(label(8 "Retired, SILC"))), /// - title("Economic Activity Status") /// - subtitle("Ages ${min_age}-30") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. ", /// - size(vsmall)) - -* Save figure -graph export /// - "$dir_output_files/economic_activity/validation_${country}_activity_status_ts_${min_age}_30_both.jpg", /// - replace width(2400) height(1350) quality(100) - - -******************************************************************************** -* 1.1.1.2 : Young people (18-30), By gender -******************************************************************************** - -** Male -* Prepare validation data -use year dwt valid_employed valid_student valid_inactive dag dgn /// - valid_retired using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", /// - clear - -drop if dag > 30 -drop if dgn == 0 - -collapse (mean) valid_employed valid_student valid_inactive valid_retired /// - [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulated data -use run year sim_employed sim_student sim_inactive sim_retired dag dgn using /// - "$dir_data/simulated_data.dta", clear - -drop if dag > 30 -drop if dgn == "Female" - -collapse (mean) sim_employed sim_student sim_inactive sim_retired, /// - by(run year) - -collapse (mean) sim_employed sim_student sim_inactive sim_retired /// - (sd) sim_employed_sd = sim_employed /// - sim_student_sd = sim_student /// - sim_inactive_sd = sim_inactive /// - sim_retired_sd = sim_retired /// - , by(year) - -* Compute 95% confidence interval -foreach varname in sim_employed sim_student sim_inactive sim_retired { - - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd - -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - - -collapse (mean) sim* valid*, by(year) - -* Plot figure -twoway /// -(rarea sim_employed_high sim_employed_low year, sort color(green%20) /// - legend(label(1 "Employed, simulated"))) /// -(line valid_employed year, sort color(green) /// - legend(label(2 "Employed, SILC"))) /// -(rarea sim_student_high sim_student_low year, sort color(blue%20) /// - legend(label(3 "Students, simulated"))) /// -(line valid_student year, sort color(blue) /// - legend(label(4 "Students, SILC"))) /// -(rarea sim_inactive_high sim_inactive_low year, sort color(red%20) /// - legend(label(5 "Non-employed, simulated"))) /// -(line valid_inactive year, sort color(red) /// - legend(label(6 "Non-employed, SILC"))) /// -(rarea sim_retired_high sim_retired_low year, sort color(grey%20) /// - legend(label(7 "Retired, simulated"))) /// -(line valid_retired year, sort color(grey) /// - legend(label(8 "Retired, SILC"))), /// - title("Economic Activity Status") /// - subtitle("Ages ${min_age}-30, males ") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. ", /// - size(vsmall)) - -* Save figure -graph export /// - "$dir_output_files/economic_activity/validation_${country}_activity_status_ts_${min_age}_30_male.jpg", /// - replace width(2400) height(1350) quality(100) - - -** Female - -* Prepare validation data -use year dwt valid_employed valid_student valid_inactive dag dgn /// - valid_retired using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -drop if dag > 30 -drop if dgn == 1 - -collapse (mean) valid_employed valid_student valid_inactive valid_retired /// - dgn [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulated data -use run year sim_employed sim_student sim_inactive sim_retired dag dgn using /// - "$dir_data/simulated_data.dta", clear - -drop if dag > 30 -drop if dgn == "Male" - -collapse (mean) sim_employed sim_student sim_inactive sim_retired, /// - by(run year) -collapse (mean) sim_employed sim_student sim_inactive sim_retired /// - (sd) sim_employed_sd = sim_employed /// - sim_student_sd = sim_student /// - sim_inactive_sd = sim_inactive /// - sim_retired_sd = sim_retired /// - , by(year) - -* Compute 95% confidence interval -foreach varname in sim_employed sim_student sim_inactive sim_retired { - - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd - -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - - -collapse (mean) sim* valid*, by(year) - -* Plot figure -twoway /// -(rarea sim_employed_high sim_employed_low year, sort color(green%20) /// - legend(label(1 "Employed, simulated"))) /// -(line valid_employed year, sort color(green) /// - legend(label(2 "Employed, SILC"))) /// -(rarea sim_student_high sim_student_low year, sort color(blue%20) /// - legend(label(3 "Students, simulated"))) /// -(line valid_student year, sort color(blue) /// - legend(label(4 "Students, SILC"))) /// -(rarea sim_inactive_high sim_inactive_low year, sort color(red%20) /// - legend(label(5 "Non-employed, simulated"))) /// -(line valid_inactive year, sort color(red) /// - legend(label(6 "Non-employed, SILC"))) /// -(rarea sim_retired_high sim_retired_low year, sort color(grey%20) /// - legend(label(7 "Retired, simulated"))) /// -(line valid_retired year, sort color(grey) /// - legend(label(8 "Retired, SILC"))), /// - title("Economic Activity Status") /// - subtitle("Ages ${min_age}-30, females ") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. ", /// - size(vsmall)) - -* Save figure -graph export /// - "$dir_output_files/economic_activity/validation_${country}_activity_status_ts_${min_age}_30_female.jpg", /// - replace width(2400) height(1350) quality(100) - - -******************************************************************************** -* 1.1.2 : Working age (18-65) -******************************************************************************** -******************************************************************************** -* 1.1.2.1 : Working age (18-65), All -******************************************************************************** - -* Prepare validation data -use year dwt valid_employed valid_student valid_inactive dgn dag /// - valid_retired using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -collapse (mean) valid_employed valid_student valid_inactive valid_retired /// - [aw = dwt], by(year dgn) - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulated data -use run year sim_employed sim_student sim_inactive sim_retired dgn using /// - "$dir_data/simulated_data.dta", clear - -gen dgn_coded = . -replace dgn_coded = 1 if dgn == "Male" -replace dgn_coded = 0 if dgn == "Female" - -drop dgn -rename dgn_coded dgn - -collapse (mean) sim_employed sim_student sim_inactive sim_retired, /// - by(run year dgn) -collapse (mean) sim_employed sim_student sim_inactive sim_retired /// - (sd) sim_employed_sd = sim_employed /// - sim_student_sd = sim_student /// - sim_inactive_sd = sim_inactive /// - sim_retired_sd = sim_retired /// - , by(year dgn) - -foreach varname in sim_employed sim_student sim_inactive sim_retired { - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd -} - -merge 1:1 year dgn using "$dir_data/temp_valid_stats.dta", keep(3) nogen - - -** All - -preserve - -collapse (mean) sim* valid*, by(year) - -* Plot figure -twoway /// -(rarea sim_employed_high sim_employed_low year, sort color(green%20) /// - legend(label(1 "Employed, simulated"))) /// -(line valid_employed year, sort color(green) /// - legend(label(2 "Employed, SILC"))) /// -(rarea sim_student_high sim_student_low year, sort color(blue%20) /// - legend(label(3 "Students, simulated"))) /// -(line valid_student year, sort color(blue) /// - legend(label(4 "Students, SILC"))) /// -(rarea sim_inactive_high sim_inactive_low year, sort color(red%20) /// - legend(label(5 "Non-employed, simulated"))) /// -(line valid_inactive year, sort color(red) /// - legend(label(6 "Non-employed, SILC"))) /// -(rarea sim_retired_high sim_retired_low year, sort color(grey%20) /// - legend(label(7 "Retired, simulated"))) /// -(line valid_retired year, sort color(grey) /// - legend(label(8 "Retired, SILC"))), /// - title("Activity status") /// - subtitle("Ages ${min_age}-${max_age}") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. ", /// - size(vsmall)) - -* Save figure -graph export /// - "$dir_output_files/economic_activity/validation_${country}_activity_status_ts_${min_age}_${max_age}_both.jpg", /// - replace width(2400) height(1350) quality(100) - -restore, preserve - -******************************************************************************** -* 1.1.2.2 : Working age (18-65), By gender -******************************************************************************** - -* Male -keep if dgn == 1 - -* Plot figure -twoway /// -(rarea sim_employed_high sim_employed_low year, sort color(green%20) /// - legend(label(1 "Employed, simulated"))) /// -(line valid_employed year, sort color(green) /// - legend(label(2 "Employed, SILC"))) /// -(rarea sim_student_high sim_student_low year, sort color(blue%20) /// - legend(label(3 "Students, simulated"))) /// -(line valid_student year, sort color(blue) /// - legend(label(4 "Students, SILC"))) /// -(rarea sim_inactive_high sim_inactive_low year, sort color(red%20) /// - legend(label(5 "Non-employed, simulated"))) /// -(line valid_inactive year, sort color(red) /// - legend(label(6 "Non-employed, SILC"))) /// -(rarea sim_retired_high sim_retired_low year, sort color(grey%20) /// - legend(label(7 "Retired, simulated"))) /// -(line valid_retired year, sort color(grey) /// - legend(label(8 "Retired, SILC"))), /// - title("Activity status") /// - subtitle("Ages ${min_age}-${max_age}, males") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. ", /// - size(vsmall)) - -* Save figure -graph export /// - "$dir_output_files/economic_activity/validation_${country}_activity_status_ts_${min_age}_${max_age}_male.jpg", /// - replace width(2400) height(1350) quality(100) - - -restore, preserve - - -* Female -keep if dgn == 0 - -* Plot figure -twoway /// -(rarea sim_employed_high sim_employed_low year, sort color(green%20) /// - legend(label(1 "Employed, simulated"))) /// -(line valid_employed year, sort color(green) /// - legend(label(2 "Employed, SILC"))) /// -(rarea sim_student_high sim_student_low year, sort color(blue%20) /// - legend(label(3 "Students, simulated"))) /// -(line valid_student year, sort color(blue) /// - legend(label(4 "Students, SILC"))) /// -(rarea sim_inactive_high sim_inactive_low year, sort color(red%20) /// - legend(label(5 "Non-employed, simulated"))) /// -(line valid_inactive year, sort color(red) /// - legend(label(6 "Non-employed, SILC"))) /// -(rarea sim_retired_high sim_retired_low year, sort color(grey%20) /// - legend(label(7 "Retired, simulated"))) /// -(line valid_retired year, sort color(grey) /// - legend(label(8 "Retired, SILC"))), /// - title("Activity status") /// - subtitle("Ages ${min_age}-${max_age}, females") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. ", /// - size(vsmall)) - -* Save figure -graph export /// -"$dir_output_files/economic_activity/validation_${country}_activity_status_ts_${min_age}_${max_age}_female.jpg", /// - replace width(2400) height(1350) quality(100) - -restore - -******************************************************************************** -* 1.1.2.3 : Working age (18-65), By partnership status -******************************************************************************** - -* Prepare validation data -use year dwt valid_employed valid_student valid_inactive valid_retired dcpst /// - dgn using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -collapse (mean) valid_employed valid_student valid_inactive valid_retired /// - [aw = dwt], by(year dcpst dgn) - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulated data -use run year sim_employed sim_student sim_inactive sim_retired dcpst dgn /// - using "$dir_data/simulated_data.dta", clear - -gen dcpst_coded = . -replace dcpst_coded = 1 if dcpst == "Partnered" -replace dcpst_coded = 2 if dcpst == "SingleNeverMarried" - -drop dcpst -rename dcpst_coded dcpst - -gen dgn_coded = . -replace dgn_coded = 1 if dgn == "Male" -replace dgn_coded = 0 if dgn == "Female" - -drop dgn -rename dgn_coded dgn - -collapse (mean) sim_employed sim_student sim_inactive sim_retired, /// - by(run year dcpst dgn) - -collapse (mean) sim_employed sim_student sim_inactive sim_retired /// - (sd) sim_employed_sd = sim_employed /// - sim_student_sd = sim_student /// - sim_inactive_sd = sim_inactive /// - sim_retired_sd = sim_retired /// - , by(year dcpst dgn) - -foreach varname in sim_employed sim_student sim_inactive sim_retired { - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd -} - -merge 1:1 year dcpst dgn using "$dir_data/temp_valid_stats.dta", keep(3) nogen - - -** All - -preserve - -collapse (mean) sim* valid*, by(year dcpst) - -* Plot figure: dcpst == 1, partnered -keep if dcpst == 1 - -twoway /// -(rarea sim_employed_high sim_employed_low year, sort color(green%20) /// - legend(label(1 "Employed, simulated"))) /// -(line valid_employed year, sort color(green) /// - legend(label(2 "Employed, SILC"))) /// -(rarea sim_student_high sim_student_low year, sort color(blue%20) /// - legend(label(3 "Students, simulated"))) /// -(line valid_student year, sort color(blue) /// - legend(label(4 "Students, SILC"))) /// -(rarea sim_inactive_high sim_inactive_low year, sort color(red%20) /// - legend(label(5 "Non-employed, simulated"))) /// -(line valid_inactive year, sort color(red) /// - legend(label(6 "Non-employed, SILC"))) /// -(rarea sim_retired_high sim_retired_low year, sort color(grey%20) /// - legend(label(7 "Retired, simulated"))) /// -(line valid_retired year, sort color(grey) /// - legend(label(8 "Retired, SILC"))), /// -title("Activity status") /// - subtitle("Ages ${min_age}-${max_age}, partnered") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. ", /// - size(vsmall)) - -graph export /// -"$dir_output_files/economic_activity/validation_${country}_activity_status_ts_${min_age}_${max_age}_both_partnered.jpg", /// - replace width(2400) height(1350) quality(100) - -restore, preserve - -collapse (mean) sim* valid*, by(year dcpst) - -* Plot figure: dcpst == 2, single -keep if dcpst == 2 - -twoway /// -(rarea sim_employed_high sim_employed_low year, sort color(green%20) /// - legend(label(1 "Employed, simulated"))) /// -(line valid_employed year, sort color(green) /// - legend(label(2 "Employed, SILC"))) /// -(rarea sim_student_high sim_student_low year, sort color(blue%20) /// - legend(label(3 "Students, simulated"))) /// -(line valid_student year, sort color(blue) /// - legend(label(4 "Students, SILC"))) /// -(rarea sim_inactive_high sim_inactive_low year, sort color(red%20) /// - legend(label(5 "Non-employed, simulated"))) /// -(line valid_inactive year, sort color(red) /// - legend(label(6 "Non-employed, SILC"))) /// -(rarea sim_retired_high sim_retired_low year, sort color(grey%20) /// - legend(label(7 "Retired, simulated"))) /// -(line valid_retired year, sort color(grey) /// - legend(label(8 "Retired, SILC"))), /// - title("Activity status") /// - subtitle("Ages ${min_age}-${max_age}, single") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. ", /// - size(vsmall)) - -graph export /// -"$dir_output_files/economic_activity/validation_${country}_activity_status_ts_${min_age}_${max_age}_both_single.jpg", /// - replace width(2400) height(1350) quality(100) - - -restore - -******************************************************************************** -* 1.1.2.4 : Working age (18-65), By gender and partnership status -******************************************************************************** - -** Males - -* Plot figure: dcpst == 1, partnered -preserve - -keep if dcpst == 1 & dgn == 1 - -twoway /// -(rarea sim_employed_high sim_employed_low year, sort color(green%20) /// - legend(label(1 "Employed, simulated"))) /// -(line valid_employed year, sort color(green) /// - legend(label(2 "Employed, SILC"))) /// -(rarea sim_student_high sim_student_low year, sort color(blue%20) /// - legend(label(3 "Students, simulated"))) /// -(line valid_student year, sort color(blue) /// - legend(label(4 "Students, SILC"))) /// -(rarea sim_inactive_high sim_inactive_low year, sort color(red%20) /// - legend(label(5 "Non-employed, simulated"))) /// -(line valid_inactive year, sort color(red) /// - legend(label(6 "Non-employed, SILC"))) /// -(rarea sim_retired_high sim_retired_low year, sort color(grey%20) /// - legend(label(7 "Retired, simulated"))) /// -(line valid_retired year, sort color(grey) /// - legend(label(8 "Retired, SILC"))), /// - title("Activity status") /// - subtitle("Ages ${min_age}-${max_age}, partnered males") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. ", /// - size(vsmall)) - -graph export /// -"$dir_output_files/economic_activity/validation_${country}_activity_status_ts_${min_age}_${max_age}_male_partnered.jpg", /// - replace width(2400) height(1350) quality(100) - -restore, preserve - -* Plot figure: dcpst == 2, single -keep if dcpst == 2 & dgn == 1 - -twoway /// -(rarea sim_employed_high sim_employed_low year, sort color(green%20) /// - legend(label(1 "Employed, simulated"))) /// -(line valid_employed year, sort color(green) /// - legend(label(2 "Employed, SILC"))) /// -(rarea sim_student_high sim_student_low year, sort color(blue%20) /// - legend(label(3 "Students, simulated"))) /// -(line valid_student year, sort color(blue) /// - legend(label(4 "Students, SILC"))) /// -(rarea sim_inactive_high sim_inactive_low year, sort color(red%20) /// - legend(label(5 "Non-employed, simulated"))) /// -(line valid_inactive year, sort color(red) /// - legend(label(6 "Non-employed, SILC"))) /// -(rarea sim_retired_high sim_retired_low year, sort color(grey%20) /// - legend(label(7 "Retired, simulated"))) /// -(line valid_retired year, sort color(grey) /// - legend(label(8 "Retired, SILC"))), /// - title("Activity status") /// - subtitle("Ages ${min_age}-${max_age}, single males") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. ", /// - size(vsmall)) - -graph export /// -"$dir_output_files/economic_activity/validation_${country}_activity_status_ts_${min_age}_${max_age}_male_single.jpg", /// - replace width(2400) height(1350) quality(100) - -restore - - -** Females - -* Plot figure: dcpst == 1, partnered -preserve - -keep if dcpst == 1 & dgn == 0 - -twoway /// -(rarea sim_employed_high sim_employed_low year, sort color(green%20) /// - legend(label(1 "Employed, simulated"))) /// -(line valid_employed year, sort color(green) /// - legend(label(2 "Employed, SILC"))) /// -(rarea sim_student_high sim_student_low year, sort color(blue%20) /// - legend(label(3 "Students, simulated"))) /// -(line valid_student year, sort color(blue) /// - legend(label(4 "Students, SILC"))) /// -(rarea sim_inactive_high sim_inactive_low year, sort color(red%20) /// - legend(label(5 "Non-employed, simulated"))) /// -(line valid_inactive year, sort color(red) /// - legend(label(6 "Non-employed, SILC"))) /// -(rarea sim_retired_high sim_retired_low year, sort color(grey%20) /// - legend(label(7 "Retired, simulated"))) /// -(line valid_retired year, sort color(grey) /// - legend(label(8 "Retired, SILC"))), /// - title("Activity status") /// - subtitle("Ages ${min_age}-${max_age}, partnered females") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. ", /// - size(vsmall)) - -graph export /// -"$dir_output_files/economic_activity/validation_${country}_activity_status_ts_${min_age}_${max_age}_female_partnered.jpg", /// - replace width(2400) height(1350) quality(100) - -restore, preserve - -* Plot figure: dcpst == 2, single -keep if dcpst == 2 & dgn == 0 - -twoway /// -(rarea sim_employed_high sim_employed_low year, sort color(green%20) /// - legend(label(1 "Employed, simulated"))) /// -(line valid_employed year, sort color(green) /// - legend(label(2 "Employed, SILC"))) /// -(rarea sim_student_high sim_student_low year, sort color(blue%20) /// - legend(label(3 "Students, simulated"))) /// -(line valid_student year, sort color(blue) /// - legend(label(4 "Students, SILC"))) /// -(rarea sim_inactive_high sim_inactive_low year, sort color(red%20) /// - legend(label(5 "Non-employed, simulated"))) /// -(line valid_inactive year, sort color(red) /// - legend(label(6 "Non-employed, SILC"))) /// -(rarea sim_retired_high sim_retired_low year, sort color(grey%20) /// - legend(label(7 "Retired, simulated"))) /// -(line valid_retired year, sort color(grey) /// - legend(label(8 "Retired, SILC"))), /// - title("Activity status") /// - subtitle("Ages ${min_age}-${max_age}, single females") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. ", /// - size(vsmall)) - -graph export /// -"$dir_output_files/economic_activity/validation_${country}_activity_status_ts_${min_age}_${max_age}_female_single.jpg", /// - replace width(2400) height(1350) quality(100) - -restore - - -******************************************************************************** -* 1.1.3 : Before female state pension age (18-60) -******************************************************************************** -******************************************************************************** -* 1.1.3.1 : Before female state pension age (18-60), Females -******************************************************************************** - -* Prepare validation data -use year dwt valid_employed valid_student valid_inactive dgn dag /// - valid_retired using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -drop if dag > 60 - -collapse (mean) valid_employed valid_student valid_inactive valid_retired /// - [aw = dwt], by(year dgn) - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulated data -use run year sim_employed sim_student sim_inactive sim_retired dgn dag using /// - "$dir_data/simulated_data.dta", clear - -drop if dag > 60 - -gen dgn_coded = . -replace dgn_coded = 1 if dgn == "Male" -replace dgn_coded = 0 if dgn == "Female" - -drop dgn -rename dgn_coded dgn - -collapse (mean) sim_employed sim_student sim_inactive sim_retired, /// - by(run year dgn) -collapse (mean) sim_employed sim_student sim_inactive sim_retired /// - (sd) sim_employed_sd = sim_employed /// - sim_student_sd = sim_student /// - sim_inactive_sd = sim_inactive /// - sim_retired_sd = sim_retired /// - , by(year dgn) - -foreach varname in sim_employed sim_student sim_inactive sim_retired { - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd -} - -merge 1:1 year dgn using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Females -keep if dgn == 0 - -* Plot figure -twoway /// -(rarea sim_employed_high sim_employed_low year, sort color(green%20) /// - legend(label(1 "Employed, simulated"))) /// -(line valid_employed year, sort color(green) /// - legend(label(2 "Employed, SILC"))) /// -(rarea sim_student_high sim_student_low year, sort color(blue%20) /// - legend(label(3 "Students, simulated"))) /// -(line valid_student year, sort color(blue) /// - legend(label(4 "Students, SILC"))) /// -(rarea sim_inactive_high sim_inactive_low year, sort color(red%20) /// - legend(label(5 "Non-employed, simulated"))) /// -(line valid_inactive year, sort color(red) /// - legend(label(6 "Non-employed, SILC"))) /// -(rarea sim_retired_high sim_retired_low year, sort color(grey%20) /// - legend(label(7 "Retired, simulated"))) /// -(line valid_retired year, sort color(grey) /// - legend(label(8 "Retired, SILC"))), /// - title("Activity status") /// - subtitle("Ages ${min_age}-60, females") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. ", /// - size(vsmall)) - -* Save figure -graph export /// -"$dir_output_files/economic_activity/validation_${country}_activity_status_ts_${min_age}_60_female.jpg", /// - replace width(2400) height(1350) quality(100) - - -******************************************************************************** -* 1.1.4 : All ages -******************************************************************************** -******************************************************************************** -* 1.1.4 : All ages, All -******************************************************************************** - -* Prepare validation data -use year dwt valid_employed valid_student valid_inactive dag dgn /// - valid_retired using /// - "$dir_data/${country}-eusilc_validation_full_sample_long.dta", clear - -collapse (mean) valid_employed valid_student valid_inactive valid_retired /// - [aw = dwt], by(year dgn) - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulated data -use run year sim_employed sim_student sim_inactive sim_retired dgn using /// - "$dir_data/simulated_data_full.dta", clear - -gen dgn_coded = . -replace dgn_coded = 1 if dgn == "Male" -replace dgn_coded = 0 if dgn == "Female" - -drop dgn -rename dgn_coded dgn - -collapse (mean) sim_employed sim_student sim_inactive sim_retired, /// - by(run year dgn) - -collapse (mean) sim_employed sim_student sim_inactive sim_retired /// - (sd) sim_employed_sd = sim_employed /// - sim_student_sd = sim_student /// - sim_inactive_sd = sim_inactive /// - sim_retired_sd = sim_retired /// - , by(year dgn) - -foreach varname in sim_employed sim_student sim_inactive sim_retired { - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd -} - -merge 1:1 year dgn using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -** All - -preserve - -collapse (mean) sim* valid*, by(year) - -* Plot figure -twoway /// -(rarea sim_employed_high sim_employed_low year, sort color(green%20) /// - legend(label(1 "Employed, simulated"))) /// -(line valid_employed year, sort color(green) /// - legend(label(2 "Employed, SILC"))) /// -(rarea sim_student_high sim_student_low year, sort color(blue%20) /// - legend(label(3 "Students, simulated"))) /// -(line valid_student year, sort color(blue) /// - legend(label(4 "Students, SILC"))) /// -(rarea sim_inactive_high sim_inactive_low year, sort color(red%20) /// - legend(label(5 "Non-employed, simulated"))) /// -(line valid_inactive year, sort color(red) /// - legend(label(6 "Non-employed, SILC"))) /// -(rarea sim_retired_high sim_retired_low year, sort color(grey%20) /// - legend(label(7 "Retired, simulated"))) /// -(line valid_retired year, sort color(grey) /// - legend(label(8 "Retired, SILC"))), /// - title("Activity status") /// - subtitle("All ages") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. ", /// - size(vsmall)) - -* Save figure -graph export /// -"$dir_output_files/economic_activity/validation_${country}_activity_status_ts_all_both.jpg", /// - replace width(2400) height(1350) quality(100) - -restore, preserve - -******************************************************************************** -* 1.1.4.2 : Adults (18+), By gender -******************************************************************************** - -keep if dgn == 1 - -* Plot figure -twoway /// -(rarea sim_employed_high sim_employed_low year, sort color(green%20) /// - legend(label(1 "Employed, simulated"))) /// -(line valid_employed year, sort color(green) /// - legend(label(2 "Employed, SILC"))) /// -(rarea sim_student_high sim_student_low year, sort color(blue%20) /// - legend(label(3 "Students, simulated"))) /// -(line valid_student year, sort color(blue) /// - legend(label(4 "Students, SILC"))) /// -(rarea sim_inactive_high sim_inactive_low year, sort color(red%20) /// - legend(label(5 "Non-employed, simulated"))) /// -(line valid_inactive year, sort color(red) /// - legend(label(6 "Non-employed, SILC"))) /// -(rarea sim_retired_high sim_retired_low year, sort color(grey%20) /// - legend(label(7 "Retired, simulated"))) /// -(line valid_retired year, sort color(grey) /// - legend(label(8 "Retired, SILC"))), /// - title("Activity status") /// - subtitle("All ages, males") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. ", /// - size(vsmall)) - -* Save figure -graph export /// -"$dir_output_files/economic_activity/validation_${country}_activity_status_ts_all_male.jpg", /// - replace width(2400) height(1350) quality(100) - - -restore, preserve - -** Females - -keep if dgn == 0 - -* Plot figure -twoway /// -(rarea sim_employed_high sim_employed_low year, sort color(green%20) /// - legend(label(1 "Employed, simulated"))) /// -(line valid_employed year, sort color(green) /// - legend(label(2 "Employed, SILC"))) /// -(rarea sim_student_high sim_student_low year, sort color(blue%20) /// - legend(label(3 "Students, simulated"))) /// -(line valid_student year, sort color(blue) /// - legend(label(4 "Students, SILC"))) /// -(rarea sim_inactive_high sim_inactive_low year, sort color(red%20) /// - legend(label(5 "Non-employed, simulated"))) /// -(line valid_inactive year, sort color(red) /// - legend(label(6 "Non-employed, SILC"))) /// -(rarea sim_retired_high sim_retired_low year, sort color(grey%20) /// - legend(label(7 "Retired, simulated"))) /// -(line valid_retired year, sort color(grey) /// - legend(label(8 "Retired, SILC"))), /// - title("Activity status") /// - subtitle("All ages, females") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. ", /// - size(vsmall)) - -* Save figure -graph export /// -"$dir_output_files/economic_activity/validation_${country}_activity_status_ts_all_female.jpg", /// - replace width(2400) height(1350) quality(100) - -restore - -graph drop _all - - -******************************************************************************** -* 1.2 : Mean values over time - Employed -******************************************************************************** -******************************************************************************** -* 1.2.1 : Employed, Working age(18-65) -******************************************************************************** -******************************************************************************** -* 1.2.1.1 : Employed, Working age(18-65), All -******************************************************************************** - -* Prepare validation data -use year dwt valid_employed valid_student valid_inactive dgn /// - valid_retired using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -collapse (mean) valid_employed valid_student valid_inactive valid_retired /// - [aw = dwt], by(year dgn) - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulated data -use run year sim_employed sim_student sim_inactive sim_retired dgn using /// - "$dir_data/simulated_data.dta", clear - -gen dgn_coded = . -replace dgn_coded = 1 if dgn == "Male" -replace dgn_coded = 0 if dgn == "Female" - -drop dgn -rename dgn_coded dgn - -collapse (mean) sim_employed sim_student sim_inactive sim_retired, /// - by(run year dgn) - -collapse (mean) sim_employed sim_student sim_inactive sim_retired /// - (sd) sim_employed_sd = sim_employed /// - sim_student_sd = sim_student /// - sim_inactive_sd = sim_inactive /// - sim_retired_sd = sim_retired /// - , by(year dgn) - -foreach varname in sim_employed sim_student sim_inactive sim_retired { - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd -} - -merge 1:1 year dgn using "$dir_data/temp_valid_stats.dta", keep(3) nogen - - -** All - -preserve - -collapse (mean) sim* valid*, by(year) - -* Plot figure -twoway /// -(rarea sim_employed_high sim_employed_low year, sort color(green%20) /// - legend(label(1 "Simulated"))) /// -(line valid_employed year, sort color(green) /// - legend(label(2 "SILC"))), /// - title("Employed") /// - subtitle("Ages ${min_age}-${max_age}") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note(Notes:, size(vsmall)) - -* Save figure -graph export /// -"$dir_output_files/economic_activity/validation_${country}_employed_ts_${min_age}_${max_age}_both.jpg", /// - replace width(2400) height(1350) quality(100) - -restore, preserve - -******************************************************************************** -* 1.2.1.2 : Employed, Working age(18-65), By gender -******************************************************************************** - -keep if dgn == 1 - -* Plot figure -twoway /// -(rarea sim_employed_high sim_employed_low year, sort color(green%20) /// - legend(label(1 "Simulated"))) /// -(line valid_employed year, sort color(green) /// - legend(label(2 " SILC"))), /// - title("Employed") /// - subtitle("Ages ${min_age}-${max_age}, males") /// - xtitle("Year") /// - ytitle("Share") /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note(Notes:, size(vsmall)) - -* Save figure -graph export /// - "$dir_output_files/economic_activity/validation_${country}_employed_ts_${min_age}_${max_age}_male.jpg", /// - replace width(2400) height(1350) quality(100) - - -restore, preserve - - -** Females - -keep if dgn == 0 - -* Plot figure -twoway /// -(rarea sim_employed_high sim_employed_low year, sort color(green%20) /// - legend(label(1 "Simulated"))) /// -(line valid_employed year, sort color(green) /// - legend(label(2 "SILC"))), /// - title("Employed") /// - subtitle("Ages ${min_age}-${max_age}, females") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note(Notes:, size(vsmall)) - -* Save figure -graph export /// -"$dir_output_files/economic_activity/validation_${country}_employed_ts_${min_age}_${max_age}_female.jpg", /// - replace width(2400) height(1350) quality(100) - -restore - -******************************************************************************** -* 1.2.2 : Employed, Before female state pension age (18-60) -******************************************************************************** -******************************************************************************** -* 1.2.2.1 : Employed Working age(18-65), Before female state pension age -* (18-60), Female -******************************************************************************** - -* Prepare validation data -use year dwt valid_employed valid_student valid_inactive dgn dag /// - valid_retired using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -drop if dag > 60 - -collapse (mean) valid_employed valid_student valid_inactive valid_retired /// - [aw = dwt], by(year dgn) - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulated data -use run year sim_employed sim_student sim_inactive sim_retired dgn dag using /// - "$dir_data/simulated_data.dta", clear - -drop if dag > 60 - -gen dgn_coded = . -replace dgn_coded = 1 if dgn == "Male" -replace dgn_coded = 0 if dgn == "Female" - -drop dgn -rename dgn_coded dgn - -collapse (mean) sim_employed sim_student sim_inactive sim_retired, /// - by(run year dgn) - -collapse (mean) sim_employed sim_student sim_inactive sim_retired /// - (sd) sim_employed_sd = sim_employed /// - sim_student_sd = sim_student /// - sim_inactive_sd = sim_inactive /// - sim_retired_sd = sim_retired /// - , by(year dgn) - -foreach varname in sim_employed sim_student sim_inactive sim_retired { - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd -} - -merge 1:1 year dgn using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Females -keep if dgn == 0 - -* Plot figure -twoway /// -(rarea sim_employed_high sim_employed_low year, sort color(green%20) /// - legend(label(1 "Simulated"))) /// -(line valid_employed year, sort color(green) /// - legend(label(2 "SILC"))), /// - title("Employed") /// - subtitle("Ages ${min_age}-60") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note(Notes:, size(vsmall)) - -* Save figure -graph export /// -"$dir_output_files/economic_activity/validation_${country}_employed_ts_${min_age}_60_female.jpg", /// - replace width(2400) height(1350) quality(100) - - -******************************************************************************** -* 1.2.3 : Employed, All ages -******************************************************************************** -******************************************************************************** -* 1.2.3.1 : Employed, All ages , All -******************************************************************************** - -* Prepare validation data -use year dwt valid_employed valid_student valid_inactive dgn /// - valid_retired using /// - "$dir_data/${country}-eusilc_validation_full_sample_long.dta", /// - clear - -collapse (mean) valid_employed valid_student valid_inactive valid_retired /// - [aw = dwt], by(year dgn) - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulated data -use run year sim_employed sim_student sim_inactive sim_retired dgn using /// - "$dir_data/simulated_data_full.dta", clear - -gen dgn_coded = . -replace dgn_coded = 1 if dgn == "Male" -replace dgn_coded = 0 if dgn == "Female" - -drop dgn -rename dgn_coded dgn - -collapse (mean) sim_employed sim_student sim_inactive sim_retired, /// - by(run year dgn) - -collapse (mean) sim_employed sim_student sim_inactive sim_retired /// - (sd) sim_employed_sd = sim_employed /// - sim_student_sd = sim_student /// - sim_inactive_sd = sim_inactive /// - sim_retired_sd = sim_retired /// - , by(year dgn) - -foreach varname in sim_employed sim_student sim_inactive sim_retired { - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd -} - -merge 1:1 year dgn using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -** All - -preserve - -collapse (mean) sim* valid*, by(year) - -* Plot figure -twoway /// -(rarea sim_employed_high sim_employed_low year, sort color(green%20) /// - legend(label(1 "Simulated"))) /// -(line valid_employed year, sort color(green) /// - legend(label(2 "SILC"))), /// - title("Employed") /// - subtitle("All ages") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note(Notes:, size(vsmall)) - -* Save figure -graph export /// -"$dir_output_files/economic_activity/validation_${country}_employed_ts_all_both.jpg", /// - replace width(2400) height(1350) quality(100) - -restore, preserve - - -******************************************************************************** -* 1.2.3.2 : Employed, All ages, By gender -******************************************************************************** - -keep if dgn == 1 - -* Plot figure -twoway /// -(rarea sim_employed_high sim_employed_low year, sort color(green%20) /// - legend(label(1 "Simulated"))) /// -(line valid_employed year, sort color(green) /// - legend(label(2 "SILC"))), /// - title("Employed") /// - subtitle("All ages, males") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note(Notes:, size(vsmall)) - -* Save figure -graph export /// -"$dir_output_files/economic_activity/validation_${country}_employed_ts_all_male.jpg", /// - replace width(2400) height(1350) quality(100) - - -restore, preserve - - -** Females - -keep if dgn == 0 - -* Plot figure -twoway /// -(rarea sim_employed_high sim_employed_low year, sort color(green%20) /// - legend(label(1 "Simulated"))) /// -(line valid_employed year, sort color(green) /// - legend(label(2 "SILC"))), /// - title("Employed") /// - subtitle("All ages, females") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note(Notes:, size(vsmall)) - -* Save figure -graph export /// -"$dir_output_files/economic_activity/validation_${country}_employed_ts_all_female.jpg", /// - replace width(2400) height(1350) quality(100) - -restore - -graph drop _all - - -******************************************************************************** -* 1.2.3.3 : Employed, Adults (18+), By age group -******************************************************************************** - -* Prepare validation data -use year dwt dgn ageGroup valid_employed dag using /// - "$dir_data/${country}-eusilc_validation_full_sample_long.dta", clear - -gen employed_f = (valid_employed) if dgn == 0 -gen employed_m = (valid_employed) if dgn == 1 - -drop if ageGroup == 0 | ageGroup == 8 - -collapse (mean) employed_f employed_m [aweight=dwt], /// - by(ageGroup year) -drop if missing(ageGroup) -reshape wide employed_f employed_m, i(year) j(ageGroup) - -forvalues i = 1(1)7 { - rename employed_f`i' employed_f_`i'_valid - rename employed_m`i' employed_m_`i'_valid -} - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year sim_sex ageGroup sim_employed using /// - "$dir_data/simulated_data_full.dta", clear - -gen employed_f = (sim_employed) if sim_sex == 2 -gen employed_m = (sim_employed) if sim_sex == 1 - -collapse (mean) employed_f employed_m, by(ageGroup run year) -drop if missing(ageGroup) -reshape wide employed_f employed_m, i(year run) j(ageGroup) - -forvalues i = 1(1)7{ - rename employed_f`i' employed_f_`i'_sim - rename employed_m`i' employed_m_`i'_sim -} - -collapse (mean) employed* /// - (sd) sd_employed_f_1_sim = employed_f_1_sim /// - sd_employed_f_2_sim = employed_f_2_sim /// - sd_employed_f_3_sim = employed_f_3_sim /// - sd_employed_f_4_sim = employed_f_4_sim /// - sd_employed_f_5_sim = employed_f_5_sim /// - sd_employed_f_6_sim = employed_f_6_sim /// - sd_employed_f_7_sim = employed_f_7_sim /// - sd_employed_m_1_sim = employed_m_1_sim /// - sd_employed_m_2_sim = employed_m_2_sim /// - sd_employed_m_3_sim = employed_m_3_sim /// - sd_employed_m_4_sim = employed_m_4_sim /// - sd_employed_m_5_sim = employed_m_5_sim /// - sd_employed_m_6_sim = employed_m_6_sim /// - sd_employed_m_7_sim = employed_m_7_sim /// - , by(year) - - /* sd_employed_f_8_sim=employed_f_8_sim /// - sd_employed_m_8_sim=employed_m_8_sim /// */ - -forvalues i = 1(1)7 { - gen employed_f_`i'_sim_high = /// - employed_f_`i'_sim + 1.96*sd_employed_f_`i'_sim - gen employed_f_`i'_sim_low = /// - employed_f_`i'_sim - 1.96*sd_employed_f_`i'_sim - gen employed_m_`i'_sim_high = /// - employed_m_`i'_sim + 1.96*sd_employed_m_`i'_sim - gen employed_m_`i'_sim_low = /// - employed_m_`i'_sim - 1.96*sd_employed_m_`i'_sim -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figures -foreach vble in "employed_f" "employed_m" { - - twoway (rarea `vble'_1_sim_high `vble'_1_sim_low year, /// - sort color(green%20) /// - legend(label(1 "Simulated") position(6) rows(1))) /// - (line `vble'_1_valid year, sort color(green) /// - legend(label(2 "SILC"))), /// - title("Age 15-19") name(`vble'_1, replace) ylabel(0 [0.5] 1) /// - graphregion(color(white)) xtitle("") - - twoway (rarea `vble'_2_sim_high `vble'_2_sim_low year, /// - sort color(green%20) /// - legend(label(1 "Simulated") position(6) rows(1))) /// - (line `vble'_2_valid year, sort color(green) /// - legend(label(2 "SILC"))), /// - title("Age 20-24") name(`vble'_2, replace) ylabel(0 [0.5] 1) /// - graphregion(color(white)) xtitle("") - - twoway (rarea `vble'_3_sim_high `vble'_3_sim_low year, /// - sort color(green%20) /// - legend(label(1 "Simulated") position(6) rows(1))) /// - (line `vble'_3_valid year, sort color(green) /// - legend(label(2 "SILC"))), /// - title("Age 25-29") name(`vble'_3, replace) ylabel(0 [0.5] 1) /// - graphregion(color(white)) xtitle("") - - twoway (rarea `vble'_4_sim_high `vble'_4_sim_low year, /// - sort color(green%20) /// - legend(label(1 "Simulated") position(6) rows(1))) /// - (line `vble'_4_valid year, sort color(green) /// - legend(label(2 "SILC"))), /// - title("Age 30-34") name(`vble'_4, replace) ylabel(0 [0.5] 1) /// - graphregion(color(white)) xtitle("") - - twoway (rarea `vble'_5_sim_high `vble'_5_sim_low year, /// - sort color(green%20) /// - legend(label(1 "Simulated") position(6) rows(1))) /// - (line `vble'_5_valid year, sort color(green) /// - legend(label(2 "SILC"))), /// - title("Age 35-39") name(`vble'_5, replace) ylabel(0 [0.5] 1) /// - graphregion(color(white)) xtitle("") - - twoway (rarea `vble'_6_sim_high `vble'_6_sim_low year, /// - sort color(green%20) /// - legend(label(1 "Simulated") position(6) /// - rows(1)))(line `vble'_6_valid year, sort color(green) /// - legend(label(2 "SILC"))), /// - title("Age 40-59") name(`vble'_6, replace) ylabel(0 [0.5] 1) /// - graphregion(color(white)) xtitle("") - - twoway (rarea `vble'_7_sim_high `vble'_7_sim_low year, /// - sort color(green%20) /// - legend(label(1 "Simulated") position(6) rows(1))) /// - (line `vble'_7_valid year, sort color(green) /// - legend(label(2 "SILC"))), /// - title("Age 60-79") name(`vble'_7, replace) ylabel(0 [0.5] 1) /// - graphregion(color(white)) xtitle("") - -} - - -* Save figures -* Share employed women -grc1leg employed_f_1 employed_f_2 employed_f_3 employed_f_4 employed_f_5 /// - employed_f_6 employed_f_7 , title("Employment rate by age") /// - subtitle("Females") /// - legendfrom(employed_f_1) /// - graphregion(color(white)) /// - note("Notes: ", size(vsmall)) - -graph export /// -"$dir_output_files/economic_activity/validation_${country}_employed_ts_all_female.jpg", /// - replace width(2400) height(1350) quality(100) - - -* Share employed men -grc1leg employed_m_1 employed_m_2 employed_m_3 employed_m_4 employed_m_5 /// - employed_m_6 employed_m_7 , title("Employment rate by age") /// - subtitle("Males") /// - legendfrom(employed_m_1) /// - graphregion(color(white)) /// - note("Notes: ", size(vsmall)) - - -graph export /// -"$dir_output_files/economic_activity/validation_${country}_employed_ts_all_male.jpg", /// - replace width(2400) height(1350) quality(100) - -graph drop _all - - -******************************************************************************** -* 1.3 : Mean values over time - Not employed -******************************************************************************** -******************************************************************************** -* 1.3.1 : Not employed, Working age (18-65) -******************************************************************************** -******************************************************************************** -* 1.3.1.1 : Not employed, Working age (18-65), All -******************************************************************************** - -* Prepare validation data -use year dwt valid_employed valid_student valid_inactive dgn /// - valid_retired using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -collapse (mean) valid_employed valid_student valid_inactive valid_retired /// - [aw = dwt], by(year dgn) - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulated data -use run year sim_employed sim_student sim_inactive sim_retired dgn using /// - "$dir_data/simulated_data.dta", clear - -gen dgn_coded = . -replace dgn_coded = 1 if dgn == "Male" -replace dgn_coded = 0 if dgn == "Female" - -drop dgn -rename dgn_coded dgn - -collapse (mean) sim_employed sim_student sim_inactive sim_retired, /// - by(run year dgn) -collapse (mean) sim_employed sim_student sim_inactive sim_retired /// - (sd) sim_employed_sd = sim_employed /// - sim_student_sd = sim_student /// - sim_inactive_sd = sim_inactive /// - sim_retired_sd = sim_retired /// - , by(year dgn) - -foreach varname in sim_employed sim_student sim_inactive sim_retired { - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd -} - -merge 1:1 year dgn using "$dir_data/temp_valid_stats.dta", keep(3) nogen - - -** All - -preserve - -collapse (mean) sim* valid*, by(year) - -* Plot figure -twoway /// -(rarea sim_student_high sim_student_low year, sort color(blue%20) /// - legend(label(1 "Students, simulated"))) /// -(line valid_student year, sort color(blue) /// - legend(label(2 "Students, SILC"))) /// -(rarea sim_inactive_high sim_inactive_low year, sort color(red%20) /// - legend(label(3 "Non-employed, simulated"))) /// -(line valid_inactive year, sort color(red) /// - legend(label(4 "Non-employed, SILC"))) /// -(rarea sim_retired_high sim_retired_low year, sort color(grey%20) /// - legend(label(5 "Retired, simulated"))) /// -(line valid_retired year, sort color(grey) /// - legend(label(6 "Retired, SILC"))), /// - title("Activity status of those not employed") /// - subtitle("Ages ${min_age}-${max_age}") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.) minus students and retired. ", /// - size(vsmall)) - -* Save figure -graph export /// - "$dir_output_files/economic_activity/validation_${country}_activity_status_not_employed_ts_${min_age}_${max_age}_both.jpg", /// - replace width(2400) height(1350) quality(100) - -restore, preserve - -******************************************************************************** -* 1.3.1.2 : Not employed, Working age (18-65), By gender -******************************************************************************** - -keep if dgn == 1 - -* Plot figure -twoway /// -(rarea sim_student_high sim_student_low year, sort color(blue%20) /// - legend(label(1 "Students, simulated"))) /// -(line valid_student year, sort color(blue) /// - legend(label(2 "Students, SILC"))) /// -(rarea sim_inactive_high sim_inactive_low year, sort color(red%20) /// - legend(label(3 "Non-employed, simulated"))) /// -(line valid_inactive year, sort color(red) /// - legend(label(4 "Non-employed, SILC"))) /// -(rarea sim_retired_high sim_retired_low year, sort color(grey%20) /// - legend(label(5 "Retired, simulated"))) /// -(line valid_retired year, sort color(grey) /// - legend(label(6 "Retired, SILC"))), /// - title("Activity status of those not employed") /// - subtitle("Ages ${min_age}-${max_age}, males") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. ", /// - size(vsmall)) - -* Save figure -graph export /// - "$dir_output_files/economic_activity/validation_${country}_activity_status_not_employed_ts_${min_age}_${max_age}_male.jpg", /// - replace width(2400) height(1350) quality(100) - - -restore, preserve - - -** Females - -keep if dgn == 0 - -* Plot figure -twoway /// -(rarea sim_student_high sim_student_low year, sort color(blue%20) /// - legend(label(1 "Students, simulated"))) /// -(line valid_student year, sort color(blue) /// - legend(label(2 "Students, SILC"))) /// -(rarea sim_inactive_high sim_inactive_low year, sort color(red%20) /// - legend(label(3 "Non-employed, simulated"))) /// -(line valid_inactive year, sort color(red) /// - legend(label(4 "Non-employed, SILC"))) /// -(rarea sim_retired_high sim_retired_low year, sort color(grey%20) /// - legend(label(5 "Retired, simulated"))) /// -(line valid_retired year, sort color(grey) /// - legend(label(6 "Retired, SILC"))), /// - title("Activity status of those not employed") /// - subtitle("Ages ${min_age}-${max_age}, females") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. ", /// - size(vsmall)) - -* Save figure -graph export /// -"$dir_output_files/economic_activity/validation_${country}_activity_status_not_employed_ts_${min_age}_${max_age}_female.jpg", /// - replace width(2400) height(1350) quality(100) - -restore - - -******************************************************************************** -* 1.3.2 : Not employed, Before female state pension age (18-60) -******************************************************************************** -******************************************************************************** -* 1.3.2.1 : Not employed Working age(18-65), Before female state pension age -* (18-60), Female -******************************************************************************** - -* Prepare validation data -use year dwt valid_employed valid_student valid_inactive dgn dag /// - valid_retired using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", /// - clear - -drop if dag > 60 - -collapse (mean) valid_employed valid_student valid_inactive valid_retired /// - [aw = dwt], by(year dgn) - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulated data -use run year sim_employed sim_student sim_inactive sim_retired dgn dag using /// - "$dir_data/simulated_data.dta", clear - -drop if dag > 60 - -gen dgn_coded = . -replace dgn_coded = 1 if dgn == "Male" -replace dgn_coded = 0 if dgn == "Female" - -drop dgn -rename dgn_coded dgn - -collapse (mean) sim_employed sim_student sim_inactive sim_retired, /// - by(run year dgn) -collapse (mean) sim_employed sim_student sim_inactive sim_retired /// - (sd) sim_employed_sd = sim_employed /// - sim_student_sd = sim_student /// - sim_inactive_sd = sim_inactive /// - sim_retired_sd = sim_retired /// - , by(year dgn) - -foreach varname in sim_employed sim_student sim_inactive sim_retired { - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd -} - -merge 1:1 year dgn using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Females -keep if dgn == 0 - -* Plot figure -twoway /// -(rarea sim_student_high sim_student_low year, sort color(blue%20) /// - legend(label(1 "Students, simulated"))) /// -(line valid_student year, sort color(blue) /// - legend(label(2 "Students, SILC"))) /// -(rarea sim_inactive_high sim_inactive_low year, sort color(red%20) /// - legend(label(3 "Non-employed, simulated"))) /// -(line valid_inactive year, sort color(red) /// - legend(label(4 "Non-employed, SILC"))) /// -(rarea sim_retired_high sim_retired_low year, sort color(grey%20) /// - legend(label(5 "Retired, simulated"))) /// -(line valid_retired year, sort color(grey) /// - legend(label(6 "Retired, SILC"))), /// - title("Activity status of those not employed") /// - subtitle("Ages ${min_age}-60") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. ", /// - size(vsmall)) - -* Save figure -graph export /// -"$dir_output_files/economic_activity/validation_${country}_activity_status_not_employed_ts_${min_age}_60_female.jpg", /// - replace width(2400) height(1350) quality(100) - - -******************************************************************************** -* 1.3.3 : Not employed, All ages -******************************************************************************** -******************************************************************************** -* 1.3.3.1 : Not employed, All ages, All -******************************************************************************** - -* Prepare validation data -use year dwt valid_employed valid_student valid_inactive dgn /// - valid_retired using /// - "$dir_data/${country}-eusilc_validation_full_sample_long.dta", /// - clear - -collapse (mean) valid_employed valid_student valid_inactive valid_retired /// - [aw = dwt], by(year dgn) - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulated data -use run year sim_employed sim_student sim_inactive sim_retired dgn using /// - "$dir_data/simulated_data_full.dta", clear - -gen dgn_coded = . -replace dgn_coded = 1 if dgn == "Male" -replace dgn_coded = 0 if dgn == "Female" - -drop dgn -rename dgn_coded dgn - -collapse (mean) sim_employed sim_student sim_inactive sim_retired, /// - by(run year dgn) - -collapse (mean) sim_employed sim_student sim_inactive sim_retired /// - (sd) sim_employed_sd = sim_employed /// - sim_student_sd = sim_student /// - sim_inactive_sd = sim_inactive /// - sim_retired_sd = sim_retired /// - , by(year dgn) - -foreach varname in sim_employed sim_student sim_inactive sim_retired { - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd -} - -merge 1:1 year dgn using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -** All - -preserve - -collapse (mean) sim* valid*, by(year) - -* Plot figure -twoway /// -(rarea sim_student_high sim_student_low year, sort color(blue%20) /// - legend(label(1 "Students, simulated"))) /// -(line valid_student year, sort color(blue) /// - legend(label(2 "Students, SILC"))) /// -(rarea sim_inactive_high sim_inactive_low year, sort color(red%20) /// - legend(label(3 "Non-employed, simulated"))) /// -(line valid_inactive year, sort color(red) /// - legend(label(4 "Non-employed, SILC"))) /// -(rarea sim_retired_high sim_retired_low year, sort color(grey%20) /// - legend(label(5 "Retired, simulated"))) /// -(line valid_retired year, sort color(grey) /// - legend(label(6 "Retired, SILC"))), /// - title("Activity status") /// - subtitle("All ages") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. ", /// - size(vsmall)) - -* Save figure -graph export /// -"$dir_output_files/economic_activity/validation_${country}_activity_status_not_employed_ts_all_both.jpg", /// - replace width(2400) height(1350) quality(100) - -restore, preserve - -******************************************************************************** -* 1.3.3.2 : Not employed, All ages, By gender -******************************************************************************** - -keep if dgn == 1 - -* Plot figure -twoway /// -(rarea sim_student_high sim_student_low year, sort color(blue%20) /// - legend(label(1 "Students, simulated"))) /// -(line valid_student year, sort color(blue) /// - legend(label(2 "Students, SILC"))) /// -(rarea sim_inactive_high sim_inactive_low year, sort color(red%20) /// - legend(label(3 "Non-employed, simulated"))) /// -(line valid_inactive year, sort color(red) /// - legend(label(4 "Non-employed, SILC"))) /// -(rarea sim_retired_high sim_retired_low year, sort color(grey%20) /// - legend(label(5 "Retired, simulated"))) /// -(line valid_retired year, sort color(grey) /// - legend(label(6 "Retired, SILC"))), /// - title("Activity status") /// - subtitle("All ages, males") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. ", /// - size(vsmall)) - -* Save figure -graph export /// -"$dir_output_files/economic_activity/validation_${country}_activity_status_not_employed_ts_all_male.jpg", /// - replace width(2400) height(1350) quality(100) - - -restore, preserve - - -** Females - -keep if dgn == 0 - -* Plot figure -twoway /// -(rarea sim_student_high sim_student_low year, sort color(blue%20) /// - legend(label(1 "Students, simulated"))) /// -(line valid_student year, sort color(blue) /// - legend(label(2 "Students, SILC"))) /// -(rarea sim_inactive_high sim_inactive_low year, sort color(red%20) /// - legend(label(3 "Non-employed, simulated"))) /// -(line valid_inactive year, sort color(red) /// - legend(label(4 "Non-employed, SILC"))) /// -(rarea sim_retired_high sim_retired_low year, sort color(grey%20) /// - legend(label(5 "Retired, simulated"))) /// -(line valid_retired year, sort color(grey) /// - legend(label(6 "Retired, SILC"))), /// - title("Activity status") /// - subtitle("All ages, females") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Non-employed includes the unemployed and inactive (homemakers, incapacity, carers, discouraged workers etc.)" "minus students and retired. ", /// - size(vsmall)) - -* Save figure -graph export /// -"$dir_output_files/economic_activity/validation_${country}_activity_status_not_employed_ts_all_female.jpg", /// - replace width(2400) height(1350) quality(100) - -restore - - -******************************************************************************** -* 1.3.4 : Students, Adults (15+) -******************************************************************************** -******************************************************************************** -* 1.3.4.1 : Students, Adults (15+), By age group -******************************************************************************** - -* Prepare validation data -use year dwt dgn ageGroup valid_student valid_employed using /// - "$dir_data/${country}-eusilc_validation_full_sample_long.dta", clear - -gen student = valid_student - -drop if ageGroup == 0 | ageGroup == 8 - -collapse (mean) student [aweight=dwt], by(ageGroup year) -drop if missing(ageGroup) -reshape wide student, i(year) j(ageGroup) - -forvalues i = 1(1)7 { - rename student`i' student_`i'_valid -} - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year sim_sex ageGroup sim_student using /// - "$dir_data/simulated_data_full.dta", clear - -gen student = sim_student - -collapse (mean) student, by(ageGroup run year) -drop if missing(ageGroup) -reshape wide student , i(year run) j(ageGroup) - -forvalues i = 1(1)7{ - rename student`i' student_`i'_sim -} - -collapse (mean) student* /// - (sd) sd_student_1_sim = student_1_sim /// - sd_student_2_sim = student_2_sim /// - sd_student_3_sim = student_3_sim /// - sd_student_4_sim = student_4_sim /// - sd_student_5_sim = student_5_sim /// - sd_student_6_sim = student_6_sim /// - sd_student_7_sim = student_7_sim /// - , by(year) - - /* sd_student_8_sim=student_8_sim /// - sd_employed_f_8_sim=employed_f_8_sim /// - sd_employed_m_8_sim=employed_m_8_sim /// */ - -forvalues i = 1(1)7 { - gen student_`i'_sim_high = student_`i'_sim + 1.96*sd_student_`i'_sim - gen student_`i'_sim_low = student_`i'_sim - 1.96*sd_student_`i'_sim -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figures -foreach vble in "student" { - - twoway (rarea `vble'_1_sim_high `vble'_1_sim_low year, /// - sort color(green%20) /// - legend(label(1 "Simulated") position(6) rows(1))) /// - (line `vble'_1_valid year, sort color(green) /// - legend(label(2 "SILC"))), /// - title("Age 15-19") name(`vble'_1, replace) ylabel(0 [0.5] 1) /// - graphregion(color(white)) xtitle("") - - twoway (rarea `vble'_2_sim_high `vble'_2_sim_low year, /// - sort color(green%20) /// - legend(label(1 "Simulated") position(6) rows(1))) /// - (line `vble'_2_valid year, sort color(green) /// - legend(label(2 "SILC"))), /// - title("Age 20-24") name(`vble'_2, replace) ylabel(0 [0.5] 1) /// - graphregion(color(white)) xtitle("") - - twoway (rarea `vble'_3_sim_high `vble'_3_sim_low year, /// - sort color(green%20) /// - legend(label(1 "Simulated") position(6) rows(1))) /// - (line `vble'_3_valid year, sort color(green) /// - legend(label(2 "SILC"))), /// - title("Age 25-29") name(`vble'_3, replace) ylabel(0 [0.5] 1) /// - graphregion(color(white)) xtitle("") - - twoway (rarea `vble'_4_sim_high `vble'_4_sim_low year, /// - sort color(green%20) /// - legend(label(1 "Simulated") position(6) rows(1))) /// - (line `vble'_4_valid year, sort color(green) /// - legend(label(2 "SILC"))), /// - title("Age 30-34") name(`vble'_4, replace) ylabel(0 [0.5] 1) /// - graphregion(color(white)) xtitle("") - - twoway (rarea `vble'_5_sim_high `vble'_5_sim_low year, /// - sort color(green%20) /// - legend(label(1 "Simulated") position(6) rows(1))) /// - (line `vble'_5_valid year, sort color(green) /// - legend(label(2 "SILC"))), /// - title("Age 35-39") name(`vble'_5, replace) ylabel(0 [0.5] 1) /// - graphregion(color(white)) xtitle("") - - twoway (rarea `vble'_6_sim_high `vble'_6_sim_low year, /// - sort color(green%20) /// - legend(label(1 "Simulated") position(6) /// - rows(1)))(line `vble'_6_valid year, sort color(green) /// - legend(label(2 "SILC"))), /// - title("Age 40-59") name(`vble'_6, replace) ylabel(0 [0.5] 1) /// - graphregion(color(white)) xtitle("") - - twoway (rarea `vble'_7_sim_high `vble'_7_sim_low year, /// - sort color(green%20) /// - legend(label(1 "Simulated") position(6) rows(1))) /// - (line `vble'_7_valid year, sort color(green) /// - legend(label(2 "SILC"))), /// - title("Age 60-79") name(`vble'_7, replace) ylabel(0 [0.5] 1) /// - graphregion(color(white)) xtitle("") - -} - -* Save figures - -* Share students -grc1leg student_1 student_2 student_3 student_4 student_5 student_6 /// - student_7 , title("Share of students by age") legendfrom(student_1) /// - graphregion(color(white)) /// - note("Notes: ", size(vsmall)) - -graph export /// -"$dir_output_files/economic_activity/validation_${country}_students_ts_all_both.jpg", /// - replace width(2400) height(1350) quality(100) - -grc1leg student_1 student_2 student_3 , /// - title("Share of students by age") legendfrom(student_1) /// - graphregion(color(white)) /// - note("Notes: ", size(vsmall)) - -graph export /// - "$dir_output_files/economic_activity/validation_${country}_students_ts_15_29_both.jpg", /// - replace width(2400) height(1350) quality(100) - -graph drop _all diff --git a/validation/02_simulation_validation/do_files/06_02_plot_education_level.do b/validation/02_simulation_validation/do_files/06_02_plot_education_level.do deleted file mode 100644 index 9e87ac6..0000000 --- a/validation/02_simulation_validation/do_files/06_02_plot_education_level.do +++ /dev/null @@ -1,632 +0,0 @@ -/******************************************************************************* -* PROJECT: SimPaths EU -* SECTION: Validation -* OBJECT: Education -* AUTHORS: Patryk Bronka, Ashley Burdett -* LAST UPDATE: 11/2025 (AB) -* COUNTRY: Poland -******************************************************************************** -* NOTES: This do file plots simulated and observed education. -* -*******************************************************************************/ - -******************************************************************************** -* 1 : Mean values over time -******************************************************************************** -******************************************************************************** -* 1.1 : Mean values over time - Educational attainment -******************************************************************************** -******************************************************************************** -* 1.1.1 : Young people (18-30) -******************************************************************************** -******************************************************************************** -* 1.1.1.1 : Young people (18-30), All -******************************************************************************** - -* Prepare validation data -use year dwt valid_edu_high valid_edu_med valid_edu_low dag using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -drop if dag > 30 - -drop if valid_edu_high == 0 & valid_edu_med == 0 & valid_edu_low == 0 - // accounts for missing values - -collapse (mean) valid_edu_high valid_edu_med valid_edu_low [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulated data -use run year sim_edu_high sim_edu_med sim_edu_low dag using /// - "$dir_data/simulated_data.dta", clear - -drop if dag > 30 - -collapse (mean) sim_edu_high sim_edu_med sim_edu_low, by(run year) - -collapse (mean) sim_edu_high sim_edu_med sim_edu_low /// - (sd) sim_edu_high_sd = sim_edu_high /// - sim_edu_med_sd = sim_edu_med /// - sim_edu_low_sd = sim_edu_low /// - , by(year) - -foreach varname in sim_edu_high sim_edu_med sim_edu_low { - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway /// -(rarea sim_edu_high_high sim_edu_high_low year, sort color(green%20) /// - legend(label(1 "High education, simulated"))) /// -(line valid_edu_high year, sort color(green) /// - legend(label(2 "High education, observed"))) /// -(rarea sim_edu_med_high sim_edu_med_low year, sort color(blue%20) /// - legend(label(3 "Medium education, simulated"))) /// -(line valid_edu_med year, sort color(blue) /// - legend(label(4 "Medium education, observed"))) /// -(rarea sim_edu_low_high sim_edu_low_low year, sort color(red%20) /// - legend(label(5 "Low education, simulated"))) /// -(line valid_edu_low year, sort color(red) /// - legend(label(6 "Low education, observed"))), /// - title("Educational attainment") /// - subtitle("Ages ${min_age}-30") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Not required to have left initial education spell.", /// - size(vsmall)) - -graph export /// -"$dir_output_files/education/validation_${country}_education_ts_${min_age}_30_both.jpg", /// - replace width(2400) height(1350) quality(100) - - -******************************************************************************** -* 1.1.1.2 : Young people (18-30), Non-students -******************************************************************************** -* Prepare validation data -use year dwt valid_edu_high valid_edu_med valid_edu_low dag les_c3 using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -drop if dag > 30 - -drop if les_c3 == 2 - -drop if valid_edu_high == 0 & valid_edu_med == 0 & valid_edu_low == 0 - // accounts for missing values - -collapse (mean) valid_edu_high valid_edu_med valid_edu_low [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulated data -use run year sim_edu_high sim_edu_med sim_edu_low dag les_c4 using /// - "$dir_data/simulated_data.dta", clear - -drop if dag > 30 -drop if les_c4 == "Student" - -collapse (mean) sim_edu_high sim_edu_med sim_edu_low, by(run year) - -collapse (mean) sim_edu_high sim_edu_med sim_edu_low /// - (sd) sim_edu_high_sd = sim_edu_high /// - sim_edu_med_sd = sim_edu_med /// - sim_edu_low_sd = sim_edu_low /// - , by(year) - -foreach varname in sim_edu_high sim_edu_med sim_edu_low { - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway /// -(rarea sim_edu_high_high sim_edu_high_low year, sort color(green%20) /// - legend(label(1 "High education, simulated"))) /// -(line valid_edu_high year, sort color(green) /// - legend(label(2 "High education, observed"))) /// -(rarea sim_edu_med_high sim_edu_med_low year, sort color(blue%20) /// - legend(label(3 "Medium education, simulated"))) /// -(line valid_edu_med year, sort color(blue) /// - legend(label(4 "Medium education, observed"))) /// -(rarea sim_edu_low_high sim_edu_low_low year, sort color(red%20) /// - legend(label(5 "Low education, simulated"))) /// -(line valid_edu_low year, sort color(red) /// - legend(label(6 "Low education, observed"))), /// - title("Educational attainment, no students") /// - subtitle("Ages ${min_age}-30") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: ", /// - size(vsmall)) - -graph export /// -"$dir_output_files/education/validation_${country}_education_ts_${min_age}_30_both_not_student.jpg", /// - replace width(2400) height(1350) quality(100) - - -******************************************************************************** -* 1.1.1.2 : Young people (18-30), By gender -******************************************************************************** - -* Prepare validation data -use year dwt valid_edu_high valid_edu_med valid_edu_low dag dgn using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -drop if dag > 30 - -drop if valid_edu_high == 0 & valid_edu_med == 0 & valid_edu_low == 0 - // accounts for missing values - -collapse (mean) valid_edu_high valid_edu_med valid_edu_low [aw = dwt], /// - by(year dgn) - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulated data -use run year sim_edu_high sim_edu_med sim_edu_low dag dgn using /// - "$dir_data/simulated_data.dta", clear - -drop if dag > 30 - -gen dgn2 = 0 if dgn == "Female" -replace dgn2 = 1 if dgn == "Male" - -drop dgn -rename dgn2 dgn - -collapse (mean) sim_edu_high sim_edu_med sim_edu_low, by(run year dgn) - -collapse (mean) sim_edu_high sim_edu_med sim_edu_low /// - (sd) sim_edu_high_sd = sim_edu_high /// - (sd) sim_edu_med_sd = sim_edu_med /// - (sd) sim_edu_low_sd = sim_edu_low /// - , by(year dgn) - -foreach varname in sim_edu_high sim_edu_med sim_edu_low { - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd -} - -merge 1:1 year dgn using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure - female -twoway /// -(rarea sim_edu_high_high sim_edu_high_low year if dgn == 0, /// - sort color(green%20) legend(label(1 "High education, simulated"))) /// -(line valid_edu_high year if dgn == 0, sort color(green) /// - legend(label(2 "High education, observed"))) /// -(rarea sim_edu_med_high sim_edu_med_low year if dgn == 0, /// - sort color(blue%20) legend(label(3 "Medium education, simulated"))) /// -(line valid_edu_med year if dgn == 0, sort color(blue) /// - legend(label(4 "Medium education, observed"))) /// -(rarea sim_edu_low_high sim_edu_low_low year if dgn == 0, sort color(red%20) /// - legend(label(5 "Low education, simulated"))) /// -(line valid_edu_low year if dgn == 0, sort color(red) /// - legend(label(6 "Low education, observed"))), /// - title("Educational attainment") /// - subtitle("Ages ${min_age}-30, females") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Not required to have left initial education spell.", /// - size(vsmall)) - -graph export /// -"$dir_output_files/education/validation_${country}_education_ts_${min_age}_30_female.jpg", /// - replace width(2400) height(1350) quality(100) - -* Plot figure - male -twoway /// -(rarea sim_edu_high_high sim_edu_high_low year if dgn == 1, /// - sort color(green%20) legend(label(1 "High education, simulated"))) /// -(line valid_edu_high year if dgn == 1, sort color(green) /// - legend(label(2 "High education, observed"))) /// -(rarea sim_edu_med_high sim_edu_med_low year if dgn == 1, /// - sort color(blue%20) legend(label(3 "Medium education, simulated"))) /// -(line valid_edu_med year if dgn == 1, sort color(blue) /// - legend(label(4 "Medium education, observed"))) /// -(rarea sim_edu_low_high sim_edu_low_low year if dgn == 1, sort color(red%20) /// - legend(label(5 "Low education, simulated"))) /// -(line valid_edu_low year if dgn == 1, sort color(red) /// - legend(label(6 "Low education, observed"))), /// - title("Educational attainment") /// - subtitle("Ages ${min_age}-30, males") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Not required to have left initial education spell.", /// - size(vsmall)) - -graph export /// -"$dir_output_files/education/validation_${country}_education_ts_${min_age}_30_male.jpg", /// - replace width(2400) height(1350) quality(100) - -******************************************************************************** -* 1.1.2 : Working age (18-65) -******************************************************************************** -******************************************************************************** -* 1.1.2.1 : Working age (18-65), All -******************************************************************************** - -* Prepare validation data -use year dwt valid_edu_high valid_edu_med valid_edu_low using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -* Get rid of observations with missing values -drop if valid_edu_high == 0 & valid_edu_med == 0 & valid_edu_low == 0 - -collapse (mean) valid_edu_high valid_edu_med valid_edu_low [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulated data -use run year sim_edu_high sim_edu_med sim_edu_low using /// - "$dir_data/simulated_data.dta", clear - -collapse (mean) sim_edu_high sim_edu_med sim_edu_low, by(run year) -collapse (mean) sim_edu_high sim_edu_med sim_edu_low /// - (sd) sim_edu_high_sd = sim_edu_high /// - sim_edu_med_sd = sim_edu_med /// - sim_edu_low_sd = sim_edu_low /// - , by(year) - -foreach varname in sim_edu_high sim_edu_med sim_edu_low { - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway /// -(rarea sim_edu_high_high sim_edu_high_low year, sort color(green%20) /// - legend(label(1 "High education, simulated"))) /// -(line valid_edu_high year, sort color(green) /// - legend(label(2 "High education, observed"))) /// -(rarea sim_edu_med_high sim_edu_med_low year, sort color(blue%20) /// - legend(label(3 "Medium education, simulated"))) /// -(line valid_edu_med year, sort color(blue) /// - legend(label(4 "Medium education, observed"))) /// -(rarea sim_edu_low_high sim_edu_low_low year, sort color(red%20) /// - legend(label(5 "Low education, simulated"))) /// -(line valid_edu_low year, sort color(red) /// - legend(label(6 "Low education, observed"))), /// - title("Educational attainment") /// - subtitle("Ages ${min_age}-${max_age}") /// - xtitle("Year") /// - ytitle("Share") /// - graphregion(color(white)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - legend(size(small)) /// - note("Notes: Not required to have left initial education spell.", /// - size(vsmall)) - -graph export /// -"$dir_output_files/education/validation_${country}_education_ts_${min_age}_${max_age}_both.jpg", /// - replace width(2400) height(1350) quality(100) - - -******************************************************************************** -* 1.1.2.1 : Working age (18-65), By gender -******************************************************************************** - -* Prepare validation data -use year dwt valid_edu_high valid_edu_med valid_edu_low dgn using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -* Get rid of observations with missing values -drop if valid_edu_high == 0 & valid_edu_med == 0 & valid_edu_low == 0 - -collapse (mean) valid_edu_high valid_edu_med valid_edu_low [aw = dwt], /// - by(year dgn) - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulated data -use run year sim_edu_high sim_edu_med sim_edu_low dgn using /// - "$dir_data/simulated_data.dta", clear - -gen dgn2 = 0 if dgn == "Female" -replace dgn2 = 1 if dgn == "Male" - -drop dgn -rename dgn2 dgn - -collapse (mean) sim_edu_high sim_edu_med sim_edu_low, by(run year dgn) - -collapse (mean) sim_edu_high sim_edu_med sim_edu_low /// - (sd) sim_edu_high_sd = sim_edu_high /// - (sd) sim_edu_med_sd = sim_edu_med /// - (sd) sim_edu_low_sd = sim_edu_low /// - , by(year dgn ) - -foreach varname in sim_edu_high sim_edu_med sim_edu_low { - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd -} - -merge 1:1 year dgn using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure - female -twoway /// -(rarea sim_edu_high_high sim_edu_high_low year if dgn == 0, /// - sort color(green%20) legend(label(1 "High education, simulated"))) /// -(line valid_edu_high year if dgn == 0, sort color(green) /// - legend(label(2 "High education, observed"))) /// -(rarea sim_edu_med_high sim_edu_med_low year if dgn == 0, /// - sort color(blue%20) legend(label(3 "Medium education, simulated"))) /// -(line valid_edu_med year if dgn == 0, sort color(blue) /// - legend(label(4 "Medium education, observed"))) /// -(rarea sim_edu_low_high sim_edu_low_low year if dgn == 0, sort color(red%20) /// - legend(label(5 "Low education, simulated"))) /// -(line valid_edu_low year if dgn == 0, sort color(red) /// - legend(label(6 "Low education, observed"))), /// - title("Educational attainment") /// - subtitle("Ages ${min_age}-${max_age}, females") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Not required to have left initial education spell.", /// - size(vsmall)) - -graph export /// -"$dir_output_files/education/validation_${country}_education_ts_${min_age}_${max_age}_female.jpg", /// - replace width(2400) height(1350) quality(100) - -* Plot figure - male -twoway /// -(rarea sim_edu_high_high sim_edu_high_low year if dgn == 1, /// - sort color(green%20) legend(label(1 "High education, simulated"))) /// -(line valid_edu_high year if dgn == 1, sort color(green) /// - legend(label(2 "High education, observed"))) /// -(rarea sim_edu_med_high sim_edu_med_low year if dgn == 1, /// - sort color(blue%20) legend(label(3 "Medium education, simulated"))) /// -(line valid_edu_med year if dgn == 1, sort color(blue) /// - legend(label(4 "Medium education, observed"))) /// -(rarea sim_edu_low_high sim_edu_low_low year if dgn == 1, sort color(red%20) /// - legend(label(5 "Low education, simulated"))) /// -(line valid_edu_low year if dgn == 1, sort color(red) /// - legend(label(6 "Low education, observed"))), /// - title("Educational attainment") /// - subtitle("Ages ${min_age}-${max_age}, males") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Not required to have left initial education spell.", /// - size(vsmall)) - -graph export /// -"$dir_output_files/education/validation_${country}_education_ts_${min_age}_${max_age}_male.jpg", /// - replace width(2400) height(1350) quality(100) - - -******************************************************************************** -* 1.1.3 : Just above retirement age (66-70) -******************************************************************************** -******************************************************************************** -* 1.1.3.1 : Just above retirement age (66-70), All -******************************************************************************** - -* Prepare validation data -use year dwt valid_edu_high valid_edu_med valid_edu_low dag using /// - "$dir_data/${country}-eusilc_validation_full_sample_long.dta", clear - -drop if dag < 66 -drop if dag > 70 - -drop if valid_edu_high == 0 & valid_edu_med == 0 & valid_edu_low == 0 - // accounts for missing values - -collapse (mean) valid_edu_high valid_edu_med valid_edu_low [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulated data -use run year sim_edu_high sim_edu_med sim_edu_low dag using /// - "$dir_data/simulated_data_full.dta", clear - -drop if dag < 66 -drop if dag > 70 - -collapse (mean) sim_edu_high sim_edu_med sim_edu_low, by(run year) - -collapse (mean) sim_edu_high sim_edu_med sim_edu_low /// - (sd) sim_edu_high_sd = sim_edu_high /// - sim_edu_med_sd = sim_edu_med /// - sim_edu_low_sd = sim_edu_low /// - , by(year) - -foreach varname in sim_edu_high sim_edu_med sim_edu_low { - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway /// -(rarea sim_edu_high_high sim_edu_high_low year, sort color(green%20) /// - legend(label(1 "High education, simulated"))) /// -(line valid_edu_high year, sort color(green) /// - legend(label(2 "High education, observed"))) /// -(rarea sim_edu_med_high sim_edu_med_low year, sort color(blue%20) /// - legend(label(3 "Medium education, simulated"))) /// -(line valid_edu_med year, sort color(blue) /// - legend(label(4 "Medium education, observed"))) /// -(rarea sim_edu_low_high sim_edu_low_low year, sort color(red%20) /// - legend(label(5 "Low education, simulated"))) /// -(line valid_edu_low year, sort color(red) /// - legend(label(6 "Low education, observed"))), /// - title("Educational attainment") /// - subtitle("Ages 66-70") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note(Notes:, size(vsmall)) - -graph export /// -"$dir_output_files/education/validation_${country}_education_ts_66_70_both.jpg", /// - replace width(2400) height(1350) quality(100) - - -******************************************************************************** -* 1.1.4 : Around retirement age (60-70) -******************************************************************************** -******************************************************************************** -* 1.1.4.1 : Around retirement age (60-70), All -******************************************************************************** - -* Prepare validation data -use year dwt valid_edu_high valid_edu_med valid_edu_low dag using /// - "$dir_data/${country}-eusilc_validation_full_sample_long.dta", clear - -drop if dag < 60 -drop if dag > 70 - -drop if valid_edu_high == 0 & valid_edu_med == 0 & valid_edu_low == 0 - // accounts for missing values - -collapse (mean) valid_edu_high valid_edu_med valid_edu_low [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulated data -use run year sim_edu_high sim_edu_med sim_edu_low dag using /// - "$dir_data/simulated_data_full.dta", clear - -drop if dag < 60 -drop if dag > 70 - -collapse (mean) sim_edu_high sim_edu_med sim_edu_low, by(run year) -collapse (mean) sim_edu_high sim_edu_med sim_edu_low /// - (sd) sim_edu_high_sd = sim_edu_high /// - sim_edu_med_sd = sim_edu_med /// - sim_edu_low_sd = sim_edu_low /// - , by(year) - -foreach varname in sim_edu_high sim_edu_med sim_edu_low { - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway /// -(rarea sim_edu_high_high sim_edu_high_low year, sort color(green%20) /// - legend(label(1 "High education, simulated"))) /// -(line valid_edu_high year, sort color(green) /// - legend(label(2 "High education, observed"))) /// -(rarea sim_edu_med_high sim_edu_med_low year, sort color(blue%20) /// - legend(label(3 "Medium education, simulated"))) /// -(line valid_edu_med year, sort color(blue) /// - legend(label(4 "Medium education, observed"))) /// -(rarea sim_edu_low_high sim_edu_low_low year, sort color(red%20) /// - legend(label(5 "Low education, simulated"))) /// -(line valid_edu_low year, sort color(red) /// - legend(label(6 "Low education, observed"))), /// - title("Educational attainment") /// - subtitle("Ages 60-70") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note(Notes:, size(vsmall)) - -graph export /// -"$dir_output_files/education/validation_${country}_education_ts_60_70_both.jpg", /// - replace width(2400) height(1350) quality(100) - - -******************************************************************************** -* 1 : Mean values over time -******************************************************************************** -******************************************************************************** -* 1.1 : Mean values over time - Student age -******************************************************************************** - -use year dwt valid_edu_high valid_edu_med valid_edu_low dag les_c3 using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -keep if les_c3 == 2 - -drop if valid_edu_high == 0 & valid_edu_med == 0 & valid_edu_low == 0 - // accounts for missing values - -rename dag valid_dag - -collapse (mean) valid_dag [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulated data -use run year sim_edu_high sim_edu_med sim_edu_low dag les_c4 using /// - "$dir_data/simulated_data.dta", clear - -keep if les_c4 == "Student" - -collapse (mean) dag, by(run year) - -collapse (mean) dag /// - (sd) dag_sd = dag /// - , by(year) - -foreach varname in dag { - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway /// -(rarea dag_high dag_low year, sort color(green%20) /// - legend(label(1 "Simulated"))) /// -(line valid_dag year, sort color(green) /// - legend(label(2 "Observed"))), /// - title("Average age of students") subtitle("") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Sample limited to working age individuals, 16-65", /// - size(vsmall)) - - -graph export /// -"$dir_output_files/education/validation_${country}_education_ts_both_avg_age.jpg", /// - replace width(2400) height(1350) quality(100) - diff --git a/validation/02_simulation_validation/do_files/06_03_plot_gross_income.do b/validation/02_simulation_validation/do_files/06_03_plot_gross_income.do deleted file mode 100644 index f41ebec..0000000 --- a/validation/02_simulation_validation/do_files/06_03_plot_gross_income.do +++ /dev/null @@ -1,896 +0,0 @@ -/******************************************************************************* -* PROJECT: SimPaths EU -* SECTION: Validation -* OBJECT: Gross income -* AUTHORS: Patryk Bronka, Ashley Burdett -* LAST UPDATE: 11/2025 (AB) -* COUNTRY: Poland -******************************************************************************** -* NOTES: Data details: The underlying variable is composed of -* - wages -* - self-employment eanrings/losses -* - private pension income -* - regular inter-hh transfers -* - child earnings (<16)* -* - Income from rental property of land* -* - Interest, dividends, profit from capital investment* - -* Underlying variable measured at the hh level and assumed to -* be spread evenly among adult hh members. -*******************************************************************************/ - -******************************************************************************** -* 1 : Mean values over time -******************************************************************************** -******************************************************************************** -* 1.1 : Mean values over time - By benefit unit -******************************************************************************** - -* Prepare validation data -use year dwt valid_y_gross_bu_yr using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -* Trim outliers -if "$trim_outliers" == "true" { - - sum valid_y_gross_bu_yr, d - - replace valid_y_gross_bu_yr = . if /// - valid_y_gross_bu_yr < r(p1) | valid_y_gross_bu_yr > r(p99) - -} - -collapse (mean) valid_y_gross_bu_yr [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year sim_y_gross_yr_bu laboursupplyweekly using /// - "$dir_data/simulated_data.dta", clear - -* Trim outliers -if "$trim_outliers" == "true" { - - sum sim_y_gross_yr_bu, d - - replace sim_y_gross_yr_bu = . if sim_y_gross_yr_bu < r(p1) | /// - sim_y_gross_yr_bu > r(p99) - -} - -collapse (mean) sim_y_gross_yr_bu, by(run year) - -collapse (mean) sim_y_gross_yr_bu /// - (sd) sim_y_gross_yr_bu_sd = sim_y_gross_yr_bu /// - , by(year) - -foreach varname in sim_y_gross_yr_bu { - - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd - - } - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - - -* Plot figure -twoway /// - (rarea sim_y_gross_yr_bu_high sim_y_gross_yr_bu_low year, /// - sort color(green%20) legend(label(1 "Simulated"))) /// - (line valid_y_gross_bu_yr year, sort color(green) /// - legend(label(2 "SILC"))), /// - title("Gross Income") /// - subtitle("Ages ${min_age}-${max_age}") /// - xtitle("Year", size(small)) /// - ytitle("€ per year", size(small)) /// - ylabel(,labsize(small)) /// - xlabel(,labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) /// - note("Notes: Series represents average benefit unit gross income without benefits through time. Statistics computed by averaging benefit" "unit-level gross income over all persons ages ${min_age}-${max_age}. Amounts in 2015 prices. Top and bottom percentiles trimmed.", /// - size(vsmall)) - -graph export /// -"$dir_output_files/income/gross_income/validation_${country}_gross_income_ts_${min_age}_${max_age}_both.jpg", /// - replace width(2400) height(1350) quality(100) - - -******************************************************************************** -* 1.2 : Mean values over time - By individual -******************************************************************************** -******************************************************************************** -* 1.2.1 : Mean values over time - By individual, All -******************************************************************************** - -* Prepare validation data -use year dwt valid_y_gross_ind_yr using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -* Trim outliers -if "$trim_outliers" == "true" { - - sum valid_y_gross_ind_yr, d - - replace valid_y_gross_ind_yr = . if /// - valid_y_gross_ind_yr < r(p1) | /// - valid_y_gross_ind_yr > r(p99) - -} - -collapse (mean) valid_y_gross_ind_yr [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year sim_y_gross_yr using "$dir_data/simulated_data.dta", clear - -* Trim outliers -if "$trim_outliers" == "true" { - - sum sim_y_gross_yr, d - - replace sim_y_gross_yr = . if /// - sim_y_gross_yr < r(p1) | sim_y_gross_yr > r(p99) - - } - -collapse (mean) sim_y_gross_yr, by(run year) - -collapse (mean) sim_y_gross_yr /// - (sd) sim_y_gross_yr_sd = sim_y_gross_yr /// - , by(year) - -foreach varname in sim_y_gross_yr { - - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd - -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway /// -(rarea sim_y_gross_yr_high sim_y_gross_yr_low year, sort color(green%20) /// - legend(label(1 "Simulated"))) /// -(line valid_y_gross_ind_yr year, sort color(green) /// - legend(label(2 "SILC"))), /// - title("Individual Gross Income") /// - xtitle("Year", size(small)) /// - ytitle("€ per year", size(small)) /// - ylabel(,labsize(small)) /// - xlabel(,labsize(vsmall)) /// - legend(size(small)) /// - graphregion(color(white)) /// - note("Notes: Series represents average individual gross income without benefits through time. Statistics computed by averaging" "person-level gross income over all persons ages ${min_age}-${max_age}. Values in 2015 prices. Top and bottom percentiles trimmed.", /// - size(vsmall)) - -graph export /// -"$dir_output_files/income/gross_income/validation_${country}_ind_gross_income_ts_${min_age}_${max_age}_both.jpg", /// - replace width(2400) height(1350) quality(100) - - -******************************************************************************** -* 1.2.2 : Mean values over time - By individual, By gender -******************************************************************************** -* Prepare validation data -use year dwt valid_y_gross_ind_yr dgn using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -keep if dgn == 1 - -* Trim outliers -if "$trim_outliers" == "true" { - - sum valid_y_gross_ind_yr, d - - replace valid_y_gross_ind_yr = . if /// - valid_y_gross_ind_yr < r(p1) | /// - valid_y_gross_ind_yr > r(p99) - -} - -collapse (mean) valid_y_gross_ind_yr [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulated data -use run year sim_y_gross_yr dgn using "$dir_data/simulated_data.dta", clear - -keep if dgn == "Male" - -* Trim outliers -if "$trim_outliers" == "true" { - - sum sim_y_gross_yr, d - - replace sim_y_gross_yr = . if /// - sim_y_gross_yr < r(p1) | sim_y_gross_yr > r(p99) - -} - -collapse (mean) sim_y_gross_yr, by(run year) - -collapse (mean) sim_y_gross_yr /// - (sd) sim_y_gross_yr_sd = sim_y_gross_yr /// - , by(year) - -foreach varname in sim_y_gross_yr { - - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd - -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway /// -(rarea sim_y_gross_yr_high sim_y_gross_yr_low year, sort color(green%20) /// - legend(label(1 "Simulated"))) /// -(line valid_y_gross_ind_yr year, sort color(green) /// - legend(label(2 "SILC"))), /// - title("Individual Gross Income") /// - subtitle("Males") /// - xtitle("Year", size(small)) /// - ytitle("€ per year", size(small)) /// - ylabel(,labsize(small)) /// - xlabel(,labsize(vsmall)) /// - legend(size(small)) /// - graphregion(color(white)) /// - note("Notes: Series represents average individual gross income without benefits through time. Statistics computed by averaging" "person-level gross income over all persons ages ${min_age}-${max_age}. Values in 2015 prices. Top and bottom percentiles trimmed.", /// - size(vsmall)) - -graph export /// -"$dir_output_files/income/gross_income/validation_${country}_ind_gross_income_ts_${min_age}_${max_age}_male.jpg", /// - replace width(2400) height(1350) quality(100) - - -* Female -* Prepare validation data -use year dwt valid_y_gross_ind_yr dgn using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -keep if dgn == 0 - -* Trim outliers -if "$trim_outliers" == "true" { - - sum valid_y_gross_ind_yr, d - - replace valid_y_gross_ind_yr = . if /// - valid_y_gross_ind_yr < r(p1) | /// - valid_y_gross_ind_yr > r(p99) - -} - -collapse (mean) valid_y_gross_ind_yr [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulated data -use run year sim_y_gross_yr dgn using "$dir_data/simulated_data.dta", clear - -keep if dgn == "Female" - -* Trim outliers -if "$trim_outliers" == "true" { - - sum sim_y_gross_yr, d - - replace sim_y_gross_yr = . if /// - sim_y_gross_yr < r(p1) | sim_y_gross_yr > r(p99) - -} - -collapse (mean) sim_y_gross_yr, by(run year) - -collapse (mean) sim_y_gross_yr /// - (sd) sim_y_gross_yr_sd = sim_y_gross_yr /// - , by(year) - -foreach varname in sim_y_gross_yr { - - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd - -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway /// -(rarea sim_y_gross_yr_high sim_y_gross_yr_low year, sort color(green%20) /// - legend(label(1 "Simulated"))) /// -(line valid_y_gross_ind_yr year, sort color(green) /// - legend(label(2 "SILC"))), //// - title("Individual Gross Income") /// - subtitle("Females") /// - xtitle("Year", size(small)) /// - ytitle("€ per year", size(small)) /// - ylabel(,labsize(small)) /// - xlabel(,labsize(vsmall)) /// - legend(size(small)) /// - graphregion(color(white)) /// - note("Notes: Series represents average individual gross income without benefits through time. Statistics computed by averaging" "person-level gross income over all persons ages ${min_age}-${max_age}. Values in 2015 prices. Top and bottom percentiles trimmed.", /// - size(vsmall)) - -graph export /// -"$dir_output_files/income/gross_income/validation_${country}_ind_gross_income_ts_${min_age}_${max_age}_female.jpg", /// - replace width(2400) height(1350) quality(100) - - -/******************************************************************************* -* 2 : Histograms -*******************************************************************************/ - -/******************************************************************************* -* 2.1 : Histograms - Benefit unit gross income by year, and by category of -weekly labour supply -*******************************************************************************/ - -* Prepare validation data -use year dwt valid_y_gross_bu_yr laboursupplyweekly_hu using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -* Trim outliers -if "$trim_outliers" == "true" { - - sum valid_y_gross_bu_yr, d - - replace valid_y_gross_bu_yr = . if /// - valid_y_gross_bu_yr < r(p1) | valid_y_gross_bu_yr > r(p99) - -} - -* Prepare info needed for dynamic y axis labels -qui sum year -local min_year = 2011 -local max_year = r(max) - -forval year = `min_year'/`max_year' { - - twoway__histogram_gen valid_y_gross_bu_yr if year == `year', /// - width(750) den gen(d_valid v2) - - qui sum d_valid - gen max_d_valid_`year' = r(max) - - drop d_valid v2 - - foreach ls in $ls_cat { - - twoway__histogram_gen valid_y_gross_bu_yr if /// - year == `year' & labour == "`ls'", width(750) den gen(d_valid v2) - - qui sum d_valid - gen max_d_valid_`year'_`ls' = r(max) - - drop d_valid v2 - - } - -} - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulated data -use run year sim_y_gross_yr_bu laboursupplyweekly using /// - "$dir_data/simulated_data.dta", clear - -* Trim outliers -if "$trim_outliers" == "true" { - - sum sim_y_gross_yr_bu, d - - replace sim_y_gross_yr_bu = . if /// - sim_y_gross_yr_bu < r(p1) | sim_y_gross_yr_bu > r(p99) - -} - -keep if run == 1 - -append using "$dir_data/temp_valid_stats.dta" - -* Plot sub-figures -qui sum year -local min_year = 2011 -local max_year = r(max) - -//local year = 2011 - -forval year = `min_year'/`max_year' { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen sim_y_gross_yr if year == `year', width(750) /// - den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/3 - - - twoway (hist sim_y_gross_yr_bu if year == `year', width(750) /// - color(green%30) legend(label(1 "Simulated"))) /// - (hist valid_y_gross_bu_yr if year == `year', width(750) /// - color(red%30) legend(label(2 "SILC"))) , /// - title("ALL hours") /// - name(gross_inc_`year'_all, replace) /// - xtitle("€ per year", size(small)) /// - ytitle("", size(small)) /// - xlabel(,labsize(vsmall) angle(forty_five)) /// - ylabel(0(`steps')`max_y',labsize(vsmall)) /// - legend(size(small)) /// - graphregion(color(white)) - - drop d_sim v1 max_d_sim max_value - - - foreach ls in $ls_cat { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen sim_y_gross_yr if year == `year' & /// - laboursupplyweekly == "`ls'", width(750) den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year'_`ls' if /// - max_d_valid_`year'_`ls' > max_d_sim - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/3 - - * Plot by weekly hours work - twoway (hist sim_y_gross_yr_bu if year == `year' & /// - laboursupplyweekly == "`ls'", width(750) color(green%30) /// - legend(label(1 "Simulated"))) /// - (hist valid_y_gross_bu_yr if year == `year' & /// - laboursupplyweekly_hu == "`ls'", width(750) color(red%30) /// - legend(label(2 "SILC"))) , /// - title("`ls' hours") /// - name(gross_inc_`year'_`ls', replace) /// - xtitle("€ per year", size(small)) /// - ytitle("", size(small)) /// - xlabel(,labsize(vsmall) angle(forty_five)) /// - ylabel(0(`steps')`max_y',labsize(vsmall)) /// - legend(size(small)) /// - graphregion(color(white)) - - drop d_sim v1 max_d_sim max_value - - } -} - -* Combine plots by year -qui sum year -local min_year = 2011 -local max_year = r(max) - -forvalues year = `min_year'/`max_year' { - - grc1leg gross_inc_`year'_all gross_inc_`year'_ZERO /// - gross_inc_`year'_TWENTY /// - gross_inc_`year'_FORTY gross_inc_`year'_FIFTY, /// - title("Gross Income By Weekly Hours of Work") /// - subtitle("`year'") /// - legendfrom(gross_inc_`year'_all) rows(2) /// - graphregion(color(white)) /// - note("Notes: Series represents average benefit unit gross income without benefits through time. Statistics computed by averaging benefit" "unit-level gross income for all males aged ${min_age}-${max_age}. Values in € per year, 2015 prices. Weekly hours worked categories:" "ZERO = 0, TWENTY = [1,39], FORTY = 40, FIFTY = 41+. . Top and bottom percentiles trimmed.", /// - size(vsmall)) - - graph export "$dir_output_files/income/gross_income/validation_${country}_gross_income_dist_`year'.png", /// - replace width(2400) height(1350) - -} - -graph drop _all - - -/******************************************************************************* -* 2.2 : Histograms - Individual gross income by year, and by category of weekly -labour supply -*******************************************************************************/ -/******************************************************************************* -* 2.2.1 : Histograms - Individual gross income by year, and by category of weekly -labour supply, By gender -*******************************************************************************/ - -* Males - -* Prepare validation data -use year dwt valid_y_gross_ind_yr laboursupplyweekly_hu dgn using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -keep if dgn == 1 -drop dgn - -* Trim outliers -if "$trim_outliers" == "true" { - - sum valid_y_gross_ind_yr, d - - replace valid_y_gross_ind_yr = . if /// - valid_y_gross_ind_yr < r(p1) | /// - valid_y_gross_ind_yr > r(p99) - -} - - -* Prepare info needed for dynamic y axis labels -qui sum year -local min_year = 2011 -local max_year = r(max) - -forval year = `min_year'/`max_year' { - - twoway__histogram_gen valid_y_gross_ind_yr if year == `year' , /// - width(750) den gen(d_valid v2) - - qui sum d_valid - gen max_d_valid_`year' = r(max) - - drop d_valid v2 - - foreach ls in $ls_cat { - - twoway__histogram_gen valid_y_gross_ind_yr if /// - year == `year' & labour == "`ls'", width(750) den gen(d_valid v2) - - qui sum d_valid - gen max_d_valid_`year'_`ls' = r(max) - - drop d_valid v2 - - } -} - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year sim_y_gross_yr laboursupplyweekly dgn using /// - "$dir_data/simulated_data.dta", clear - -keep if dgn == "Male" -drop dgn - -* Trim outliers -if "$trim_outliers" == "true" { - - sum sim_y_gross_yr, d - - replace sim_y_gross_yr = . if sim_y_gross_yr < r(p1) | /// - sim_y_gross_yr > r(p99) - -} - -keep if run == 1 - -append using "$dir_data/temp_valid_stats.dta" - -* Plot sub-figures -qui sum year -local min_year = 2011 -local max_year = r(max) - -forval year = `min_year'/`max_year' { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen sim_y_gross_yr if year == `year', width(750) /// - den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/3 - - * Plot all hours - twoway (hist sim_y_gross_yr if year == `year', width(750) /// - color(green%30) legend(label(1 "Simulated"))) /// - (hist valid_y_gross_ind_yr if year == `year', width(750) /// - color(red%30) legend(label(2 "SILC"))) , /// - title("ALL hours") /// - name(ind_gross_inc_`year'_all, replace) /// - xtitle("€ per year", size(small)) /// - ytitle("", size(small)) /// - xlabel(,labsize(vsmall) angle(forty_five)) /// - ylabel(0(`steps')`max_y', labsize(vsmall)) /// - legend(size(small)) /// - graphregion(color(white)) - - drop d_sim v1 max_d_sim max_value - - foreach ls in $ls_cat { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen sim_y_gross_yr if year == `year' & /// - laboursupplyweekly == "`ls'", width(750) den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year'_`ls' if /// - max_d_valid_`year'_`ls' > max_d_sim - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/3 - - * Plot by weekly hours work - twoway (hist sim_y_gross_yr if year == `year' & /// - laboursupplyweekly == "`ls'", width(750) color(green%30) /// - legend(label(1 "Simulated"))) /// - (hist valid_y_gross_ind_yr if year == `year' & /// - laboursupplyweekly_hu == "`ls'", width(750) color(red%30) /// - legend(label(2 "SILC"))) , /// - title("`ls' hours") /// - name(ind_gross_inc_`year'_`ls', replace) /// - xtitle("€ per year", size(small)) /// - ytitle("", size(small)) /// - xlabel(,labsize(vsmall) angle(forty_five)) /// - ylabel(0(`steps')`max_y', labsize(vsmall)) /// - legend(size(small)) /// - graphregion(color(white)) - - drop d_sim v1 max_d_sim max_value - - } -} - -* Combine plots by year -qui sum year -local min_year = 2011 -local max_year = r(max) - -forvalues year = `min_year'/`max_year' { - - grc1leg ind_gross_inc_`year'_all ind_gross_inc_`year'_ZERO /// - ind_gross_inc_`year'_TWENTY /// - ind_gross_inc_`year'_FORTY ind_gross_inc_`year'_FIFTY, /// - title("Individual Gross Income By Weekly Hours of Work") /// - subtitle("`year', Males") /// - legendfrom(ind_gross_inc_`year'_all) rows(2) /// - graphregion(color(white)) /// - note("Notes: Series represents average individual gross income without benefits through time. Statistics computed by averaging individual" "level gross income for all males aged ${min_age}-${max_age}. Values in € per year, 2015 prices. Sample trimmed. Weekly hours worked categories:" "ZERO = 0, TWENTY = [1,39], FORTY = 40, FIFTY = 41+. Top and bottom percentiles trimmed.", /// - size(vsmall)) - - graph export "$dir_output_files/income/gross_income/validation_${country}_ind_gross_income_dist_`year'_male.png", /// - replace width(2400) height(1350) - -} - -graph drop _all - - -* Females - -* Prepare validation data -use year dwt valid_y_gross_ind_yr laboursupplyweekly_hu dgn using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -keep if dgn == 0 -drop dgn - -* Trim outliers -if "$trim_outliers" == "true" { - - sum valid_y_gross_ind_yr, d - - replace valid_y_gross_ind_yr = . if /// - valid_y_gross_ind_yr < r(p1) | /// - valid_y_gross_ind_yr > r(p99) - -} - - -* Prepare info needed for dynamic y axis labels -qui sum year -local min_year = 2011 -local max_year = r(max) - -forval year = `min_year'/`max_year' { - - twoway__histogram_gen valid_y_gross_ind_yr if year == `year' , /// - width(750) den gen(d_valid v2) - - qui sum d_valid - gen max_d_valid_`year' = r(max) - - drop d_valid v2 - - foreach ls in $ls_cat { - - twoway__histogram_gen valid_y_gross_ind_yr if /// - year == `year' & labour == "`ls'", width(750) den gen(d_valid v2) - - qui sum d_valid - gen max_d_valid_`year'_`ls' = r(max) - - drop d_valid v2 - - } -} - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year sim_y_gross_yr laboursupplyweekly dgn using /// - "$dir_data/simulated_data.dta", clear - -keep if dgn == "Female" -drop dgn - -* Trim outliers -if "$trim_outliers" == "true" { - - sum sim_y_gross_yr, d - - replace sim_y_gross_yr = . if sim_y_gross_yr < r(p1) | /// - sim_y_gross_yr > r(p99) - -} - -keep if run == 1 - - -append using "$dir_data/temp_valid_stats.dta" - -* Plot sub-figures -qui sum year -local min_year = 2011 -local max_year = r(max) - -forval year = `min_year'/`max_year' { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen sim_y_gross_yr if year == `year', width(750) /// - den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/3 - - * Plot all hours - twoway (hist sim_y_gross_yr if year == `year', width(750) /// - color(green%30) legend(label(1 "Simulated"))) /// - (hist valid_y_gross_ind_yr if year == `year', width(750) /// - color(red%30) legend(label(2 "SILC"))) , /// - title("ALL hours") /// - name(ind_gross_inc_`year'_all, replace) /// - xtitle("€ per year", size(small)) /// - ytitle("", size(small)) /// - xlabel(,labsize(vsmall) angle(forty_five)) /// - ylabel(0(`steps')`max_y', labsize(vsmall)) /// - legend(size(small)) /// - graphregion(color(white)) - - drop d_sim v1 max_d_sim max_value - - foreach ls in $ls_cat { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen sim_y_gross_yr if year == `year' & /// - laboursupplyweekly == "`ls'", width(750) den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year'_`ls' if /// - max_d_valid_`year'_`ls' > max_d_sim - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/3 - - * Plot by weekly hours work - twoway (hist sim_y_gross_yr if year == `year' & /// - laboursupplyweekly == "`ls'", width(750) color(green%30) /// - legend(label(1 "Simulated"))) /// - (hist valid_y_gross_ind_yr if year == `year' & /// - laboursupplyweekly_hu == "`ls'", width(750) color(red%30) /// - legend(label(2 "SILC"))) , /// - title("`ls' hours") /// - name(ind_gross_inc_`year'_`ls', replace) /// - xtitle("€ per year", size(small)) /// - ytitle("", size(small)) /// - xlabel(,labsize(vsmall) angle(forty_five)) /// - ylabel(0(`steps')`max_y', labsize(vsmall)) /// - legend(size(small)) /// - graphregion(color(white)) - - drop d_sim v1 max_d_sim max_value - - } -} - -* Combine plots by year -qui sum year -local min_year = 2011 -local max_year = r(max) - -forvalues year = `min_year'/`max_year' { - - grc1leg ind_gross_inc_`year'_all ind_gross_inc_`year'_ZERO /// - ind_gross_inc_`year'_TWENTY ind_gross_inc_`year'_FORTY /// - ind_gross_inc_`year'_FIFTY, /// - title("Individual Gross Income by Weekly Hours of Work") /// - subtitle("`year', Females") /// - legendfrom(ind_gross_inc_`year'_all) rows(2) /// - graphregion(color(white)) /// - note("Notes: Series represents average individual gross income without benefits through time. Statistics computed by averaging individual" "level gross income for all females aged ${min_age}-${max_age}. Values in € per year, 2015 prices. Sample trimmed. Weekly hours worked categories:" "ZERO = 0, TWENTY = [1,39], FORTY = 40, FIFTY = 41+. Top and bottom percentiles trimmed.", /// - size(vsmall)) - - graph export "$dir_output_files/income/gross_income/validation_${country}_ind_gross_income_dist_`year'_female.png", /// - replace width(2400) height(1350) - -} - -graph drop _all - - - -/* - -* Investigation into who the people are with high working hours and low gross -* income -/* -Note plot ben unit observations using individual level data. - -Components of gross income. - -Gross personal income components -• PY010G - Gross employee cash or near cash employee income -• PY050G - Gross cash benefits or losses from self-employment - (including royalties) -• PY080G - Pensions received from individual private plans (other than those - covered under ESSPROS) - -Plus gross income components at household level -• HY040G - Income from rental of a property or land -• HY080G - Regular inter-household cash transfers received -• HY090G - Interests, dividends, profit from capital investments in - unincorporated business -• HY110G - Income received by people aged under 16 -*/ - -* Explore 2018 FIFTY hours -use "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -keep if year == 2018 & laboursupplyweekly_hu == "FIFTY" - -order idperson idbenefit lhw valid_y_gross_nsbc_person_yr /// - y_gross_labour_person valid_wage_hour /// - py010g* py050g py080g /// - hy080g_pc hy110g_pc hy040g_pc hy090g_pc missing* - -fre missing_py010g missing_py050g missing_py080g missing_hy080g /// - missing_hy110g missing_hy040g missing_hy090g missing_lhw if /// - valid_y_gross_nsbc_person_yr == 0 // none missing seems to be in the data - - diff --git a/validation/02_simulation_validation/do_files/06_04_plot_gross_labour_income.do b/validation/02_simulation_validation/do_files/06_04_plot_gross_labour_income.do deleted file mode 100644 index 90611d7..0000000 --- a/validation/02_simulation_validation/do_files/06_04_plot_gross_labour_income.do +++ /dev/null @@ -1,756 +0,0 @@ -******************************************************************************** -* PROJECT: SimPaths EU -* SECTION: Validation -* OBJECT: Gross labour income -* AUTHORS: Patryk Bronka, Ashley Burdett -* LAST UPDATE: 11/2025 (AB) -* COUNTRY: Poland -******************************************************************************** -* NOTES: Plotted using individual level data -* => multiple observations per ben unit. -******************************************************************************** - -******************************************************************************** -* 1 : Mean values over time -******************************************************************************** -******************************************************************************** -* 1.1 : Mean values over time - By individual, benefit unit amount -******************************************************************************** - -* Prepare validation data -use year dwt les_c4 valid_y_gross_labour_bu_yr using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -* Keep only employed individuals -keep if les_c4 == 1 - - -* Trim outliers -if "$trim_outliers" == "true" { - - sum valid_y_gross_labour_bu_yr, d - - replace valid_y_gross_labour_bu_yr = . if /// - valid_y_gross_labour_bu_yr < r(p1) | valid_y_gross_labour_bu_yr > r(p99) - -} - -collapse (mean) valid_y_gross_labour_bu_yr [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year les_c4 sim_yplgrs_dv_lvl_bu using /// - "$dir_data/simulated_data.dta", clear - -* Keep only employed individuals -keep if les_c4 == "EmployedOrSelfEmployed" - - -* Trim outliers -if "$trim_outliers" == "true" { - - sum sim_yplgrs_dv_lvl_bu, d - - replace sim_yplgrs_dv_lvl_bu = . if /// - sim_yplgrs_dv_lvl_bu < r(p1) | sim_yplgrs_dv_lvl_bu > r(p99) - -} - -collapse (mean) sim_yplgrs_dv_lvl_bu, by(run year) - -collapse (mean) sim_yplgrs_dv_lvl_bu /// - (sd) sim_yplgrs_dv_lvl_bu_sd = sim_yplgrs_dv_lvl_bu /// - , by(year) - -foreach varname in sim_yplgrs_dv_lvl_bu { - - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd - -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway /// -(rarea sim_yplgrs_dv_lvl_bu_high sim_yplgrs_dv_lvl_bu_low year, /// - sort color(green%20) legend(label(1 "Simulated"))) /// -(line valid_y_gross_labour_bu_yr year, sort color(green) /// - legend(label(2 "SILC"))), /// - title("Gross Labour Income") /// - xtitle("Year", size(small)) /// - ytitle("€ per year", size(small)) /// - ylabel(,labsize(small)) /// - xlabel(,labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) /// - note("Note: Amount at the benefit unit level, individual data plotted. Statistics calculated on the sample of employed individuals" "ages ${min_age}-${max_age}. 2019 X-sectional data used in underlying estimation. Amounts in 2015 prices. Top and bottom percentiles trimmed.", /// - size(vsmall)) - -* Save figure -graph export /// -"$dir_output_files/income/gross_labour_income/validation_${country}_gross_labour_income_ts_${min_age}_${max_age}.jpg", /// - replace width(2400) height(1350) quality(100) - -/* -* Males - -* Prepare validation data -use year dwt les_c4 valid_y_gross_labour_bu_yr dgn using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -keep if dgn == 1 - -* Keep only employed individuals -keep if les_c4 == 1 - - -* Trim outliers -if "$trim_outliers" == "true" { - sum valid_y_gross_labour_bu_yr, d - replace valid_y_gross_labour_bu_yr = . if /// - valid_y_gross_labour_bu_yr < r(p1) | valid_y_gross_labour_bu_yr > r(p99) -} - -collapse (mean) valid_y_gross_labour_bu_yr [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year les_c4 sim_yplgrs_dv_lvl_bu dgn using /// - "$dir_data/simulated_data.dta", clear - -keep if dgn == "Male" - -* Keep only employed individuals -keep if les_c4 == "EmployedOrSelfEmployed" - - -* Trim outliers -if "$trim_outliers" == "true" { - sum sim_yplgrs_dv_lvl_bu, d - replace sim_yplgrs_dv_lvl_bu = . if /// - sim_yplgrs_dv_lvl_bu < r(p1) | sim_yplgrs_dv_lvl_bu > r(p99) -} - -collapse (mean) sim_yplgrs_dv_lvl_bu, by(run year) -collapse (mean) sim_yplgrs_dv_lvl_bu /// - (sd) sim_yplgrs_dv_lvl_bu_sd = sim_yplgrs_dv_lvl_bu /// - , by(year) - -foreach varname in sim_yplgrs_dv_lvl_bu { - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway /// -(rarea sim_yplgrs_dv_lvl_bu_high sim_yplgrs_dv_lvl_bu_low year, /// - sort color(green%20) legend(label(1 "Simulated"))) /// -(line valid_y_gross_labour_bu_yr year, sort color(green) /// - legend(label(2 "SILC"))), /// - title("Gross labour income") subtitle("Males") /// - xtitle("Year") /// - ytitle("€ per year") /// - ylabel(,labsize(small)) xlabel(,labsize(small)) /// - graphregion(color(white)) /// - note("Note: Statistics calculated on the sample of employed males ages 18-65. Yearly amounts. 2019 X-sectional data used in underlying" "estimation. Amounts in 2015 prices.", size(vsmall)) - -* Save figure -graph export /// -"$dir_output_files/income/gross_labour_income/validation_${country}_gross_labour_income_ts_${min_age}_${max_age}_male.jpg", /// - replace width(2400) height(1350) quality(100) - - -* Females - -* Prepare validation data -use year dwt les_c4 valid_y_gross_labour_bu_yr dgn using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -keep if dgn == 0 - -* Keep only employed individuals -keep if les_c4 == 1 - -* Trim outliers -if "$trim_outliers" == "true" { - sum valid_y_gross_labour_bu_yr, d - replace valid_y_gross_labour_bu_yr = . if /// - valid_y_gross_labour_bu_yr < r(p1) | valid_y_gross_labour_bu_yr > r(p99) -} - -collapse (mean) valid_y_gross_labour_bu_yr [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year les_c4 sim_yplgrs_dv_lvl_bu dgn using /// - "$dir_data/simulated_data.dta", clear - -keep if dgn == "Female" - -* Keep only employed individuals -keep if les_c4 == "EmployedOrSelfEmployed" - - -* Trim outliers -if "$trim_outliers" == "true" { - sum sim_yplgrs_dv_lvl_bu, d - replace sim_yplgrs_dv_lvl_bu = . if /// - sim_yplgrs_dv_lvl_bu < r(p1) | sim_yplgrs_dv_lvl_bu > r(p99) -} - -collapse (mean) sim_yplgrs_dv_lvl_bu, by(run year) -collapse (mean) sim_yplgrs_dv_lvl_bu /// - (sd) sim_yplgrs_dv_lvl_bu_sd = sim_yplgrs_dv_lvl_bu /// - , by(year) - -foreach varname in sim_yplgrs_dv_lvl_bu { - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway /// -(rarea sim_yplgrs_dv_lvl_bu_high sim_yplgrs_dv_lvl_bu_low year, /// - sort color(green%20) legend(label(1 "Simulated"))) /// -(line valid_y_gross_labour_bu_yr year, sort color(green) /// - legend(label(2 "SILC"))), /// - title("Gross labour income") subtitle("Females") /// - xtitle("Year") /// - ytitle("€ per year") /// - ylabel(,labsize(small)) xlabel(,labsize(small)) /// - graphregion(color(white)) /// - note("Note: Statistics calculated on the sample of employed females ages 18-65. Yearly amounts. 2019 X-sectional data used in underlying" "estimation. Amounts in 2015 prices.", /// - size(vsmall)) - -* Save figure -graph export /// -"$dir_output_files/income/gross_labour_income/validation_${country}_gross_labour_income_ts_${min_age}_${max_age}_female.jpg", /// - replace width(2400) height(1350) quality(100) -*/ - - -******************************************************************************** -* 2 : Histograms by year, and by category of weekly labour supply -******************************************************************************** - -* All - -* Prepare validation data -use year dwt les_c4 valid_y_gross_labour_bu_yr /// - laboursupplyweekly_hu using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -* Keep only employed individuals -keep if les_c4 == 1 -drop les_c4 - -* Trim outliers -if "$trim_outliers" == "true" { - - sum valid_y_gross_labour_bu_yr, d - - replace valid_y_gross_labour_bu_yr = . if /// - valid_y_gross_labour_bu_yr < r(p1) | valid_y_gross_labour_bu_yr > r(p99) - -} - -* Prepare info needed for dynamic y axis labels -qui sum year -local min_year = 2011 -local max_year = r(max) - -forval year = `min_year'/`max_year' { - - twoway__histogram_gen valid_y_gross_labour_bu_yr if year == `year', /// - width(750) den gen(d_valid v2) - - qui sum d_valid - gen max_d_valid_`year' = r(max) - - drop d_valid v2 - - foreach ls in $ls_cat { - - twoway__histogram_gen valid_y_gross_labour_bu_yr if /// - year == `year' & labour == "`ls'", width(750) den gen(d_valid v2) - - qui sum d_valid - gen max_d_valid_`year'_`ls' = r(max) - - drop d_valid v2 - - } - -} - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year les_c4 sim_yplgrs_dv_lvl_bu laboursupplyweekly using /// - "$dir_data/simulated_data.dta", clear - -* Keep only employed individuals -keep if les_c4 == "EmployedOrSelfEmployed" -drop les_c4 - - -* Trim outliers -if "$trim_outliers" == "true" { - - sum sim_yplgrs_dv_lvl_bu, d - - replace sim_yplgrs_dv_lvl_bu = . if /// - sim_yplgrs_dv_lvl_bu < r(p1) | sim_yplgrs_dv_lvl_bu > r(p99) - -} - -keep if run == 1 - -append using "$dir_data/temp_valid_stats.dta" - -* Plot sub-figures -qui sum year -local min_year = 2011 // Calculate the minimum value of the 'year' variable -local max_year = r(max) // Calculate the maximum value of the 'year' variable - -forval year = `min_year'/`max_year' { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen sim_yplgrs_dv_lvl_bu if year == `year', width(750) /// - den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/2 - - - * Plot all hours - twoway (hist sim_yplgrs_dv_lvl_bu if year == `year' , width(750) /// - color(green%30) legend(label(1 "Simulated"))) /// - (hist valid_y_gross_labour_bu_yr if year == `year' , width(750) /// - color(red%30) legend(label(2 "SILC"))) , /// - subtitle("ALL hours") name(gross_labour_inc_`year'_all, replace) /// - xlabel(,labsize(vsmall) angle(forty_five)) /// - ylabel(0(`steps')`max_y',labsize(vsmall)) /// - ytitle(, size(small)) /// - legend(size(small)) /// - graphregion(color(white)) - - - drop d_sim v1 max_d_sim max_value - - * Plot by weekly hours work - foreach ls in $ls_cat_labour { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen sim_yplgrs_dv_lvl_bu if year == `year' & /// - laboursupplyweekly == "`ls'", width(750) den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year'_`ls' if /// - max_d_valid_`year'_`ls' > max_d_sim - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/2 - - * Plot by weekly hours work - twoway (hist sim_yplgrs_dv_lvl_bu if year == `year' & /// - laboursupplyweekly == "`ls'", width(750) color(green%30) /// - legend(label(1 "Simulated"))) /// - (hist valid_y_gross_labour_bu_yr if year == `year' & /// - laboursupplyweekly_hu == "`ls'", width(750) color(red%30) /// - legend(label(2 "SILC"))) , /// - subtitle("`ls' hours") /// - name(gross_labour_inc_`year'_`ls', replace) /// - xlabel(,labsize(vsmall) angle(forty_five)) /// - ylabel(0(`steps')`max_y',labsize(vsmall)) /// - ytitle(, size(small)) /// - legend(size(small)) /// - graphregion(color(white)) - - drop d_sim v1 max_d_sim max_value - - } -} - -* Combine plots by year -forvalues year = `min_year'/`max_year' { - - grc1leg gross_labour_inc_`year'_all /// - gross_labour_inc_`year'_TWENTY gross_labour_inc_`year'_FORTY /// - gross_labour_inc_`year'_FIFTY, /// - title("Gross Labour Income") /// - subtitle("`year'") /// - legendfrom(gross_labour_inc_`year'_all) rows(2) /// - graphregion(color(white)) /// - note("Notes: Amount at the benefit unit level, individual data plotted. Individuals aged ${min_age}-${max_age}. Values in € per year, 2015 prices. Weekly hours worked categories:" "ZERO = 0, TWENTY = [1,39], FORTY = 40, FIFTY = 41+. Top and bottom percentiles trimmed.", /// - size(vsmall)) - - graph export "$dir_output_files/income/gross_labour_income/validation_${country}_gross_labour_income_dist_`year'_both.png", /// - replace width(2400) height(1350) - -} - -graph drop _all - -/* -* Males - -* Prepare validation data -use year dwt les_c4 valid_y_gross_labour_bu_yr /// - laboursupplyweekly_hu dgn using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -keep if dgn == 1 -drop dgn - -* Keep only employed individuals -keep if les_c4 == 1 -drop les_c4 - -* Trim outliers -if "$trim_outliers" == "true" { - sum valid_y_gross_labour_bu_yr, d - replace valid_y_gross_labour_bu_yr = . if /// - valid_y_gross_labour_bu_yr < r(p1) | valid_y_gross_labour_bu_yr > r(p99) -} - -* Prepare info needed for dynamic y axis labels -qui sum year -local min_year = 2011 -local max_year = r(max) - -forval year = `min_year'/`max_year' { - - twoway__histogram_gen valid_y_gross_labour_bu_yr if year == `year', /// - width(750) den gen(d_valid v2) - - qui sum d_valid - gen max_d_valid_`year' = r(max) - - drop d_valid v2 - - foreach ls in $ls_cat { - - twoway__histogram_gen valid_y_gross_labour_bu_yr if /// - year == `year' & labour == "`ls'", width(750) den gen(d_valid v2) - - qui sum d_valid - gen max_d_valid_`year'_`ls' = r(max) - - drop d_valid v2 - - } - -} - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year les_c4 sim_yplgrs_dv_lvl_bu laboursupplyweekly dgn using /// - "$dir_data/simulated_data.dta", clear - -keep if dgn == "Male" -drop dgn - -* Keep only employed individuals -keep if les_c4 == "EmployedOrSelfEmployed" -drop les_c4 - - -* Trim outliers -if "$trim_outliers" == "true" { - sum sim_yplgrs_dv_lvl_bu, d - replace sim_yplgrs_dv_lvl_bu = . if /// - sim_yplgrs_dv_lvl_bu < r(p1) | sim_yplgrs_dv_lvl_bu > r(p99) -} - -keep if run == 1 - -append using "$dir_data/temp_valid_stats.dta" - - -* Plot sub-figures -qui sum year -local min_year = 2011 // Calculate the minimum value of the 'year' variable -local max_year = r(max) // Calculate the maximum value of the 'year' variable - -forval year = `min_year'/`max_year' { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen sim_yplgrs_dv_lvl_bu if year == `year', width(750) /// - den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/2 - - - * Plot all hours - twoway (hist sim_yplgrs_dv_lvl_bu if year == `year' , width(750) /// - color(green%30) legend(label(1 "Simulated"))) /// - (hist valid_y_gross_labour_bu_yr if year == `year' , width(750) /// - color(red%30) legend(label(2 "SILC"))) , /// - subtitle("ALL hours") name(gross_labour_inc_`year'_all, replace) /// - xlabel(,labsize(vsmall) angle(forty_five)) /// - ylabel(0(`steps')`max_y',labsize(vsmall)) /// - graphregion(color(white)) - - - drop d_sim v1 max_d_sim max_value - - * Plot by weekly hours work - foreach ls in $ls_cat_labour { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen sim_yplgrs_dv_lvl_bu if year == `year' & /// - laboursupplyweekly == "`ls'", width(750) den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year'_`ls' if /// - max_d_valid_`year'_`ls' > max_d_sim - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/2 - - * Plot by weekly hours work - twoway (hist sim_yplgrs_dv_lvl_bu if year == `year' & /// - laboursupplyweekly == "`ls'", width(750) color(green%30) /// - legend(label(1 "Simulated"))) /// - (hist valid_y_gross_labour_bu_yr if year == `year' & /// - laboursupplyweekly_hu == "`ls'", width(750) color(red%30) /// - legend(label(2 "SILC"))) , /// - subtitle("`ls' hours") name(gross_labour_inc_`year'_`ls', replace) /// - xlabel(,labsize(vsmall) angle(forty_five)) /// - ylabel(0(`steps')`max_y',labsize(vsmall)) /// - graphregion(color(white)) - - drop d_sim v1 max_d_sim max_value - - } -} - -* Combine plots by year -forvalues year = `min_year'/`max_year' { - - grc1leg gross_labour_inc_`year'_all /// - gross_labour_inc_`year'_TWENTY gross_labour_inc_`year'_FORTY /// - gross_labour_inc_`year'_FIFTY, /// - title("Gross labour income") /// - subtitle("`year', Males") /// - legendfrom(gross_labour_inc_`year'_all) rows(2) /// - graphregion(color(white)) /// - note("Notes: Series represents average benefit unit gross labour income through time. Statistics computed by averaging benefit unit" "level gross income for all males ages 18-65. Values in € per year, 2015 prices. Weekly hours worked categories:" "ZERO = 0, TWENTY = [1,39], FORTY = 40, FIFTY = 41+", /// - size(vsmall)) - - graph export "$dir_output_files/income/gross_labour_income/validation_${country}_gross_labour_income_dist_`year'_male.png", /// - replace width(2400) height(1350) - -} - -graph drop _all - - -* Females - -* Prepare validation data -use year dwt les_c4 valid_y_gross_labour_bu_yr /// - laboursupplyweekly_hu dgn using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -keep if dgn == 0 -drop dgn - -* Keep only employed individuals -keep if les_c4 == 1 -drop les_c4 - -* Trim outliers -if "$trim_outliers" == "true" { - sum valid_y_gross_labour_bu_yr, d - replace valid_y_gross_labour_bu_yr = . if /// - valid_y_gross_labour_bu_yr < r(p1) | valid_y_gross_labour_bu_yr > r(p99) -} - - -* Prepare info needed for dynamic y axis labels -qui sum year -local min_year = 2011 -local max_year = r(max) - -forval year = `min_year'/`max_year' { - - twoway__histogram_gen valid_y_gross_labour_bu_yr if year == `year', /// - width(750) den gen(d_valid v2) - - qui sum d_valid - gen max_d_valid_`year' = r(max) - - drop d_valid v2 - - foreach ls in $ls_cat_labour { - - twoway__histogram_gen valid_y_gross_labour_bu_yr if /// - year == `year' & labour == "`ls'", width(750) den gen(d_valid v2) - - qui sum d_valid - gen max_d_valid_`year'_`ls' = r(max) - - drop d_valid v2 - - } - -} - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year les_c4 sim_yplgrs_dv_lvl_bu laboursupplyweekly dgn using /// - "$dir_data/simulated_data.dta", clear - -keep if dgn == "Female" -drop dgn - -* Keep only employed individuals -keep if les_c4 == "EmployedOrSelfEmployed" -drop les_c4 - - -* Trim outliers -if "$trim_outliers" == "true" { - sum sim_yplgrs_dv_lvl_bu, d - replace sim_yplgrs_dv_lvl_bu = . if /// - sim_yplgrs_dv_lvl_bu < r(p1) | sim_yplgrs_dv_lvl_bu > r(p99) -} - -keep if run == 1 - - -append using "$dir_data/temp_valid_stats.dta" - - -* Plot sub-figures -qui sum year -local min_year = 2011 // Calculate the minimum value of the 'year' variable -local max_year = r(max) // Calculate the maximum value of the 'year' variable - -forval year = `min_year'/`max_year' { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen sim_yplgrs_dv_lvl_bu if year == `year', width(750) /// - den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/2 - - - * Plot all hours - twoway (hist sim_yplgrs_dv_lvl_bu if year == `year' , width(750) /// - color(green%30) legend(label(1 "Simulated"))) /// - (hist valid_y_gross_labour_bu_yr if year == `year' , width(750) /// - color(red%30) legend(label(2 "SILC"))) , /// - subtitle("ALL hours") name(gross_labour_inc_`year'_all, replace) /// - xlabel(,labsize(vsmall) angle(forty_five)) /// - ylabel(0(`steps')`max_y',labsize(vsmall)) /// - graphregion(color(white)) - - - drop d_sim v1 max_d_sim max_value - - * Plot by weekly hours work - foreach ls in $ls_cat_labour { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen sim_yplgrs_dv_lvl_bu if year == `year' & /// - laboursupplyweekly == "`ls'", width(750) den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year'_`ls' if /// - max_d_valid_`year'_`ls' > max_d_sim & max_d_valid_`year'_`ls' - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/2 - - * Plot by weekly hours work - twoway (hist sim_yplgrs_dv_lvl_bu if year == `year' & /// - laboursupplyweekly == "`ls'", width(750) color(green%30) /// - legend(label(1 "Simulated"))) /// - (hist valid_y_gross_labour_bu_yr if year == `year' & /// - laboursupplyweekly_hu == "`ls'", width(750) color(red%30) /// - legend(label(2 "SILC"))) , /// - subtitle("`ls' hours") name(gross_labour_inc_`year'_`ls', replace) /// - xlabel(,labsize(vsmall) angle(forty_five)) /// - ylabel(0(`steps')`max_y',labsize(vsmall)) /// - graphregion(color(white)) - - drop d_sim v1 max_d_sim max_value - - } -} - -* Combine plots by year -forvalues year = `min_year'/`max_year' { - - grc1leg gross_labour_inc_`year'_all gross_labour_inc_`year'_TWENTY /// - gross_labour_inc_`year'_FORTY /// - gross_labour_inc_`year'_FIFTY, /// - title("Gross labour income") /// - subtitle("`year', Females") /// - legendfrom(gross_labour_inc_`year'_all) rows(2) /// - graphregion(color(white)) /// - note("Notes: Series represents average benefit unit gross labour income through time. Statistics computed by averaging benefit-unit level" "gross income for all females ages 18-65. Values in € per year, 2015 prices. Weekly hours worked categories:" "ZERO = 0, TWENTY = [1,39], FORTY = 40, FIFTY = 41+.", /// - size(vsmall)) - - graph export "$dir_output_files/income/gross_labour_income/validation_${country}_gross_labour_income_dist_`year'_female.png", /// - replace width(2400) height(1350) - - -} - -graph drop _all - diff --git a/validation/02_simulation_validation/do_files/06_05_plot_capital_income.do b/validation/02_simulation_validation/do_files/06_05_plot_capital_income.do deleted file mode 100644 index fee90ff..0000000 --- a/validation/02_simulation_validation/do_files/06_05_plot_capital_income.do +++ /dev/null @@ -1,305 +0,0 @@ -/******************************************************************************* -* PROJECT: SimPaths EU -* SECTION: Validation -* OBJECT: Capital income -* AUTHORS: Patryk Bronka, Ashley Burdett -* LAST UPDATE: 06/2025 (AB) -* COUNTRY: Poland -******************************************************************************** -* NOTES: This do file plots simulated and SILC capital income, -* per benefit unit - -*******************************************************************************/ - -******************************************************************************** -* 1 : Mean values over time -******************************************************************************** -******************************************************************************** -* 1.1 : Mean values over time - By individual, benefit unit amounts -******************************************************************************** - -* Prepare validation data -use year dwt valid_y_gross_capital_bu_yr using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - - -* Trim outliers -if "$trim_outliers" == "true" { - - sum valid_y_gross_capital_bu_yr, d - - replace valid_y_gross_capital_bu_yr = . if /// - valid_y_gross_capital_bu_yr < r(p1) | /// - valid_y_gross_capital_bu_yr > r(p99) - -} - -collapse (mean) valid_y_gross_capital_bu_yr [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year sim_ypncp_lvl_bu using "$dir_data/simulated_data.dta", clear - - -* Trim outliers -if "$trim_outliers" == "true" { - - sum sim_ypncp_lvl_bu, d - - replace sim_ypncp_lvl_bu = . if /// - sim_ypncp_lvl_bu < r(p1) | sim_ypncp_lvl_bu > r(p99) - -} - - -collapse (mean) sim_ypncp_lvl_bu, by(run year) - -collapse (mean) sim_ypncp_lvl_bu /// - (sd) sim_ypncp_lvl_bu_sd = sim_ypncp_lvl_bu /// - , by(year) - -foreach varname in sim_ypncp_lvl_bu { - - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd - -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway (rarea sim_ypncp_lvl_bu_high sim_ypncp_lvl_bu_low year, sort /// - color(green%20) legend(label(1 "Simulated"))) /// -(line valid_y_gross_capital_bu_yr year, sort color(green) /// - legend(label(2 "SILC"))), /// -title("Capital Income") /// - xtitle("Year", size(small)) /// - ytitle("€ per year", size(small)) /// - ylabel(,labsize(small)) /// - xlabel(,labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) /// - note("Notes: Series represents average benefit unit capital income, annual. Statistics computed by averaging benefit unit-level gross" "income for all persons ages 18-65. Top and bottom percentiles trimmed. Amounts in 2015 prices. ", /// - size(vsmall)) - -* Save figure -graph export /// -"$dir_output_files/income/capital_income/validation_${country}_capital_income_ts_${min_age}_${max_age}_both.jpg", /// - replace width(2400) height(1350) quality(100) - - -******************************************************************************** -* 1.2 : Share with no capital income -******************************************************************************** -* Prepare validation data -use year dwt valid_y_gross_capital_bu_yr using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -* Trim outliers -if "$trim_outliers" == "true" { - - sum valid_y_gross_capital_bu_yr, d - - replace valid_y_gross_capital_bu_yr = . if /// - valid_y_gross_capital_bu_yr < r(p1) | valid_y_gross_capital_bu_yr > r(p99) - -} - -gen valid_no_capital = (valid_y_gross_capital_bu_yr == 0) - -collapse (mean) valid_no_capital [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year sim_ypncp_lvl_bu using "$dir_data/simulated_data.dta", clear - -* Trim outliers -if "$trim_outliers" == "true" { - - sum sim_ypncp_lvl_bu, d - - replace sim_ypncp_lvl_bu = . if /// - sim_ypncp_lvl_bu < r(p1) | sim_ypncp_lvl_bu > r(p99) - -} - -gen sim_no_capital = (sim_ypncp_lvl_bu == 0) - -collapse (mean) sim_no_capital, by(run year) - -collapse (mean) sim_no_capital /// - (sd) sim_no_capital_sd = sim_no_capital /// - , by(year) - -foreach varname in sim_no_capital { - - gen `varname'_high = `varname' + 1.96*`varname'_sd - - gen `varname'_low = `varname' - 1.96*`varname'_sd - -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway (rarea sim_no_capital_high sim_no_capital_low year, sort /// - color(green%20) legend(label(1 "Simulated"))) /// -(line valid_no_capital year, sort color(green) /// - legend(label(2 "SILC"))), /// -title("No Capital Income") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - ylabel(,labsize(small)) /// - xlabel(,labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) /// - note("Notes: Series represents share of individuals in benefit units that do not report receiving any capital income, annual. Statistics computed" "by averaging benefit unit-level gross income for all persons ages 18-65. Amounts in 2015 prices.", /// - size(vsmall)) - -* Save figure -graph export /// -"$dir_output_files/income/capital_income/validation_${country}_no_capital_income_ts_${min_age}_${max_age}_both.jpg", /// - replace width(2400) height(1350) quality(100) - -******************************************************************************** -* 2 : Histograms -******************************************************************************** -******************************************************************************** -* 2.1 : Histograms by year, All -******************************************************************************** - -* All -* Prepare validation data -use year dwt valid_y_gross_capital_bu_yr using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - - -* Trim outliers -if "$trim_outliers" == "true" { - - sum valid_y_gross_capital_bu_yr, d - - replace valid_y_gross_capital_bu_yr = . if /// - valid_y_gross_capital_bu_yr < r(p1) | /// - valid_y_gross_capital_bu_yr > r(p99) - -} - - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year sim_ypncp_lvl_bu using "$dir_data/simulated_data.dta", clear - -* Trim outliers -if "$trim_outliers" == "true" { - - sum sim_ypncp_lvl_bu, d - - replace sim_ypncp_lvl_bu = . if /// - sim_ypncp_lvl_bu < r(p1) | sim_ypncp_lvl_bu > r(p99) - -} - -append using "$dir_data/temp_valid_stats.dta" - -qui sum year -local min_year = 2011 // Calculate the minimum value of the 'year' variable -local max_year = r(max) // Calculate the maximum value of the 'year' variable - -forval year = `min_year'/`max_year' { - - //Entire sample - twoway (hist sim_ypncp_lvl_bu if year == `year' & sim_ypncp_lvl_bu < 100, /// - width(1) color(green%30) legend(label(1 "Simulated"))) /// - (hist valid_y_gross_capital_bu_yr if year == `year' & valid_y_gross_capital_bu_yr < 100, /// - width(1) color(red%30) legend(label(2 "SILC"))) , /// - title("Capital Income") /// - subtitle("`year'") /// - name(capital_inc_`year'_all, replace) /// - xlabel(,labsize(vsmall) angle(forty_five)) /// - xtitle("€ per year", size(small)) /// - ytitle(, size(small)) /// - graphregion(color(white)) /// - note("Notes: Individual level observations plotted. All persons ages 18-65. Values in € per year, 2015 prices. X axis range limited to 100." "Top and bottom percentails trimmed.", /// - size(vsmall)) - - graph export /// - "$dir_output_files/income/capital_income/validation_${country}_capital_income_dist_`year'.png", /// - replace width(2560) height(1440) - -} - -******************************************************************************** -* 2.1 : Histograms by year, Positive amount -******************************************************************************** -* Prepare validation data -use year dwt valid_y_gross_capital_bu_yr using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - - -* Trim outliers -if "$trim_outliers" == "true" { - - sum valid_y_gross_capital_bu_yr, d - - replace valid_y_gross_capital_bu_yr = . if /// - valid_y_gross_capital_bu_yr < r(p1) | valid_y_gross_capital_bu_yr > r(p99) - -} - -drop if valid_y_gross_capital_bu_yr == 0 - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year sim_ypncp_lvl_bu using "$dir_data/simulated_data.dta", clear - -* Trim outliers -if "$trim_outliers" == "true" { - - sum sim_ypncp_lvl_bu, d - - replace sim_ypncp_lvl_bu = . if /// - sim_ypncp_lvl_bu < r(p1) | sim_ypncp_lvl_bu > r(p99) - -} - -drop if sim_ypncp_lvl_bu == 0 - -append using "$dir_data/temp_valid_stats.dta" - -qui sum year -local min_year = 2011 // Calculate the minimum value of the 'year' variable -local max_year = r(max) // Calculate the maximum value of the 'year' variable - -forval year = `min_year'/`max_year' { - - //Entire sample - twoway (hist sim_ypncp_lvl_bu if year == `year' & sim_ypncp_lvl_bu < 100, /// - width(1) color(green%30) legend(label(1 "Simulated"))) /// - (hist valid_y_gross_capital_bu_yr if year == `year' & valid_y_gross_capital_bu_yr < 100, /// - width(1) color(red%30) legend(label(2 "SILC"))) , /// - title("Capital Income, Positive Amounts") /// - subtitle("`year'") /// - name(capital_inc_`year'_all, replace) /// - xlabel(,labsize(vsmall) angle(forty_five)) /// - xtitle("€ per year", size(small)) /// - ytitle(, size(small)) /// - graphregion(color(white)) /// - note("Notes: Individual level observations plotted. All persons ages 18-65. Values in € per year, 2015 prices. X axis range limited to 100." "Top percentile trimmed", /// - size(vsmall)) - - graph export /// - "$dir_output_files/income/capital_income/validation_${country}_positive_capital_income_dist_`year'.png", /// - replace width(2560) height(1440) - -} - -graph drop _all diff --git a/validation/02_simulation_validation/do_files/06_07_plot_disposable_income.do b/validation/02_simulation_validation/do_files/06_07_plot_disposable_income.do deleted file mode 100644 index 6e6d51d..0000000 --- a/validation/02_simulation_validation/do_files/06_07_plot_disposable_income.do +++ /dev/null @@ -1,626 +0,0 @@ -/******************************************************************************* -* PROJECT: SimPaths EU -* SECTION: Validation -* OBJECT: Disposable income -* AUTHORS: Patryk Bronka, Ashley Burdett -* LAST UPDATE: 11/2025 (AB) -* COUNTRY: Poland -******************************************************************************** -* NOTES: This do file plots simulated and SILC disposable income, -* per benefit unit. Individual level data plotted. -*******************************************************************************/ - -******************************************************************************** -* 1 : Mean values over time -******************************************************************************** -******************************************************************************** -* 1.1 : Mean values over time, By benefit unit -******************************************************************************** - -* Prepare validation data -use year dwt valid_y_disp_bu_yr using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -* Trim outliers -if "$trim_outliers" == "true" { - - sum valid_y_disp_bu_yr, d - - replace valid_y_disp_bu_yr = . if /// - valid_y_disp_bu_yr < r(p1) | valid_y_disp_bu_yr > r(p99) - -} - -collapse (mean) valid_y_disp_bu_yr [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year sim_y_disp_yr_bu using "$dir_data/simulated_data.dta", clear - -* Trim outliers -if "$trim_outliers" == "true" { - - sum sim_y_disp_yr_bu, d - - replace sim_y_disp_yr_bu = . if /// - sim_y_disp_yr_bu < r(p1) | sim_y_disp_yr_bu > r(p99) - -} - -collapse (mean) sim_y_disp_yr_bu, by(run year) - -collapse (mean) sim_y_disp_yr_bu /// - (sd) sim_y_disp_yr_bu_sd = sim_y_disp_yr_bu /// - , by(year) - -foreach varname in sim_y_disp_yr_bu { - - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd - -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway (rarea sim_y_disp_yr_bu_high sim_y_disp_yr_bu_low year, /// - sort color(green%20) legend(label(1 "Simulated"))) /// -(line valid_y_disp_bu_yr year, sort color(green) /// - legend(label(2 "SILC"))), /// -title("Disposable Income") /// - xtitle("Year", size(small)) /// - ytitle("€ per year", size(small)) /// - ylabel(,labsize(small)) /// - xlabel(,labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) /// - note("Notes: Statistics computed at the benefit unit level. Plotted using individual level data. Sample includes all individuals ages ${min_age}-${max_age}." "Amounts in 2015 prices. Top and bottom percentials trimmed. ", /// - size(vsmall)) - -graph export /// -"$dir_output_files/income/disposable_income/validation_${country}_disposable_income_ts_${min_age}_${max_age}_both.jpg", /// - replace //width(2560) height(1440) quality(100) - - -/* -* EUROMOD - -* Prepare EM data -use "$dir_work/${country}_EM_validation_data.dta", clear - - -* Trim outliers -if "$trim_outliers" == "true" { - sum valid_y_disp_bu_yr, d - replace valid_y_disp_bu_yr = . if /// - valid_y_disp_bu_yr < r(p1) | valid_y_disp_bu_yr > r(p99) -} - - -collapse (mean) valid_y_disp_bu_yr [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - - - -* Prepare simulated data -use run year sim_y_disp_yr_bu using "$dir_data/simulated_data.dta", clear - - -* Trim outliers -if "$trim_outliers" == "true" { - sum sim_y_disp_yr_bu, d - replace sim_y_disp_yr_bu = . if /// - sim_y_disp_yr_bu < r(p1) | sim_y_disp_yr_bu > r(p99) -} - - -collapse (mean) sim_y_disp_yr_bu, by(run year) -collapse (mean) sim_y_disp_yr_bu /// - (sd) sim_y_disp_yr_bu_sd = sim_y_disp_yr_bu /// - , by(year) - -foreach varname in sim_y_disp_yr_bu { - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway (rarea sim_y_disp_yr_bu_high sim_y_disp_yr_bu_low year, /// - sort color(green%20) legend(label(1 "Simulated"))) /// -(line valid_y_disp_bu_yr year, sort color(green) /// - legend(label(2 "SILC"))), /// -title("Disposable income") xtitle("Year") ytitle("€ per year (2015 prices)") /// - ylabel(,labsize(small)) xlabel(,labsize(small)) /// - graphregion(color(white)) /// - note("Notes: Statistics computed at the benefit unit level.", size(vsmall)) -*/ -*/ - - -******************************************************************************** -* 2 : Histograms -******************************************************************************** -******************************************************************************** -* 2.1 : Histograms, By year, and category of weekly labour supply -******************************************************************************** - -* Prepare validation data -use year dwt valid_y_disp_bu_yr laboursupplyweekly_hu dag /// - using "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -* Trim outliers -if "$trim_outliers" == "true" { - - sum valid_y_disp_bu_yr, d - - replace valid_y_disp_bu_yr = . if /// - valid_y_disp_bu_yr < r(p1) | valid_y_disp_bu_yr > r(p99) - -} - -* Prepare info needed for dynamic y axis labels -qui sum year -local min_year = 2011 -local max_year = r(max) - -forval year = `min_year'/`max_year' { - - twoway__histogram_gen valid_y_disp_bu_yr if year == `year' , /// - width(500) den gen(d_valid v2) - - qui sum d_valid - gen max_d_valid_`year' = r(max) - - drop d_valid v2 - - foreach ls in $ls_cat { - - twoway__histogram_gen valid_y_disp_bu_yr if /// - year == `year' & labour == "`ls'", width(500) den gen(d_valid v2) - - qui sum d_valid - gen max_d_valid_`year'_`ls' = r(max) - - drop d_valid v2 - - } -} - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year sim_y_disp_yr_bu laboursupplyweekly dag using /// - "$dir_data/simulated_data.dta", clear - - -* Trim outliers -if "$trim_outliers" == "true" { - - sum sim_y_disp_yr_bu, d - - replace sim_y_disp_yr_bu = . if /// - sim_y_disp_yr_bu < r(p1) | sim_y_disp_yr_bu > r(p99) - -} - -keep if run == 1 - -append using "$dir_data/temp_valid_stats.dta" - -* Plot sub-figures -qui sum year -local min_year = 2011 -local max_year = r(max) - -forval year = `min_year'/`max_year' { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen sim_y_disp_yr_bu if year == `year', width(500) /// - den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/2 - - * Plot all hours - twoway (hist sim_y_disp_yr_bu if year == `year', width(500) /// - color(green%30) legend(label(1 "Simulated"))) /// - (hist valid_y_disp_bu_yr if year == `year' , width(500) color(red%30) /// - legend(label(2 "SILC"))) , /// - subtitle("ALL hours") name(disp_inc_`year'_all, replace) /// - xlabel(,labsize(vsmall) angle(forty_five)) /// - ylabel(0(`steps')`max_y', labsize(vsmall)) /// - graphregion(color(white)) - - drop d_sim v1 max_d_sim max_value - - foreach ls in $ls_cat { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen sim_y_disp_yr_bu if year == `year' & /// - laboursupplyweekly == "`ls'", width(500) den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year'_`ls' if /// - max_d_valid_`year'_`ls' > max_d_sim - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/2 - - * Plot by weekly hours work - twoway (hist sim_y_disp_yr_bu if year == `year' & /// - laboursupplyweekly == "`ls'", width(500) color(green%30) /// - legend(label(1 "Simulated"))) /// - (hist valid_y_disp_bu_yr if year == `year' & /// - laboursupplyweekly_hu == "`ls'", width(500) color(red%30) /// - legend(label(2 "SILC"))) , /// - subtitle("`ls' hours") name(disp_inc_`year'_`ls', replace) /// - xlabel(,labsize(vsmall) angle(forty_five)) /// - ylabel(0(`steps')`max_y', labsize(vsmall)) /// - graphregion(color(white)) - - drop d_sim v1 max_d_sim max_value - - } -} - -* Combine plots by year -qui sum year -local min_year = 2011 -local max_year = r(max) - -forvalues year = `min_year'/`max_year' { - - grc1leg disp_inc_`year'_all disp_inc_`year'_ZERO disp_inc_`year'_TWENTY /// - disp_inc_`year'_FORTY /// - disp_inc_`year'_FIFTY, /// - title("Disposable Income By Weekly Hours of Work") /// - subtitle("`year',") /// - legendfrom(disp_inc_`year'_all) rows(2) /// - graphregion(color(white)) /// - note("Notes: Sample includes all males aged ${min_age}-${max_age}. Values in € per year (2015 prices). Indiviudal level data for benefit level variable. Samples" "trimmed. Weekly hours worked categories: ZERO = 0, TWENTY = [1,39], FORTY = 40, FIFTY = 41+", /// - size(vsmall)) - - graph export /// - "$dir_output_files/income/disposable_income/validation_${country}_disposable_income_dist_`year'.png", /// - replace width(2400) height(1350) -} - - -graph drop _all - - -/* - -* Males - -* Prepare validation data -use year dwt valid_y_disp_bu_yr laboursupplyweekly_hu dag dgn /// - using "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -keep if dgn == 1 -drop dgn - -* Trim outliers -if "$trim_outliers" == "true" { - sum valid_y_disp_bu_yr, d - - replace valid_y_disp_bu_yr = . if /// - valid_y_disp_bu_yr < r(p1) | valid_y_disp_bu_yr > r(p99) -} - -* Prepare info needed for dynamic y axis labels -qui sum year -local min_year = 2011 -local max_year = r(max) - -forval year = `min_year'/`max_year' { - - twoway__histogram_gen valid_y_disp_bu_yr if year == `year' , /// - width(500) den gen(d_valid v2) - - qui sum d_valid - gen max_d_valid_`year' = r(max) - - drop d_valid v2 - - foreach ls in $ls_cat { - - twoway__histogram_gen valid_y_disp_bu_yr if /// - year == `year' & labour == "`ls'", width(500) den gen(d_valid v2) - - qui sum d_valid - gen max_d_valid_`year'_`ls' = r(max) - - drop d_valid v2 - - } -} - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year sim_y_disp_yr_bu laboursupplyweekly dag dgn using /// - "$dir_data/simulated_data.dta", clear - -keep if dgn == "Male" -drop dgn - -* Trim outliers -if "$trim_outliers" == "true" { - sum sim_y_disp_yr_bu, d - replace sim_y_disp_yr_bu = . if /// - sim_y_disp_yr_bu < r(p1) | sim_y_disp_yr_bu > r(p99) -} - -keep if run == 1 - -append using "$dir_data/temp_valid_stats.dta" - -* Plot sub-figures -qui sum year -local min_year = 2011 -local max_year = r(max) - -forval year = `min_year'/`max_year' { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen sim_y_disp_yr_bu if year == `year', width(500) /// - den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/2 - - * Plot all hours - twoway (hist sim_y_disp_yr_bu if year == `year', width(500) /// - color(green%30) legend(label(1 "Simulated"))) /// - (hist valid_y_disp_bu_yr if year == `year' , width(500) color(red%30) /// - legend(label(2 "SILC"))) , /// - subtitle("ALL hours") name(disp_inc_`year'_all, replace) /// - xlabel(,labsize(vsmall) angle(forty_five)) /// - ylabel(0(`steps')`max_y', labsize(vsmall)) /// - graphregion(color(white)) - - drop d_sim v1 max_d_sim max_value - - foreach ls in $ls_cat { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen sim_y_disp_yr_bu if year == `year' & /// - laboursupplyweekly == "`ls'", width(500) den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year'_`ls' if /// - max_d_valid_`year'_`ls' > max_d_sim - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/2 - - * Plot by weekly hours work - twoway (hist sim_y_disp_yr_bu if year == `year' & /// - laboursupplyweekly == "`ls'", width(500) color(green%30) /// - legend(label(1 "Simulated"))) /// - (hist valid_y_disp_bu_yr if year == `year' & /// - laboursupplyweekly_hu == "`ls'", width(500) color(red%30) /// - legend(label(2 "SILC"))) , /// - subtitle("`ls' hours") name(disp_inc_`year'_`ls', replace) /// - xlabel(,labsize(vsmall) angle(forty_five)) /// - ylabel(0(`steps')`max_y', labsize(vsmall)) /// - graphregion(color(white)) - - drop d_sim v1 max_d_sim max_value - - } -} - -* Combine plots by year -qui sum year -local min_year = 2011 -local max_year = r(max) - -forvalues year = `min_year'/`max_year' { - - grc1leg disp_inc_`year'_all disp_inc_`year'_ZERO disp_inc_`year'_TWENTY /// - disp_inc_`year'_FORTY /// - disp_inc_`year'_FIFTY, /// - title("Disposable income by weekly hours of work") /// - subtitle("`year', Males") /// - legendfrom(disp_inc_`year'_all) rows(2) /// - graphregion(color(white)) /// - note("Notes: Sample includes all males aged 18-65. Values in € per year (2015 prices). Indiviudal level data for benefit level variable. Samples" "trimmed. Weekly hours worked categories: ZERO = 0, TWENTY = [1,39], FORTY = 40, FIFTY = 41+", /// - size(vsmall)) - - graph export /// - "$dir_output_files/income/disposable_income/validation_${country}_disposable_income_dist_`year'_male.png", /// - replace width(2400) height(1350) -} - - -graph drop _all - - -* Females - -* Prepare validation data -use year dwt valid_y_disp_bu_yr laboursupplyweekly_hu dag dgn /// - using "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -keep if dgn == 0 -drop dgn - -* Trim outliers -if "$trim_outliers" == "true" { - sum valid_y_disp_bu_yr, d - - replace valid_y_disp_bu_yr = . if /// - valid_y_disp_bu_yr < r(p1) | valid_y_disp_bu_yr > r(p99) -} - -* Prepare info needed for dynamic y axis labels -qui sum year -local min_year = 2011 -local max_year = r(max) - -forval year = `min_year'/`max_year' { - - twoway__histogram_gen valid_y_disp_bu_yr if year == `year' , /// - width(500) den gen(d_valid v2) - - qui sum d_valid - gen max_d_valid_`year' = r(max) - - drop d_valid v2 - - foreach ls in $ls_cat { - - twoway__histogram_gen valid_y_disp_bu_yr if /// - year == `year' & labour == "`ls'", width(500) den gen(d_valid v2) - - qui sum d_valid - gen max_d_valid_`year'_`ls' = r(max) - - drop d_valid v2 - - } -} - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulated data -use run year sim_y_disp_yr_bu laboursupplyweekly dag dgn using /// - "$dir_data/simulated_data.dta", clear - -keep if dgn == "Female" -drop dgn - -* Trim outliers -if "$trim_outliers" == "true" { - sum sim_y_disp_yr_bu, d - replace sim_y_disp_yr_bu = . if /// - sim_y_disp_yr_bu < r(p1) | sim_y_disp_yr_bu > r(p99) -} - -keep if run == 1 - - -append using "$dir_data/temp_valid_stats.dta" - -* Plot sub-figures -qui sum year -local min_year = 2011 -local max_year = r(max) - -forval year = `min_year'/`max_year' { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen sim_y_disp_yr_bu if year == `year', width(500) /// - den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/2 - - * Plot all hours - twoway (hist sim_y_disp_yr_bu if year == `year' , width(500) /// - color(green%30) legend(label(1 "Simulated"))) /// - (hist valid_y_disp_bu_yr if year == `year' , width(500) color(red%30) /// - legend(label(2 "SILC"))) , /// - subtitle("ALL hours") name(disp_inc_`year'_all, replace) /// - xlabel(,labsize(vsmall) angle(forty_five)) /// - ylabel(0(`steps')`max_y', labsize(vsmall)) /// - graphregion(color(white)) - - drop d_sim v1 max_d_sim max_value - - foreach ls in $ls_cat { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen sim_y_disp_yr_bu if year == `year' & /// - laboursupplyweekly == "`ls'", width(500) den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year'_`ls' if /// - max_d_valid_`year'_`ls' > max_d_sim - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/2 - - * Plot by weekly hours work - twoway (hist sim_y_disp_yr_bu if year == `year' & /// - laboursupplyweekly == "`ls'", width(500) color(green%30) /// - legend(label(1 "Simulated"))) /// - (hist valid_y_disp_bu_yr if year == `year' & /// - laboursupplyweekly_hu == "`ls'", width(500) color(red%30) /// - legend(label(2 "SILC"))) , /// - subtitle("`ls' hours") name(disp_inc_`year'_`ls', replace) /// - xlabel(,labsize(vsmall) angle(forty_five)) /// - ylabel(0(`steps')`max_y', labsize(vsmall)) /// - graphregion(color(white)) - - drop d_sim v1 max_d_sim max_value - - } -} - -* Combine plots by year -qui sum year -local min_year = 2011 -local max_year = r(max) - -forvalues year = `min_year'/`max_year' { - - grc1leg disp_inc_`year'_all disp_inc_`year'_ZERO disp_inc_`year'_TWENTY /// - disp_inc_`year'_FORTY /// - disp_inc_`year'_FIFTY, /// - title("Disposable income by weekly hours of work") /// - subtitle("`year', Females") /// - legendfrom(disp_inc_`year'_all) rows(2) /// - graphregion(color(white)) /// - note("Notes: Sample includes all females aged 18-65. Values in € per year (2015 prices). Indiviudal level data for benefit level variable. Samples" "trimmed. Weekly hours worked categories: ZERO = 0, TWENTY = [1,39], FORTY = 40, FIFTY = 41+.", /// - size(vsmall)) - - graph export /// - "$dir_output_files/income/disposable_income/validation_${country}_disposable_income_dist_`year'_female.png", /// - replace width(2400) height(1350) -} - - -graph drop _all diff --git a/validation/02_simulation_validation/do_files/06_08_plot_equivalised_disposable_income.do b/validation/02_simulation_validation/do_files/06_08_plot_equivalised_disposable_income.do deleted file mode 100644 index f5c928b..0000000 --- a/validation/02_simulation_validation/do_files/06_08_plot_equivalised_disposable_income.do +++ /dev/null @@ -1,686 +0,0 @@ -/******************************************************************************* -* PROJECT: SimPaths EU -* SECTION: Validation -* OBJECT: Equivalised disposable income -* AUTHORS: Patryk Bronka, Ashley Burdett -* LAST UPDATE: 11/2025 (AB) -* COUNTRY: Poland -******************************************************************************** -* NOTES: This do file plots simulated and observed equivalised -* disposable income, per benefit unit -*******************************************************************************/ - -******************************************************************************** -* 1 : Mean values over time -******************************************************************************** - -* Prepare validation data -use year dwt valid_y_eq_disp_bu_yr using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -* Trim outliers -if "$trim_outliers" == "true" { - - sum valid_y_eq_disp_bu_yr, d - - replace valid_y_eq_disp_bu_yr = . if /// - valid_y_eq_disp_bu_yr < r(p1) | valid_y_eq_disp_bu_yr > r(p99) - -} - - -collapse (mean) valid_y_eq_disp_bu_yr [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulated data -use run year equivalisedincome using "$dir_data/simulated_data.dta", clear - -* Trim outliers -if "$trim_outliers" == "true" { - - sum equivalisedincome, d - - replace equivalisedincome = . if /// - equivalisedincome < r(p1) | equivalisedincome > r(p99) - -} - -collapse (mean) equivalisedincome, by(run year) - -collapse (mean) equivalisedincome /// - (sd) equivalisedincome_sd = equivalisedincome, by(year) - -foreach varname in equivalisedincome { - - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd - -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway (rarea equivalisedincome_high equivalisedincome_low year, /// - sort color(green%20) legend(label(1 "Simulated"))) /// -(line valid_y_eq_disp_bu_yr year, sort color(green) /// - legend(label(2 "Observed"))), /// - title("Equivalised Disposable Income") /// - xtitle("Year", size(small)) /// - ytitle("€ per year", size(small)) /// - ylabel(,labsize(small)) /// - xlabel(,labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) /// - note("Notes: Equivalised disposable income assigned to each person computed by adjusting benefit unit's disposable income by the" "modified OECD scale. Samples includes all individuals ages ${min_age}-${max_age}. Trimmed sample. Amounts in 2015 prices.", /// - size(vsmall)) - -graph export /// -"$dir_output_files/income/equivalised_disposable_income/validation_${country}_equivalised_disposable_income_ts_${min_age}_${max_age}_both.jpg", /// - replace width(2400) height(1350) - -/* -* Males - -* Prepare validation data -use year dwt valid_y_eq_disp_bu_yr dgn using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -keep if dgn == 1 - -* Trim outliers -if "$trim_outliers" == "true" { - sum valid_y_eq_disp_bu_yr, d - replace valid_y_eq_disp_bu_yr = . if /// - valid_y_eq_disp_bu_yr < r(p1) | valid_y_eq_disp_bu_yr > r(p99) -} - -collapse (mean) valid_y_eq_disp_bu_yr [aw = dwt], by(year) - - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulated data -use run year equivalisedincome dgn using "$dir_data/simulated_data.dta", clear - -keep if dgn == "Male" - -* Trim outliers -if "$trim_outliers" == "true" { - sum equivalisedincome, d - replace equivalisedincome = . if /// - equivalisedincome < r(p1) | equivalisedincome > r(p99) -} - -collapse (mean) equivalisedincome, by(run year) -collapse (mean) equivalisedincome /// - (sd) equivalisedincome_sd = equivalisedincome, by(year) - -foreach varname in equivalisedincome { - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway (rarea equivalisedincome_high equivalisedincome_low year, /// - sort color(green%20) legend(label(1 "Simulated"))) /// -(line valid_y_eq_disp_bu_yr year, sort color(green) /// - legend(label(2 "Observed"))), /// - title("Equivalised disposable income") subtitle("Males") /// - xtitle("Year") /// - ytitle("€ per year.") /// - ylabel(,labsize(small)) xlabel(,labsize(small)) /// - graphregion(color(white)) /// - note("Notes: Equivalised disposable income assigned to each person computed by adjusting benefit unit's disposable income by the" "modified OECD scale. Samples includes males ages 18-65. Trimmed sample_long. Amounts in 2015 prices.", /// - size(vsmall)) - -graph export /// -"$dir_output_files/income/equivalised_disposable_income/validation_${country}_equivalised_disposable_income_ts_${min_age}_${max_age}_male.jpg", /// - replace width(2400) height(1350) - - -* Females - -* Prepare validation data -use year dwt valid_y_eq_disp_bu_yr dgn using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -keep if dgn == 0 - -* Trim outliers -if "$trim_outliers" == "true" { - sum valid_y_eq_disp_bu_yr, d - replace valid_y_eq_disp_bu_yr = . if /// - valid_y_eq_disp_bu_yr < r(p1) | valid_y_eq_disp_bu_yr > r(p99) -} - -collapse (mean) valid_y_eq_disp_bu_yr [aw = dwt], by(year) - - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulated data -use run year equivalisedincome dgn using "$dir_data/simulated_data.dta", clear - -keep if dgn == "Female" - -* Trim outliers -if "$trim_outliers" == "true" { - sum equivalisedincome, d - replace equivalisedincome = . if /// - equivalisedincome < r(p1) | equivalisedincome > r(p99) -} - -collapse (mean) equivalisedincome, by(run year) -collapse (mean) equivalisedincome /// - (sd) equivalisedincome_sd = equivalisedincome, by(year) - -foreach varname in equivalisedincome { - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway (rarea equivalisedincome_high equivalisedincome_low year, /// - sort color(green%20) legend(label(1 "Simulated"))) /// -(line valid_y_eq_disp_bu_yr year, sort color(green) /// - legend(label(2 "Observed"))), /// - title("Equivalised disposable income") subtitle("Females") /// - xtitle("Year") /// - ytitle("€ per year.") /// - ylabel(,labsize(small)) xlabel(,labsize(small)) /// - graphregion(color(white)) /// - note("Notes: Equivalised disposable income assigned to each person computed by adjusting benefit unit's disposable income by the" "modified OECD scale. Samples includes females ages 18-65. Trimmed sample_long. Amounts in 2015 prices.", /// - size(vsmall)) - -graph export /// -"$dir_output_files/income/equivalised_disposable_income/validation_${country}_equivalised_disposable_income_ts_${min_age}_${max_age}_female.jpg", /// - replace width(2400) height(1350) -*/ - -******************************************************************************** -* 2 : Histograms -******************************************************************************** -******************************************************************************** -* 2 : Histograms, By year, and by category of weekly labour supply -******************************************************************************** - -* Males - -* Prepare validation data -use year dwt valid_y_eq_disp_bu_yr laboursupplyweekly_hu using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -* Trim outliers -if "$trim_outliers" == "true" { - - sum valid_y_eq_disp_bu_yr, d - - replace valid_y_eq_disp_bu_yr = . if /// - valid_y_eq_disp_bu_yr < r(p1) | valid_y_eq_disp_bu_yr > r(p99) - -} - -* Prepare info needed for dynamic y axis labels -qui sum year -local min_year = 2011 -local max_year = r(max) - -forval year = `min_year'/`max_year' { - - twoway__histogram_gen valid_y_eq_disp_bu_yr if year == `year' , /// - width(500) den gen(d_valid v2) - - qui sum d_valid - gen max_d_valid_`year' = r(max) - - drop d_valid v2 - - foreach ls in $ls_cat { - - twoway__histogram_gen valid_y_eq_disp_bu_yr if /// - year == `year' & labour == "`ls'", width(500) den gen(d_valid v2) - - qui sum d_valid - gen max_d_valid_`year'_`ls' = r(max) - - drop d_valid v2 - - } -} - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year equivalisedincome laboursupplyweekly using /// - "$dir_data/simulated_data.dta", clear - - -* Trim outliers -if "$trim_outliers" == "true" { - - sum equivalisedincome, d - - replace equivalisedincome = . if /// - equivalisedincome < r(p1) | equivalisedincome > r(p99) - -} - -keep if run == 1 - -append using "$dir_data/temp_valid_stats.dta" - -qui sum year -local min_year = 2011 -local max_year = r(max) - -forval year = `min_year'/`max_year' { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen equivalisedincome if year == `year', width(500) /// - den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/2 - - * Plot all hours - twoway (hist equivalisedincome if year == `year', width(500) /// - color(green%30) legend(label(1 "Simulated"))) /// - (hist valid_y_eq_disp_bu_yr if year == `year', width(500) color(red%30) /// - legend(label(2 "Observed"))) , /// - subtitle("ALL hours") /// - name(eqdisp_inc_`year'_all, replace) /// - xlabel(,labsize(vsmall) angle(forty_five)) /// - ylabel(0(`steps')`max_y', labsize(vsmall)) /// - legend(size(small)) /// - graphregion(color(white)) - - drop d_sim v1 max_d_sim max_value - - foreach ls in $ls_cat { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen equivalisedincome if year == `year' & /// - laboursupplyweekly == "`ls'", width(500) den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year'_`ls' if /// - max_d_valid_`year'_`ls' > max_d_sim - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/2 - - twoway (hist equivalisedincome if year == `year' & /// - laboursupplyweekly == "`ls'", width(500) color(green%30) /// - legend(label(1 "Simulated"))) /// - (hist valid_y_eq_disp_bu_yr if year == `year' & /// - laboursupplyweekly_hu == "`ls'", width(500) color(red%30) /// - legend(label(2 "Observed"))) , /// - subtitle("`ls' hours") name(eqdisp_inc_`year'_`ls', replace) /// - xlabel(,labsize(vsmall) angle(forty_five)) /// - ylabel(0(`steps')`max_y', labsize(vsmall)) /// - ytitle(, size(small)) /// - legend(size(small)) /// - graphregion(color(white)) - - drop d_sim v1 max_d_sim max_value - - } -} - -qui sum year -local min_year = 2011 -local max_year = r(max) - -forvalues year = `min_year'/`max_year' { - - grc1leg eqdisp_inc_`year'_all eqdisp_inc_`year'_ZERO /// - eqdisp_inc_`year'_TWENTY eqdisp_inc_`year'_FORTY /// - eqdisp_inc_`year'_FIFTY, /// - title("Equivalised Disposable Income") /// - subtitle("`year', Males") /// - legendfrom(eqdisp_inc_`year'_all) rows(2) /// - graphregion(color(white)) /// - note("Notes: Distribution of benefit unit equivalised disposable, individual. Individual observations plotted, ${min_age}-${max_age} yo. Values in € per year," "2015 prices. Top and bottom percentiles trimmed. Weekly hours worked categories: ZERO = 0, TWENTY = [1,39], FORTY = 40, FIFTY = 41+", /// - size(vsmall)) - - graph export /// - "$dir_output_files/income/equivalised_disposable_income/validation_${country}_equivalised_disposable_inc_dist_`year'.png", /// - replace width(2560) height(1440) - -} - -graph drop _all - - - -/* -* Males - -* Prepare validation data -use year dwt valid_y_eq_disp_bu_yr laboursupplyweekly_hu dgn using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -keep if dgn == 1 -drop dgn - - -* Trim outliers -if "$trim_outliers" == "true" { - sum valid_y_eq_disp_bu_yr, d - - replace valid_y_eq_disp_bu_yr = . if /// - valid_y_eq_disp_bu_yr < r(p1) | valid_y_eq_disp_bu_yr > r(p99) -} - -* Prepare info needed for dynamic y axis labels -qui sum year -local min_year = 2010 -local max_year = r(max) - -forval year = `min_year'/`max_year' { - - twoway__histogram_gen valid_y_eq_disp_bu_yr if year == `year' , /// - width(500) den gen(d_valid v2) - - qui sum d_valid - gen max_d_valid_`year' = r(max) - - drop d_valid v2 - - foreach ls in $ls_cat { - - twoway__histogram_gen valid_y_eq_disp_bu_yr if /// - year == `year' & labour == "`ls'", width(500) den gen(d_valid v2) - - qui sum d_valid - gen max_d_valid_`year'_`ls' = r(max) - - drop d_valid v2 - - } -} - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year equivalisedincome laboursupplyweekly dgn using /// - "$dir_data/simulated_data.dta", clear - -keep if dgn == "Male" -drop dgn - - -* Trim outliers -if "$trim_outliers" == "true" { - sum equivalisedincome, d - replace equivalisedincome = . if /// - equivalisedincome < r(p1) | equivalisedincome > r(p99) -} - -keep if run == 1 - -append using "$dir_data/temp_valid_stats.dta" - -qui sum year -local min_year = 2010 -local max_year = r(max) - -forval year = `min_year'/`max_year' { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen equivalisedincome if year == `year', width(500) /// - den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/2 - - * Plot all hours - twoway (hist equivalisedincome if year == `year' , /// - color(green%30) legend(label(1 "Simulated"))) /// - (hist valid_y_eq_disp_bu_yr if year == `year' , color(red%30) /// - legend(label(2 "Observed"))) , /// - subtitle("ALL hours") name(eqdisp_inc_`year'_all, replace) /// - xlabel(,labsize(vsmall) angle(forty_five)) /// - ylabel(0(`steps')`max_y', labsize(vsmall)) /// - graphregion(color(white)) - - drop d_sim v1 max_d_sim max_value - - foreach ls in $ls_cat { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen equivalisedincome if year == `year' & /// - laboursupplyweekly == "`ls'", width(500) den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year'_`ls' if /// - max_d_valid_`year'_`ls' > max_d_sim - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/2 - - twoway (hist equivalisedincome if year == `year' & /// - laboursupplyweekly == "`ls'", color(green%30) /// - legend(label(1 "Simulated"))) /// - (hist valid_y_eq_disp_bu_yr if year == `year' & /// - laboursupplyweekly_hu == "`ls'", color(red%30) /// - legend(label(2 "Observed"))) , /// - subtitle("`ls' hours") name(eqdisp_inc_`year'_`ls', replace) /// - xlabel(,labsize(vsmall) angle(forty_five)) /// - ylabel(0(`steps')`max_y', labsize(vsmall)) /// - graphregion(color(white)) - - drop d_sim v1 max_d_sim max_value - - } -} - -qui sum year -local min_year = 2010 -local max_year = r(max) - -forvalues year = `min_year'/`max_year' { - - grc1leg eqdisp_inc_`year'_all eqdisp_inc_`year'_ZERO /// - eqdisp_inc_`year'_TWENTY eqdisp_inc_`year'_FORTY /// - eqdisp_inc_`year'_FIFTY, /// - title("Equivalised disposable income") /// - subtitle("`year', Males") /// - legendfrom(eqdisp_inc_`year'_all) rows(2) /// - graphregion(color(white)) /// - note("Notes: Series represents average benefit unit equivalised disposable income for all persons ages 18-65. Individual observations plotted." "Values in € per year, 2015 prices. Sample trimmed. Weekly hours worked categories:" "ZERO = 0, TWENTY = [1,39], FORTY = 40, FIFTY = 41+", /// - size(vsmall)) - - graph export /// - "$dir_output_files/income/equivalised_disposable_income/validation_${country}_equivalised_disposable_inc_dist_`year'_male.png", /// - replace width(2560) height(1440) - -} - -graph drop _all - - -* Females - -* Prepare validation data -use year dwt valid_y_eq_disp_bu_yr laboursupplyweekly_hu dgn using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -keep if dgn == 0 -drop dgn - - -* Trim outliers -if "$trim_outliers" == "true" { - sum valid_y_eq_disp_bu_yr, d - replace valid_y_eq_disp_bu_yr = . if /// - valid_y_eq_disp_bu_yr < r(p1) | valid_y_eq_disp_bu_yr > r(p99) -} - -* Prepare info needed for dynamic y axis labels -qui sum year -local min_year = 2010 -local max_year = r(max) - -forval year = `min_year'/`max_year' { - - twoway__histogram_gen valid_y_eq_disp_bu_yr if year == `year' , /// - width(500) den gen(d_valid v2) - - qui sum d_valid - gen max_d_valid_`year' = r(max) - - drop d_valid v2 - - foreach ls in $ls_cat { - - twoway__histogram_gen valid_y_eq_disp_bu_yr if /// - year == `year' & labour == "`ls'", width(500) den gen(d_valid v2) - - qui sum d_valid - gen max_d_valid_`year'_`ls' = r(max) - - drop d_valid v2 - - } -} - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year equivalisedincome laboursupplyweekly dgn using /// - "$dir_data/simulated_data.dta", clear - -keep if dgn == "Female" -drop dgn - - -* Trim outliers -if "$trim_outliers" == "true" { - sum equivalisedincome, d - replace equivalisedincome = . if /// - equivalisedincome < r(p1) | equivalisedincome > r(p99) -} - -keep if run == 1 - -append using "$dir_data/temp_valid_stats.dta" - -qui sum year -local min_year = 2010 -local max_year = r(max) - -forval year = `min_year'/`max_year' { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen equivalisedincome if year == `year', width(500) /// - den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/2 - - * Plot all hours - twoway (hist equivalisedincome if year == `year' , /// - color(green%30) legend(label(1 "Simulated"))) /// - (hist valid_y_eq_disp_bu_yr if year == `year' , color(red%30) /// - legend(label(2 "Observed"))) , /// - subtitle("ALL hours") name(eqdisp_inc_`year'_all, replace) /// - xlabel(,labsize(vsmall) angle(forty_five)) /// - ylabel(0(`steps')`max_y', labsize(vsmall)) /// - graphregion(color(white)) - - drop d_sim v1 max_d_sim max_value - - foreach ls in $ls_cat { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen equivalisedincome if year == `year' & /// - laboursupplyweekly == "`ls'", width(500) den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year'_`ls' if /// - max_d_valid_`year'_`ls' > max_d_sim - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/2 - - twoway (hist equivalisedincome if year == `year' & /// - laboursupplyweekly == "`ls'", color(green%30) /// - legend(label(1 "Simulated"))) /// - (hist valid_y_eq_disp_bu_yr if year == `year' & /// - laboursupplyweekly_hu == "`ls'", color(red%30) /// - legend(label(2 "Observed"))) , /// - subtitle("`ls' hours") name(eqdisp_inc_`year'_`ls', replace) /// - xlabel(,labsize(vsmall) angle(forty_five)) /// - ylabel(0(`steps')`max_y', labsize(vsmall)) /// - graphregion(color(white)) - - drop d_sim v1 max_d_sim max_value - - } -} - -qui sum year -local min_year = 2010 -local max_year = r(max) - -forvalues year = `min_year'/`max_year' { - - grc1leg eqdisp_inc_`year'_all eqdisp_inc_`year'_ZERO /// - eqdisp_inc_`year'_TWENTY eqdisp_inc_`year'_FORTY /// - eqdisp_inc_`year'_FIFTY, /// - title("Equivalised disposable income") /// - subtitle("`year', Females") /// - legendfrom(eqdisp_inc_`year'_all) rows(2) /// - graphregion(color(white)) /// - note("Notes: Series represents average benefit unit equivalised disposable income for all persons ages 18-65. Individual observations plotted" "Values in € per year, 2015 prices. Sample trimmed. Weekly hours worked categories:" "ZERO = 0, TWENTY = [1,39], FORTY = 40, FIFTY = 41+.", /// - size(vsmall)) - - graph export /// - "$dir_output_files/income/equivalised_disposable_income/validation_${country}_equivalised_disposable_inc_dist_`year'_female.png", /// - replace width(2560) height(1440) - -} - -graph drop _all diff --git a/validation/02_simulation_validation/do_files/06_09_plot_hourly_wages.do b/validation/02_simulation_validation/do_files/06_09_plot_hourly_wages.do deleted file mode 100644 index e7c20f0..0000000 --- a/validation/02_simulation_validation/do_files/06_09_plot_hourly_wages.do +++ /dev/null @@ -1,695 +0,0 @@ -/******************************************************************************* -* PROJECT: SimPaths EU -* SECTION: Validation -* OBJECT: Hourly wages -* AUTHORS: Patryk Bronka, Ashley Burdett -* LAST UPDATE: 1/2025 (AB) -* COUNTRY: Poland -*******************************************************************************/ -* NOTES: This master do file organises do files used for validating -* SimPaths model using EU-SILC data for Poland. -******************************************************************************** - -******************************************************************************** -* 1 : Mean values over time -******************************************************************************** -******************************************************************************** -* 1.1 : Mean values over time, All -******************************************************************************** -* Prepare validation data -use year dwt les_c4 valid_wage_hour using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -* Keep only employed individuals -keep if les_c4 == 1 - -drop if valid_wage_hour == -9 - -* Trim outliers -if "$trim_outliers" == "true" { - - sum valid_wage_hour, d - replace valid_wage_hour = . if /// - valid_wage_hour < r(p1) | valid_wage_hour > r(p99) - -} - -collapse (mean) valid_wage_hour [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year les_c4 potential_earnings_hourly using /// - "$dir_data/simulated_data.dta", clear - -* Keep only employed individuals -keep if les_c4 == "EmployedOrSelfEmployed" - -* Trim outliers -if "$trim_outliers" == "true" { - - sum potential_earnings_hourly, d - - replace potential_earnings_hourly = . if /// - potential_earnings_hourly < r(p1) | potential_earnings_hourly > r(p99) - -} - -collapse (mean) potential_earnings_hourly, by(run year) - -collapse (mean) potential_earnings_hourly /// - (sd) potential_earnings_hourly_sd = potential_earnings_hourly /// - , by(year) - -foreach varname in potential_earnings_hourly { - - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd - -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway (rarea potential_earnings_hourly_high /// - potential_earnings_hourly_low year, /// - sort color(green%20) legend(label(1 "Simulated"))) /// -(line valid_wage_hour year, sort color(green) /// - legend(label(2 "Observed"))), /// -title("Hourly Wages") /// - xtitle("Year", size(small)) /// - ytitle("€ per year", size(small)) /// - ylabel(,labsize(small)) /// - xlabel(,labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) /// - note("Notes: Statistics calculated on sample of employed and self-employed individuals. Values in 2015 prices.", /// - size(vsmall)) - -* Save figure -graph export /// -"$dir_output_files/wages/validation_${country}_wages_ts_${min_age}_${max_age}_both.jpg", /// - replace width(2560) height(1440) quality(100) - - -**** With min wage adjustment - -* Prepare validation data -use year dwt les_c4 valid_wage_hour_adj_mw using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -* Keep only employed individuals -keep if les_c4 == 1 - -drop if valid_wage_hour_adj == -9 - -* Trim outliers -if "$trim_outliers" == "true" { - - sum valid_wage_hour_adj_mw, d - replace valid_wage_hour_adj_mw = . if /// - valid_wage_hour_adj_mw < r(p1) | valid_wage_hour_adj_mw > r(p99) - -} - -collapse (mean) valid_wage_hour_adj_mw [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year les_c4 potential_earnings_hourly using /// - "$dir_data/simulated_data.dta", clear - -* Keep only employed individuals -keep if les_c4 == "EmployedOrSelfEmployed" - -* Trim outliers -if "$trim_outliers" == "true" { - - sum potential_earnings_hourly, d - - replace potential_earnings_hourly = . if /// - potential_earnings_hourly < r(p1) | potential_earnings_hourly > r(p99) - -} - -collapse (mean) potential_earnings_hourly, by(run year) - -collapse (mean) potential_earnings_hourly /// - (sd) potential_earnings_hourly_sd = potential_earnings_hourly /// - , by(year) - -foreach varname in potential_earnings_hourly { - - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd - -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway (rarea potential_earnings_hourly_high /// - potential_earnings_hourly_low year, /// - sort color(green%20) legend(label(1 "Simulated"))) /// -(line valid_wage_hour_adj_mw year, sort color(green) /// - legend(label(2 "Observed"))), /// -title("Hourly Wages") /// - subtitle("Min wage adjusted") /// - xtitle("Year", size(small)) /// - ytitle("€ per year", size(small)) /// - ylabel(,labsize(small)) /// - xlabel(,labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) /// - note("Notes: Statistics calculated on sample of employed and self-employed individuals. Values in 2015 prices.", /// - size(vsmall)) - -* Save figure -graph export /// -"$dir_output_files/wages/validation_${country}_wages_ts_${min_age}_${max_age}_both_mw.jpg", /// - replace width(2560) height(1440) quality(100) - - -**** Without those below the min wage - -* Prepare validation data -use year dwt les_c4 valid_wage_hour_adj using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -* Keep only employed individuals -keep if les_c4 == 1 - -drop if valid_wage_hour_adj == -9 - -* Trim outliers -if "$trim_outliers" == "true" { - - sum valid_wage_hour_adj, d - replace valid_wage_hour_adj = . if /// - valid_wage_hour_adj < r(p1) | valid_wage_hour_adj > r(p99) - -} - -collapse (mean) valid_wage_hour_adj [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year les_c4 potential_earnings_hourly using /// - "$dir_data/simulated_data.dta", clear - -* Keep only employed individuals -keep if les_c4 == "EmployedOrSelfEmployed" - -* Trim outliers -if "$trim_outliers" == "true" { - - sum potential_earnings_hourly, d - - replace potential_earnings_hourly = . if /// - potential_earnings_hourly < r(p1) | potential_earnings_hourly > r(p99) - -} - -collapse (mean) potential_earnings_hourly, by(run year) - -collapse (mean) potential_earnings_hourly /// - (sd) potential_earnings_hourly_sd = potential_earnings_hourly /// - , by(year) - -foreach varname in potential_earnings_hourly { - - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd - -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway (rarea potential_earnings_hourly_high /// - potential_earnings_hourly_low year, /// - sort color(green%20) legend(label(1 "Simulated"))) /// -(line valid_wage_hour_adj year, sort color(green) /// - legend(label(2 "Observed"))), /// -title("Hourly Wages") /// - subtitle("Belwo min wage removed") /// - xtitle("Year, Min wage adjusted", size(small)) /// - ytitle("€ per year", size(small)) /// - ylabel(,labsize(small)) /// - xlabel(,labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) /// - note("Notes: Statistics calculated on sample of employed and self-employed individuals. Values in 2015 prices.", /// - size(vsmall)) - - -******************************************************************************** -* 1.2 : Mean values over time, By gender -******************************************************************************** -* Prepare validation data -use year dwt les_c4 valid_wage_hour dgn using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -* Keep only employed individuals -keep if les_c4 == 1 - -drop if valid_wage_hour == -9 - - -* Trim outliers -if "$trim_outliers" == "true" { - - sum valid_wage_hour, d - - replace valid_wage_hour = . if /// - valid_wage_hour < r(p1) | valid_wage_hour > r(p99) - -} - -collapse (mean) valid_wage_hour [aw = dwt], by(year dgn) - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year les_c4 potential_earnings_hourly dgn using /// - "$dir_data/simulated_data.dta", clear - -* Keep only employed individuals -keep if les_c4 == "EmployedOrSelfEmployed" - -gen dgn2 = 0 if dgn == "Female" -replace dgn2 = 1 if dgn == "Male" - -drop dgn -rename dgn2 dgn - -* Trim outliers -if "$trim_outliers" == "true" { - - sum potential_earnings_hourly , d - - replace potential_earnings_hourly = . if /// - potential_earnings_hourly < r(p1) | potential_earnings_hourly > r(p99) - -} - -collapse (mean) potential_earnings_hourly, by(run year dgn) - -collapse (mean) potential_earnings_hourly /// - (sd) potential_earnings_hourly_sd = potential_earnings_hourly /// - , by(year dgn) - -foreach varname in potential_earnings_hourly { - - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd - -} - -merge 1:1 year dgn using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway (rarea potential_earnings_hourly_high /// - potential_earnings_hourly_low year if dgn == 0, /// - sort color(green%20) legend(label(1 "Simulated"))) /// -(line valid_wage_hour year if dgn == 0, sort color(green) /// - legend(label(2 "Observed"))), /// -subtitle("Females") name(wages_female, replace) /// - xtitle("Year", size(small)) /// - ytitle("€ per year", size(small)) /// - ylabel(,labsize(small)) /// - xlabel(,labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) /// - - -twoway (rarea potential_earnings_hourly_high /// - potential_earnings_hourly_low year if dgn == 1, /// - sort color(green%20) legend(label(1 "Simulated"))) /// -(line valid_wage_hour year if dgn == 1, sort color(green) /// - legend(label(2 "Observed"))), /// -subtitle("Males") name(wages_male, replace) /// - xtitle("Year", size(small)) /// - ytitle("€ per year", size(small)) /// - ylabel(,labsize(small)) /// - xlabel(,labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) /// - - -grc1leg wages_female wages_male, /// - title("Hourly Wage") /// - legendfrom(wages_female) rows(1) /// - graphregion(color(white)) /// - note("Notes: Statistics calculated on sample of employed and self-employed individuals. Values in 2015 prices.", /// - size(vsmall)) - -* Save figure -graph export /// -"$dir_output_files/wages/validation_${country}_wages_ts_${min_age}_${max_age}_gender.jpg", /// - replace width(2560) height(1440) quality(100) - - -******************************************************************************** -* 2 : Histograms -******************************************************************************** -******************************************************************************** -* 2.1 : Histograms, By year -******************************************************************************** - -* Prepare validation data -use year dwt les_c4 valid_wage_hour using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -* Keep only employed individuals -keep if les_c4 == 1 - -drop if valid_wage_hour == -9 - -drop les_c4 - -* Trim outliers -if "$trim_outliers" == "true" { - - sum valid_wage_hour, d - - replace valid_wage_hour = . if /// - valid_wage_hour < r(p1) | valid_wage_hour > r(p99) - -} - -* Prepare info needed for dynamic y axis labels -qui sum year -local min_year = 2011 -local max_year = 2022 - -forval year = `min_year'/`max_year' { - - twoway__histogram_gen valid_wage_hour if year == `year' , /// - bin(60) den gen(d_valid v2) - - qui sum d_valid - gen max_d_valid_`year' = r(max) - - drop d_valid v2 - -} - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year les_c4 potential_earnings_hourly using /// - "$dir_data/simulated_data.dta", clear - -* Keep only employed individuals -keep if les_c4 == "EmployedOrSelfEmployed" - -drop les_c4 - -* Trim outliers -if "$trim_outliers" == "true" { - - sum potential_earnings_hourly, d - - replace potential_earnings_hourly = . if /// - potential_earnings_hourly < r(p1) | potential_earnings_hourly > r(p99) - -} - -append using "$dir_data/temp_valid_stats.dta" - -qui sum year -local min_year = 2011 -local max_year = 2022 - -forval year = `min_year'/`max_year' { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen potential_earnings_hourly if year == `year', /// - bin(60) den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/2 - - * Plot all hours - twoway (hist potential_earnings_hourly if year == `year', /// - color(green%30) legend(label(1 "Simulated"))) /// - (hist valid_wage_hour if year == `year', color(red%30) /// - legend(label(2 "Observed"))), /// - title("Hourly Wage") /// - subtitle("`year'") /// - name(hourly_wages_`year'_all, replace) /// - xlabel(,labsize(vsmall) angle(forty_five)) /// - ylabel(0(`steps')`max_y', labsize(vsmall)) /// - xtitle("€ per year", size(small)) /// - ytitle(, size(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Statistics calculated on subsample of employed and self-employed individuals. Values in €, 2015 prices.", size(vsmall)) - - graph export /// - "$dir_output_files/wages/validation_${country}_wages_dist_`year'.png", /// - replace width(2400) height(1350) - - drop d_sim v1 max_d_sim max_value - -} - -******************************************************************************** -* 2.2 : Histograms, By gender -******************************************************************************** - -* Males -* Prepare validation data -use year dwt les_c4 valid_wage_hour dgn using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -* Keep only employed individuals -keep if les_c4 == 1 -keep if dgn == 0 - -drop if valid_wage_hour == -9 - - -drop les_c4 dgn - -* Trim outliers -if "$trim_outliers" == "true" { - - sum valid_wage_hour, d - - replace valid_wage_hour = . if /// - valid_wage_hour < r(p1) | valid_wage_hour > r(p99) - -} - -* Prepare info needed for dynamic y axis labels -qui sum year -local min_year = 2011 -local max_year = 2022 - -forval year = `min_year'/`max_year' { - - twoway__histogram_gen valid_wage_hour if year == `year' , /// - bin(60) den gen(d_valid v2) - - qui sum d_valid - gen max_d_valid_`year' = r(max) - - drop d_valid v2 - -} - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year les_c4 potential_earnings_hourly dgn using /// - "$dir_data/simulated_data.dta", clear - -* Keep only employed individuals -keep if les_c4 == "EmployedOrSelfEmployed" -keep if dgn == "Female" -drop les_c4 dgn - -* Trim outliers -if "$trim_outliers" == "true" { - - sum potential_earnings_hourly, d - - replace potential_earnings_hourly = . if /// - potential_earnings_hourly < r(p1) | potential_earnings_hourly > r(p99) - -} - -append using "$dir_data/temp_valid_stats.dta" - -qui sum year -local min_year = 2011 -local max_year = 2022 - -forval year = `min_year'/`max_year' { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen potential_earnings_hourly if year == `year', /// - bin(60) den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/2 - - * Plot all hours - twoway (hist potential_earnings_hourly if year == `year', /// - color(green%30) legend(label(1 "Simulated"))) /// - (hist valid_wage_hour if year == `year', color(red%30) /// - legend(label(2 "Observed"))) , /// - title("Hourly Wage") /// - subtitle("`year', females") /// - name(hourly_wages_`year'_all, replace) /// - xlabel(,labsize(vsmall) angle(forty_five)) /// - ylabel(0(`steps')`max_y', labsize(vsmall)) /// - xtitle("€ per year", size(small)) /// - ytitle(, size(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Statistics calculated on subsample of employed and self-employed individuals. Values in €, 2015 prices.", size(vsmall)) - - graph export /// - "$dir_output_files/wages/validation_${country}_wages_dist_`year'_female.png", /// - replace width(2400) height(1350) - - drop d_sim v1 max_d_sim max_value - -} - - -* Females -* Prepare validation data -use year dwt les_c4 valid_wage_hour dgn using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -* Keep only employed individuals -keep if les_c4 == 1 -keep if dgn == 1 - -drop if valid_wage_hour == -9 - -drop les_c4 dgn - -* Trim outliers -if "$trim_outliers" == "true" { - - sum valid_wage_hour, d - - replace valid_wage_hour = . if /// - valid_wage_hour < r(p1) | valid_wage_hour > r(p99) - -} - -* Prepare info needed for dynamic y axis labels -qui sum year -local min_year = 2011 -local max_year = 2022 - -forval year = `min_year'/`max_year' { - - twoway__histogram_gen valid_wage_hour if year == `year' , /// - bin(60) den gen(d_valid v2) - - qui sum d_valid - gen max_d_valid_`year' = r(max) - - drop d_valid v2 - -} - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year les_c4 potential_earnings_hourly dgn using /// - "$dir_data/simulated_data.dta", clear - -* Keep only employed individuals -keep if les_c4 == "EmployedOrSelfEmployed" -keep if dgn == "Male" -drop les_c4 dgn - -* Trim outliers -if "$trim_outliers" == "true" { - - sum potential_earnings_hourly, d - - replace potential_earnings_hourly = . if /// - potential_earnings_hourly < r(p1) | potential_earnings_hourly > r(p99) - -} - -append using "$dir_data/temp_valid_stats.dta" - -qui sum year -local min_year = 2011 -local max_year = 2022 - -forval year = `min_year'/`max_year' { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen potential_earnings_hourly if year == `year', /// - bin(60) den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/2 - - * Plot all hours - twoway (hist potential_earnings_hourly if year == `year', /// - color(green%30) legend(label(1 "Simulated"))) /// - (hist valid_wage_hour if year == `year', color(red%30) /// - legend(label(2 "Observed"))) , /// - title("Hourly Wage") /// - subtitle("`year', males") /// - name(hourly_wages_`year'_all, replace) /// - xlabel(,labsize(vsmall) angle(forty_five)) /// - ylabel(0(`steps')`max_y', labsize(vsmall)) /// - xtitle("€ per year", size(small)) /// - ytitle(, size(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: Statistics calculated on subsample of employed and self-employed individuals. Values in €, 2015 prices.", size(vsmall)) - - graph export /// - "$dir_output_files/wages/validation_${country}_wages_dist_`year'_male.png", /// - replace width(2400) height(1350) - - drop d_sim v1 max_d_sim max_value - -} - - -graph drop _all diff --git a/validation/02_simulation_validation/do_files/06_10_plot_hours_worked.do b/validation/02_simulation_validation/do_files/06_10_plot_hours_worked.do deleted file mode 100644 index c0d4009..0000000 --- a/validation/02_simulation_validation/do_files/06_10_plot_hours_worked.do +++ /dev/null @@ -1,507 +0,0 @@ -/******************************************************************************* -* PROJECT: SimPaths EU -* SECTION: Validation -* OBJECT: Hours worked -* AUTHORS: Patryk Bronka, Ashley Burdett -* LAST UPDATE: 11/2025 (AB) -* COUNTRY: Poland -******************************************************************************** -* NOTES: Histrograms by gender restrict hours. -*******************************************************************************/ - -******************************************************************************** -* 1 : Mean values over time -******************************************************************************** -******************************************************************************** -* 1.1 : Mean values over time, All -******************************************************************************** - -* Prepare validation data -use year dwt les_c4 valid_lhw using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -* Keep only employed individuals -keep if les_c4 == 1 - -collapse (mean) valid_lhw [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year les_c4 hoursworkedweekly using /// - "$dir_data/simulated_data.dta", clear - -rename hoursworkedweekly lhw_sim - -* Keep only employed individuals -keep if les_c4 == "EmployedOrSelfEmployed" - -collapse (mean) lhw_sim, by(run year) - -collapse (mean) lhw_sim /// - (sd) lhw_sim_sd = lhw_sim /// - , by(year) - -foreach varname in lhw_sim { - - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd - -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway (rarea lhw_sim_high lhw_sim_low year, sort color(green%20) /// - legend(label(1 "Simulated"))) /// -(line valid_lhw year, sort color(green) legend(label(2 "SILC"))), /// - title("Average weekly hours worked") /// - xtitle("Year", size(small)) /// - ytitle("Hours per week", size(small)) /// - ylabel(34 [2] 44,labsize(small)) /// - xlabel(,labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) /// - note("Note: Statistics calculated on sample of employed and self-employed individuals", /// - size(vsmall)) - -* Save figure -graph export /// -"$dir_output_files/hours_worked/validation_${country}_hours_worked_ts_${min_age}_${max_age}_both.jpg", /// - replace width(2560) height(1440) quality(100) - - -******************************************************************************** -* 1.2 : Mean values over time, By gender -******************************************************************************** - -* Prepare validation data -use year dwt les_c4 valid_lhw dgn using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -keep if dgn == 1 - -* Keep only employed individuals -keep if les_c4 == 1 - -collapse (mean) valid_lhw [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year les_c4 hoursworkedweekly dgn using /// - "$dir_data/simulated_data.dta", clear - -rename hoursworkedweekly lhw - -keep if dgn == "Male" - -* Keep only employed individuals -keep if les_c4 == "EmployedOrSelfEmployed" - -collapse (mean) lhw, by(run year) - -collapse (mean) lhw /// - (sd) lhw_sd = lhw /// - , by(year) - -foreach varname in lhw { - - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd - -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway (rarea lhw_high lhw_low year, sort color(green%20) /// - legend(label(1 "Simulated"))) /// -(line valid_lhw year, sort color(green) legend(label(2 "SILC"))), /// - title("Average weekly hours worked") /// - subtitle("Males") /// - xtitle("Year", size(small)) /// - ytitle("Hours per week", size(small)) /// - ylabel(34 [2] 44,labsize(small)) /// - xlabel(,labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) /// - note("Note: Statistics calculated on sample of employed and self-employed individuals", /// - size(vsmall)) - -* Save figure -graph export /// -"$dir_output_files/hours_worked/validation_${country}_hours_worked_ts_${min_age}_${max_age}_male.jpg", /// - replace width(2560) height(1440) quality(100) - - -* Females - -* Prepare validation data -use year dwt les_c4 valid_lhw dgn using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -keep if dgn == 0 - -* Keep only employed individuals -keep if les_c4 == 1 - -collapse (mean) valid_lhw [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year les_c4 hoursworkedweekly dgn using /// - "$dir_data/simulated_data.dta", clear - -rename hoursworkedweekly lhw - -keep if dgn == "Female" - -* Keep only employed individuals -keep if les_c4 == "EmployedOrSelfEmployed" - -collapse (mean) lhw, by(run year) - -collapse (mean) lhw /// - (sd) lhw_sd = lhw /// - , by(year) - -foreach varname in lhw { - - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd - -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway (rarea lhw_high lhw_low year, sort color(green%20) /// - legend(label(1 "Simulated"))) /// -(line valid_lhw year, sort color(green) legend(label(2 "SILC"))), /// - title("Average weekly hours worked") /// - subtitle("Females") /// - xtitle("Year", size(small)) /// - ytitle("Hours per week", size(small)) /// - ylabel(34 [2] 44,labsize(small)) /// - xlabel(,labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) /// - note("Note: Statistics calculated on sample of employed and self-employed individuals", /// - size(vsmall)) - -* Save figure -graph export /// -"$dir_output_files/hours_worked/validation_${country}_hours_worked_ts_${min_age}_${max_age}_female.jpg", /// - replace width(2560) height(1440) quality(100) - - -******************************************************************************** -* 2 : Histograms -******************************************************************************** -******************************************************************************** -* 2.1 : Histograms, By Year, All -******************************************************************************** - -* Prepare validation data -use year dwt les_c4 valid_lhw using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -* Keep only employed individuals -keep if les_c4 == 1 - -* Prepare info needed for dynamic y axis labels -qui sum year -local min_year = 2011 -local max_year = r(max) - -forval year = `min_year'/`max_year' { - - twoway__histogram_gen valid_lhw if year == `year' , /// - bin(60) den gen(d_valid v2) - - qui sum d_valid - gen max_d_valid_`year' = r(max) - - drop d_valid v2 - -} - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run idperson year les_c4 hoursworkedweekly using /// - "$dir_data/simulated_data.dta", clear - -rename hoursworkedweekly lhw - -* Keep only employed individuals -keep if les_c4 == "EmployedOrSelfEmployed" - -collapse (mean) lhw, by(idperson year) - -append using "$dir_data/temp_valid_stats.dta" - -qui sum year -local min_year = 2011 -local max_year = r(max) - -forval year = `min_year'/`max_year' { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen lhw if year == `year', bin(60) /// - den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/2 - - twoway (hist lhw if year == `year' /*& lhw <= 65*/, width(1) color(green%20) /// - legend(label(1 "Simulated"))) /// - (hist valid_lhw if year == `year' /*& valid_lhw <= 65*/, width(1) color(red%20) /// - legend(label(2 "SILC"))), /// - title("Weekly hours worked") /// - subtitle("`year'") /// - xtitle("Hours", size(small)) /// - ytitle(, size(small)) /// - xlabel(,labsize(small)) /// - ylabel(0(`steps')`max_y', labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) /// - note("Note: Statistics calculated on sample of employed and self-employed individuals. SILC hours unrestricted.", /// - size(vsmall)) - - graph export /// - "$dir_output_files/hours_worked/validation_${country}_hours_worked_hist_`year'_unrestricted.png", /// - replace width(2400) height(1350) - - drop d_sim v1 max_d_sim max_value -} - - -forval year = `min_year'/`max_year' { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen lhw if year == `year', bin(60) /// - den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/2 - - twoway (hist lhw if year == `year' & lhw <= 65, width(1) color(green%20) /// - legend(label(1 "Simulated"))) /// - (hist valid_lhw if year == `year' & valid_lhw <= 65, width(1) color(red%20) /// - legend(label(2 "SILC"))), /// - title("Weekly hours worked") /// - subtitle("`year'") /// - xtitle("Hours") /// - xlabel(,labsize(small)) /// - ylabel(0(`steps')`max_y', labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Note: Statistics calculated on sample of employed and self-employed individuals. Hours restricted to <= 65 per week.", /// - size(vsmall)) - - graph export /// - "$dir_output_files/hours_worked/validation_${country}_hours_worked_hist_`year'.png", /// - replace width(2400) height(1350) - - drop d_sim v1 max_d_sim max_value -} - - -******************************************************************************** -* 2.1 : Histograms, By Year, By gender -******************************************************************************** - -* Female -* Prepare validation data -use year dwt les_c4 valid_lhw dgn using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -* Keep only employed individuals -keep if les_c4 == 1 -keep if dgn == 0 - -* Prepare info needed for dynamic y axis labels -qui sum year -local min_year = 2011 -local max_year = r(max) - -forval year = `min_year'/`max_year' { - - twoway__histogram_gen valid_lhw if year == `year' , /// - bin(60) den gen(d_valid v2) - - qui sum d_valid - gen max_d_valid_`year' = r(max) - - drop d_valid v2 - -} - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run idperson year les_c4 dgn hoursworkedweekly using /// - "$dir_data/simulated_data.dta", clear - -rename hoursworkedweekly lhw - -* Keep only employed individuals -keep if les_c4 == "EmployedOrSelfEmployed" -keep if dgn == "Female" - -collapse (mean) lhw, by(idperson year) - -append using "$dir_data/temp_valid_stats.dta" - -qui sum year -local min_year = 2011 -local max_year = r(max) - -forval year = `min_year'/`max_year' { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen lhw if year == `year', bin(60) /// - den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/2 - - twoway (hist lhw if year == `year' /*& lhw <= 65*/, width(1) /// - color(green%20) legend(label(1 "Simulated"))) /// - (hist valid_lhw if year == `year' /*& valid_lhw <= 65*/, width(1) color(red%20) /// - legend(label(2 "SILC"))), /// - title("Weekly hours worked") /// - subtitle("`year', females") /// - xtitle("Hours", size(small)) /// - ytitle(, size(small)) /// - xlabel(,labsize(small)) /// - ylabel(0(`steps')`max_y', labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) /// - note("Note: Statistics calculated on sample of employed and self-employed individuals", /// - size(vsmall)) - - graph export /// - "$dir_output_files/hours_worked/validation_${country}_hours_worked_hist_`year'_female.png", /// - replace width(2400) height(1350) - - drop d_sim v1 max_d_sim max_value -} - - -* Male -* Prepare validation data -use year dwt les_c4 valid_lhw dgn using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -* Keep only employed individuals -keep if les_c4 == 1 -keep if dgn == 1 - -* Prepare info needed for dynamic y axis labels -qui sum year -local min_year = 2011 -local max_year = r(max) - -forval year = `min_year'/`max_year' { - - twoway__histogram_gen valid_lhw if year == `year' , /// - bin(60) den gen(d_valid v2) - - qui sum d_valid - gen max_d_valid_`year' = r(max) - - drop d_valid v2 - -} - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run idperson year les_c4 dgn hoursworkedweekly using /// - "$dir_data/simulated_data.dta", clear - -rename hoursworkedweekly lhw - -* Keep only employed individuals -keep if les_c4 == "EmployedOrSelfEmployed" -keep if dgn == "Male" - -collapse (mean) lhw, by(idperson year) - -append using "$dir_data/temp_valid_stats.dta" - -qui sum year -local min_year = 2011 -local max_year = r(max) - -forval year = `min_year'/`max_year' { - - * Prepare info needed for dynamic y axis labels - twoway__histogram_gen lhw if year == `year', bin(60) /// - den gen(d_sim v1) - - qui sum d_sim - gen max_d_sim = r(max) - - gen max_value = max_d_valid_`year' if max_d_valid_`year' > max_d_sim - replace max_value = max_d_sim if max_value == . - - sum max_value - local max_y = 1.25*r(max) - local steps = `max_y'/2 - - twoway (hist lhw if year == `year' /*& lhw <= 65*/, width(1) /// - color(green%20) legend(label(1 "Simulated"))) /// - (hist valid_lhw if year == `year' /*& lhw <= 65*/, width(1) color(red%20) /// - legend(label(2 "SILC"))), /// - title("Weekly hours worked") /// - subtitle("`year', males") /// - xtitle("Hours", size(small)) /// - ytitle(, size(small)) /// - xlabel(,labsize(small)) /// - ylabel(0(`steps')`max_y', labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) /// - note("Note: Statistics calculated on sample of employed and self-employed individuals", /// - size(vsmall)) - - graph export /// - "$dir_output_files/hours_worked/validation_${country}_hours_worked_hist_`year'_male.png", /// - replace width(2400) height(1350) - - drop d_sim v1 max_d_sim max_value -} - - -graph drop _all diff --git a/validation/02_simulation_validation/do_files/06_11_plot_income_shares.do b/validation/02_simulation_validation/do_files/06_11_plot_income_shares.do deleted file mode 100644 index 84ffffe..0000000 --- a/validation/02_simulation_validation/do_files/06_11_plot_income_shares.do +++ /dev/null @@ -1,457 +0,0 @@ -/******************************************************************************* -* PROJECT: SimPaths EU -* SECTION: Validation -* OBJECT: Income shares -* AUTHORS: Patryk Bronka, Ashley Burdett -* LAST UPDATE: 11/2025 (AB) -* COUNTRY: Poland -******************************************************************************** -* NOTES: This do file plots simulated and observed income shares and -* incomes by deciles of gross income -* Altered pension age to 65 -*******************************************************************************/ - -******************************************************************************** -* Observed -******************************************************************************** - -use year dwt max_age_in_bu gross_labour_income_share_bu /// - pension_income_share_bu capital_income_share_bu social_income_share_bu /// - net_income_share_bu gross_income_bu net_income_bu gross_labour_income_bu /// - pension_income_bu capital_income_bu social_income_bu /// - gross_income_bu_jittered using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -xtile obs_gross_income_group = gross_income_bu, nq(10) -//xtile obs_gross_income_group = gross_income_bu_jittered, nq(10) - - -* All ages - -* Graph income shares (gross) -graph bar (mean) gross_labour_income_share_bu (mean) /// - pension_income_share_bu (mean) capital_income_share_bu [aweight = dwt], /// - over(obs_gross_income_group) stack title(`"Observed (all ages)"', /// - size(medium)) /// - legend(order(1 "Labour" 2 "Pension" 3 "Capital") position(6) rows(1)) /// - name(observed_income_shares, replace) b1title("Decile", size(small)) /// - ytitle("Share", size(small)) ylabel(0 [0.5] 1) /// - graphregion(color(white)) - -* Graph income level (gross) -graph bar (mean) gross_labour_income_bu (mean) pension_income_bu (mean) /// - capital_income_bu [aweight = dwt], /// - over(obs_gross_income_group) stack title(`"Observed (all ages)"', /// - size(medium)) /// - legend(order(1 "Labour" 2 "Pension" 3 "Capital") position(6) rows(1)) /// - name(observed_incomes, replace) ylabel(0 [100000] 100000) /// - ytitle("€", size(small)) b1title("Decile", size(small)) /// - graphregion(color(white)) - -* Graph share of net income in gross income -graph bar (mean) net_income_share_bu [aweight = dwt], /// - over(obs_gross_income_group) stack title(`"Observed (all ages)"', /// - size(medium)) legend(order(1 "Net income") position(6) rows(1)) /// - name(observed_net_income_shares, replace) ytitle("Share", size(small)) /// - b1title("Decile", size(small)) /// - graphregion(color(white)) - -* Graph income level (net) -graph bar (mean) net_income_bu [aweight = dwt], /// - over(obs_gross_income_group) /// - stack title(`"Observed (all ages)"', size(medium)) /// - legend(order(1 "Net income") position(6) rows(1)) /// - name(observed_net_income, replace) ylabel(0 [80000] 80000) /// - ytitle("€", size(small)) b1title("Decile", size(small)) legend(off) /// - graphregion(color(white)) - - -* Oldest person above65 (pension age) - -preserve -drop obs_gross_income_group -keep if max_age_in_bu >= 65 -xtile obs_gross_income_group = gross_income_bu, nq(10) - -* Graph income shares (gross) -graph bar (mean) gross_labour_income_share_bu (mean) /// - pension_income_share_bu (mean) capital_income_share_bu [pweight = dwt], /// - over(obs_gross_income_group) stack title(`"Observed (oldest age >=65)"', /// - size(medium)) /// - legend(order(1 "Labour" 2 "Pension" 3 "Capital") position(6) rows(1)) /// - name(observed_income_shares_o68, replace) /// - b1title("Decile", size(small)) /// - ytitle("Share", size(small)) ylabel(0 [0.5] 1) /// - graphregion(color(white)) - -* Graph income level (gross) -graph bar (mean) gross_labour_income_bu (mean) pension_income_bu /// - (mean) capital_income_bu [pweight = dwt], /// - over(obs_gross_income_group) /// - stack title(`"Observed (oldest age >=65)"', size(medium)) /// - legend(order(1 "Labour" 2 "Pension" 3 "Capital") position(6) rows(1)) /// - name(observed_incomes_o68, replace) ylabel(0 [100000] 100000) /// - ytitle("€") b1title("Decile", size(small)) /// - graphregion(color(white)) - -* Graph share of net income in gross income -graph bar (mean) net_income_share_bu [pweight = dwt], /// - over(obs_gross_income_group) /// - stack title(`"Observed (oldest age >=65)"', size(medium)) /// - legend(order(1 "Net income") position(6) rows(1)) /// - name(observed_net_income_shares_o68, replace) /// - b1title("Decile", size(small)) ytitle("Share", size(small)) /// - graphregion(color(white)) - //ylabel(0 [0.5] 1) - -// Graph income level (net) -graph bar (mean) net_income_bu [pweight = dwt], /// - over(obs_gross_income_group) /// - stack title(`"Observed (oldest age >=65)"', size(medium)) /// - legend(order(1 "Net income") position(6) rows(1)) /// - name(observed_net_income_o68, replace) ylabel(0 [80000] 80000) /// - ytitle("£") b1title("Decile", size(small)) legend(off) /// - graphregion(color(white)) - - -* Oldest person below65 (pension age) - -restore -drop obs_gross_income_group -keep if max_age_in_bu <65 -xtile obs_gross_income_group = gross_income_bu, nq(10) - -* Graph income shares (gross) -graph bar (mean) gross_labour_income_share_bu (mean) /// - pension_income_share_bu (mean) capital_income_share_bu [pweight = dwt], /// - over(obs_gross_income_group) /// - stack title(`"Observed (oldest age <65)"', size(medium)) /// - legend(order(1 "Labour" 2 "Pension" 3 "Capital") position(6) rows(1)) /// - name(observed_income_shares_u68, replace) /// - b1title("Decile", size(small)) ytitle("Share", size(small)) /// - ylabel(0 [0.5] 1) /// - graphregion(color(white)) - -* Graph income level (gross) -graph bar (mean) gross_labour_income_bu (mean) pension_income_bu /// - (mean) capital_income_bu [pweight = dwt], /// - over(obs_gross_income_group) /// - stack title(`"Observed (oldest age <65)"', size(medium)) /// - legend(order(1 "Labour" 2 "Pension" 3 "Capital") position(6) rows(1)) /// - name(observed_incomes_u68, replace) ylabel(0 [100000] 100000) /// - ytitle("£") b1title("Decile", size(small)) /// - graphregion(color(white)) - -* Graph share of net income in gross income -graph bar (mean) net_income_share_bu [pweight = dwt], /// - over(obs_gross_income_group) /// - stack title(`"Observed (oldest age <65)"', size(medium)) /// - legend(order(1 "Net income") position(6) rows(1)) /// - name(observed_net_income_shares_u68, replace) /// - b1title("Decile", size(small)) ytitle("Share", size(small)) /// - graphregion(color(white)) - -* Graph income level (net) -graph bar (mean) net_income_bu [pweight = dwt], /// - over(obs_gross_income_group) /// - stack title(`"Observed (oldest age <65)"', size(medium)) /// - legend(order(1 "Net income") position(6) rows(1)) /// - name(observed_net_income_u68, replace) ylabel(0 [80000] 80000) /// - ytitle("€") b1title("Decile", size(small)) legend(off) /// - graphregion(color(white)) - - -******************************************************************************** -* Simulated -******************************************************************************** - -* Load simulated data -use run year idperson max_age_in_bu sim_yplgrs_dv_lvl_bu sim_ypnoab_lvl_bu /// - sim_ypncp_lvl_bu sim_y_disp_yr_bu sim_y_gross_yr_bu using /// - "$dir_data/simulated_data.dta", clear - -gen calc_bu_gross_income = sim_yplgrs_dv_lvl_bu + sim_ypncp_lvl_bu + /// - sim_ypnoab_lvl_bu - -collapse max_age_in_bu sim_yplgrs_dv_lvl_bu sim_ypnoab_lvl_bu /// - sim_ypncp_lvl_bu sim_y_disp_yr_bu sim_y_gross_yr_bu /// - calc_bu_gross_income, by(idperson year) - -* Income shares: -gen gross_labour_income_share_bu = sim_yplgrs_dv_lvl_bu / calc_bu_gross_income -gen pension_income_share_bu = sim_ypnoab_lvl_bu / calc_bu_gross_income -gen capital_income_share_bu = sim_ypncp_lvl_bu / calc_bu_gross_income -gen net_income_share_bu = sim_y_disp_yr_bu / calc_bu_gross_income -replace net_income_share_bu = . if net_income_share_bu >= 50 - -xtile sim_gross_income_group = calc_bu_gross_income, nq(10) - -* All ages - -* Graph income shares (gross) -graph bar (mean) gross_labour_income_share_bu (mean) pension_income_share_bu /// - (mean) capital_income_share_bu, over(sim_gross_income_group) /// - stack title(`"Simulated (all ages)"', size(medium)) /// - legend(order(1 "Labour" 2 "Pension" 3 "Capital") /// - position(6) rows(1)) name(simulated_income_shares, replace) /// - b1title("Decile", size(small)) ytitle("Share", size(small)) /// - ylabel(0 [0.5] 1) /// - graphregion(color(white)) - -* Graph income level (gross) -graph bar (mean) sim_yplgrs_dv_lvl_bu (mean) sim_ypnoab_lvl_bu /// - (mean) sim_ypncp_lvl_bu, over(sim_gross_income_group) /// - stack title(`"Simulated (all ages)"', size(medium)) /// - legend(order(1 "Labour" 2 "Pension" 3 "Capital") /// - position(6) rows(1)) name(simulated_incomes, replace) /// - ylabel(0 [100000] 100000) ytitle("€") b1title("Decile", size(small)) /// - graphregion(color(white)) - -* Graph share of net income in gross income -graph bar (mean) net_income_share_bu, over(sim_gross_income_group) /// - stack title(`"Simulated (all ages)"', size(medium)) /// - legend(order(1 "Net income") position(6) rows(1)) /// - name(simulated_net_income_shares, replace) /// - b1title("Decile", size(small)) /// - graphregion(color(white)) - -* Graph income level (net) -graph bar (mean) sim_y_disp_yr_bu, over(sim_gross_income_group) /// - stack title(`"Simulated (all ages)"', size(medium)) /// - legend(order(1 "Net income") position(6) rows(1)) /// - legend(off) name(simulated_net_income, replace) /// - ylabel(0 [80000] 80000) ytitle("€") /// - b1title("Decile", size(small)) ytitle("€") /// - graphregion(color(white)) - - -* Oldest person above65 (pension age) - -preserve -drop sim_gross_income_group -keep if max_age_in_bu >= 65 -xtile sim_gross_income_group = calc_bu_gross_income, nq(10) - -* Graph income shares (gross) -graph bar (mean) gross_labour_income_share_bu (mean) pension_income_share_bu /// - (mean) capital_income_share_bu, over(sim_gross_income_group) /// - stack title(`"Simulated (oldest age >=65)"', size(medium)) /// - legend(order(1 "Labour" 2 "Pension" 3 "Capital") position(6) rows(1)) /// - name(simulated_income_shares_o68, replace) /// - b1title("Decile", size(small)) ytitle("Share", size(small)) /// - ylabel(0 [0.5] 1) /// - graphregion(color(white)) - -* Graph income level (gross) -graph bar (mean) sim_yplgrs_dv_lvl_bu (mean) sim_ypnoab_lvl_bu /// - (mean) sim_ypncp_lvl_bu, over(sim_gross_income_group) /// - stack title(`"Simulated (oldest age >=65)"', size(medium)) /// - legend(order(1 "Labour" 2 "Pension" 3 "Capital") position(6) rows(1)) /// - name(simulated_incomes_o68, replace) ylabel(0 [100000] 100000) /// - ytitle("€") b1title("Decile", size(small)) /// - graphregion(color(white)) - -* Graph share of net income in gross income -graph bar (mean) net_income_share_bu, over(sim_gross_income_group) /// - stack title(`"Simulated (oldest age >=65)"', size(medium)) /// - legend(order(1 "Net income") position(6) rows(1)) /// - name(simulated_net_income_shares_o68, replace) /// - b1title("Decile", size(small)) /// - ytitle("Share", size(small)) /// - graphregion(color(white)) - -* Graph income level (net) -graph bar (mean) sim_y_disp_yr_bu, over(sim_gross_income_group) /// - stack title(`"Simulated (oldest age >=65)"', size(medium)) /// - legend(order(1 "Net income") position(6) rows(1)) /// - name(simulated_net_income_o68, replace) ylabel(0 [80000] 80000) /// - ytitle("€") b1title("Decile", size(small)) legend(off) /// - graphregion(color(white)) - - -* Oldest person below 68 (pension age) - -restore -drop sim_gross_income_group -keep if max_age_in_bu < 65 -xtile sim_gross_income_group = calc_bu_gross_income, nq(10) - -* Graph income shares (gross) -graph bar (mean) gross_labour_income_share_bu (mean) /// - pension_income_share_bu (mean) capital_income_share_bu, /// - over(sim_gross_income_group) /// - stack title(`"Simulated (oldest age <65)"', size(medium)) /// - legend(order(1 "Labour" 2 "Pension" 3 "Capital") /// - position(6) rows(1)) name(simulated_income_shares_u68, replace) /// - b1title("Decile", size(small)) ytitle("Share", size(small)) /// - ylabel(0 [0.5] 1) /// - graphregion(color(white)) - -* Graph income level (gross) -graph bar (mean) sim_yplgrs_dv_lvl_bu (mean) sim_ypnoab_lvl_bu /// - (mean) sim_ypncp_lvl_bu, over(sim_gross_income_group) stack /// - title(`"Observed (oldest age <65)"', size(medium)) /// - legend(order(1 "Labour" 2 "Pension" 3 "Capital") position(6) rows(1)) /// - name(simulated_incomes_u68, replace) ylabel(0 [100000] 100000) /// - ytitle("") b1title("Decile", size(small)) /// - graphregion(color(white)) - -* Graph share of net income in gross income -graph bar (mean) net_income_share_bu, over(sim_gross_income_group) stack /// - title(`"Observed (oldest age <65)"', size(medium)) /// - legend(order(1 "Net income") position(6) rows(1)) /// - name(simulated_net_income_shares_u68, replace) /// - b1title("Decile", size(small)) ytitle("Share", size(small)) /// - graphregion(color(white)) - -* Graph income level (net) -graph bar (mean) sim_y_disp_yr_bu, over(sim_gross_income_group) /// - stack title(`"Observed (oldest age <65)"', /// - size(medium)) legend(order(1 "Net income") /// - position(6) rows(1)) legend(off) name(simulated_net_income_u68, replace) /// - ylabel(0 [80000] 80000) ytitle("€") b1title("Decile", size(small)) /// - graphregion(color(white)) - - -******************************************************************************** -* Combine graphs -******************************************************************************** - -* Simulated and observed gross income shares, -* all / above pension age / below pension age -grc1leg simulated_income_shares observed_income_shares /// - simulated_income_shares_o68 observed_income_shares_o68 /// - simulated_income_shares_u68 observed_income_shares_u68, /// - legendfrom(observed_income_shares) rows(3) /// - graphregion(color(white)) /// - title("Gross income shares") /// - subtitle("By age and benefit unit gross income decile") /// - note("Notes: Statistics computed at the benefit unit level. Based on values in € per year (2015 prices).", /// - size(vsmall)) - -graph export "$dir_output_files/income/validation_${country}_income_shares.png", /// - replace width(2400) height(1350) - - -* Simulated and observed income levels, -* all / above pension age / below pension age -grc1leg simulated_incomes observed_incomes simulated_incomes_o68 /// - observed_incomes_o68 simulated_incomes_u68 observed_incomes_u68, /// - legendfrom(observed_incomes) rows(3) /// - graphregion(color(white)) /// - subtitle("Gross income sources, by age and ben unit gross income decile") /// - note("Statistics computed at the benefit unit level. Values in € per year (2015 prices).", /// - size(vsmall)) - -graph export /// - "$dir_output_files/income/validation_${country}_combined_income_levels.png", /// - replace width(2400) height(1350) - -* Simulated and observed net income share in gross, -* all / above pension age / below pension age -grc1leg simulated_net_income_shares observed_net_income_shares /// - simulated_net_income_shares_o68 observed_net_income_shares_o68 /// - simulated_net_income_shares_u68 observed_net_income_shares_u68, /// - legendfrom(observed_net_income_shares) rows(3) /// - graphregion(color(white)) /// - subtitle("Net income shares, by age and ben unit gross income decile") /// - note("Statistics computed at the benefit unit level. Based on values in € per year (2015 prices).", /// - size(vsmall)) - -//graph export "$dir_output_files/combined_net_income_share.jpg", /// -// replace width(2560) height(1440) quality(100) - -// Simulated and observed net income level, -* all / above pension age / below pension age -grc1leg simulated_net_income observed_net_income simulated_net_income_o68 /// - observed_net_income_o68 simulated_net_income_u68 /// - observed_net_income_u68, rows(3) ycommon /// - subtitle("Net income, by age and ben unit gross income decile") /// - legendfrom(simulated_net_income) /// - graphregion(color(white)) /// - note("Statistics computed at the benefit unit level. Values in € per year (2015 prices).", /// - size(vsmall)) - -graph export /// - "$dir_output_files/income/validation_${country}_combined_net_income_levels.png", /// - replace width(2400) height(1350) - - -graph drop _all - - -/* -** Investigate components of capital income fpr third decile - -use "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -// how many BU have no gross income? -sum gross_income_bu -count if gross_income_bu == 0 - // 65,775 obs have no gross income from labour, capital or private pension - // 20% of bs have no gross income - -cap drop obs_gross_income_group -xtile obs_gross_income_group = gross_income_bu, nq(10) - -//26% of BU have no gross income -sum hy080g_pc if obs_gross_income_group == 3, de //inter-hh transfers 90% pop -sum hy110g_pc if obs_gross_income_group == 3, de //child income 95% pop -sum hy040g_pc if obs_gross_income_group == 3, de //property income 99% pop -sum hy090g_pc if obs_gross_income_group == 3, de //cap investments 99% -// inter hh transfer and child income are the largest sources - -sum py010g if obs_gross_income_group == 3, de //wages 90% pop -sum py050g if obs_gross_income_group == 3, de //self emp 90% pop -// most don't have labour income - -// pension income small for all - - -foreach var in hy080g_pc hy110g_pc hy040g_pc hy090g_pc py010g py050g { - - gen d_`var' = (`var' != 0) - -} - -tab d_hy080g_pc if obs_gross_income_group == 3 // 35% inter-hh transfers -tab d_hy110g_pc if obs_gross_income_group == 3 // 13% child income -tab d_hy040g_pc if obs_gross_income_group == 3 // 6% property income -tab d_hy090g_pc if obs_gross_income_group == 3 // 7% capital investments -tab d_py010g if obs_gross_income_group == 3 // 16% wages -tab d_py050g if obs_gross_income_group == 3 // 17% self employment - -gen ind_work_income = (d_py010g == 1 | d_py050g == 1) -tab ind_work_income if obs_gross_income_group == 3 - -// => 68% report no income from work - - - -tab hhsize if obs_gross_income_group == 3 - -/* - hhsize | Freq. Percent Cum. -------------+----------------------------------- - 1 | 747 8.93 8.93 - 2 | 1,624 19.41 28.33 - 3 | 1,848 22.08 50.42 - 4 | 1,660 19.84 70.26 - 5 | 1,168 13.96 84.21 - 6 | 739 8.83 93.04 - 7 | 343 4.10 97.14 - 8 | 130 1.55 98.70 - 9 | 44 0.53 99.22 - 10 | 47 0.56 99.78 - 11 | 12 0.14 99.93 - 12 | 4 0.05 99.98 - 15 | 2 0.02 100.00 */ - -* Age -histogram dag if obs_gross_income_group == 3 // U-shaped - -* Activity -tab les_c3 if obs_gross_income_group == 3 // 57% not employed, 19% students - - -graph drop _all diff --git a/validation/02_simulation_validation/do_files/06_12_plot_partnership_status.do b/validation/02_simulation_validation/do_files/06_12_plot_partnership_status.do deleted file mode 100644 index 0e0e13c..0000000 --- a/validation/02_simulation_validation/do_files/06_12_plot_partnership_status.do +++ /dev/null @@ -1,377 +0,0 @@ -/******************************************************************************* -* PROJECT: SimPaths EU -* SECTION: Validation -* OBJECT: Partnership -* AUTHORS: Patryk Bronka, Ashley Burdett -* LAST UPDATE: 06/2025 (AB) -* COUNTRY: Poland -******************************************************************************** -* NOTES: -*******************************************************************************/ - -******************************************************************************** -* 1 : Mean values over time -******************************************************************************** -******************************************************************************** -* 1.1 : Mean values over time, All -******************************************************************************** - -* Prepare validation data -use year dwt valid_dcpst_p valid_dcpst_s using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - - -collapse (mean) valid_dcpst_p valid_dcpst_s [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year sim_dcpst_p sim_dcpst_s sim_has_partner using /// - "$dir_data/simulated_data.dta", clear - -collapse (mean) sim_dcpst_p sim_dcpst_s sim_has_partner, by(run year) - -collapse (mean) sim_dcpst_p sim_dcpst_s sim_has_partner /// - (sd) sim_dcpst_p_sd = sim_dcpst_p /// - sim_dcpst_s_sd = sim_dcpst_s /// - sim_has_partner_sd = sim_has_partner /// - , by(year) - -foreach varname in sim_dcpst_p sim_dcpst_s sim_has_partner { - - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd - -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway (rarea sim_dcpst_p_high sim_dcpst_p_low year, sort color(green%20) /// - legend(label(1 "Simulated"))) /// -(line valid_dcpst_p year, sort color(green) /// - legend(label(2 "SILC "))), /// - title("Partnered") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - ylabel(0.5[0.1]0.7, labsize(small)) /// - xlabel(,labsize(small)) /// - graphregion(color(white)) /// - note("Notes: Sample contains all individual ages ${min_age}-${max_age}.", size(vsmall)) - -* Save figure -graph export /// -"$dir_output_files/partnership/validation_${country}_partnered_ts_${min_age}_${max_age}_both.jpg", /// - replace width(2400) height(1350) quality(100) - - -twoway (rarea sim_dcpst_p_high sim_dcpst_p_low year, sort color(green%20) /// - legend(label(1 "Partnered, simulated"))) /// -(line valid_dcpst_p year, sort color(green) /// - legend(label(2 "Partnered, SILC "))) /// -(rarea sim_dcpst_s_high sim_dcpst_s_low year, sort color(red%20) /// - legend(label(3 "Single, simulated"))) /// -(line valid_dcpst_s year, sort color(red) /// - legend(label(4 "Single, SILC "))), /// - title("Partnership Status") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - ylabel(0.5[0.1]0.7, labsize(small)) /// - xlabel(,labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) /// - note("Notes: Sample contains all individual ages ${min_age}-${max_age}.", size(vsmall)) - -graph export /// -"$dir_output_files/partnership/validation_${country}_partnership_ts_${min_age}_${max_age}_both.jpg", /// - replace width(2400) height(1350) quality(100) - -graph drop _all - -******************************************************************************** -* 1.2 : Mean values over time, All, By children -******************************************************************************** - -* Load validation data -use year dwt valid_dcpst_p_children_0 valid_dcpst_p_children_1 /// - valid_dcpst_p_children_2 valid_dcpst_p_children_3p /// - valid_dcpst_s_children_0 valid_dcpst_s_children_1 /// - valid_dcpst_s_children_2 valid_dcpst_s_children_3p /// - using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -collapse (mean) valid_dcpst_p_children_0 valid_dcpst_p_children_1 /// - valid_dcpst_p_children_2 valid_dcpst_p_children_3p /// - valid_dcpst_s_children_0 valid_dcpst_s_children_1 /// - valid_dcpst_s_children_2 valid_dcpst_s_children_3p /// - [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - -* Load simulated data -use run year sim_dcpst_p_children_0 sim_dcpst_p_children_1 /// - sim_dcpst_p_children_2 sim_dcpst_p_children_3p sim_dcpst_s_children_0 /// - sim_dcpst_s_children_1 sim_dcpst_s_children_2 /// - sim_dcpst_s_children_3p /// - using "$dir_data/simulated_data.dta", clear - -collapse (mean) sim_dcpst_p_children_0 sim_dcpst_p_children_1 /// - sim_dcpst_p_children_2 sim_dcpst_p_children_3p /// - sim_dcpst_s_children_0 sim_dcpst_s_children_1 /// - sim_dcpst_s_children_2 sim_dcpst_s_children_3p, /// - by(run year) - -collapse (mean) sim_dcpst_p_children_0 sim_dcpst_p_children_1 /// - sim_dcpst_p_children_2 sim_dcpst_p_children_3p sim_dcpst_s_children_0 /// - sim_dcpst_s_children_1 sim_dcpst_s_children_2 /// - sim_dcpst_s_children_3p /// - (sd) sim_dcpst_p_children_0_sd = sim_dcpst_p_children_0 /// - sim_dcpst_p_children_1_sd = sim_dcpst_p_children_1 /// - sim_dcpst_p_children_2_sd = sim_dcpst_p_children_2 /// - sim_dcpst_p_children_3p_sd = sim_dcpst_p_children_3p /// - sim_dcpst_s_children_0_sd = sim_dcpst_s_children_0 /// - sim_dcpst_s_children_1_sd = sim_dcpst_s_children_1 /// - sim_dcpst_s_children_2_sd = sim_dcpst_s_children_2 /// - sim_dcpst_s_children_3p_sd = sim_dcpst_s_children_3 /// - , by(year) - -foreach varname in sim_dcpst_p_children_0 sim_dcpst_p_children_1 sim_dcpst_p_children_2 sim_dcpst_p_children_3p sim_dcpst_s_children_0 sim_dcpst_s_children_1 sim_dcpst_s_children_2 sim_dcpst_s_children_3p { - - gen `varname'_h = `varname' + 1.96*`varname'_sd - gen `varname'_l = `varname' - 1.96*`varname'_sd - -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figures - -// Labels of simulated variables are used as titles for the graphs below -label var sim_dcpst_p_children_0 "Partnered, no children" -label var sim_dcpst_p_children_1 "Partnered, 1 child" -label var sim_dcpst_p_children_2 "Partnered, 2 children" -label var sim_dcpst_p_children_3p "Partnered, 3+ children" -label var sim_dcpst_s_children_0 "Not partnered, no children" -label var sim_dcpst_s_children_1 "Not partnered, 1 child" -label var sim_dcpst_s_children_2 "Not partnered, 2 children" -label var sim_dcpst_s_children_3p "Not partnered, 3+ children" - -foreach varname in dcpst_p_children_0 dcpst_p_children_1 dcpst_p_children_2 dcpst_p_children_3p dcpst_s_children_0 dcpst_s_children_1 dcpst_s_children_2 dcpst_s_children_3p { - - local vtext : variable label sim_`varname' - if `"`vtext'"' == "" local vtext "sim_`varname'" - twoway (rarea sim_`varname'_h sim_`varname'_l year, sort color(green%20) /// - legend(label(1 "Simulated") position(6) rows(1))) /// - (line valid_`varname' year, sort color(green) /// - legend(label(2 "SILC"))), /// - subtitle("`vtext'") /// - name(`varname', replace) /// - ytitle("Share", size(small)) /// - xtitle("". size(small)) /// - ylabel(,labsize(small)) /// - xlabel(,labsize(small)) /// - graphregion(color(white)) - -} - -grc1leg dcpst_p_children_0 dcpst_p_children_1 dcpst_p_children_2 /// - dcpst_p_children_3p dcpst_s_children_0 dcpst_s_children_1 /// - dcpst_s_children_2 dcpst_s_children_3p, /// -title("Partnership and Number of Children") /// - legendfrom(dcpst_p_children_0) /// - graphregion(color(white)) /// - note("Notes: Samples contains all individual ages 18-65. ", size(vsmall)) - -graph export /// -"$dir_output_files/partnership/validation_${country}_partnership_children_ts_${min_age}_${max_age}_both.jpg", /// - replace width(2400) height(1350) quality(100) - - - -******************************************************************************** -* 1.3 : Mean values over time, All, By age group -******************************************************************************** - -* Those in their 20s - -* Validation data -use year dwt valid_dcpst_p valid_dcpst_s ageGroup using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -keep if ageGroup == 2 | ageGroup == 3 - -collapse (mean) valid_dcpst_p valid_dcpst_s [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year sim_dcpst_p sim_dcpst_s sim_has_partner ageGroup using /// - "$dir_data/simulated_data.dta", clear - -keep if ageGroup == 2 | ageGroup == 3 - -collapse (mean) sim_dcpst_p sim_dcpst_s sim_has_partner, by(run year) - -collapse (mean) sim_dcpst_p sim_dcpst_s sim_has_partner /// - (sd) sim_dcpst_p_sd = sim_dcpst_p /// - sim_dcpst_s_sd = sim_dcpst_s /// - sim_has_partner_sd = sim_has_partner /// - , by(year) - -foreach varname in sim_dcpst_p sim_dcpst_s sim_has_partner { - - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd - -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway (rarea sim_dcpst_p_high sim_dcpst_p_low year, sort color(green%20) /// - legend(label(1 "Partnered, simulated"))) /// -(line valid_dcpst_p year, sort color(green) /// - legend(label(2 "Partnered, SILC "))) /// -(rarea sim_dcpst_s_high sim_dcpst_s_low year, sort color(red%20) /// - legend(label(3 "Single, simulated"))) /// -(line valid_dcpst_s year, sort color(red) /// - legend(label(4 "Single, SILC "))), /// -title("Partnership Status") /// - subtitle("Ages 20-29") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(,labsize(small)) /// - ylabel(0[0.2]0.8, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes:", size(vsmall)) - -graph export /// -"$dir_output_files/partnership/validation_${country}_partnership_ts_20_29_both.jpg", /// - replace width(2400) height(1350) quality(100) - - -* Those in their 30s - -* Validation data -use year dwt valid_dcpst_p valid_dcpst_s ageGroup using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -keep if ageGroup == 4 | ageGroup == 5 - -collapse (mean) valid_dcpst_p valid_dcpst_s [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year sim_dcpst_p sim_dcpst_s sim_has_partner ageGroup using /// -"$dir_data/simulated_data.dta", clear - -keep if ageGroup == 4 | ageGroup == 5 - -collapse (mean) sim_dcpst_p sim_dcpst_s sim_has_partner, by(run year) - -collapse (mean) sim_dcpst_p sim_dcpst_s sim_has_partner /// - (sd) sim_dcpst_p_sd = sim_dcpst_p /// - sim_dcpst_s_sd = sim_dcpst_s /// - sim_has_partner_sd = sim_has_partner /// - , by(year) - -foreach varname in sim_dcpst_p sim_dcpst_s sim_has_partner { - - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd - -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway (rarea sim_dcpst_p_high sim_dcpst_p_low year, sort color(green%20) /// - legend(label(1 "Partnered, simulated"))) /// -(line valid_dcpst_p year, sort color(green) /// - legend(label(2 "Partnered, SILC "))) /// -(rarea sim_dcpst_s_high sim_dcpst_s_low year, sort color(red%20) /// - legend(label(3 "Single, simulated"))) /// -(line valid_dcpst_s year, sort color(red) /// - legend(label(4 "Single, SILC "))), /// - title("Partnership Status") /// - subtitle("Ages 30-39") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(,labsize(small)) /// - ylabel(0[0.1]0.7, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes:", size(vsmall)) - -graph export /// -"$dir_output_files/partnership/validation_${country}_partnership_ts_30_39_both.jpg", /// - replace width(2400) height(1350) quality(100) - - -* Those in their 40-59 - -* Validation data -use year dwt valid_dcpst_p valid_dcpst_s ageGroup using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -keep if ageGroup == 6 - -collapse (mean) valid_dcpst_p valid_dcpst_s [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year sim_dcpst_p sim_dcpst_s sim_has_partner ageGroup using /// -"$dir_data/simulated_data.dta", clear - -keep if ageGroup == 6 - -collapse (mean) sim_dcpst_p sim_dcpst_s sim_has_partner, by(run year) - -collapse (mean) sim_dcpst_p sim_dcpst_s sim_has_partner /// - (sd) sim_dcpst_p_sd = sim_dcpst_p /// - sim_dcpst_s_sd = sim_dcpst_s /// - sim_has_partner_sd = sim_has_partner /// - , by(year) - -foreach varname in sim_dcpst_p sim_dcpst_s sim_has_partner { - - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd - -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway (rarea sim_dcpst_p_high sim_dcpst_p_low year, sort color(green%20) /// - legend(label(1 "Partnered, simulated"))) /// -(line valid_dcpst_p year, sort color(green) /// - legend(label(2 "Partnered, SILC "))) /// -(rarea sim_dcpst_s_high sim_dcpst_s_low year, sort color(red%20) /// - legend(label(3 "Single, simulated"))) /// -(line valid_dcpst_s year, sort color(red) /// - legend(label(4 "Single, SILC "))), /// - title("Partnership Status") /// - subtitle("Ages 40-59") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(,labsize(small)) /// - ylabel(0[0.1]0.8, labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes:", size(vsmall)) - -graph export /// -"$dir_output_files/partnership/validation_${country}_partnership_ts_40_59_both.jpg", /// - replace width(2400) height(1350) quality(100) - - -graph drop _all - diff --git a/validation/02_simulation_validation/do_files/06_13_plot_health.do b/validation/02_simulation_validation/do_files/06_13_plot_health.do deleted file mode 100644 index 22a3781..0000000 --- a/validation/02_simulation_validation/do_files/06_13_plot_health.do +++ /dev/null @@ -1,408 +0,0 @@ -/******************************************************************************* -* PROJECT: SimPaths EU -* SECTION: Validation -* OBJECT: Health -* AUTHORS: Patryk Bronka, Ashley Burdett -* LAST UPDATE: 11/2025 (AB) -* COUNTRY: Poland -******************************************************************************** -* NOTES: Simulated data doesn't contain 80-100 year olds which make -* up group 8. -* Adjusted the code so that runs without this group. -*******************************************************************************/ - -******************************************************************************** -* 1 : Mean values over time -******************************************************************************** -******************************************************************************** -* 1.1 : Mean values over time, Working age (16-65) -******************************************************************************** - -* Working age -use year dwt dhe dag using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -gen health = dhe - -collapse (mean) health [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare Simulated data -use run year dhe dag run using "$dir_data/simulated_data.dta", clear - -collapse (mean) dhe, by(year run) - -collapse (mean) dhe /// - (sd) dhe_sd = dhe /// - , by(year) - -foreach varname in dhe { - - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd - -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway (rarea dhe_high dhe_low year, /// - sort color(green%20) legend(label(1 "Simulated"))) /// -(line health year, sort color(green) /// - legend(label(2 "SILC"))), /// -title("Health score") /// - subtitle("Ages ${min_age}-${max_age}") /// - xtitle("Year", size(small)) /// - ytitle("", size(small)) /// - ylabel(,labsize(small)) /// - xlabel(,labsize(small)) /// - graphregion(color(white)) /// - note("Notes: The health variable is a self-assessed variable with 5 categories. The greater the value the better the self-perceived health. ", /// - size(vsmall)) - -graph export /// -"$dir_output_files/health/validation_${country}_health_ts_${min_age}_${max_age}_both.jpg", /// - replace width(2560) height(1440) quality(100) - - -******************************************************************************** -* 1.2 : Mean values over time, Working age (16-65), By gender -******************************************************************************** -* Prepare validation data -use year dwt dhe dag dgn using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -gen health = dhe - -collapse (mean) health [aw = dwt], by(year dgn) - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulation data -use run year dhe dag dgn run using "$dir_data/simulated_data.dta", clear - -gen dgn2 = 0 if dgn == "Female" -replace dgn2 = 1 if dgn == "Male" - -drop dgn -rename dgn2 dgn - -collapse (mean) dhe, by(year dgn run) - -collapse (mean) dhe /// - (sd) dhe_sd = dhe /// - , by(year dgn) - -foreach varname in dhe { - - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd - -} - -merge 1:1 year dgn using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -twoway (rarea dhe_high dhe_low year if dgn == 0, /// - sort color(green%20) legend(label(1 "Simulated"))) /// -(line health year if dgn == 0, sort color(green) /// - legend(label(2 "SILC"))), /// - subtitle("Females") name(health_female, replace) /// - xtitle("Year", size(small)) /// - ytitle("", size(small)) /// - ylabel(,labsize(small)) /// - xlabel(,labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) - -twoway (rarea dhe_high dhe_low year if dgn == 1, /// - sort color(green%20) legend(label(1 "Simulated"))) /// -(line health year if dgn == 1, sort color(green) /// - legend(label(2 "SILC"))), /// -subtitle("Males") name(health_male, replace) /// - xtitle("Year", size(small)) /// - ytitle("", size(small)) /// - ylabel(,labsize(small)) /// - xlabel(,labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) - -grc1leg health_female health_male, /// - title("Health score") /// - subtitle("Ages ${min_age}-${max_age}") /// - legendfrom(health_female) rows(1) /// - graphregion(color(white)) /// - note("Notes: The health variable is a self-assessed variable with 5 categories. The greater the value the better the self-perceived health.", /// - size(vsmall)) - -graph export /// -"$dir_output_files/health/validation_${country}_health_ts_${min_age}_${max_age}_gender.jpg", /// - replace width(2560) height(1440) quality(100) - - -******************************************************************************** -* 1.2 : Mean values over time, Working age (16-65), By age group -******************************************************************************** - -* Prepare validation data -use year dwt dgn ageGroup dhe using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -gen health_m = dhe if dgn == 1 -gen health_f = dhe if dgn == 0 - -drop if ageGroup == 0 | ageGroup == 8 - -collapse (mean) health* [aw = dwt], by(ageGroup year) - -drop if missing(ageGroup) -reshape wide health*, i(year) j(ageGroup) - -forvalues i = 1(1)7 { - - rename health_f`i' health_f_`i'_valid - rename health_m`i' health_m_`i'_valid - -} - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare Simulated data -use run year sim_sex ageGroup dhe using "$dir_data/simulated_data.dta", clear - -gen health_m = dhe if sim_sex == 1 -gen health_f = dhe if sim_sex == 2 - -collapse (mean) health*, by(ageGroup run year) -drop if missing(ageGroup) -reshape wide health*, i(year run) j(ageGroup) - -collapse (mean) health* /// - (sd) health_m_1_sd = health_m1 /// - (sd) health_f_1_sd = health_f1 /// - (sd) health_m_2_sd = health_m2 /// - (sd) health_f_2_sd = health_f2 /// - (sd) health_m_3_sd = health_m3 /// - (sd) health_f_3_sd = health_f3 /// - (sd) health_m_4_sd = health_m4 /// - (sd) health_f_4_sd = health_f4 /// - (sd) health_m_5_sd = health_m5 /// - (sd) health_f_5_sd = health_f5 /// - (sd) health_m_6_sd = health_m6 /// - (sd) health_f_6_sd = health_f6 /// - (sd) health_m_7_sd = health_m7 /// - (sd) health_f_7_sd = health_f7 /// - , by(year) - /*(sd) health_m_8_sd = health_m8 /// - *(sd) health_f_8_sd = health_f8 /// */ - -forvalues i=1(1)7 { - gen health_f_`i'_sim_high = health_f`i' + 1.96*health_f_`i'_sd - gen health_f_`i'_sim_low = health_f`i' - 1.96*health_f_`i'_sd - gen health_m_`i'_sim_high = health_m`i' + 1.96*health_m_`i'_sd - gen health_m_`i'_sim_low = health_m`i' - 1.96*health_m_`i'_sd -} - - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figure -foreach vble in "health_f" "health_m" { - twoway (rarea `vble'_1_sim_high `vble'_1_sim_low year, sort /// - color(green%20) legend(label(1 "Simulated") position(6) rows(1))) /// - (line `vble'_1_valid year, sort color(green) legend(label(2 "SILC"))), /// - title("Age 15-19") name(`vble'_1, replace) ylabel(3 [1] 5) /// - xlabel(,labsize(small)) ylabel(,labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) - - twoway (rarea `vble'_2_sim_high `vble'_2_sim_low year, sort /// - color(green%20) legend(label(1 "Simulated") position(6) rows(1))) /// - (line `vble'_2_valid year, sort color(green) legend(label(2 "SILC"))), /// - title("Age 20-24") name(`vble'_2, replace) ylabel(3 [1] 5) /// - xlabel(,labsize(small)) ylabel(,labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) - - twoway (rarea `vble'_3_sim_high `vble'_3_sim_low year, sort /// - color(green%20) legend(label(1 "Simulated") position(6) rows(1))) /// - (line `vble'_3_valid year, sort color(green) legend(label(2 "SILC"))), /// - title("Age 25-29") name(`vble'_3, replace) ylabel(3 [1] 5) /// - xlabel(,labsize(small)) ylabel(,labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) - - twoway (rarea `vble'_4_sim_high `vble'_4_sim_low year, sort /// - color(green%20) legend(label(1 "Simulated") position(6) rows(1))) /// - (line `vble'_4_valid year, sort color(green) legend(label(2 "SILC"))), /// - title("Age 30-34") name(`vble'_4, replace) ylabel(3 [1] 5) /// - xlabel(,labsize(small)) ylabel(,labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) - - twoway (rarea `vble'_5_sim_high `vble'_5_sim_low year, sort /// - color(green%20) legend(label(1 "Simulated") position(6) rows(1))) /// - (line `vble'_5_valid year, sort color(green) legend(label(2 "SILC"))), /// - title("Age 35-39") name(`vble'_5, replace) ylabel(3 [1] 5) /// - xlabel(,labsize(small)) ylabel(,labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) - - twoway (rarea `vble'_6_sim_high `vble'_6_sim_low year, sort /// - color(green%20) legend(label(1 "Simulated") position(6) rows(1))) /// - (line `vble'_6_valid year, sort color(green) legend(label(2 "SILC"))), /// - title("Age 40-59") name(`vble'_6, replace) ylabel(3 [1] 5) /// - xlabel(,labsize(small)) ylabel(,labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) - - twoway (rarea `vble'_7_sim_high `vble'_7_sim_low year, sort /// - color(green%20) legend(label(1 "Simulated") position(6) rows(1))) /// - (line `vble'_7_valid year, sort color(green) legend(label(2 "SILC"))), /// - title("Age 60-79") name(`vble'_7, replace) ylabel(3 [1] 5) /// - xlabel(,labsize(small)) ylabel(,labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) - - /*twoway (rarea `vble'_8_sim_high `vble'_8_sim_low year, sort /// - color(green%20) legend(label(1 "Simulated") position(6) rows(1))) /// - (line `vble'_8_valid year, sort color(green) legend(label(2 "SILC"))), /// - title("age 80-100") name(`vble'_8, replace) ylabel(1 [1] 5)*/ -} - -* Save figures -grc1leg health_f_1 health_f_2 health_f_3 health_f_4 health_f_5 /// - health_f_6 health_f_7 /*health_f_8*/, /// - title("Health score") /// - subtitle("Females") /// - legendfrom(health_f_1) /// - graphregion(color(white)) /// - note("Notes: The health variable is a self-assessed variable with 5 categories. The greater the value the better the self-perceived health.", /// - size(vsmall)) - -graph export /// - "$dir_output_files/health/validation_${country}_health_ts_all_female.jpg", /// - replace width(2400) height(1350) quality(100) - - -grc1leg health_m_1 health_m_2 health_m_3 health_m_4 health_m_5 /// - health_m_6 health_m_7 /*health_m_8*/, /// - title("Health score") /// - subtitle("Males") /// - legendfrom(health_m_1) /// - graphregion(color(white)) /// - note("Notes: The health variable is a self-assessed variable with 5 categories. The greater the value the better the self-perceived health.", /// - size(vsmall)) - -graph export /// - "$dir_output_files/health/validation_${country}_health_ts_all_male.jpg", /// - replace width(2400) height(1350) quality(100) - - -******************************************************************************** -* 2 : Histograms -******************************************************************************** -******************************************************************************** -* 2.1 : Histograms, Working age -******************************************************************************** - -use year dwt dhe dag using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -gen health = dhe - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare Simulated data -use run year dhe dag run using "$dir_data/simulated_data.dta", clear - -keep if run == 1 - -append using "$dir_data/temp_valid_stats.dta" - - -* Plot figure -twoway (hist dhe, width(0.2) color(green%30) legend(label(1 "Simulated"))) /// -(hist health, width(0.2) color(red%30) legend(label(2 "SILC"))), /// -title("Health score") subtitle("Ages ${min_age}-${max_age}") /// - xtitle("Health score", size(small)) /// - ytitle(, size(small)) /// - xlabel(,labsize(small)) /// - ylabel(,labsize(small)) /// - graphregion(color(white)) /// - legend(size(small)) /// - note("Notes: The health score is a self-assessed. The greater the value the better the self-perceived health.", /// - size(vsmall)) - -graph export /// -"$dir_output_files/health/validation_${country}_health_hist_${min_age}_${max_age}_both.jpg", /// - replace width(2560) height(1440) quality(100) - - -******************************************************************************** -* 2.1 : Histograms, Working age, By gender -******************************************************************************** -use year dwt dhe dgn using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -gen health = dhe - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare Simulated data -use run year dhe dgn run using "$dir_data/simulated_data.dta", clear - -keep if run == 1 - -gen dgn2 = 0 if dgn == "Female" -replace dgn2 = 1 if dgn == "Male" - -drop dgn -rename dgn2 dgn - -append using "$dir_data/temp_valid_stats.dta" - - -* Plot figure - -twoway (hist dhe if dgn == 0, width(0.2) color(green%30) /// - legend(label(1 "Simulated"))) /// -(hist health if dgn == 0, width(0.2) color(red%30) /// - legend(label(2 "SILC"))), /// -subtitle("Females") /// - name(health_female, replace) /// - xtitle("Health score", size(small)) /// - xtitle("", size(small)) /// - xlabel(,labsize(small)) /// - ylabel(,labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) - -twoway (hist dhe if dgn == 1, width(0.2) color(green%30) /// - legend(label(1 "Simulated"))) /// -(hist health if dgn == 1, width(0.2) color(red%30) /// - legend(label(2 "SILC"))), /// -subtitle("Males") /// - name(health_male, replace) xtitle("Health score", size(small)) /// - xtitle("", size(small)) /// - xlabel(,labsize(small)) /// - ylabel(,labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) - -grc1leg health_female health_male, /// - title("Health score") /// - subtitle("Ages ${min_age}-${max_age}") /// - legendfrom(health_male) rows(1) /// - graphregion(color(white)) /// - note("Notes: The health score is a self-assessed. The greater the value the better the self-perceived health.", /// - size(vsmall)) - - -graph export /// -"$dir_output_files/health/validation_${country}_health_hist_${min_age}_${max_age}_gender.jpg", /// - replace width(2560) height(1440) quality(100) - -graph drop _all diff --git a/validation/02_simulation_validation/do_files/06_14_plot_at_risk_of_poverty.do b/validation/02_simulation_validation/do_files/06_14_plot_at_risk_of_poverty.do deleted file mode 100644 index e6678dc..0000000 --- a/validation/02_simulation_validation/do_files/06_14_plot_at_risk_of_poverty.do +++ /dev/null @@ -1,104 +0,0 @@ -/******************************************************************************* -* PROJECT: SimPaths EU -* SECTION: Validation -* OBJECT: Risk of poverty -* AUTHORS: Patryk Bronka, Ashley Burdett -* LAST UPDATE: 06/2025 (AB) -* COUNTRY: Poland -******************************************************************************** -* NOTES: This master do file organises do files used for validating -* SimPaths model using EU-SILC data for Poland. -*******************************************************************************/ - -******************************************************************************** -* 1 : Mean values over time -******************************************************************************** - -* Prepare validation data -use year dwt valid_y_eq_disp_yr_bu using /// - "$dir_data/${country}-eusilc_validation_sample.dta", clear - -* Trim outliers -if "$trim_outliers" == "true" { - - sum valid_y_eq_disp_yr_bu, d - - replace valid_y_eq_disp_yr_bu = . if /// - valid_y_eq_disp_yr_bu < r(p1) | valid_y_eq_disp_yr_bu > r(p99) - -} - -qui sum year -local min_year = 2011 -local max_year = r(max) - -gen poverty_line = . -forval year = `min_year'/`max_year' { - - sum valid_y_eq_disp_yr_bu if year == `year', d - replace poverty_line = 0.6*r(p50) if year == `year' - -} - -gen arop = (valid_y_eq_disp_yr_bu < poverty_line) - -collapse (mean) arop [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year equivalisedincome using "$dir_data/simulated_data.dta", clear - -* Trim outliers -if "$trim_outliers" == "true" { - - sum equivalisedincome, d - - replace equivalisedincome = . if /// - equivalisedincome < r(p1) | equivalisedincome > r(p99) - -} - -bys run year: egen equivincome_median = median(equivalisedincome) -gen poverty_line = 0.6*equivincome_median -gen arop_sim = (equivalisedincome < poverty_line) - -collapse (mean) arop_sim, by(run year) - -collapse (mean) arop_sim /// - (sd) arop_sim_sd = arop_sim /// - , by(year) - -foreach varname in arop_sim { - - gen `varname'_high = `varname' + 1.96*`varname'_sd - gen `varname'_low = `varname' - 1.96*`varname'_sd - -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - - -* Plot figure - - -twoway /// - (rarea arop_sim_high arop_sim_low year, sort color(green%20) /// - legend(label(1 "Simulated"))) /// - (line arop year, sort color(green) /// - legend(label(2 "Observed"))), /// - title("At Risk of Poverty") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) /// - note("Note: Poverty line calculated within each year as equivalised disposable income of benefit unit 60% of the median value.", /// - size(vsmall)) - - -* Save figure -graph export "$dir_output_files/poverty/validation_${country}_at_risk_of_poverty_EUSILC_age_${min_age}_${max_age}.jpg", /// - replace width(2560) height(1440) quality(100) diff --git a/validation/02_simulation_validation/do_files/06_15_plot_income_ratios.do b/validation/02_simulation_validation/do_files/06_15_plot_income_ratios.do deleted file mode 100644 index 0d63bda..0000000 --- a/validation/02_simulation_validation/do_files/06_15_plot_income_ratios.do +++ /dev/null @@ -1,124 +0,0 @@ -/******************************************************************************* -* PROJECT: SimPaths EU -* SECTION: Validation -* OBJECT: Income ratios -* AUTHORS: Patryk Bronka, Ashley Burdett -* LAST UPDATE: 11/2025 (AB) -* COUNTRY: Poland -******************************************************************************** -* NOTES: -*******************************************************************************/ - -******************************************************************************** -* 1 : Time series -******************************************************************************** - -* Prepare validation data -use year dwt valid_y_eq_disp_bu_yr using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -* Trim outliers -if "$trim_outliers" == "true" { - - sum valid_y_eq_disp_bu_yr, d - - replace valid_y_eq_disp_bu_yr = . if /// - valid_y_eq_disp_bu_yr < r(p1) | valid_y_eq_disp_bu_yr > r(p99) - -} - -collapse (p90) p90_disp = valid_y_eq_disp_bu_yr (p50) /// - p50_disp = valid_y_eq_disp_bu_yr (p10) /// - p10_disp = valid_y_eq_disp_bu_yr, by(year) - -gen p90_p10_ratio_disp_obs = p90_disp/p10_disp -gen p90_p50_ratio_disp_obs = p90_disp/p50_disp - -* Align reference years -gen l_p90_p10_ratio_disp_obs = p90_p10_ratio_disp_obs[_n+1] -gen l_p90_p50_ratio_disp_obs = p90_p50_ratio_disp_obs[_n+1] - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year equivalisedincome using "$dir_data/simulated_data.dta", clear - -* Trim outliers -if "$trim_outliers" == "true" { - - sum equivalisedincome, d - replace equivalisedincome = . if /// - equivalisedincome < r(p1) | equivalisedincome > r(p99) - -} - -collapse (p90) p90_disp = equivalisedincome (p50) /// - p50_disp = equivalisedincome (p10) /// - p10_disp = equivalisedincome, by(run year) - -gen p90_p10_ratio_disp = p90_disp/p10_disp -gen p90_p50_ratio_disp = p90_disp/p50_disp - -collapse (mean) p90_p10_ratio_disp p90_p50_ratio_disp /// - (sd) sd_p90_p10_ratio_disp = p90_p10_ratio_disp /// - sd_p90_p50_ratio_disp = p90_p50_ratio_disp /// - , by(year) - - foreach var in p90_p10_ratio_disp p90_p50_ratio_disp { - - gen `var'_HI = `var' + 1.96*sd_`var' - gen `var'_LO = `var' - 1.96*sd_`var' - -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - - -* Plot figure -foreach var in p90_p10_ratio_disp { - - twoway (rarea `var'_HI `var'_LO year, sort color(red%20) /// - legend(label(1 "Simulated") position(6) rows(1))) /// - (line `var'_obs year, sort legend(label(2 "SILC"))), /// - title("P90/P10") /// - name(`var', replace) /// - xtitle("", size(small)) /// - ytitle("", size(small)) /// - ylabel(,labsize(small)) /// - xlabel(,labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) - -} - -foreach var in p90_p50_ratio_disp { - - twoway (rarea `var'_HI `var'_LO year, sort color(red%20) /// - legend(label(1 "Simulated") position(6) rows(1))) /// - (line `var'_obs year, sort legend(label(2 "SILC"))), /// - title("P90/P50") /// - name(`var', replace) /// - xtitle("", size(small)) /// - ytitle("", size(small)) /// - ylabel(,labsize(small)) /// - xlabel(,labsize(small)) /// - legend(size(small)) /// - graphregion(color(white)) - -} - -* Save figure -grc1leg p90_p10_ratio_disp p90_p50_ratio_disp, /// - title("Inequality") /// - legendfrom(p90_p10_ratio_disp) /// - graphregion(color(white)) /// - note("Notes: Figures contain household income decile ratios. Sample contains all individuals ages ${min_age}-${max_age}. Individual observatioons plotted, beneift unit" "variable.", /// - size(vsmall)) - -graph export /// -"$dir_output_files/inequality/validation_${country}_disposable_income_ratio_ts_all_both.jpg", /// - replace width(2400) height(1350) - - -graph drop _all diff --git a/validation/02_simulation_validation/do_files/06_16_plot_number_children.do b/validation/02_simulation_validation/do_files/06_16_plot_number_children.do deleted file mode 100644 index 87c3029..0000000 --- a/validation/02_simulation_validation/do_files/06_16_plot_number_children.do +++ /dev/null @@ -1,171 +0,0 @@ -/******************************************************************************* -* PROJECT: SimPaths EU -* SECTION: Validation -* OBJECT: Children -* AUTHORS: Patryk Bronka, Ashley Burdett -* LAST UPDATE: 06/2025 (AB) -* COUNTRY: Poland -******************************************************************************** -* NOTES: This do file plots simulated and SILC % of benefit units -* with a given number of children -*******************************************************************************/ - -******************************************************************************** -* 1 : Mean values over time -******************************************************************************** -******************************************************************************** -* 1.1 : Mean values over time, All children -******************************************************************************** - -* Prepare validation data -use year idbenefitunit dwt children_* using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -bys year idbenefitunit: keep if _n == 1 - -* Calculate weighted share of benefit units with 0, 1, 2, 3 or more children -collapse (mean) children_* [aw = dwt], by(year) - -foreach varname in children_0 children_1 children_2 children_3p { - - rename `varname' valid_`varname' - -} - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year idbenefitunit children_* using /// - "$dir_data/simulated_data.dta", clear - -bys run year idbenefitunit: keep if _n == 1 - -collapse (mean) children_*, by(run year) - -rename children_3plus children_3p - -collapse (mean) children_* /// - (sd) children_0_sd = children_0 /// - children_1_sd = children_1 /// - children_2_sd = children_2 /// - children_3p_sd = children_3p /// - , by(year) - -foreach varname in children_0 children_1 children_2 children_3p { - - gen sim_`varname'_h = `varname' + 1.96*`varname'_sd - gen sim_`varname'_l = `varname' - 1.96*`varname'_sd - rename `varname' sim_`varname' - -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figures -label var sim_children_0 "No children" -label var sim_children_1 "1 child" -label var sim_children_2 "2 children" -label var sim_children_3p "3+ children" - - -twoway (rarea sim_children_0_h sim_children_0_l year, /// - sort color(green%20) legend(label(1 "No children, simulated"))) /// -(line valid_children_0 year, sort color(green) /// - legend(label(2 "No children, SILC"))) /// -(rarea sim_children_1_h sim_children_1_l year, sort color(blue%20) /// - legend(label(3 "1 child, simulated"))) /// -(line valid_children_1 year, sort color(blue) /// - legend(label(4 "1 child, SILC"))) /// -(rarea sim_children_2_h sim_children_2_l year, sort color(red%20) /// - legend(label(5 "2 children, simulated"))) /// -(line valid_children_2 year, sort color(red) /// - legend(label(6 "2 children, SILC"))) /// -(rarea sim_children_3p_h sim_children_3p_l year, sort color(grey%20) /// - legend(label(7 "3+ children, simulated"))) /// -(line valid_children_3p year, sort color(grey) /// - legend(label(8 "3+ children, SILC"))), /// - title("Number of children") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - graphregion(color(white)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - legend(size(small)) /// - note("Notes: Statistics computed at the benefit unit level.", size(vsmall)) - -* Save figure -graph export "$dir_output_files/children/validation_${country}_children_ts_all_both.jpg", /// - replace width(2400) height(1350) quality(100) - - -******************************************************************************** -* 1.1 : Mean values over time, Children under 2 -******************************************************************************** - -* Prepare validation data -use year idbenefitunit dwt dnc02 using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -gen child02 = . -replace child02 = 0 if dnc02 == 0 -replace child02 = 1 if dnc02 > 0 & dnc02 != . - -bys year idbenefitunit: keep if _n == 1 - -* Calculate weighted share of benefit units with 0, 1, 2, 3 or more children -collapse (mean) child02 [aw = dwt], by(year) - -foreach varname in child02 { - rename `varname' valid_`varname' -} - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulated data -use run year idbenefitunit sim_dnc02 using /// - "$dir_data/simulated_data.dta", clear - -gen sim_child02 = . -replace sim_child02 = 0 if sim_dnc02 == 0 -replace sim_child02 = 1 if sim_dnc02 > 0 & sim_dnc02 != . - -bys run year idbenefitunit: keep if _n == 1 - -collapse (mean) sim_child02, by(run year) - -collapse (mean) sim_child02 /// - (sd) sim_child02_sd = sim_child02 /// - , by(year) - -foreach varname in sim_child02 { - - gen `varname'_h = `varname' + 1.96*`varname'_sd - gen `varname'_l = `varname' - 1.96*`varname'_sd - rename `varname' sim_`varname' - -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figures - -twoway (rarea sim_child02_h sim_child02_l year, /// - sort color(green%20) legend(label(1 "Simulated"))) /// -(line valid_child02 year, sort color(green) /// - legend(label(2 "SILC"))), /// - title("With child 0-2 years old") /// - xtitle("Year", size(small)) /// - ytitle("Share", size(small)) /// - graphregion(color(white)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - legend(size(small)) /// - note("Notes: Statistics computed at the benefit unit level.", size(vsmall)) - -* Save figure -graph export "$dir_output_files/children/validation_${country}_young_child_ts_all_both.jpg", /// - replace width(2400) height(1350) quality(100) - -//graph drop _all diff --git a/validation/02_simulation_validation/do_files/06_17_plot_disability.do b/validation/02_simulation_validation/do_files/06_17_plot_disability.do deleted file mode 100644 index 43dd723..0000000 --- a/validation/02_simulation_validation/do_files/06_17_plot_disability.do +++ /dev/null @@ -1,225 +0,0 @@ -/******************************************************************************* -* PROJECT: SimPaths EU -* SECTION: Validation -* OBJECT: Disability -* AUTHORS: Patryk Bronka, Ashley Burdett -* LAST UPDATE: 11/2025 (AB) -* COUNTRY: Poland -******************************************************************************** -* NOTES: -*******************************************************************************/ - -******************************************************************************** -* 1 : Mean values over time -******************************************************************************** -******************************************************************************** -* 1.1 : Mean values over time, Working age, All -******************************************************************************** -* Prepare validation data -use year dwt dlltsd using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -collapse (mean) dlltsd [aw = dwt], by(year) - -save "$dir_data/temp_valid_stats.dta", replace - - -* Prepare simulation data -use year sim_dlltsd run using "$dir_data/simulated_data.dta", clear - -collapse (mean) sim_dlltsd, by(run year) - -collapse (mean) sim_dlltsd (sd) sim_dlltsd_sd = sim_dlltsd, by(year) - -gen sim_dlltsd_high = sim_dlltsd + 1.96*sim_dlltsd_sd -gen sim_dlltsd_low = sim_dlltsd - 1.96*sim_dlltsd_sd - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - - -* Plot figure -twoway (rarea sim_dlltsd_high sim_dlltsd_low year, sort color(green%20) /// - legend(label(1 "Simulated "))) /// -(line dlltsd year, sort color(green) /// - legend(label(2 "SILC "))), /// - title("Disabled/Long-term sick ") /// - xtitle("", size(small)) /// - ytitle("Share", size(small)) /// - legend(size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - note("Notes:Sample contains those aged ${min_age}-${max_age}.", size(vsmall)) - -graph export /// -"$dir_output_files/disability/validation_${country}_disability_ts_${min_age}_${max_age}_both.jpg", /// - replace width(2400) height(1350) quality(100) - - -******************************************************************************** -* 1.2 : Mean values over time, Working age, By gender -******************************************************************************** -* Prepare validation data -use year dwt dlltsd dgn using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -collapse (mean) dlltsd [aw = dwt], by(year dgn) - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulation data -use year sim_dlltsd run dgn using "$dir_data/simulated_data.dta", clear - -gen dgn2 = 0 if dgn == "Female" -replace dgn2 = 1 if dgn == "Male" - -drop dgn -rename dgn2 dgn - -collapse (mean) sim_dlltsd, by(run year dgn) - -collapse (mean) sim_dlltsd (sd) sim_dlltsd_sd = sim_dlltsd, by(year dgn) - -gen sim_dlltsd_high = sim_dlltsd + 1.96*sim_dlltsd_sd -gen sim_dlltsd_low = sim_dlltsd - 1.96*sim_dlltsd_sd - -merge 1:1 year dgn using "$dir_data/temp_valid_stats.dta", keep(3) nogen - - -twoway (rarea sim_dlltsd_high sim_dlltsd_low year if dgn == 0, sort color(green%20) /// - legend(label(1 "Female, simulated"))) /// -(line dlltsd year if dgn == 0, sort color(green) /// - legend(label(2 "Female, SILC "))) /// - (rarea sim_dlltsd_high sim_dlltsd_low year if dgn == 1, sort color(red%20) /// - legend(label(3 "Male, simulated"))) /// -(line dlltsd year if dgn == 1, sort color(red) /// - legend(label(4 "Male, SILC"))), /// -title("Disabled/Long-term sick by gender ") xtitle("", size(small)) /// - ytitle("Share", size(small)) /// - legend(size(small)) /// - xlabel(, labsize(small)) /// - ylabel(, labsize(small)) /// - graphregion(color(white)) /// - note("Notes:Sample contains those aged ${min_age}-${max_age}.", size(vsmall)) - -graph export /// -"$dir_output_files/disability/validation_${country}_disability_ts_${min_age}_${max_age}_male_female.jpg", /// - replace width(2560) height(1440) quality(100) - - -******************************************************************************** -* 1.2 : Mean values over time, Working age, By age -******************************************************************************** - -* Prepare validation data -use year dwt dlltsd dgn ageGroup using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -drop if ageGroup == 0 | ageGroup == 8 - -collapse (mean) dlltsd [aweight=dwt], by(ageGroup year) - -drop if missing(ageGroup) - -reshape wide dlltsd, i(year) j(ageGroup) - -forvalues i = 1(1)7 { - rename dlltsd`i' dlltsd_`i'_valid -} - -save "$dir_data/temp_valid_stats.dta", replace - -* Prepare simulation data -use run year sim_dlltsd ageGroup using "$dir_data/simulated_data.dta", clear - -collapse (mean) sim_dlltsd, by(ageGroup run year) - -drop if missing(ageGroup) - -reshape wide sim_dlltsd, i(year run) j(ageGroup) - -forvalues i = 1(1)7{ - - rename sim_dlltsd`i' dlltsd_`i'_sim - -} - -collapse (mean) dlltsd* /// - (sd) sd_dlltsd_1_sim = dlltsd_1_sim /// - sd_dlltsd_2_sim = dlltsd_2_sim /// - sd_dlltsd_3_sim = dlltsd_3_sim /// - sd_dlltsd_4_sim = dlltsd_4_sim /// - sd_dlltsd_5_sim = dlltsd_5_sim /// - sd_dlltsd_6_sim = dlltsd_6_sim /// - sd_dlltsd_7_sim = dlltsd_7_sim /// - , by(year) - -forvalues i = 1(1)7 { - - gen dlltsd_`i'_sim_high = dlltsd_`i'_sim + 1.96*sd_dlltsd_`i'_sim - gen dlltsd_`i'_sim_low = dlltsd_`i'_sim - 1.96*sd_dlltsd_`i'_sim - -} - -merge 1:1 year using "$dir_data/temp_valid_stats.dta", keep(3) nogen - -* Plot figures -foreach vble in "dlltsd" { - - twoway (rarea `vble'_1_sim_high `vble'_1_sim_low year, /// - sort color(red%20) legend(label(1 "Simulated") position(6) rows(1))) /// - (line `vble'_1_valid year, sort legend(label(2 "SILC"))), /// - title("age 15-19") name(`vble'_1, replace) ylabel(0 [0.05] 0.1) /// - graphregion(color(white)) - - twoway (rarea `vble'_2_sim_high `vble'_2_sim_low year, /// - sort color(red%20) legend(label(1 "Simulated") position(6) rows(1))) /// - (line `vble'_2_valid year, sort legend(label(2 "SILC"))), /// - title("age 20-24") name(`vble'_2, replace) ylabel(0 [0.05] 0.1) /// - graphregion(color(white)) - - twoway (rarea `vble'_3_sim_high `vble'_3_sim_low year, /// - sort color(red%20) legend(label(1 "Simulated") position(6) rows(1))) /// - (line `vble'_3_valid year, sort legend(label(2 "SILC"))), /// - title("age 25-29") name(`vble'_3, replace) ylabel(0 [0.05] 0.1) /// - graphregion(color(white)) - - twoway (rarea `vble'_4_sim_high `vble'_4_sim_low year, /// - sort color(red%20) legend(label(1 "Simulated") position(6) rows(1))) /// - (line `vble'_4_valid year, sort legend(label(2 "SILC"))), /// - title("age 30-34") name(`vble'_4, replace) ylabel(0 [0.05] 0.1) /// - graphregion(color(white)) - - twoway (rarea `vble'_5_sim_high `vble'_5_sim_low year, /// - sort color(red%20) legend(label(1 "Simulated") position(6) rows(1))) /// - (line `vble'_5_valid year, sort legend(label(2 "SILC"))), /// - title("age 35-39") name(`vble'_5, replace) ylabel(0 [0.05] 0.1) /// - graphregion(color(white)) - - twoway (rarea `vble'_6_sim_high `vble'_6_sim_low year, /// - sort color(red%20) legend(label(1 "Simulated") position(6) /// - rows(1)))(line `vble'_6_valid year, sort /// - legend(label(2 "SILC"))), /// - title("age 40-59") name(`vble'_6, replace) ylabel(0 [0.05] 0.1) /// - graphregion(color(white)) - - twoway (rarea `vble'_7_sim_high `vble'_7_sim_low year, /// - sort color(red%20) legend(label(1 "Simulated") position(6) rows(1))) /// - (line `vble'_7_valid year, sort legend(label(2 "SILC"))), /// - title("age 60-65") name(`vble'_7, replace) ylabel(0 [0.05] 0.1) /// - graphregion(color(white)) - -} - -grc1leg dlltsd_1 dlltsd_2 dlltsd_3 dlltsd_4 dlltsd_5 dlltsd_6 /// - dlltsd_7 , title("Disabled/Long-term sick by age") legendfrom(dlltsd_1) /// - graphregion(color(white)) /// - note("Notes:", size(vsmall)) - - -graph export /// -"$dir_output_files/disability/validation_${country}_disability_ts_all_both.jpg", /// - replace width(2400) height(1350) quality(100) - - -graph drop _all diff --git a/validation/02_simulation_validation/do_files/07_01_correlations.do b/validation/02_simulation_validation/do_files/07_01_correlations.do deleted file mode 100644 index e8cc947..0000000 --- a/validation/02_simulation_validation/do_files/07_01_correlations.do +++ /dev/null @@ -1,153 +0,0 @@ -/******************************************************************************* -* PROJECT: SimPaths EU -* SECTION: Validation -* OBJECT: Correlation -* AUTHORS: Patryk Bronka, Ashley Burdett -* LAST UPDATE: 11/2025 (AB) -* COUNTRY: Poland -******************************************************************************** -* NOTES: This file calculates correlations between variables of -* interest, in observed and simulated data -* -* List of variables considered. Name : simulated : validation -* -* 1. disposable income per benefit unit : sim_y_disp_yr_bu : -* valid_y_disp_yr_bu -* 2. labour market status : sim_employed, sim_student, -* sim_inactive, sim_retired : valid_employed, -* valid_student, valid_inactive, valid_retired -* -*******************************************************************************/ - -global sim_varlist sim_employed sim_inactive sim_retired sim_edu_high /// - sim_edu_med sim_edu_low sim_y_gross_yr_bu sim_yplgrs_dv_lvl_bu /// - sim_ypncp_lvl_bu sim_y_disp_yr_bu equivalisedincome /// - /*obs_earnings_hourly*/ hoursworkedweekly sim_dcpst_s /// - sim_dcpst_p dhe - -global valid_varlist valid_employed valid_inactive valid_retired /// - valid_edu_high valid_edu_med valid_edu_low valid_y_gross_bu_yr /// - valid_y_gross_labour_bu_yr valid_y_gross_capital_bu_yr /// - valid_y_disp_bu_yr valid_y_eq_disp_bu_yr /*valid_wage_hour*/ valid_lhw /// - valid_dcpst_s valid_dcpst_p dhe - -* Simulated correlations - -use run year ${sim_varlist} using "$dir_data/simulated_data.dta", clear - -lab var dhe "Health" -lab var sim_employed "Employed" -lab var sim_inactive "Non-employed" -lab var sim_retired "Retired" -lab var sim_edu_high "High education" -lab var sim_edu_med "Medium education" -lab var sim_edu_low "Low education" -lab var sim_y_disp_yr_bu "Disposable income" -lab var sim_y_gross_yr_bu "Gross income" -lab var sim_yplgrs_dv_lvl_bu "Gross labour income" -lab var sim_ypncp_lvl_bu "Capital income" -lab var sim_ypnoab_lvl_bu "Private pension income" -lab var equivalisedincome "Equivalised disposable income" -//lab var potential_earnings_hourly "Hourly wage" -lab var hoursworkedweekly "Hours worked" -lab var sim_dcpst_s "Single" -lab var sim_dcpst_p "Partnered" - -keep if run == 1 - -quietly correlate ${sim_varlist} -matrix CS = r(C) - -heatplot CS, values(format(%3.2f) size(1.1)) cuts(-1.05(.1)1.05) /// - color(hcl diverging, intensity(.6)) legend(off) aspectratio(1) /// - lower label xlabel(, angle(90) labsize(vsmall)) /// - ylabel(, labsize(vsmall)) title("Simulated") name(sim_corr, replace) /// - graphregion(color(white)) - -* Save figure -graph export /// - "$dir_output_files/correlations/validation_correlations_simulated_${min_age}_${max_age}.jpg", /// - replace width(2560) height(1440) quality(100) - - -* SILC correlations -use year dwt ${valid_varlist} using /// - "$dir_data/${country}-eusilc_validation_sample_long.dta", clear - -lab var dhe "Health" -lab var valid_employed "Employed" -lab var valid_inactive "Non-employed" -lab var valid_retired "Retired" -lab var valid_edu_high "High education" -lab var valid_edu_med "Medium education" -lab var valid_edu_low "Low education" -lab var valid_y_disp_bu_yr "Disposable income" -lab var valid_y_gross_bu_yr "Gross income" -lab var valid_y_gross_labour_bu_yr "Gross labour income" -lab var valid_y_gross_capital_bu_yr "Capital income" -//lab var pension_income_bu "Private pension income" -lab var valid_y_eq_disp_bu_yr "Equivalised disposable income" -//lab var valid_wage_hour "Hourly wage" -lab var valid_lhw "Hours worked" -lab var valid_dcpst_p "Partnered" -lab var valid_dcpst_s "Single" - -replace valid_lhw = 0 if valid_inactive == 1 | valid_retired == 1 - -quietly correlate ${valid_varlist} - -matrix CV = r(C) - -heatplot CV, values(format(%3.2f) size(1.1)) cuts(-1.05(.1)1.05) /// - color(hcl diverging, intensity(.6)) legend(off) aspectratio(1) /// - lower label xlabel(, angle(90) labsize(vsmall)) /// - ylabel(, labsize(vsmall)) title("Observed") name(obs_corr, replace) /// - graphregion(color(white)) - - -* Save figure -graph combine sim_corr obs_corr, title("Correlation coefficients") /// - note("Notes: Ages 18-65 included. ", size(vsmall)) graphregion(color(white)) - - -graph export /// -"$dir_output_files/correlations/validation_correlations_simulated_observed_${min_age}_${max_age}.png", /// - replace width(2560) height(1440) - -/* -Calculate the difference and absolute difference matrix -*/ - -matrix CDiff = CS - CV -//matewmf CDiff CDiffAbs, f(abs) - -/* -* Heatplot for the distance matrix -heatplot CDiff, values(format(%3.2f) size(tiny)) cuts(-1.05(.1)1.05) /// - color(hcl diverging, intensity(.6)) legend(off) aspectratio(1) /// - lower label xlabel(, angle(45) labsize(small)) /// - ylabel(, labsize(small)) /// - title("Distance between simulated" "and observed correlations") - -* Save figure -graph export /// - "$dir_output_files/validation_correlations_distance_${min_age}_${max_age}.jpg", /// - replace width(2560) height(1440) quality(100) -*/ - -* Heatplot for the difference matrix -heatplot CDiff, values(format(%3.2f) size(tiny)) cuts(-1.05(.1)1.05) /// - color(hcl diverging, intensity(.6)) legend(off) aspectratio(1) /// - lower label xlabel(, angle(90) labsize(vsmall)) /// - ylabel(, labsize(vsmall)) /// - title("Difference between simulated" "and observed correlations") /// - note("Positive values indicate that simulated correlation was stronger than observed", size(vsmall)) graphregion(color(white)) - -* Save figure -graph export /// -"$dir_output_files/correlations/validation_correlations_difference_${min_age}_${max_age}.jpg", /// - replace width(2560) height(1440) quality(100) - - -graph drop _all - diff --git a/validation/02_simulation_validation/do_files/07_create_euromod_validation_targets.do b/validation/02_simulation_validation/do_files/07_create_euromod_validation_targets.do deleted file mode 100644 index 5cb5a93..0000000 --- a/validation/02_simulation_validation/do_files/07_create_euromod_validation_targets.do +++ /dev/null @@ -1,116 +0,0 @@ -/* -This file pre-processes observed output data from EUROMOD, which will be used for validation of SimPaths. - -Author: Ashley Burdett -Last modified: April 2025 - - - -*/ -clear all - -local bu_headid = "tu_cbfam_hu_headid" - -* Import the data - -forvalues year = 2011/2023 { - - insheet using "$dir_euromod_data/${country_lower}_`year'_std.txt", clear - - gen year = `year' - - save "$dir_work/${country}_EM_`year'.dta", replace - -} - -* Append data - -use "$dir_work/${country}_EM_2011.dta" - -forvalues year = 2012/2023 { - - append using "$dir_work/${country}_EM_`year'.dta" - -} - -* Formatting of ids -format idhh %-18.0g -format tu_household_hu_headid %-18.0g -format tu_cbfam_hu_headid %-18.0g -format tu_cpfam_hu_headid %-18.0g -format idperson %-18.0g -format idmother %-18.0g -format idfather %-18.0g -format idpartner %-18.0g - - -* Benefit unit dispoaable income - -* Real terms -gen CPI = . - -replace CPI = 68.98 if year == 2005 -replace CPI = 71.76 if year == 2006 -replace CPI = 77.45 if year == 2007 -replace CPI = 82.12 if year == 2008 -replace CPI = 85.43 if year == 2009 -replace CPI = 89.47 if year == 2010 -replace CPI = 92.98 if year == 2011 -replace CPI = 98.24 if year == 2012 -replace CPI = 99.92 if year == 2013 -replace CPI = 99.94 if year == 2014 -replace CPI = 100 if year == 2015 -replace CPI = 100.45 if year == 2016 -replace CPI = 102.84 if year == 2017 -replace CPI = 105.84 if year == 2018 -replace CPI = 109.46 if year == 2019 -replace CPI = 113.15 if year == 2020 -replace CPI = 119.04 if year == 2021 -replace CPI = 137.22 if year == 2022 -replace CPI = 160.59 if year == 2023 - -lab var CPI "HICP, all items, base 2015" - -gen ind_disp_y = ils_dispy / (CPI/100) - - -* Collapse by benefit unit head id -preserve - -collapse (sum) ind_disp_y, by(`bu_headid' year) - -rename ind_disp_y em_bu_disp_y - -save "$dir_work/${country}_EM_collapse.dta", replace - -restore - -merge m:1 `bu_headid' year using "$dir_work/${country}_EM_collapse.dta" -drop _m - - -* Equivalised disposable income -gen depChild = 1 if (dag >= 0 & dag <= 18) -bys year idhh `bu_headid': egen dnc = sum(depChild) -lab var dnc "Number of dependent children 0 - 18" - -* Generate modified-OECD equivalence scale: 1 for the household head, 0.5 for -* additional adults, 0.3 for children < 14 years old -bys year idhh `bu_headid': gen people_in_hh = _N -gen child = (dag < 14) -bys year idhh `bu_headid': egen children_in_hh = total(child) -gen other_adults = people_in_hh - children_in_hh - 1 - // -1 for the household head - -gen equiv_factor = 1 + (0.5 * other_adults) + (0.3 * children_in_hh) - // Start with 1 because each household must have at least the head -la var equiv_factor "OECD-modified scale equivalence factor" - -gen em_bu_eq_disp_y = em_bu_disp_y / equiv_factor - -drop child people_in_hh child children_in_hh other_adults - - -rename em_bu_disp_y valid_y_disp_yr_bu - -save "$dir_work/${country}_EM_validation_data.dta", replace From 20dbfa212ef1de45691fb978baa3b60af86a3871 Mon Sep 17 00:00:00 2001 From: Ashley Burdett <76621383+ANBurdett@users.noreply.github.com> Date: Fri, 1 May 2026 17:25:42 +0100 Subject: [PATCH 02/13] Delete input_processing/.DS_Store --- input_processing/.DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 input_processing/.DS_Store diff --git a/input_processing/.DS_Store b/input_processing/.DS_Store deleted file mode 100644 index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 Date: Fri, 1 May 2026 17:25:56 +0100 Subject: [PATCH 03/13] Delete input_processing/regression_estimates/PL/.DS_Store --- .../regression_estimates/PL/.DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 input_processing/regression_estimates/PL/.DS_Store diff --git a/input_processing/regression_estimates/PL/.DS_Store b/input_processing/regression_estimates/PL/.DS_Store deleted file mode 100644 index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 Date: Fri, 1 May 2026 17:26:17 +0100 Subject: [PATCH 04/13] Delete input_processing/data_construction/PL/.DS_Store --- input_processing/data_construction/PL/.DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 input_processing/data_construction/PL/.DS_Store diff --git a/input_processing/data_construction/PL/.DS_Store b/input_processing/data_construction/PL/.DS_Store deleted file mode 100644 index c0ceae585562ab11ba2117e708b8485ff9aad42c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKQAz_r3{A8`K`8z7&pCp;bg3T7~V-Qfl!>nA>;{f4r72lL%d0EdB`E z1ZG}lCYep%vNIbZ;_1_3LNq3#A(|kI(jzk6yL4p6CqT}7%;=i7G@~`}Z-~S`qC0w~ z4WizS|B)KHr&up1)oon0n$G#lKKoTH%XuB=umfqSeSLes-0!pau}}N38`p(|_iY~A zYTeYaS;7wQ%EcLQ2AlzB;D8yhdti8az#Mq$&VVz}&w!i{0Zp(lOp5vFK$lAZ-~iKE zpi37Rkku%^7{4)l4P*&v>N!i`{B|W)o1KJImh}b1jAkaHM0T{?R ga+Vi$J%|pw!Z0byE;66pf&L?q3GvPu_yq<&09UX Date: Fri, 1 May 2026 17:26:47 +0100 Subject: [PATCH 05/13] Delete validation/02_simulation_validation/.DS_Store --- validation/02_simulation_validation/.DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 validation/02_simulation_validation/.DS_Store diff --git a/validation/02_simulation_validation/.DS_Store b/validation/02_simulation_validation/.DS_Store deleted file mode 100644 index 8a100a3824455423525b4c2f1eff3f7fa0033fa1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK%}T>S5T0$TO(;SS3WAq_*NQD|>A_2g^#zRRL8UgNYA|L?liEWm%%-U~ zoLtiEOv*SY>|t;ojb?-T_OVQ|VU&y}svrtSm~wRyC83;oa+-vxs`Yiiwk>;5-QZ5@7($n$-!XZv!Ca#*2ccHR=a`j+xuFQPI{F=z4#L&QBQwAZ zEHhBn(>nG4lke~U%SAk62AF|=#ek^v{l14=GQD+WbJS}c)EiV1%F8u=l%SznG3HV$ d-bGb{euoT1*I=#@Jt+JmplINM8TeHO-T@WJO@{yg From e4df20ad6e782ab9f5d9dfd0cf571a04461c8b36 Mon Sep 17 00:00:00 2001 From: Ashley Burdett <76621383+ANBurdett@users.noreply.github.com> Date: Fri, 1 May 2026 17:27:04 +0100 Subject: [PATCH 06/13] Delete validation/02_simulation_validation/do_files/.DS_Store --- .../02_simulation_validation/do_files/.DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 validation/02_simulation_validation/do_files/.DS_Store diff --git a/validation/02_simulation_validation/do_files/.DS_Store b/validation/02_simulation_validation/do_files/.DS_Store deleted file mode 100644 index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 Date: Fri, 1 May 2026 17:54:05 +0100 Subject: [PATCH 07/13] Delete input_processing/data_construction/PL/extra_var_info/.DS_Store --- .../PL/extra_var_info/.DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 input_processing/data_construction/PL/extra_var_info/.DS_Store diff --git a/input_processing/data_construction/PL/extra_var_info/.DS_Store b/input_processing/data_construction/PL/extra_var_info/.DS_Store deleted file mode 100644 index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 Date: Sat, 2 May 2026 12:07:45 +0100 Subject: [PATCH 08/13] Improved files organisation --- ...L_InitialPopulations_column_mapping_AB.xlsx | Bin 15147 -> 0 bytes ....xlsx => SimPathsEU_Variable_Codebook.xlsx} | Bin .../SimPathsEU_Variable_Codebook_changes.xlsx | Bin 14077 -> 0 bytes .../SimPaths_Variable_CodebookUK.xlsx | Bin 99519 -> 0 bytes .../TargetsPlots/disability_targets_ts.gph | Bin 6464 -> 0 bytes .../TargetsPlots/disability_targets_ts.png | Bin 154664 -> 0 bytes .../TargetsPlots/employment_targets_ts.gph | Bin 17806 -> 0 bytes .../TargetsPlots/employment_targets_ts.png | Bin 200113 -> 0 bytes .../TargetsPlots/inSchool_targets_ts.gph | Bin 6462 -> 0 bytes .../TargetsPlots/inSchool_targets_ts.png | Bin 148771 -> 0 bytes .../partnered_BUlogic_targets_ts.gph | Bin 6509 -> 0 bytes .../partnered_BUlogic_targets_ts.png | Bin 156548 -> 0 bytes .../TargetsPlots/retirement_targets_ts.gph | Bin 6480 -> 0 bytes .../TargetsPlots/retirement_targets_ts.png | Bin 136922 -> 0 bytes .../alignment_targets_disability.xlsx | Bin 4822 -> 0 bytes .../alignment_targets_employment.xlsx | Bin 12493 -> 0 bytes .../alignment_targets_inSchool.xlsx | Bin 4743 -> 0 bytes .../alignment_targets_partnered_share.xlsx | Bin 4802 -> 0 bytes .../alignment_targets_retirement.xlsx | Bin 4698 -> 0 bytes input/SimPaths_Variable_Codebook.xlsx | Bin 18684 -> 0 bytes ...tion_income_thresholds_from_EUROMOD_2018.do | 7 ++----- .../key_function_income_thresholds_2018.xlsx | Bin 22 files changed, 2 insertions(+), 5 deletions(-) delete mode 100644 documentation/PL_InitialPopulations_column_mapping_AB.xlsx rename documentation/{SimPathsEU_Variable_Codebook_updated.xlsx => SimPathsEU_Variable_Codebook.xlsx} (100%) delete mode 100644 documentation/SimPathsEU_Variable_Codebook_changes.xlsx delete mode 100644 documentation/SimPaths_Variable_CodebookUK.xlsx delete mode 100644 input/PL/DoFilesTargets/TargetsPlots/disability_targets_ts.gph delete mode 100644 input/PL/DoFilesTargets/TargetsPlots/disability_targets_ts.png delete mode 100644 input/PL/DoFilesTargets/TargetsPlots/employment_targets_ts.gph delete mode 100644 input/PL/DoFilesTargets/TargetsPlots/employment_targets_ts.png delete mode 100644 input/PL/DoFilesTargets/TargetsPlots/inSchool_targets_ts.gph delete mode 100644 input/PL/DoFilesTargets/TargetsPlots/inSchool_targets_ts.png delete mode 100644 input/PL/DoFilesTargets/TargetsPlots/partnered_BUlogic_targets_ts.gph delete mode 100644 input/PL/DoFilesTargets/TargetsPlots/partnered_BUlogic_targets_ts.png delete mode 100644 input/PL/DoFilesTargets/TargetsPlots/retirement_targets_ts.gph delete mode 100644 input/PL/DoFilesTargets/TargetsPlots/retirement_targets_ts.png delete mode 100644 input/PL/DoFilesTargets/alignment_targets_disability.xlsx delete mode 100644 input/PL/DoFilesTargets/alignment_targets_employment.xlsx delete mode 100644 input/PL/DoFilesTargets/alignment_targets_inSchool.xlsx delete mode 100644 input/PL/DoFilesTargets/alignment_targets_partnered_share.xlsx delete mode 100644 input/PL/DoFilesTargets/alignment_targets_retirement.xlsx delete mode 100644 input/SimPaths_Variable_Codebook.xlsx rename documentation/key_function_income_thresholds_clean2018.xlsx => input_processing/key_function_income_thresholds_2018.xlsx (100%) diff --git a/documentation/PL_InitialPopulations_column_mapping_AB.xlsx b/documentation/PL_InitialPopulations_column_mapping_AB.xlsx deleted file mode 100644 index 0b9d79b3be2bbd853f8842b852e7edd3ed64c340..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15147 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 C4GTm7 diff --git a/documentation/SimPathsEU_Variable_Codebook_updated.xlsx b/documentation/SimPathsEU_Variable_Codebook.xlsx similarity index 100% rename from documentation/SimPathsEU_Variable_Codebook_updated.xlsx rename to documentation/SimPathsEU_Variable_Codebook.xlsx diff --git a/documentation/SimPathsEU_Variable_Codebook_changes.xlsx b/documentation/SimPathsEU_Variable_Codebook_changes.xlsx deleted file mode 100644 index a5d4736fca1139d3f55e80c5af0ad9b5bab4a29b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14077 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 HzrOu{FNT%B diff --git a/documentation/SimPaths_Variable_CodebookUK.xlsx b/documentation/SimPaths_Variable_CodebookUK.xlsx deleted file mode 100644 index a14bd3544839d42ae182fa5cb02770328d8ca248..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99519 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 R@?tmuBhZ$J*RN>*e*jg<=z#zL diff --git a/input/PL/DoFilesTargets/TargetsPlots/disability_targets_ts.gph b/input/PL/DoFilesTargets/TargetsPlots/disability_targets_ts.gph deleted file mode 100644 index 8b25806adcc5f8792822159382e4663777750efa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6464 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
=?aCxYqd!U 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 diff --git a/input/PL/DoFilesTargets/TargetsPlots/employment_targets_ts.gph b/input/PL/DoFilesTargets/TargetsPlots/employment_targets_ts.gph deleted file mode 100644 index 79955a8f9ffa9866fab98b1ab36d3886ad021842..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17806 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

+c~W$S%&)!#vxS}Z3>$AlZacY=!2 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¯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 diff --git a/input/PL/DoFilesTargets/TargetsPlots/partnered_BUlogic_targets_ts.png b/input/PL/DoFilesTargets/TargetsPlots/partnered_BUlogic_targets_ts.png deleted file mode 100644 index 8432a5380d271d404f300e3636a73f3b3543a678..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 156548 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 x*^6!z08Q2m8a`;D~bZF(g2u?c+V+ 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� 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 diff --git a/input/PL/DoFilesTargets/TargetsPlots/retirement_targets_ts.png b/input/PL/DoFilesTargets/TargetsPlots/retirement_targets_ts.png deleted file mode 100644 index 822af978f72395a764b5eb37535b3a78a074710f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136922 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
    *9+_JJlffiMD%p&j@6YK;FX=Y|D7Z=cwF&c z#bZ*#qp1^~c{Ae>LPU};|CoyUg%&c){j;rz_xO&W6NKVhcGNq>KXcGyDqZ}=+W1S^ zbY2_UzOA((yv(m0AN*mFLum%6g+u)e>bUFs31&UrCe)~Ep%LJ z2tSNA{q*=oz^+!+^wQ@P7b>X)-h&oZQjOD9B#?*9bd-j9u6K;(w6w@8&*s~T-mB31 z1^kiHYJfA^{NNa2+vUx&Kgx(HArA)U;-?#ul_1=#TZe9NB{Y6*`CAd!#Qj z+d6ebsA_f^*E~#?DCDym^eC*e&E|7r#2=Lhh81w z9h%KKn7jV*DlhKqJ(AQoKWdV2Hp&i%ZRCX6I9SX6TF3*KD zC(KJ%L-u3Cl{ZShoT%R8=0TUC?pEFX^kvLHjQiV_7<$b3xpk(#W0>AdPQay={poM3}H;m$8}<&)&JqH*eN#DTf_r2xU4S#JzVGOYc0t zlpx>Z>Ox-||COHu(-b~cw_4-omUMF@((77EUh=eZ5UY-AbqIgoQbcjvE(*I!jf>A9 zNfjb1l34nXV)%@)%Ds%YR{~^KrsqanUS~Qv)ISysaULc^cLe$R(rl*iYS88wD6%GQ zBSqrO%+dwL=ezE7&~2~uBZlpl{@@YE`p3#8&!GU_7T0vTJV~G1p+et|eXzW?FuG?d zzr2g9;HY9uHKVXKLurIA-VwPO+kU;pE%_bGq76 z_Tw+XV`}U1Bnv8iA!vR4oO%^Yg`wjdg1ok8aT+|QW1vdJmd4~Kw9_ZSyiMIk#Qu`*l27KIKlbbwHl9c9I) z;nGptq}wvqDi9)?sb@JhzPb-OB=6PIZuRyOrO_D^1d4NQ8{KbpM@KR!;tI`s^}PAR zA_XV2J;sC4;@1zIckJs_eT zrtdWlY^%Ak^3iAKb^`##)rER}b$xsIDwew|Nl*kY+6-?ezh%-qIU8$8x1#l6P9yW= z)l#kk@fYFdyW92AI?0TTbT`agB+GU6i!D{aUHRfefU*5{zOgkV-_{x3Ivbk#e-JkGQl6yy# ztmB}Vx?)`{?$Ly%FneiaXFCBXpNho60F`K|*Yu;e`V^S&w2#B3S!`J57yB}dDGM$S z9y80Ca({%Rw#XJXZa?1AQ6+)~$DK#!q+3Q;rBAY!)8)fXc>(T+?7<<6GFRQv^zj7T zkSWq1w)5J^pCe3S9Je7Vjy$be9jX}6X4F`qQIl%yu*y^XiKb#Yze-u2cz&#fWijD3 zwgbHDs(mYFGS=271*ux~fo5wq?END|Mlh%Jp~vtz+Wcg?6rW+oM=_S9Lg%)}Uz-;B zM0&#&Ckg}sxKikN{IiN5D7}qZ7pQdzJ z-TDd8YcORl78cmQSw|PW+XVX`ik?6c+cXIVgsbRgP60JKmq1f+rRF_Ft5tFQsH@Di z2LZc@eh_8u=RZIEWrT8R$beVd$#mHx`Bs7!Luep(P_W>{8kL*uJrBcbkDVESG!{

    wNNBm&Yg*QqY- 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 diff --git a/input/PL/DoFilesTargets/alignment_targets_disability.xlsx b/input/PL/DoFilesTargets/alignment_targets_disability.xlsx deleted file mode 100644 index 1447c247ad29cc4fb523e46086274718c326a815..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4822 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 bu0NunlC!!BCMq=(0f+#F2rlFEB0c{fDl+@a diff --git a/input/PL/DoFilesTargets/alignment_targets_inSchool.xlsx b/input/PL/DoFilesTargets/alignment_targets_inSchool.xlsx deleted file mode 100644 index 6cd2c339d404440941b39fe9782e71bf0d30650d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4743 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 B=^X$7 diff --git a/input/PL/DoFilesTargets/alignment_targets_partnered_share.xlsx b/input/PL/DoFilesTargets/alignment_targets_partnered_share.xlsx deleted file mode 100644 index 19c680b0ce9e021e5619428870ed7879f9980bb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4802 zcmZ`-2Ut@{*A5+}3TPlm6Bh`*i!5DwGxXjGAT3IlDj-rLB|*AK5s)rLdM_$S4001%Is!h77un?Sw8V3N#!vg@Q z0W<)UJ1|!dsH=yC?!)^~cQale7iSy*<(V170bpIR=tJ~scJNaw1a)m(>(XqHA^roM z-AWb5!DP9jV%^0z;i_`V_!dkhhYnG=sUP_1Pj@>-uWI^gIrg8j#yX$Lzyi1(C2@I0 z>xc8NYC9V8#M2q@k;QDN+Ss9K9gq)2DuFdaa&Fa_)3uQyZz>Dl$+DekIn*ASX_6_2uMfVe906V$%wb`3$xdgWx~ z@*}lRYN??~xF@=iE++3~4Fgf&$N1lZBM0&1OO(wc?S{Wh4sva-r=XFEPon~jrTq>6 zjN9H@FJ|U`Z4Z^)K$*-~I7vhYFG4F9@O>9$8x=Acw>FpqK_~Ae-pqOq9<8VHK`z8~ z2;GFAiwV>Ish6}sUUs2PHXV`Zj0wCu!e8*6qp4`c6`CFxw^siNBOgSK64 z-FVuq^o)!5GOf;rQhyF;sK+o)DJdg3BoW;EqAtlX0kmJry({4_XxV3*K?*`Vf-c^@ zJOX#%6eKm=-PjwTAq&;=x#3x}G#uMihF|^$NI4lu(pb9p-SU|5Vh4}PZ8^s zSRQHhf=*uMP)T7I2R)%s`0U071M7dApjGfvk196 zSh+!Mbv)eex!Sw`HMX#JEU>;;pix zev4yzb?}H)D{cWgInRW~>-vz#b&+qP`j^x|JU!LDVO_2V##Ss1Z9lRLn$o=6?UbjN zDsTu8?P^Q~J|@Mu5yMNQkBdnb?sTWjFPYT@S{2qOmZa5jN8zEGK}f=$_#hf^+rG5^ zfWWlbhEOyxo0<}z;Ie4!5b@+vT>f0Zn_Q#y!EBw1$QAlOwQhXMvGZ^olNmg$5U)>m z&f-r|oe=^7-#2l_i3(==u-d^pM9rJ+-2mvFnaj;HsGn!cUhiCxcd4v%peH_a?K z^!cYarMWZ~*nnRE2)Ky?PbwCoQmN_@Y>l9=1@ZPd9N{lHfgx^0D+o!|AGxESH{-AM ztaiR)@a;B9on&LoDblMw@)aWaL6CI4evj?`bk8*PYZF*!n(G(#mg{BWjHKaK5)pSL z-BaSm7uT=*8yXO;k5&2cyH5YKeQHqDEX+vlWSg-k*O@t|Z#cJTe>&O{-Ev@HJz=<4 zqZlw6n-*g?Cg$CH+SEHKH8<9AYOinF=-TCjpQPuFcO}Rn@9xEX)L3b<&;R$wnSC-LWKQ~vn+g6fi}JXmL^ZQi)SyT?DMir%yC`kZhQRDRO6 zrFWz8T@z;qN(<^%d=d#&EdS8zCfJ*9nG*Wd_8CE21)%pm_c#3B+lHEUbMUq_o#lQTkVS--`<6>n_;wjHP)j@F1 zL<=6BiR!kViE_@#joj-815U(q-b52dHX_MaN?t6*L2&55hN@bS#azz7 z6)*6A#7$pSbljfC*9iOE`Y?({kuj2NfVgj*X&+=bO;@Ql8GE>M1064Z{cusJFzDh8 z9Zp&^`x;XPL=XW0wEv5vy8{&J;m&t<5%{ZW!1`c;^~VC92*Xwl-7TufUDoE!Abj1D zLdSqx8dEd*ZODR~iYmtSuogU<4qW9#%Bb!1AaAKz#D_JhG>x74`sSTgiSSFkLgV^@ zMm1%dN4sVDFt!$x4_?iF%j5lIbYV5e5*8F4UdA*5)m|DCcaO%ZbBq1Qk$5}}2%Xp!%n3d`nFEByRs1B?7CUnZD;*N{AtjMFhk>|dTQH#VB+M&yfJ8s z?|IT@`s$tN=#Tjw^MM`{!zDeteLqKjG&dZ0N)Fn-lMmt!cN17X;?2p!yQ;Iww8k>P zQJTN~Hl#0#LKVVL9qvw+pijvf%pc4@;Lr|X%8tj0v6KaJ+op2l-RA$IE!bVByCa^- zE=A!_y)U*vWG1tq##1G%o-KQC$n;xuComYsni;z%3-l?paN?o^L6P#jrJK-&-j2Zj z8x}DbgTzL#k;46wI>8s6@ROoWgJ6nyKBc1f#ShgB$T+Yt+zLuFZna>`*u>)L*ipeuOP2=Dv}hGZn`W?wF2W|iWr%UJxfxe z_dLq7cRX^WTQxPUSwdszRz7O7$Rs1>_!ZnaNpbr+;N)#71}wIax1>H+A1RrgKeVFl z&|YW@$Ht6>FV@7OUx&KI-mDAAROnGwuj1&B4>I?pr`dA+M%Uk$tW?{4`+}1P^Cv5vRlj#tNezw+h88y<=30En}S7 zJ!S&chiidExhv)U^PfL;gl+As=?|qivFc{92u5mkI^|u~`XRLSZFBWr*z?UQy#ojG z^r?3fPKd0~>OMl74sug%AuY193~f%HSDs2uZ}W!IuO+3~h9ShvEmaiYrH|o(kF$ET z`J44tZa#D=qwM2yG&6Lkgx3unkRDEvy|qUvDlIF}LY~+?-epu;9}0zB(`%7O_!9SsK5Vp^%zH z=gX32kieXt4{Wz+Gr=p(Svy`uihG6c-njF?zRP>2ruTk}r|!>$=bVRGlNP2c6k{&k zpGIm>!xE!~a8q<=nALO_iER8Poww9Cm8gL=oD~zlut}8DM*#_r^%wZb_Bh0jn^uFU z(7e`0Vi|}Dd8i$uFy5jbAjG(WmaR|n9{H!6f7iLV89c9Jf;oA?==@`A_`AZz^8LKRGG;tr75*;ff2Uqt zpU+bjE}v1)uhzelFD^>w$#9at$^TfQepk6TzR#;fkpHX7*=UET5u9y~i7}^D#F%*J IQev6^2e*C+R{#J2 diff --git a/input/PL/DoFilesTargets/alignment_targets_retirement.xlsx b/input/PL/DoFilesTargets/alignment_targets_retirement.xlsx deleted file mode 100644 index 7f2b2c62949bca9c57455c6ec2e9f896c79ee442..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4698 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 CaK-Zg diff --git a/input/SimPaths_Variable_Codebook.xlsx b/input/SimPaths_Variable_Codebook.xlsx deleted file mode 100644 index c3e8209b8c6defe6b80766d93753fe9e4678ff82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18684 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 Cc(6PG diff --git a/input_processing/01_key_function_income_thresholds_from_EUROMOD_2018.do b/input_processing/01_key_function_income_thresholds_from_EUROMOD_2018.do index 30ffa25..4e2b414 100644 --- a/input_processing/01_key_function_income_thresholds_from_EUROMOD_2018.do +++ b/input_processing/01_key_function_income_thresholds_from_EUROMOD_2018.do @@ -51,9 +51,8 @@ if _rc { exit 601 } -local dir_doc "`dir_w'/documentation" -local out_dta "`dir_doc'/key_function_income_thresholds_clean2018.dta" -local out_xlsx "`dir_doc'/key_function_income_thresholds_clean2018.xlsx" +local dir_out "`dir_w'/input_processing" +local out_xlsx "`dir_out'/key_function_income_thresholds_2018.xlsx" local ref_year 2018 local weeks_per_month = 365.25 / (7 * 12) @@ -248,7 +247,6 @@ sort country approach format lo_monthly hi_monthly lo_weekly hi_weekly %12.2f compress -save "`out_dta'", replace export excel using "`out_xlsx'", sheet("results") firstrow(variables) sheetreplace @@ -267,6 +265,5 @@ putexcel A11=("Output values") B11=("Local currency per week, exact and rounde putexcel A12=("Do-file") B12=("01_key_function_income_thresholds_from_EUROMOD_2018.do") di as txt "Saved results to:" -di as txt " `out_dta'" di as txt " `out_xlsx'" list country approach bu_id lo_hi_weekly_exact lo_hi_weekly_round, noobs abbreviate(32) diff --git a/documentation/key_function_income_thresholds_clean2018.xlsx b/input_processing/key_function_income_thresholds_2018.xlsx similarity index 100% rename from documentation/key_function_income_thresholds_clean2018.xlsx rename to input_processing/key_function_income_thresholds_2018.xlsx From 1e6252ad2445ba8d6a5b5124b8cd296adf5336b2 Mon Sep 17 00:00:00 2001 From: Mariia Var Date: Sat, 2 May 2026 12:48:40 +0100 Subject: [PATCH 09/13] Updated REAME.md and CLAUDE.md documentation --- CLAUDE.md | 25 +- README.md | 66 +- scripts/run_TEST_multiruns.sh | 76 - scripts/run_multiruns-alignPopOFF.sh | 73 - scripts/run_multiruns-alignPopOFF_QUICK.sh | 73 - .../generate_simpaths_eu_variable_codebook.py | 1496 ----------------- 6 files changed, 80 insertions(+), 1729 deletions(-) delete mode 100644 scripts/run_TEST_multiruns.sh delete mode 100644 scripts/run_multiruns-alignPopOFF.sh delete mode 100644 scripts/run_multiruns-alignPopOFF_QUICK.sh delete mode 100644 tools/generate_simpaths_eu_variable_codebook.py diff --git a/CLAUDE.md b/CLAUDE.md index 7404216..069b37f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,4 +1,4 @@ -# CLAUDE.md +can you# CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. @@ -31,6 +31,14 @@ mvn test -Dtest=SimPathsStartTest CLI help: `java -jar singlerun.jar -h` or `java -jar multirun.jar -h` +### Key CLI flags + +- `-c ` country code (`EL`, `IT`, `HU`, `PL`); `-s` start year; `-e` end year; `-p` population size; `-g true|false` show GUI. +- `-t true|false` (`--training`) — use the training-data subset under `input//InitialPopulations/training/` and `EUROMODoutput/training/` (uses `TaxDonorParserTraining`). On `multirun.jar` this **overrides** `parameter_args.trainingFlag` from the YAML config. +- `singlerun.jar -Setup` — setup phase only (build the H2 input DB, no simulation). Multi-run equivalent is `-DBSetup`. +- `multirun.jar -r ` random seed, `-n ` max runs, `-f` output to file, `-config ` custom config (default `config/default.yml`). +- **Training auto-detect**: if `-t` is omitted and `input//InitialPopulations/*.csv` is empty, `Parameters.trainingFlag` is flipped to `true` automatically and a notice is printed to stdout (`SimPathsStart.java:363-368, 520-525`). To diagnose which mode is active at runtime, look for either `Training-data flag set explicitly via CLI: -t ...` or `auto-switching to training data` in the console output. + ## Architecture ### Entity Hierarchy @@ -66,10 +74,22 @@ CLI help: `java -jar singlerun.jar -h` or `java -jar multirun.jar -h` ### Data Inputs - `input/input.mv.db` — H2 database with processed EU-SILC starting population -- `input/[COUNTRY]/` — Country-specific Excel parameter files, EUROMOD output CSVs +- `input/[COUNTRY]/InitialPopulations/` — actual starting-population CSVs; `…/training/` holds the shipped training subset +- `input/[COUNTRY]/EUROMODoutput/` — EUROMOD donor CSVs; `…/training/` holds the training subset +- `input/[COUNTRY]/` — country-specific Excel parameter files (e.g. `EUROMODpolicySchedule.xlsx`) - `input/DatabaseCountryYear.xlsx` — Cross-country/year index - `config/default.yml` — Default multi-run parameters (population size, year range, run count) - `config/alignment_*.yml` — Staged alignment configurations +- `config/test_create_database.yml`, `config/test_run.yml` — Configs used by the integration test + +### Repository layout (beyond `src/`) + +- `scripts/` — shell wrappers for batch multi-runs (`run_alignment_multiruns.sh`, `run_multiruns-alignPopOFF.sh`, `run_TEST_multiruns.sh`, …) +- `input_processing/` — Stata do-files that prepare model inputs upstream of the Java pipeline (master conditions, regression-estimate cleaning, lag-structure generation) +- `tools/generate_simpaths_eu_variable_codebook.py` — variable codebook generator +- `validation/` — Stata validation against EU-SILC/EUROMOD targets +- `documentation/` — supplementary documentation +- `output/` — timestamped simulation outputs (created at runtime) ### Tax/Benefit Imputation @@ -87,6 +107,7 @@ JUnit 5 + Mockito. Tests in `src/test/java/simpaths/`: - `experiment/SimPathsMultiRunTest` — Multi-run configuration - `experiment/PersonTest` — Person entity logic - `data/MahalanobisDistanceTest` — Statistical matching +- `integrationtest/RunSimPathsIntegrationTest` — End-to-end run using `config/test_create_database.yml` + `config/test_run.yml` ## Branch Conventions diff --git a/README.md b/README.md index 5a5ee78..80f03da 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,37 @@ # SimPathsEU -by Matteo Richiardi, Patryk Bronka, Justin van de Ven, Mariia Vartuzova, David Sonnewald +by CeMPA (Centre for Microsimulation and Policy Analysis). + +## Documentation + +The entire SimPaths documentation is available on its [website](https://simpaths.github.io/SimPaths/), which includes: a detailed description of its building blocks; instructions on how to set up and run the model; and information about contributing to the model's development. ## Introduction -SimPaths is a family of models for individual and household life course events, all sharing common components. The framework is designed to project life histories through time, building up a detailed picture of career paths, family (inter)relations, health, and financial circumstances. The framework builds upon standardised assumptions and data sources, which facilitates adaptation to alternative countries. This repository, **SimPathsEU**, covers Greece (`EL`), Hungary (`HU`), Italy (`IT`), and Poland (`PL`), and integrates with EUROMOD for tax and benefit policy simulation. Careful attention is paid to model validation, and sensitivity of projections to key assumptions. The modular nature of the SimPaths framework is designed to facilitate analysis of alternative assumptions concerning the tax and benefit system, sensitivity to parameter estimates and alternative approaches for projecting labour/leisure and consumption/savings decisions. Projections for a workhorse model parameterised to the UK context are reported in [Bronka, P., Richiardi, M., & van de Ven, J. (2023). *SimPaths: an open-source microsimulation model for life course analysis* (No. CEMPA6/23), Centre for Microsimulation and Policy Analysis at the Institute for Social and Economic Research*](https://www.microsimulation.ac.uk/publications/publication-557738/), which closely reflect observed data throughout a 10-year validation window. +SimPaths is a family of models for individual and household life course events, all sharing common components. The framework is designed to project life histories through time, building up a detailed picture of career paths, family (inter)relations, health, and financial circumstances. The framework builds upon standardised assumptions and data sources, which facilitates adaptation to alternative countries. This repository, **SimPathsEU**, covers Greece (`EL`), Hungary (`HU`), Italy (`IT`), and Poland (`PL`), and integrates with EUROMOD for tax and benefit policy simulation. Careful attention is paid to model validation, and sensitivity of projections to key assumptions. The modular nature of the SimPaths framework is designed to facilitate analysis of alternative assumptions concerning the tax and benefit system, sensitivity to parameter estimates and alternative approaches for projecting labour/leisure and consumption/savings decisions. + + +## License + +Released under the terms in [`license.txt`](license.txt). + +## Repository layout + +``` +SimPathsEU/ +├── src/ # Java source (main + tests) +├── input/ # H2 DB + per-country starting populations and EUROMOD outputs +│ └── /InitialPopulations/{,training/} +│ └── /EUROMODoutput/{,training/} +├── input_processing/ # Stata do-files that prepare regression estimates and inputs +├── config/ # YAML configs (default.yml, alignment_*.yml, test_*.yml) +├── scripts/ # Bash wrappers for batch multi-run scenarios +├── validation/ # Stata validation against EU-SILC / EUROMOD targets +├── documentation/ # Supplementary documentation +├── output/ # Simulation outputs (created at runtime) +├── pom.xml +└── README.md +``` ## Getting Started @@ -30,11 +57,11 @@ However, please note that _training_ data is provided. It allows the simulation 1. **Java Development Kit (JDK):** the project targets **Java 19 or later** (see `pom.xml`, which pins `source`/`target` to 19). Install a compatible JDK, e.g. OpenJDK 19+ from [Adoptium](https://adoptium.net/). 2. **Maven:** required to build from the command line. See [installation instructions](https://maven.apache.org/install.html). (Not required if you only build via the IDE.) 3. **Download an IDE** (integrated development environment) of your choice - we recommend [IntelliJ IDEA](https://www.jetbrains.com/idea/download/); download the Community (free) or Ultimate (paid) edition, depending on your needs. -4. Clone your forked repository to your local machine. Import the cloned repository into IntelliJ as a Maven project +4. Clone your forked repository to your local machine. Import the cloned repository into IntelliJ as a Maven project. -### Compiling and running SimPaths with Maven in the CLI +### Compiling and running SimPaths with Maven from the CLI -SimPaths can also be compiled by Maven ([installation instructions here](https://maven.apache.org/install.html)) and run from the command line without an IDE. After cloning the repository and setting up the JDK, in the root directory you can run: +SimPaths can also be compiled with Maven ([installation instructions here](https://maven.apache.org/install.html)) and run from the command line without an IDE. After cloning the repository and setting up the JDK, in the root directory you can run: ``` $ mvn clean package ``` @@ -71,10 +98,10 @@ $ mvn verify -Dit.test=RunSimPathsIntegrationTest # run just the integration - `-p` Simulated population size - `-g` [true/false] show/hide gui - `-r` Re-write policy schedule from detected policy files -- `-Setup` do setup phases (creating input populations database) only +- `-Setup` perform the setup phase only (build the input population database, then exit) - `--rebuild-db` Force a rebuild of `input/input.mv.db` instead of reusing it (headless mode) - `--reuse-existing-db` Reuse `input/input.mv.db` if present, otherwise build it (headless mode) -- `-t` [true/false] use training data subset. When `true`, reads from `input//InitialPopulations/training/` and `input//EUROMODoutput/training/`, and uses `TaxDonorParserTraining` (which drops `deh`/`drgn1`/`lcs` and uses `idhh` as the tax-unit identifier). When `false` (default), reads from `InitialPopulations/` and `EUROMODoutput/` directly and uses the standard `TaxDonorDataParser`. If `-t` is omitted, an auto-detect kicks in: if `InitialPopulations//*.csv` is empty, the simulator falls back to training data and prints a console message. +- `-t` [true/false] use training data subset. When `true`, reads from `input//InitialPopulations/training/` and `input//EUROMODoutput/training/`. When `false` (default), reads from `InitialPopulations/` and `EUROMODoutput/` directly. If `-t` is omitted, an auto-detect kicks in: if `InitialPopulations//*.csv` is empty, the simulator falls back to training data and prints a console message. **Important:** the country (`-c`) and start year (`-s`) must be specified when creating or rebuilding the input population database — the resulting `input/input.mv.db` is country- and year-specific. @@ -153,10 +180,31 @@ $ java -jar multirun.jar -r 100 -p 50000 -n 20 -s 2017 -e 2020 -g false -f Run `java -jar singlerun.jar -h` or `java -jar multirun.jar -h` to show these help messages. +#### Output layout + +Each simulation writes a timestamped subdirectory under `output/` (named `YYYYMMDDHHMMSS`), e.g.: + +``` +output/ +├── / # one run's artefacts +│ ├── database/ # H2 snapshot of the simulated population +│ └── input/ # copy of the inputs used for the run (for reproducibility) +└── logs/ + ├── run_.txt # console log when multirun is invoked with -f + └── run_.log # logger output for the same run +``` + +Batch scripts in `scripts/` move each scenario's outputs into `output//` after the runs finish. + +The `documentation/` directory contains supplementary documentation that complements this README and the [SimPaths website](https://simpaths.github.io/SimPaths/) (model notes, variable references, and other materials not maintained inline with the code). + ### Batch scenario scripts -Helper Bash scripts in `scripts/` run `multirun.jar` across multiple alignment configs in sequence and move each scenario's CSV output into `output//`: +Helper Bash scripts in `scripts/` run `multirun.jar` across multiple alignment configs in sequence and move each scenario's output into `output//`: - `run_alignment_multiruns.sh` — full set of alignment scenarios +- `run_multiruns-alignPopOFF.sh` — same scenarios with population alignment disabled +- `run_multiruns-alignPopOFF_QUICK.sh` — quick variant of the above for development +- `run_TEST_multiruns.sh` — small smoke-test run used to validate the pipeline Defaults (start/end year, population size, runs per scenario, JVM heap, random seed) are set at the top of each script and can be overridden via environment variables, e.g.: @@ -166,7 +214,7 @@ $ POP_SIZE=10000 RUNS_PER_SCENARIO=2 ./scripts/run_alignment_multiruns.sh ### Contributing -1. Create a new branch for your contributions. This will likely be based on either the `main` branch of this repository (if you seek to modify the stable version of the model) or `develop` (if you seek to modify the most recent version of the model). Please see branch naming convention below. +1. Create a new branch for your contributions. This will likely be based on either the `main` branch of this repository (if you seek to modify the stable version of the model) or `develop` (if you seek to modify the most recent version of the model). 2. Make your changes, add your code, and write tests if applicable. 3. Commit your changes. 4. Push your changes to your fork. diff --git a/scripts/run_TEST_multiruns.sh b/scripts/run_TEST_multiruns.sh deleted file mode 100644 index 424ca44..0000000 --- a/scripts/run_TEST_multiruns.sh +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -cd "$ROOT_DIR" - -JAR_PATH="${JAR_PATH:-multirun.jar}" -START_YEAR="${START_YEAR:-2011}" -END_YEAR="${END_YEAR:-2023}" -POP_SIZE="${POP_SIZE:-50000}" -RUNS_PER_SCENARIO="${RUNS_PER_SCENARIO:-5}" -SHOW_GUI="${SHOW_GUI:-false}" -RANDOM_SEED="${RANDOM_SEED:-1821}" - -# JVM heap: give the simulation generous room. -# Rule of thumb: (population × runs) drives peak usage. At 50k × 5 runs, -# 8g is comfortable on this machine (18 GB RAM). Lower to 6g if other -# processes are competing; raise to 12g if you see GC pauses or OOM. -JVM_HEAP="${JVM_HEAP:-12g}" - -CONFIGS=( - - "alignment_02c_population_disability.yml" - "alignment_02d_population_inschool.yml" - "alignment_02e_population_retirement.yml" -) - -if [[ ! -f "$JAR_PATH" ]]; then - echo "Jar not found: $JAR_PATH" >&2 - exit 1 -fi - -for cfg in "${CONFIGS[@]}"; do - scenario="${cfg%.yml}" # strip .yml → e.g. alignment_01_population - dest="output/${scenario}" - - echo "============================================" - echo "Running scenario: ${scenario}" - echo "============================================" - - # Marker file: anything created after this point is from the upcoming run. - marker=$(mktemp) - - java -Xms"${JVM_HEAP}" -Xmx"${JVM_HEAP}" -jar "$JAR_PATH" \ - -g "$SHOW_GUI" \ - -s "$START_YEAR" \ - -e "$END_YEAR" \ - -p "$POP_SIZE" \ - -n "$RUNS_PER_SCENARIO" \ - -r "$RANDOM_SEED" \ - -config "$cfg" - - # The CSV output folder is the timestamped directory WITHOUT a seed/counter - # suffix (e.g. output/20260323204849/csv). Find it by comparing to the marker. - new_csv_folder=$(find output -maxdepth 1 -type d -newer "$marker" -name '[0-9]*' \ - | grep -v '_' | sort -r | head -1) - rm -f "$marker" - - if [[ -n "$new_csv_folder" ]]; then - if [[ -d "$dest" ]]; then - echo "Warning: ${dest} already exists — removing before overwrite." >&2 - rm -rf "$dest" - fi - mv "$new_csv_folder" "$dest" - echo "Output saved → ${dest}" - else - echo "Warning: could not find new output folder for scenario ${scenario}." >&2 - fi -done - -echo "" -echo "All scenarios complete. Results are in:" -for cfg in "${CONFIGS[@]}"; do - echo " output/${cfg%.yml}/" -done diff --git a/scripts/run_multiruns-alignPopOFF.sh b/scripts/run_multiruns-alignPopOFF.sh deleted file mode 100644 index 7780a96..0000000 --- a/scripts/run_multiruns-alignPopOFF.sh +++ /dev/null @@ -1,73 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -cd "$ROOT_DIR" - -JAR_PATH="${JAR_PATH:-multirun.jar}" -START_YEAR="${START_YEAR:-2011}" -END_YEAR="${END_YEAR:-2023}" -POP_SIZE="${POP_SIZE:-50000}" -RUNS_PER_SCENARIO="${RUNS_PER_SCENARIO:-5}" -SHOW_GUI="${SHOW_GUI:-false}" -RANDOM_SEED="${RANDOM_SEED:-1821}" - -# JVM heap: give the simulation generous room. -# Rule of thumb: (population × runs) drives peak usage. At 50k × 5 runs, -# 8g is comfortable on this machine (18 GB RAM). Lower to 6g if other -# processes are competing; raise to 12g if you see GC pauses or OOM. -JVM_HEAP="${JVM_HEAP:-12g}" - -CONFIGS=( - "alignment_00_populationOFF.yml" -) - -if [[ ! -f "$JAR_PATH" ]]; then - echo "Jar not found: $JAR_PATH" >&2 - exit 1 -fi - -for cfg in "${CONFIGS[@]}"; do - scenario="${cfg%.yml}" # strip .yml → e.g. alignment_01_population - dest="output/${scenario}" - - echo "============================================" - echo "Running scenario: ${scenario}" - echo "============================================" - - # Marker file: anything created after this point is from the upcoming run. - marker=$(mktemp) - - java -Xms"${JVM_HEAP}" -Xmx"${JVM_HEAP}" -jar "$JAR_PATH" \ - -g "$SHOW_GUI" \ - -s "$START_YEAR" \ - -e "$END_YEAR" \ - -p "$POP_SIZE" \ - -n "$RUNS_PER_SCENARIO" \ - -r "$RANDOM_SEED" \ - -config "$cfg" - - # The CSV output folder is the timestamped directory WITHOUT a seed/counter - # suffix (e.g. output/20260323204849/csv). Find it by comparing to the marker. - new_csv_folder=$(find output -maxdepth 1 -type d -newer "$marker" -name '[0-9]*' \ - | grep -v '_' | sort -r | head -1) - rm -f "$marker" - - if [[ -n "$new_csv_folder" ]]; then - if [[ -d "$dest" ]]; then - echo "Warning: ${dest} already exists — removing before overwrite." >&2 - rm -rf "$dest" - fi - mv "$new_csv_folder" "$dest" - echo "Output saved → ${dest}" - else - echo "Warning: could not find new output folder for scenario ${scenario}." >&2 - fi -done - -echo "" -echo "All scenarios complete. Results are in:" -for cfg in "${CONFIGS[@]}"; do - echo " output/${cfg%.yml}/" -done diff --git a/scripts/run_multiruns-alignPopOFF_QUICK.sh b/scripts/run_multiruns-alignPopOFF_QUICK.sh deleted file mode 100644 index f9461da..0000000 --- a/scripts/run_multiruns-alignPopOFF_QUICK.sh +++ /dev/null @@ -1,73 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -cd "$ROOT_DIR" - -JAR_PATH="${JAR_PATH:-multirun.jar}" -START_YEAR="${START_YEAR:-2011}" -END_YEAR="${END_YEAR:-2023}" -POP_SIZE="${POP_SIZE:-30000}" -RUNS_PER_SCENARIO="${RUNS_PER_SCENARIO:-3}" -SHOW_GUI="${SHOW_GUI:-false}" -RANDOM_SEED="${RANDOM_SEED:-1821}" - -# JVM heap: give the simulation generous room. -# Rule of thumb: (population × runs) drives peak usage. At 50k × 5 runs, -# 8g is comfortable on this machine (18 GB RAM). Lower to 6g if other -# processes are competing; raise to 12g if you see GC pauses or OOM. -JVM_HEAP="${JVM_HEAP:-12g}" - -CONFIGS=( - "alignment_00_populationOFF.yml" -) - -if [[ ! -f "$JAR_PATH" ]]; then - echo "Jar not found: $JAR_PATH" >&2 - exit 1 -fi - -for cfg in "${CONFIGS[@]}"; do - scenario="${cfg%.yml}" # strip .yml → e.g. alignment_01_population - dest="output/${scenario}" - - echo "============================================" - echo "Running scenario: ${scenario}" - echo "============================================" - - # Marker file: anything created after this point is from the upcoming run. - marker=$(mktemp) - - java -Xms"${JVM_HEAP}" -Xmx"${JVM_HEAP}" -jar "$JAR_PATH" \ - -g "$SHOW_GUI" \ - -s "$START_YEAR" \ - -e "$END_YEAR" \ - -p "$POP_SIZE" \ - -n "$RUNS_PER_SCENARIO" \ - -r "$RANDOM_SEED" \ - -config "$cfg" - - # The CSV output folder is the timestamped directory WITHOUT a seed/counter - # suffix (e.g. output/20260323204849/csv). Find it by comparing to the marker. - new_csv_folder=$(find output -maxdepth 1 -type d -newer "$marker" -name '[0-9]*' \ - | grep -v '_' | sort -r | head -1) - rm -f "$marker" - - if [[ -n "$new_csv_folder" ]]; then - if [[ -d "$dest" ]]; then - echo "Warning: ${dest} already exists — removing before overwrite." >&2 - rm -rf "$dest" - fi - mv "$new_csv_folder" "$dest" - echo "Output saved → ${dest}" - else - echo "Warning: could not find new output folder for scenario ${scenario}." >&2 - fi -done - -echo "" -echo "All scenarios complete. Results are in:" -for cfg in "${CONFIGS[@]}"; do - echo " output/${cfg%.yml}/" -done diff --git a/tools/generate_simpaths_eu_variable_codebook.py b/tools/generate_simpaths_eu_variable_codebook.py deleted file mode 100644 index 16f1825..0000000 --- a/tools/generate_simpaths_eu_variable_codebook.py +++ /dev/null @@ -1,1496 +0,0 @@ -#!/usr/bin/env python3 - -from __future__ import annotations - -import copy -import re -from dataclasses import dataclass -from datetime import date -from pathlib import Path -from typing import Iterable - -from openpyxl import Workbook, load_workbook -from openpyxl.styles import Alignment, Font, PatternFill - - -ROOT = Path(__file__).resolve().parents[1] -UK_CODEBOOK = ROOT / "documentation" / "SimPaths_Variable_CodebookUK.xlsx" -OUTPUT_CODEBOOK = ROOT / "documentation" / "SimPathsEU_variable_Codebook.xlsx" -TEMP_OUTPUT_CODEBOOK = ROOT / "documentation" / "SimPathsEU_variable_Codebook.__tmp__.xlsx" - - -CORE_JAVA_FILES = [ - ROOT / "src/main/java/simpaths/model/Person.java", - ROOT / "src/main/java/simpaths/model/BenefitUnit.java", - ROOT / "src/main/java/simpaths/model/Household.java", - ROOT / "src/main/java/simpaths/data/statistics/Statistics.java", - ROOT / "src/main/java/simpaths/data/statistics/Statistics2.java", - ROOT / "src/main/java/simpaths/data/statistics/AlignmentAdjustmentFactors.java", -] - -METADATA_JAVA_FILES = [ - ROOT / "src/main/java/simpaths/data/startingpop/Processed.java", -] - -CONTROL_ENUM_FILES = { - ROOT / "src/main/java/simpaths/model/enums/TimeSeriesVariable.java": "TimeSeriesVariable", - ROOT / "src/main/java/simpaths/model/enums/AlignmentVariable.java": "AlignmentVariable", -} - -DEFERRED_ENUMS = { - ROOT / "src/main/java/simpaths/model/Person.java": ["IntegerVariables", "DoublesVariables"], - ROOT / "src/main/java/simpaths/model/Validator.java": ["DoublesVariables"], - ROOT / "src/main/java/simpaths/experiment/SimPathsObserver.java": ["LongVariables"], -} - - -COMMENT_RE = re.compile(r"/\*.*?\*/|//.*?$", re.S | re.M) -FIELD_RE = re.compile( - r"^(?P\s*(?:@[A-Za-z_][\w.()=\" ,]+\s*)*\b(?:public|protected|private)\s+(?:static\s+)?(?:final\s+)?)" - r"(?P[^;=(){}]+?)\s+" - r"(?P[A-Za-z_][A-Za-z0-9_]*)\s*(?:=[^;]*)?;\s*$", - re.M, -) -COLUMN_RE = re.compile(r'@Column\s*\(\s*name\s*=\s*"([^"]+)"') -ENUM_DECL_RE = re.compile(r"\benum\s+([A-Za-z_][A-Za-z0-9_]*)\s*\{", re.M) - - -HEADER_STYLE_FILL = PatternFill(fill_type="solid", fgColor="D9E2F3") -MATCHED_FILL = PatternFill(fill_type="solid", fgColor="E2F0D9") -ADAPTED_FILL = PatternFill(fill_type="solid", fgColor="DDEBF7") -NEW_FILL = PatternFill(fill_type="solid", fgColor="FFF2CC") -UK_ONLY_FILL = PatternFill(fill_type="solid", fgColor="F4CCCC") -DEFERRED_FILL = PatternFill(fill_type="solid", fgColor="EDEDED") -REVIEW_FILL = PatternFill(fill_type="solid", fgColor="FCE4D6") - -MODULE_ORDER = { - "dem": 1, - "edu": 2, - "health": 3, - "care": 4, - "lab": 5, - "y": 6, - "x": 7, - "stat": 8, - "covid": 9, - "wealth": 10, - "id": 11, - "wgt": 12, -} - - -EXCLUDED_REASONS = { - "log": "Logger infrastructure", - "model": "Simulation manager reference", - "collector": "Collector/observer reference", - "key": "Persistence key", - "benefitUnit": "Entity association", - "household": "Entity association", - "members": "Entity association", - "benefitUnits": "Entity association", - "processed": "Metadata association", - "personIdCounter": "Static ID counter", - "benefitUnitIdCounter": "Static ID counter", - "householdIdCounter": "Static ID counter", - "ioFlag": "Regression helper flag", - "states": "Decision-state helper object", - "taxDbMatch": "Tax matching helper object", - "sIndexYearMap": "Derived series cache", - "personContinuousHoursLabourSupplyMap": "Derived hours cache", - "countMale": "Temporary diagnostic accumulator", - "countFemale": "Temporary diagnostic accumulator", - "reportedMissing": "Missing-value reporting helper", - "lastYear": "Cache/incremental helper", - "cachedMaleAtRiskOfWork": "Cache field", - "cachedFemaleAtRiskOfWork": "Cache field", - "labourChoiceCacheYear": "Cache field", - "labourChoiceCacheKey": "Cache field", - "cachedPossibleLabourCombinations": "Cache field", - "cachedEvalByLabourPairs": "Cache field", - "cachedUtilityScoreByLabourPairs": "Cache field", - "labourScoreCacheYear": "Cache field", - "labourScoreCacheKey": "Cache field", - "households": "Metadata collection", - "benefitUnits": "Metadata collection", - "persons": "Metadata collection", -} - - -@dataclass -class Candidate: - source_name: str - source_kind: str - java_class: str - java_path: Path - order: int - sibling_name: str | None = None - - -@dataclass -class ManualSpec: - status: str - source_kind: str - variable_name: str | None = None - reference_old: str | None = None - reference_new: str | None = None - match_basis: str = "Manual review" - review_required: str = "No" - review_note: str = "" - overrides: dict[str, object] | None = None - - -MANUAL_SPECS = { - "idMotherImmutable": ManualSpec( - status="New vs UK", - source_kind="Java field", - variable_name="idMotherImmutable", - overrides={ - "Local": None, - "Mod": "id", - "Main attribute": "Mother", - "Level": None, - "Measurement": None, - "Other info": "Immutable", - "Statistics type": None, - "Periodicity": None, - "Description": "Immutable mother ID used to preserve the original maternal link in simulation.", - "Initial population": "No", - "Module": "ID", - "Notes": "No direct UK equivalent found in the reviewed workbook.", - }, - ), - "immutable_mother_id": ManualSpec( - status="New vs UK", - source_kind="DB column", - variable_name="idMotherImmutable", - overrides={ - "Local": None, - "Mod": "id", - "Main attribute": "Mother", - "Other info": "Immutable", - "Statistics type": None, - "Description": "Database column backing the immutable mother ID.", - "Initial population": "No", - "Module": "ID", - "Notes": "Database column paired with idMotherImmutable.", - }, - ), - "idFatherImmutable": ManualSpec( - status="New vs UK", - source_kind="Java field", - variable_name="idFatherImmutable", - overrides={ - "Local": None, - "Mod": "id", - "Main attribute": "Father", - "Other info": "Immutable", - "Statistics type": None, - "Description": "Immutable father ID used to preserve the original paternal link in simulation.", - "Initial population": "No", - "Module": "ID", - "Notes": "No direct UK equivalent found in the reviewed workbook.", - }, - ), - "immutable_father_id": ManualSpec( - status="New vs UK", - source_kind="DB column", - variable_name="idFatherImmutable", - overrides={ - "Local": None, - "Mod": "id", - "Main attribute": "Father", - "Other info": "Immutable", - "Statistics type": None, - "Description": "Database column backing the immutable father ID.", - "Initial population": "No", - "Module": "ID", - "Notes": "Database column paired with idFatherImmutable.", - }, - ), - "staywparentsflag": ManualSpec( - status="New vs UK", - source_kind="Java field", - variable_name="demStayParentFlag", - review_required="Yes", - review_note="Declared in Person.java but not referenced elsewhere in the current EU codebase; confirm whether to retain or remove in the refactor.", - overrides={ - "Local": None, - "Mod": "dem", - "Main attribute": "StayParent", - "Statistics type": "Flag", - "Description": "Flag indicating that the person stays with parents.", - "Initial population": "No", - "Module": "Demography", - "Notes": "New EU-only variable; no UK counterpart located in the reviewed workbook.", - }, - ), - "deh_c4": ManualSpec( - status="Adapted from UK", - source_kind="Java field", - variable_name="eduHighestC4", - reference_old="deh_c3", - review_required="Yes", - review_note="EU uses a 4-state education enum including NotAssigned; confirm whether C4 should remain explicit in the refactor name.", - overrides={ - "Other info": "C4", - "Description": "Education - Highest Status\n 0 Not assigned\n 1 Low\n 2 Medium\n 3 High", - "Notes": "Adapted from UK eduHighestC3 because SimPathsEU uses Education c4 / NotAssigned.", - }, - ), - "deh_c4_lag1": ManualSpec( - status="Adapted from UK", - source_kind="Java field", - variable_name="eduHighestC4L1", - reference_old="deh_c3_lag1", - review_required="Yes", - review_note="Lag naming is clear, but the underlying education coding differs from the UK C3 variant.", - overrides={ - "Other info": "C4", - "Description": "Lag(1) of deh_c4", - "Notes": "Adapted from UK eduHighestC3L1 because SimPathsEU uses Education c4 / NotAssigned.", - }, - ), - "dehm_c4": ManualSpec( - status="Adapted from UK", - source_kind="Java field", - variable_name="eduHighestMotherC4", - reference_old="dehm_c3", - review_required="Yes", - review_note="EU uses a 4-state education enum including NotAssigned; confirm whether C4 should remain explicit in the refactor name.", - overrides={ - "Other info": "C4", - "Description": "Education - Mother's Highest Status\n 0 Not assigned\n 1 Low\n 2 Medium\n 3 High", - "Notes": "Adapted from UK eduHighestMotherC3 because SimPathsEU uses Education c4 / NotAssigned.", - }, - ), - "dehf_c4": ManualSpec( - status="Adapted from UK", - source_kind="Java field", - variable_name="eduHighestFatherC4", - reference_old="dehf_c3", - review_required="Yes", - review_note="EU uses a 4-state education enum including NotAssigned; confirm whether C4 should remain explicit in the refactor name.", - overrides={ - "Other info": "C4", - "Description": "Education - Father's Highest Status\n 0 Not assigned\n 1 Low\n 2 Medium\n 3 High", - "Notes": "Adapted from UK eduHighestFatherC3 because SimPathsEU uses Education c4 / NotAssigned.", - }, - ), - "dehsp_c4_lag1": ManualSpec( - status="Adapted from UK", - source_kind="Java field", - variable_name="eduHighestPartnerC4L1", - reference_old="dehsp_c3_lag1", - review_required="Yes", - review_note="EU uses a 4-state education enum including NotAssigned; confirm whether C4 should remain explicit in the refactor name.", - overrides={ - "Other info": "C4", - "Description": "Lag(1) of dehsp_c4", - "Notes": "Adapted from UK eduHighestPartnerC3L1 because SimPathsEU uses Education c4 / NotAssigned.", - }, - ), - "deh_c4Local": ManualSpec( - status="Adapted from UK", - source_kind="Java field", - variable_name="i_eduHighestC4", - reference_new="i_eduHighestC3", - review_required="Yes", - review_note="Local regression helper name follows the UK i_ prefix, but the EU education coding differs from UK C3.", - overrides={ - "Local": "i_", - "Other info": "C4", - "Description": "Education - Highest Status local (c4 variant).", - "Notes": "Adapted from UK i_eduHighestC3 because SimPathsEU uses Education c4 / NotAssigned.", - }, - ), - "ded_lag1": ManualSpec( - status="Adapted from UK", - source_kind="Java field", - variable_name="eduSpellFlagL1", - reference_old="ded", - overrides={ - "Periodicity": "L1", - "Description": "Lag(1) of ded / in continuous education.", - "Notes": "Derived from the UK eduSpellFlag naming pattern.", - }, - ), - "toRetire": ManualSpec( - status="Adapted from UK", - source_kind="Java field", - variable_name="demRtrdEnterFlag", - reference_new="demRtrdEnterFlag", - overrides={ - "Description": "Flag indicating that the individual is in the pool to retire this year.\n 0 No\n 1 Yes", - "Java class": "Person.java", - "Initial population": "No", - "Notes": "Mapped to the UK retirement-entry flag naming pattern.", - }, - ), - "dhmGhq_lag1": ManualSpec( - status="Adapted from UK", - source_kind="Java field", - variable_name="healthPsyDstrssFlagL1", - reference_new="healthPsyDstrssFlag", - overrides={ - "Periodicity": "L1", - "Description": "Lag(1) of dhm_ghq / psychological distress flag.", - "Notes": "Derived from the UK healthPsyDstrssFlag naming pattern.", - }, - ), - "ydispPersInitial": ManualSpec( - status="New vs UK", - source_kind="Java field", - variable_name="yDispPersMonthInitial", - overrides={ - "Local": None, - "Mod": "y", - "Main attribute": None, - "Level": "Pers", - "Measurement": "Disp", - "Other info": "Initial", - "Statistics type": None, - "Periodicity": "Month", - "Description": "Personal monthly disposable income carried from the initial population.", - "Initial population": "Yes", - "Module": "Income", - "Notes": "No direct UK equivalent found in the reviewed workbook.", - }, - ), - "ydisp_pers_initial": ManualSpec( - status="New vs UK", - source_kind="DB column", - variable_name="yDispPersMonthInitial", - overrides={ - "Local": None, - "Mod": "y", - "Level": "Pers", - "Measurement": "Disp", - "Other info": "Initial", - "Periodicity": "Month", - "Description": "Database column for personal monthly disposable income from the initial population.", - "Initial population": "Yes", - "Module": "Income", - "Notes": "Database column paired with ydispPersInitial.", - }, - ), - "numberChildren02_lag1": ManualSpec( - status="Adapted from UK", - source_kind="Java field", - variable_name="demNChild0to2L1", - reference_old="indicatorChildren03_lag1", - review_required="Yes", - review_note="UK uses an indicator-based lag for 0-2/3-under children here; EU stores a count, so the naming is adapted rather than copied.", - overrides={ - "Local": None, - "Mod": "dem", - "Main attribute": "NChild", - "Other info": "0to2", - "Periodicity": "L1", - "Description": "Lag(1) of the number of children aged 0-2 in the benefit unit.", - "Initial population": "No", - "Module": "Demography", - "Notes": "Adapted from the UK child-count/child-indicator naming pattern.", - }, - ), - "numberChildrenAll_lag1": ManualSpec( - status="Adapted from UK", - source_kind="Java field", - variable_name="demNChildL1", - reference_new="demNChild", - review_required="Yes", - review_note="No direct UK lag row exists for the benefit-unit child count; proposed from the UK demNChild base name.", - overrides={ - "Local": None, - "Mod": "dem", - "Main attribute": "NChild", - "Periodicity": "L1", - "Description": "Lag(1) of the number of dependent children in the benefit unit.", - "Initial population": "No", - "Module": "Demography", - "Notes": "Derived from the UK demNChild naming pattern.", - }, - ), - "dhhOwned_lag1": ManualSpec( - status="Adapted from UK", - source_kind="Java field", - variable_name="wealthPrptyFlagL1", - reference_new="wealthPrptyFlag", - review_required="Yes", - review_note="UK has a person-level demPrptyFlagL1 row; for the EU benefit-unit variable, a wealth-module lag name is more consistent with wealthPrptyFlag.", - overrides={ - "Local": None, - "Mod": "wealth", - "Main attribute": "Prpty", - "Statistics type": "Flag", - "Periodicity": "L1", - "Description": "Lag(1) of dhhOwned / benefit-unit home-ownership flag.", - "Initial population": "No", - "Module": "Wealth", - "Notes": "Derived from wealthPrptyFlag while keeping the lag suffix explicit.", - }, - ), - "edi_p50": ManualSpec( - status="Adapted from UK", - source_kind="Java field", - variable_name="yHhDispEquivP50", - reference_new="yHhDispEquivP50", - overrides={ - "Java class": "Statistics.java", - "Output file name": "File: Statistics", - "Notes": "Mapped to the UK median equivalised disposable income naming pattern.", - }, - ), - "EDI_p50": ManualSpec( - status="Adapted from UK", - source_kind="DB column", - variable_name="yHhDispEquivP50", - reference_new="yHhDispEquivP50", - overrides={ - "Java class": "Statistics.java", - "Output file name": "File: Statistics", - "Notes": "Database column paired with edi_p50.", - }, - ), - "sIndex_p50": ManualSpec( - status="New vs UK", - source_kind="Java field", - variable_name="statSIndexP50", - reference_new="statSIndex", - overrides={ - "Local": None, - "Mod": "stat", - "Main attribute": "SIndex", - "Statistics type": "P50", - "Description": "Median S index.", - "Java class": "Statistics.java", - "Initial population": "No", - "Output file name": "File: Statistics", - "Module": "Statistical display", - "Notes": "UK workbook contains statSIndex/statSIndexNormal but not an S-index median row.", - }, - ), - "SIndex_p50": ManualSpec( - status="New vs UK", - source_kind="DB column", - variable_name="statSIndexP50", - reference_new="statSIndex", - overrides={ - "Local": None, - "Mod": "stat", - "Main attribute": "SIndex", - "Statistics type": "P50", - "Description": "Database column for the median S index.", - "Java class": "Statistics.java", - "Initial population": "No", - "Output file name": "File: Statistics", - "Module": "Statistical display", - "Notes": "Database column paired with sIndex_p50.", - }, - ), -} - -CLASS_MANUAL_SPECS = { - ("Person.java", "socialCareProvision"): ManualSpec( - status="New vs UK", - source_kind="Java field", - variable_name="careProvidedToC4", - match_basis="Manual review of EU-only care-provision categories", - review_required="Yes", - review_note="Person.socialCareProvision is a 4-category enum in SimPathsEU, not a simple provided-care flag as in the reviewed UK workbook.", - overrides={ - "Local": None, - "Mod": "care", - "Main attribute": None, - "Level": None, - "Measurement": None, - "Other info": "ProvidedTo", - "Statistics type": "C4", - "Periodicity": None, - "Description": "Social-care provision category\n 0 None\n 1 Only partner\n 2 Partner and other\n 3 Only other", - "Initial population": "No", - "Module": "Social care", - "Notes": "No exact UK analogue found; the UK workbook row for socialCareProvision is a benefit-unit flag rather than a person-level category.", - }, - ), - ("Person.java", "socialCareProvision_lag1"): ManualSpec( - status="Adapted from UK", - source_kind="Java field", - variable_name="careProvidedToC4L1", - reference_old="socialCareProvision_lag1", - match_basis="Manual adaptation of care-provision lag naming", - review_required="Yes", - review_note="Lag naming follows the EU person-level category variable rather than the UK flag-style naming.", - overrides={ - "Other info": "ProvidedTo", - "Statistics type": "C4", - "Periodicity": "L1", - "Description": "Lag(1) of social-care provision category.", - "Notes": "Adapted from the reviewed UK lag row because SimPathsEU stores a category, not a flag.", - }, - ), - ("Person.java", "idFather"): ManualSpec( - status="Adapted from UK", - source_kind="Java field", - variable_name="idFather", - reference_new="idFather", - match_basis="Manual correction of UK workbook inconsistency", - overrides={ - "Main attribute": "Father", - "Description": "Father ID", - "Module": "ID", - "Notes": "Corrected against a conflicting UK workbook row where old name idFather was assigned the idMother variable name.", - }, - ), - ("Statistics.java", "ydses_p60"): ManualSpec( - status="Adapted from UK", - source_kind="Java field", - variable_name="yHhQuintilesC5P60", - reference_old="ydses_p40", - match_basis="Manual correction of UK workbook inconsistency", - overrides={ - "Statistics type": "C5P60", - "Variable name (concatenate)": "yHhQuintilesC5P60", - "Variable name": "yHhQuintilesC5P60", - "Description": "Percentile (60) of ydses_c5", - "Java class": "Statistics.java", - "Output file name": "File: Statistics", - "Notes": "Corrected because the reviewed UK workbook labels ydses_p60 as yHhQuintilesC5P80.", - }, - ), - ("Statistics.java", "edi_p50"): ManualSpec( - status="Adapted from UK", - source_kind="Java field", - variable_name="yHhDispEquivP50Calc", - reference_new="yHhDispEquivP50", - match_basis="Manual review of duplicate EDI median fields", - review_required="Yes", - review_note="Statistics.java stores both medianEquivalisedHouseholdDisposableIncome and edi_p50; confirm whether both should survive the refactor or be consolidated.", - overrides={ - "Other info": "Calc", - "Variable name (concatenate)": "yHhDispEquivP50Calc", - "Variable name": "yHhDispEquivP50Calc", - "Description": "Percentile-calculated P50 of equivalised household disposable income.", - "Java class": "Statistics.java", - "Output file name": "File: Statistics", - "Notes": "Separated from the main yHhDispEquivP50 row because SimPathsEU stores two median-EDI fields in Statistics.java.", - }, - ), -} - - -ALIGNMENT_SPECS = { - "retirementAdjustmentFactor": ("labRtrdAdj", "lab", "Rtrd", "Adj", None, "Retirement adjustment factor."), - "retirement_adj_factor": ("labRtrdAdj", "lab", "Rtrd", "Adj", None, "Database column for the retirement adjustment factor."), - "disabilityAdjustmentFactor": ("healthDsblAdj", "health", "Dsbl", "Adj", None, "Disability adjustment factor."), - "disability_adj_factor": ("healthDsblAdj", "health", "Dsbl", "Adj", None, "Database column for the disability adjustment factor."), - "retirementShareSimulated": ("labRtrdSimShare", "lab", "Rtrd", None, "Sim", "Simulated retirement share."), - "retirement_share_sim": ("labRtrdSimShare", "lab", "Rtrd", None, "Sim", "Database column for the simulated retirement share."), - "retirementShareTarget": ("labRtrdTargetShare", "lab", "Rtrd", None, "Target", "Target retirement share."), - "retirement_share_tgt": ("labRtrdTargetShare", "lab", "Rtrd", None, "Target", "Database column for the target retirement share."), - "disabilityShareSimulated": ("healthDsblSimShare", "health", "Dsbl", None, "Sim", "Simulated disability share."), - "disability_share_sim": ("healthDsblSimShare", "health", "Dsbl", None, "Sim", "Database column for the simulated disability share."), - "disabilityShareTarget": ("healthDsblTargetShare", "health", "Dsbl", None, "Target", "Target disability share."), - "disability_share_tgt": ("healthDsblTargetShare", "health", "Dsbl", None, "Target", "Database column for the target disability share."), - "inSchoolAdjustmentFactor": ("eduSpellAdj", "edu", "Spell", "Adj", None, "In-school adjustment factor."), - "in_school_adj_factor": ("eduSpellAdj", "edu", "Spell", "Adj", None, "Database column for the in-school adjustment factor."), - "inSchoolShareSimulated": ("eduSpellSimShare", "edu", "Spell", None, "Sim", "Simulated in-school share."), - "in_school_share_sim": ("eduSpellSimShare", "edu", "Spell", None, "Sim", "Database column for the simulated in-school share."), - "inSchoolShareTarget": ("eduSpellTargetShare", "edu", "Spell", None, "Target", "Target in-school share."), - "in_school_share_tgt": ("eduSpellTargetShare", "edu", "Spell", None, "Target", "Database column for the target in-school share."), - "utilityAdjustmentFactorACMale": ("demUtilAdjAcMale", "dem", "Util", "Adj", "AcMale", "Utility adjustment factor adult-child males."), - "utility_adj_factor_ac_male": ("demUtilAdjAcMale", "dem", "Util", "Adj", "AcMale", "Database column for the adult-child male utility adjustment factor."), - "utilityAdjustmentFactorACFemale": ("demUtilAdjAcFemale", "dem", "Util", "Adj", "AcFemale", "Utility adjustment factor adult-child females."), - "utility_adj_factor_ac_female": ("demUtilAdjAcFemale", "dem", "Util", "Adj", "AcFemale", "Database column for the adult-child female utility adjustment factor."), - "utilityAdjustmentFactorMaleWithDep": ("demUtilAdjMaleWithDep", "dem", "Util", "Adj", "MaleWithDep", "Utility adjustment factor males with dependants."), - "utility_adj_factor_male_with_dep": ("demUtilAdjMaleWithDep", "dem", "Util", "Adj", "MaleWithDep", "Database column for the male-with-dependants utility adjustment factor."), - "utilityAdjustmentFactorFemaleWithDep": ("demUtilAdjFemaleWithDep", "dem", "Util", "Adj", "FemaleWithDep", "Utility adjustment factor females with dependants."), - "utility_adj_factor_female_with_dep": ("demUtilAdjFemaleWithDep", "dem", "Util", "Adj", "FemaleWithDep", "Database column for the female-with-dependants utility adjustment factor."), - "employedShareSimSingleMales": ("labEmpSimShareSingleM", "lab", "Emp", None, "SingleM", "Simulated employed share for single males."), - "employed_share_sim_smales": ("labEmpSimShareSingleM", "lab", "Emp", None, "SingleM", "Database column for the simulated employed share of single males."), - "employedShareTgtSingleMales": ("labEmpTargetShareSingleM", "lab", "Emp", None, "SingleMTarget", "Target employed share for single males."), - "employed_share_tgt_smales": ("labEmpTargetShareSingleM", "lab", "Emp", None, "SingleMTarget", "Database column for the target employed share of single males."), - "employedShareSimSingleFemales": ("labEmpSimShareSingleF", "lab", "Emp", None, "SingleF", "Simulated employed share for single females."), - "employed_share_sim_sfemales": ("labEmpSimShareSingleF", "lab", "Emp", None, "SingleF", "Database column for the simulated employed share of single females."), - "employedShareTgtSingleFemales": ("labEmpTargetShareSingleF", "lab", "Emp", None, "SingleFTarget", "Target employed share for single females."), - "employed_share_tgt_sfemales": ("labEmpTargetShareSingleF", "lab", "Emp", None, "SingleFTarget", "Database column for the target employed share of single females."), - "employedShareSimCouples": ("labEmpSimShareCouple", "lab", "Emp", None, "Couple", "Simulated employed share for couples."), - "employed_share_sim_couples": ("labEmpSimShareCouple", "lab", "Emp", None, "Couple", "Database column for the simulated employed share of couples."), - "employedShareTgtCouples": ("labEmpTargetShareCouple", "lab", "Emp", None, "CoupleTarget", "Target employed share for couples."), - "employed_share_tgt_couples": ("labEmpTargetShareCouple", "lab", "Emp", None, "CoupleTarget", "Database column for the target employed share of couples."), - "employedShareSimACMale": ("labEmpSimShareAcMale", "lab", "Emp", None, "AcMale", "Simulated employed share for adult-child males."), - "employed_share_sim_ac_male": ("labEmpSimShareAcMale", "lab", "Emp", None, "AcMale", "Database column for the simulated employed share of adult-child males."), - "employedShareTgtACMale": ("labEmpTargetShareAcMale", "lab", "Emp", None, "AcMaleTarget", "Target employed share for adult-child males."), - "employed_share_tgt_ac_male": ("labEmpTargetShareAcMale", "lab", "Emp", None, "AcMaleTarget", "Database column for the target employed share of adult-child males."), - "employedShareSimACFemale": ("labEmpSimShareAcFemale", "lab", "Emp", None, "AcFemale", "Simulated employed share for adult-child females."), - "employed_share_sim_ac_female": ("labEmpSimShareAcFemale", "lab", "Emp", None, "AcFemale", "Database column for the simulated employed share of adult-child females."), - "employedShareTgtACFemale": ("labEmpTargetShareAcFemale", "lab", "Emp", None, "AcFemaleTarget", "Target employed share for adult-child females."), - "employed_share_tgt_ac_female": ("labEmpTargetShareAcFemale", "lab", "Emp", None, "AcFemaleTarget", "Database column for the target employed share of adult-child females."), - "employedShareSimMaleWithDep": ("labEmpSimShareMaleWithDep", "lab", "Emp", None, "MaleWithDep", "Simulated employed share for males with dependants."), - "employed_share_sim_male_with_dep": ("labEmpSimShareMaleWithDep", "lab", "Emp", None, "MaleWithDep", "Database column for the simulated employed share of males with dependants."), - "employedShareTgtMaleWithDep": ("labEmpTargetShareMaleWithDep", "lab", "Emp", None, "MaleWithDepTarget", "Target employed share for males with dependants."), - "employed_share_tgt_male_with_dep": ("labEmpTargetShareMaleWithDep", "lab", "Emp", None, "MaleWithDepTarget", "Database column for the target employed share of males with dependants."), - "employedShareSimFemaleWithDep": ("labEmpSimShareFemaleWithDep", "lab", "Emp", None, "FemaleWithDep", "Simulated employed share for females with dependants."), - "employed_share_sim_female_with_dep": ("labEmpSimShareFemaleWithDep", "lab", "Emp", None, "FemaleWithDep", "Database column for the simulated employed share of females with dependants."), - "employedShareTgtFemaleWithDep": ("labEmpTargetShareFemaleWithDep", "lab", "Emp", None, "FemaleWithDepTarget", "Target employed share for females with dependants."), - "employed_share_tgt_female_with_dep": ("labEmpTargetShareFemaleWithDep", "lab", "Emp", None, "FemaleWithDepTarget", "Database column for the target employed share of females with dependants."), -} - - -CONTROL_MANUAL = { - "TimeSeriesVariable": { - "CareProvisionAdjustment": ("careAdj", "Adapted from UK", "Social care adjustment factor (time-series control).", "No", ""), - "CarerWageRate": ("careWageRate", "New vs UK", "Carer wage rate used for formal-care cost calculations.", "No", ""), - "FixedRetirementAge": ("labRtrdAgeFixed", "New vs UK", "Fixed retirement age schedule.", "No", ""), - "GDP": ("statGdp", "New vs UK", "GDP time-series control.", "No", ""), - "HighEducationRate": ("eduHighRate", "New vs UK", "Target rate for high education attainment.", "No", ""), - "Inflation": ("statInflation", "New vs UK", "Inflation time-series index.", "No", ""), - "LowEducationRate": ("eduLowRate", "New vs UK", "Target rate for low education attainment.", "No", ""), - "PartnershipAdjustment": ("demPartnerAdj", "Adapted from UK", "Partnership adjustment factor control.", "No", ""), - "FertilityAdjustment": ("demFertAdj", "Adapted from UK", "Fertility adjustment factor control.", "No", ""), - "DisabilityAdjustment": ("healthDsblAdj", "New vs UK", "Disability adjustment factor control.", "No", ""), - "UtilityAdjustment": ("demUtilAdj", "New vs UK", "Top-level utility adjustment factor.", "Yes", "No UK row exists for the aggregate utility-adjustment control; confirm whether the aggregate control should remain separate from subgroup controls."), - "UtilityAdjustmentSingleMales": ("demUtilAdjSingleM", "Adapted from UK", "Utility adjustment factor for single males.", "No", ""), - "UtilityAdjustmentACMales": ("demUtilAdjAcMale", "New vs UK", "Utility adjustment factor for adult-child males.", "Yes", "Adult-child subgroup naming is inferred because the UK workbook has no direct AC row."), - "UtilityAdjustmentSingleFemales": ("demUtilAdjSingleF", "Adapted from UK", "Utility adjustment factor for single females.", "No", ""), - "UtilityAdjustmentACFemales": ("demUtilAdjAcFemale", "New vs UK", "Utility adjustment factor for adult-child females.", "Yes", "Adult-child subgroup naming is inferred because the UK workbook has no direct AC row."), - "UtilityAdjustmentCouples": ("demUtilAdjCouple", "Adapted from UK", "Utility adjustment factor for couples.", "No", ""), - "UtilityAdjustmentMaleWithDep": ("demUtilAdjMaleWithDep", "New vs UK", "Utility adjustment factor for males with dependants.", "Yes", "With-dependants subgroup naming is inferred because the UK workbook has no direct row."), - "UtilityAdjustmentFemaleWithDep": ("demUtilAdjFemaleWithDep", "New vs UK", "Utility adjustment factor for females with dependants.", "Yes", "With-dependants subgroup naming is inferred because the UK workbook has no direct row."), - "RetirementAdjustment": ("labRtrdAdj", "New vs UK", "Retirement adjustment factor control.", "No", ""), - "InSchoolAdjustment": ("eduSpellAdj", "New vs UK", "In-school adjustment factor control.", "No", ""), - "WageGrowth": ("labWageGrowth", "New vs UK", "Wage-growth time-series index.", "No", ""), - }, - "AlignmentVariable": { - "PartnershipAlignment": ("demPartnerAlign", "New vs UK", "Partnership alignment control enum.", "No", ""), - "FertilityAlignment": ("demFertAlign", "New vs UK", "Fertility alignment control enum.", "No", ""), - "RetirementAlignment": ("labRtrdAlign", "New vs UK", "Retirement alignment control enum.", "No", ""), - "DisabilityAlignment": ("healthDsblAlign", "New vs UK", "Disability alignment control enum.", "No", ""), - }, -} - - -def read_variables_sheet(workbook): - ws = workbook["Variables"] - rows = list(ws.iter_rows(values_only=True)) - header = list(rows[0]) - row_dicts = [] - for row_number, row in enumerate(rows[1:], start=2): - values = list(row) + [None] * (len(header) - len(row)) - row_dict = {header[index]: values[index] for index in range(len(header))} - row_dict["_row_number"] = row_number - row_dicts.append(row_dict) - return header, row_dicts - - -def build_row_maps(uk_rows): - by_old_exact = {} - by_old_lower = {} - by_new = {} - for row in uk_rows: - old_name = row.get("SimPaths old name") - new_name = row.get("Variable name") - if old_name: - old_text = str(old_name).strip() - by_old_exact.setdefault(old_text, []).append(row) - by_old_lower.setdefault(old_text.lower(), []).append(row) - if new_name: - by_new.setdefault(str(new_name).strip().lower(), []).append(row) - return by_old_exact, by_old_lower, by_new - - -def strip_comments(text: str) -> str: - return COMMENT_RE.sub("", text) - - -def parse_fields(java_path: Path) -> list[Candidate]: - text = strip_comments(java_path.read_text()) - candidates = [] - order = 0 - for match in FIELD_RE.finditer(text): - order += 1 - name = match.group("name") - column_match = COLUMN_RE.search(match.group(0)) - column_name = column_match.group(1) if column_match else None - candidates.append( - Candidate( - source_name=name, - source_kind="Java field", - java_class=java_path.name, - java_path=java_path, - order=order, - sibling_name=column_name, - ) - ) - return candidates - - -def parse_enum_constants(java_path: Path, enum_name: str) -> list[str]: - text = strip_comments(java_path.read_text()) - match = re.search(r"\benum\s+" + re.escape(enum_name) + r"\s*\{", text) - if not match: - return [] - start = match.end() - depth = 1 - cursor = start - while cursor < len(text) and depth > 0: - if text[cursor] == "{": - depth += 1 - elif text[cursor] == "}": - depth -= 1 - cursor += 1 - body = text[start : cursor - 1] - constants_section = body.split(";", 1)[0] - constants = [] - for raw_part in constants_section.split(","): - token = raw_part.strip() - if re.fullmatch(r"[A-Za-z_][A-Za-z0-9_]*", token): - constants.append(token) - return constants - - -def candidate_is_excluded(candidate: Candidate) -> str | None: - if candidate.source_name in EXCLUDED_REASONS: - return EXCLUDED_REASONS[candidate.source_name] - lower_name = candidate.source_name.lower() - if candidate.java_class == "Processed.java": - return "Metadata record field" - if lower_name.endswith("series"): - return "Series wrapper helper" - if lower_name.endswith("cachekey") or lower_name.endswith("cacheyear"): - return "Cache field" - if lower_name.startswith("cached"): - return "Cache field" - if lower_name.endswith("map") and candidate.source_kind == "Java field": - return "Helper map/cache" - if candidate.source_name in {"benefitUnit", "household", "members"}: - return "Entity association" - return None - - -def make_base_row(header: list[str]) -> dict[str, object]: - row = {column: None for column in header} - row["Variable name (concatenate)"] = None - row["Variable name"] = None - row["Description"] = None - row["Java class"] = None - row["Initial population"] = "No" - row["Module"] = None - row["Output file name"] = None - row["Notes"] = None - row["SimPaths old name"] = None - return row - - -def clone_row(template_row: dict[str, object], header: list[str]) -> dict[str, object]: - row = {column: template_row.get(column) for column in header} - return row - - -def choose_template_by_new( - new_name: str, - class_hint: str, - uk_by_new: dict[str, list[dict[str, object]]], -) -> dict[str, object] | None: - options = uk_by_new.get(new_name.lower(), []) - if not options: - return None - for option in options: - if option.get("Java class") == class_hint: - return option - return options[0] - - -def choose_template_by_old( - old_name: str, - class_hint: str, - uk_by_old_exact: dict[str, list[dict[str, object]]], - uk_by_old_lower: dict[str, list[dict[str, object]]], -) -> tuple[dict[str, object] | None, str | None]: - if not old_name: - return None, None - - best_template = None - best_basis = None - best_score = -1 - - search_spaces = [ - ("UK old name exact", uk_by_old_exact.get(old_name, []), 10), - ("UK old name lower-case", uk_by_old_lower.get(old_name.lower(), []), 5), - ] - - for basis, options, base_score in search_spaces: - for option in options: - score = base_score - if option.get("Java class") == class_hint: - score += 3 - if str(option.get("SimPaths old name") or "") == old_name: - score += 1 - if score > best_score: - best_template = option - best_basis = basis - best_score = score - - return best_template, best_basis - - -def find_template_for_candidate( - candidate: Candidate, - uk_by_old_exact: dict[str, list[dict[str, object]]], - uk_by_old_lower: dict[str, list[dict[str, object]]], -) -> tuple[dict[str, object] | None, str | None]: - search_items = [ - ("EU field", candidate.source_name), - ("EU DB alias", candidate.sibling_name), - ] - - best_template = None - best_basis = None - best_score = -1 - - for label, raw_name in search_items: - if not raw_name: - continue - template, basis = choose_template_by_old(raw_name, candidate.java_class, uk_by_old_exact, uk_by_old_lower) - if not template: - continue - score = 0 - if label == "EU field": - score += 4 - if basis == "UK old name exact": - score += 2 - if template.get("Java class") == candidate.java_class: - score += 3 - if score > best_score: - best_template = template - best_basis = f"{label} via {basis}" - best_score = score - - return best_template, best_basis - - -def build_manual_row( - header: list[str], - uk_by_old_exact: dict[str, list[dict[str, object]]], - uk_by_old_lower: dict[str, list[dict[str, object]]], - uk_by_new: dict[str, list[dict[str, object]]], - candidate: Candidate, - spec: ManualSpec, -) -> tuple[dict[str, object], int | None]: - if spec.reference_old: - template, _ = choose_template_by_old(spec.reference_old, candidate.java_class, uk_by_old_exact, uk_by_old_lower) - elif spec.reference_new: - template = choose_template_by_new(spec.reference_new, candidate.java_class, uk_by_new) - else: - template = None - - if template: - row = clone_row(template, header) - template_row_number = template["_row_number"] - else: - row = make_base_row(header) - template_row_number = None - - if spec.variable_name: - row["Variable name (concatenate)"] = spec.variable_name - row["Variable name"] = spec.variable_name - row["Java class"] = candidate.java_class - row["SimPaths old name"] = candidate.source_name - row["EU DB column / alias"] = candidate.sibling_name if candidate.sibling_name != candidate.source_name else None - if candidate.java_class in {"Statistics.java", "Statistics2.java", "AlignmentAdjustmentFactors.java"}: - row["Output file name"] = f"File: {candidate.java_class.replace('.java', '')}" - - if spec.overrides: - row.update(spec.overrides) - - row["Comparison status"] = spec.status - row["Match basis"] = spec.match_basis - row["UK reference"] = spec.reference_new or spec.reference_old - row["Needs review"] = spec.review_required - row["Review note"] = spec.review_note - return row, template_row_number - - -def build_alignment_row(header: list[str], candidate: Candidate) -> dict[str, object]: - variable_name, mod, main_attribute, measurement, other_info, description = ALIGNMENT_SPECS[candidate.source_name] - row = make_base_row(header) - row["Local"] = None - row["Mod"] = mod - row["Main attribute"] = main_attribute - row["Measurement"] = measurement - row["Other info"] = other_info - row["Variable name (concatenate)"] = variable_name - row["Variable name"] = variable_name - row["Description"] = description - row["Java class"] = candidate.java_class - row["Initial population"] = "No" - row["Output file name"] = "File: AlignmentAdjustmentFactors" - row["Module"] = { - "dem": "Demography", - "edu": "Education", - "health": "Health", - "lab": "Labour", - }[mod] - row["Notes"] = "New SimPathsEU alignment output relative to the reviewed UK workbook." - row["SimPaths old name"] = candidate.source_name - row["EU DB column / alias"] = candidate.sibling_name if candidate.sibling_name != candidate.source_name else None - row["Comparison status"] = "New vs UK" - row["Match basis"] = "Manual review of SimPathsEU alignment outputs" - row["UK reference"] = None - row["Needs review"] = "Yes" if "Ac" in variable_name or "WithDep" in variable_name else "No" - row["Review note"] = ( - "Subgroup naming is inferred because the reviewed UK workbook does not contain this alignment subgroup." - if row["Needs review"] == "Yes" - else "" - ) - return row - - -def build_exact_row( - header: list[str], - template: dict[str, object], - candidate: Candidate, - status: str, - match_basis: str, -) -> dict[str, object]: - row = clone_row(template, header) - row["Java class"] = candidate.java_class - row["SimPaths old name"] = candidate.source_name - row["EU DB column / alias"] = candidate.sibling_name if candidate.sibling_name != candidate.source_name else None - row["Comparison status"] = status - row["Match basis"] = match_basis - row["UK reference"] = template.get("Variable name") - row["Needs review"] = "No" - row["Review note"] = "" - if candidate.java_class in {"Statistics.java", "Statistics2.java", "AlignmentAdjustmentFactors.java"}: - row["Output file name"] = f"File: {candidate.java_class.replace('.java', '')}" - return row - - -def lookup_manual_spec(candidate: Candidate) -> ManualSpec | None: - return CLASS_MANUAL_SPECS.get((candidate.java_class, candidate.source_name)) or MANUAL_SPECS.get(candidate.source_name) - - -def row_fill_for_status(status: str): - if status == "Matched UK": - return MATCHED_FILL - if status == "Adapted from UK": - return ADAPTED_FILL - if status == "New vs UK": - return NEW_FILL - return None - - -def autofit_columns(ws): - for column_cells in ws.columns: - values = ["" if cell.value is None else str(cell.value) for cell in column_cells] - max_length = max(len(value) for value in values) - width = min(max(max_length + 2, 10), 40) - ws.column_dimensions[column_cells[0].column_letter].width = width - - -def reset_sheet(ws): - if ws.max_row > 1: - ws.delete_rows(2, ws.max_row - 1) - - -def write_header(ws, header: list[str]): - for index, column_name in enumerate(header, start=1): - cell = ws.cell(row=1, column=index, value=column_name) - cell.font = Font(bold=True) - cell.fill = HEADER_STYLE_FILL - cell.alignment = Alignment(horizontal="center", vertical="center", wrap_text=True) - ws.freeze_panes = "A2" - ws.auto_filter.ref = ws.dimensions - - -def write_rows(ws, header: list[str], rows: Iterable[dict[str, object]]): - for row_number, row in enumerate(rows, start=2): - for column_number, column_name in enumerate(header, start=1): - ws.cell(row=row_number, column=column_number, value=row.get(column_name)) - fill = row_fill_for_status(str(row.get("Comparison status"))) - if fill: - for column_number in range(1, len(header) + 1): - ws.cell(row=row_number, column=column_number).fill = fill - if row.get("Needs review") == "Yes": - for column_name in ("Needs review", "Review note"): - column_index = header.index(column_name) + 1 - ws.cell(row=row_number, column=column_index).fill = REVIEW_FILL - for column_name in ("Description", "Notes", "Review note"): - column_index = header.index(column_name) + 1 - ws.cell(row=row_number, column=column_index).alignment = Alignment(wrap_text=True, vertical="top") - ws.auto_filter.ref = ws.dimensions - - -def sort_codebook_rows(rows: list[dict[str, object]]) -> list[dict[str, object]]: - def key(row): - mod = str(row.get("Mod") or "") - variable_name = str(row.get("Variable name") or "") - java_class = str(row.get("Java class") or "") - old_name = str(row.get("SimPaths old name") or "") - return (MODULE_ORDER.get(mod, 99), mod, variable_name.lower(), java_class.lower(), old_name.lower()) - - return sorted(rows, key=key) - - -def update_cover_sheet(workbook): - ws = workbook["Cover"] - ws["B2"] = "SimPathsEU Codebook" - ws["C4"] = date.today() - ws["C5"] = "Codex review based on SimPaths_Variable_CodebookUK" - ws["B7"] = "Workbook contents" - ws["B8"] = "Variables: one logical SimPathsEU field per row, with DB aliases attached to the same row" - ws["B9"] = "EU Review Summary: scope, counts, highlight legend, and review totals" - ws["B10"] = "Collision Review: proposed names still shared across multiple EU fields/classes" - ws["B11"] = "UK Review Issues: inconsistencies detected in the reviewed UK workbook" - ws["B12"] = "Controls: time-series and alignment enums reviewed for refactoring" - ws["B13"] = "UK Only: variables present in the reviewed UK workbook but not matched in SimPathsEU" - ws["B14"] = "Excluded Internals: infrastructure/cache/metadata fields excluded from the codebook" - ws["B15"] = "Deferred Inventory: regression and validation enums reviewed but left outside the main UK-style codebook pass" - - -def build_summary_rows( - included_rows: list[dict[str, object]], - uk_only_rows: list[dict[str, object]], - excluded_rows: list[dict[str, object]], - deferred_rows: list[dict[str, object]], - control_rows: list[dict[str, object]], - collision_rows: list[dict[str, object]], - uk_issue_rows: list[dict[str, object]], -): - counts = { - "Core variables included": len(included_rows), - "Matched UK": sum(1 for row in included_rows if row["Comparison status"] == "Matched UK"), - "Adapted from UK": sum(1 for row in included_rows if row["Comparison status"] == "Adapted from UK"), - "New vs UK": sum(1 for row in included_rows if row["Comparison status"] == "New vs UK"), - "Needs review": sum(1 for row in included_rows if row["Needs review"] == "Yes"), - "Remaining EU name-collision groups": len({row["Variable name"] for row in collision_rows}), - "UK workbook review issues logged": len(uk_issue_rows), - "Controls reviewed": len(control_rows), - "UK-only rows": len(uk_only_rows), - "Excluded internal/metadata fields": len(excluded_rows), - "Deferred regression/validation enum constants": len(deferred_rows), - } - - lines = [ - ("Generated on", date.today().isoformat()), - ("Scope", "Person, BenefitUnit, Household, Statistics, Statistics2, AlignmentAdjustmentFactors; UK workbook reviewed as naming reference."), - ("Coverage note", "Core variables are codebooked one logical field per row. Time-series/alignment enums are reviewed in Controls. Regression/validation enums are inventoried separately in Deferred Inventory."), - ] - for key, value in counts.items(): - lines.append((key, value)) - lines.extend( - [ - ("Highlight legend", None), - ("Green rows", "Direct UK mapping reused for SimPathsEU."), - ("Blue rows", "UK naming pattern reused but adapted for an EU variant."), - ("Yellow rows", "New SimPathsEU variable relative to the reviewed UK workbook."), - ("Orange review cells", "Name needs confirmation because the UK workbook had no exact analogue or the EU semantics differ."), - ] - ) - return lines - - -def build_collision_rows(included_rows: list[dict[str, object]]) -> list[dict[str, object]]: - grouped = {} - for row in included_rows: - grouped.setdefault(row["Variable name"], []).append(row) - - collisions = [] - for variable_name, rows in grouped.items(): - if len(rows) < 2: - continue - for row in rows: - collisions.append( - { - "Variable name": variable_name, - "Java class": row.get("Java class"), - "SimPaths old name": row.get("SimPaths old name"), - "EU DB column / alias": row.get("EU DB column / alias"), - "Comparison status": row.get("Comparison status"), - "Needs review": row.get("Needs review"), - "Review note": row.get("Review note") or "Shared proposed name across multiple EU fields/classes; review if global uniqueness is required for the refactor.", - } - ) - return sorted(collisions, key=lambda item: (str(item["Variable name"]), str(item["Java class"]), str(item["SimPaths old name"]))) - - -def build_uk_review_issues(uk_rows: list[dict[str, object]]) -> list[dict[str, object]]: - issues = [] - - for row in uk_rows: - old_name = str(row.get("SimPaths old name") or "") - variable_name = str(row.get("Variable name") or "") - if old_name == "idFather" and variable_name == "idMother": - issues.append( - { - "Issue type": "Incorrect mapping", - "Variable name": variable_name, - "SimPaths old name": old_name, - "Java class": row.get("Java class"), - "Description": row.get("Description"), - "Review note": "UK workbook row uses idMother as the proposed name for old name idFather despite a Father ID description.", - } - ) - if old_name == "ydses_p60" and variable_name == "yHhQuintilesC5P80": - issues.append( - { - "Issue type": "Incorrect statistic label", - "Variable name": variable_name, - "SimPaths old name": old_name, - "Java class": row.get("Java class"), - "Description": row.get("Description"), - "Review note": "UK workbook labels the 60th percentile row as C5P80.", - } - ) - - duplicate_counts = {} - for row in uk_rows: - variable_name = row.get("Variable name") - if variable_name: - duplicate_counts.setdefault(variable_name, []).append(row) - - for variable_name, rows in duplicate_counts.items(): - if len(rows) < 2: - continue - issues.append( - { - "Issue type": "Non-unique variable name", - "Variable name": variable_name, - "SimPaths old name": "; ".join(str(row.get("SimPaths old name")) for row in rows), - "Java class": "; ".join(str(row.get("Java class")) for row in rows), - "Description": rows[0].get("Description"), - "Review note": f"Reviewed UK workbook uses this proposed name for {len(rows)} different rows/classes.", - } - ) - - return sorted(issues, key=lambda item: (str(item["Issue type"]), str(item["Variable name"]))) - - -def create_or_replace_sheet(workbook, title: str): - if title in workbook.sheetnames: - index = workbook.sheetnames.index(title) - del workbook[title] - return workbook.create_sheet(title, index) - return workbook.create_sheet(title) - - -def clone_sheet_layout(source_ws, target_ws): - target_ws.sheet_format.defaultColWidth = source_ws.sheet_format.defaultColWidth - target_ws.sheet_format.defaultRowHeight = source_ws.sheet_format.defaultRowHeight - target_ws.freeze_panes = source_ws.freeze_panes - target_ws.auto_filter.ref = source_ws.auto_filter.ref - target_ws.sheet_view.zoomScale = source_ws.sheet_view.zoomScale - target_ws.sheet_properties.tabColor = source_ws.sheet_properties.tabColor - - for merged_range in source_ws.merged_cells.ranges: - target_ws.merge_cells(str(merged_range)) - - for key, dimension in source_ws.column_dimensions.items(): - target_dimension = target_ws.column_dimensions[key] - target_dimension.width = dimension.width - target_dimension.hidden = dimension.hidden - target_dimension.bestFit = dimension.bestFit - - for key, dimension in source_ws.row_dimensions.items(): - target_dimension = target_ws.row_dimensions[key] - target_dimension.height = dimension.height - target_dimension.hidden = dimension.hidden - target_dimension.outlineLevel = dimension.outlineLevel - - -def clone_sheet_cells(source_ws, target_ws): - for row in source_ws.iter_rows(): - for cell in row: - target = target_ws.cell(row=cell.row, column=cell.column, value=cell.value) - if cell.has_style: - target.font = copy.copy(cell.font) - target.fill = copy.copy(cell.fill) - target.border = copy.copy(cell.border) - target.alignment = copy.copy(cell.alignment) - target.number_format = cell.number_format - target.protection = copy.copy(cell.protection) - if cell.hyperlink: - target._hyperlink = copy.copy(cell.hyperlink) - if cell.comment: - target.comment = copy.copy(cell.comment) - - -def copy_reference_sheet(source_workbook, target_workbook, title: str): - source_ws = source_workbook[title] - target_ws = target_workbook.create_sheet(title) - clone_sheet_cells(source_ws, target_ws) - clone_sheet_layout(source_ws, target_ws) - return target_ws - - -def main(): - uk_workbook = load_workbook(UK_CODEBOOK) - base_header, uk_rows = read_variables_sheet(uk_workbook) - uk_by_old_exact, uk_by_old_lower, uk_by_new = build_row_maps(uk_rows) - - workbook = Workbook() - default_sheet = workbook.active - workbook.remove(default_sheet) - - copy_reference_sheet(uk_workbook, workbook, "Cover") - variables_ws = workbook.create_sheet("Variables") - for title in ("Rules", "Modules", "Abbreviations", "Coding Style", "Country Specific Vars"): - copy_reference_sheet(uk_workbook, workbook, title) - - extended_header = base_header + [ - "EU DB column / alias", - "Comparison status", - "Match basis", - "UK reference", - "Needs review", - "Review note", - ] - - included_rows = [] - excluded_rows = [] - used_uk_rows = set() - - all_candidates = [] - for java_file in CORE_JAVA_FILES: - all_candidates.extend(parse_fields(java_file)) - - for candidate in all_candidates: - exclusion_reason = candidate_is_excluded(candidate) - if exclusion_reason: - excluded_rows.append( - { - "Java class": candidate.java_class, - "Raw name": candidate.source_name, - "Source kind": "Java field", - "Reason": exclusion_reason, - } - ) - continue - - manual_spec = lookup_manual_spec(candidate) - if manual_spec: - row, template_row_number = build_manual_row( - extended_header, - uk_by_old_exact, - uk_by_old_lower, - uk_by_new, - candidate, - manual_spec, - ) - included_rows.append(row) - if template_row_number: - used_uk_rows.add(template_row_number) - continue - - if candidate.source_name in ALIGNMENT_SPECS: - row = build_alignment_row(extended_header, candidate) - included_rows.append(row) - continue - - template, match_basis = find_template_for_candidate(candidate, uk_by_old_exact, uk_by_old_lower) - if template: - row = build_exact_row(extended_header, template, candidate, "Matched UK", match_basis or "UK old name") - included_rows.append(row) - used_uk_rows.add(template["_row_number"]) - continue - - template = choose_template_by_new(candidate.source_name, candidate.java_class, uk_by_new) - if template: - row = build_exact_row(extended_header, template, candidate, "Matched UK", "UK variable name") - included_rows.append(row) - used_uk_rows.add(template["_row_number"]) - continue - - excluded_rows.append( - { - "Java class": candidate.java_class, - "Raw name": candidate.source_name, - "Source kind": "Java field", - "Reason": "Unmapped after review; not added to the core UK-style codebook.", - } - ) - - included_rows = sort_codebook_rows(included_rows) - collision_rows = build_collision_rows(included_rows) - uk_issue_rows = build_uk_review_issues(uk_rows) - - reset_sheet(variables_ws) - write_header(variables_ws, extended_header) - write_rows(variables_ws, extended_header, included_rows) - autofit_columns(variables_ws) - - update_cover_sheet(workbook) - - collision_ws = create_or_replace_sheet(workbook, "Collision Review") - collision_header = [ - "Variable name", - "Java class", - "SimPaths old name", - "EU DB column / alias", - "Comparison status", - "Needs review", - "Review note", - ] - write_header(collision_ws, collision_header) - for row_number, row in enumerate(collision_rows, start=2): - for column_number, column_name in enumerate(collision_header, start=1): - collision_ws.cell(row=row_number, column=column_number, value=row.get(column_name)) - for column_number in range(1, len(collision_header) + 1): - collision_ws.cell(row=row_number, column=column_number).fill = REVIEW_FILL - for column_name in ("Review note",): - collision_ws.cell(row=row_number, column=collision_header.index(column_name) + 1).alignment = Alignment(wrap_text=True, vertical="top") - autofit_columns(collision_ws) - - uk_issues_ws = create_or_replace_sheet(workbook, "UK Review Issues") - uk_issue_header = ["Issue type", "Variable name", "SimPaths old name", "Java class", "Description", "Review note"] - write_header(uk_issues_ws, uk_issue_header) - for row_number, row in enumerate(uk_issue_rows, start=2): - for column_number, column_name in enumerate(uk_issue_header, start=1): - uk_issues_ws.cell(row=row_number, column=column_number, value=row.get(column_name)) - for column_number in range(1, len(uk_issue_header) + 1): - uk_issues_ws.cell(row=row_number, column=column_number).fill = REVIEW_FILL - for column_name in ("Description", "Review note"): - uk_issues_ws.cell(row=row_number, column=uk_issue_header.index(column_name) + 1).alignment = Alignment(wrap_text=True, vertical="top") - autofit_columns(uk_issues_ws) - - uk_only_ws = create_or_replace_sheet(workbook, "UK Only") - uk_only_header = [ - "Variable name", - "SimPaths old name", - "Java class", - "Module", - "Description", - "Reason", - ] - write_header(uk_only_ws, uk_only_header) - uk_only_rows = [] - included_variable_names = {row.get("Variable name") for row in included_rows} - for row in uk_rows: - if row["_row_number"] in used_uk_rows: - continue - if (row.get("SimPaths old name"), row.get("Variable name")) in { - ("idFather", "idMother"), - ("ydses_p60", "yHhQuintilesC5P80"), - }: - continue - if row.get("Variable name") in included_variable_names: - continue - uk_only_rows.append( - { - "Variable name": row.get("Variable name"), - "SimPaths old name": row.get("SimPaths old name"), - "Java class": row.get("Java class"), - "Module": row.get("Module"), - "Description": row.get("Description"), - "Reason": "Present in reviewed UK workbook but no SimPathsEU core-variable match was found in this pass.", - "Comparison status": "UK only", - } - ) - for row_number, row in enumerate(sorted(uk_only_rows, key=lambda item: (str(item["Module"]), str(item["Variable name"]))), start=2): - for column_number, column_name in enumerate(uk_only_header, start=1): - uk_only_ws.cell(row=row_number, column=column_number, value=row.get(column_name)) - for column_number in range(1, len(uk_only_header) + 1): - uk_only_ws.cell(row=row_number, column=column_number).fill = UK_ONLY_FILL - for column_name in ("Description", "Reason"): - uk_only_ws.cell(row=row_number, column=uk_only_header.index(column_name) + 1).alignment = Alignment(wrap_text=True, vertical="top") - autofit_columns(uk_only_ws) - - controls_ws = create_or_replace_sheet(workbook, "Controls") - controls_header = [ - "Enum type", - "Raw name", - "Proposed name", - "Status", - "Needs review", - "Description", - "Notes", - ] - write_header(controls_ws, controls_header) - control_rows = [] - for java_path, enum_name in CONTROL_ENUM_FILES.items(): - for raw_name in parse_enum_constants(java_path, enum_name): - proposed_name, status, description, needs_review, notes = CONTROL_MANUAL[enum_name][raw_name] - control_rows.append( - { - "Enum type": enum_name, - "Raw name": raw_name, - "Proposed name": proposed_name, - "Status": status, - "Needs review": needs_review, - "Description": description, - "Notes": notes, - } - ) - for row_number, row in enumerate(control_rows, start=2): - for column_number, column_name in enumerate(controls_header, start=1): - controls_ws.cell(row=row_number, column=column_number, value=row.get(column_name)) - fill = row_fill_for_status(row["Status"]) - if fill: - for column_number in range(1, len(controls_header) + 1): - controls_ws.cell(row=row_number, column=column_number).fill = fill - if row["Needs review"] == "Yes": - controls_ws.cell(row=row_number, column=controls_header.index("Needs review") + 1).fill = REVIEW_FILL - controls_ws.cell(row=row_number, column=controls_header.index("Notes") + 1).fill = REVIEW_FILL - autofit_columns(controls_ws) - - excluded_ws = create_or_replace_sheet(workbook, "Excluded Internals") - excluded_header = ["Java class", "Raw name", "Source kind", "Reason"] - write_header(excluded_ws, excluded_header) - for row_number, row in enumerate(sorted(excluded_rows, key=lambda item: (item["Java class"], item["Raw name"])), start=2): - for column_number, column_name in enumerate(excluded_header, start=1): - excluded_ws.cell(row=row_number, column=column_number, value=row.get(column_name)) - for column_number in range(1, len(excluded_header) + 1): - excluded_ws.cell(row=row_number, column=column_number).fill = DEFERRED_FILL - autofit_columns(excluded_ws) - - deferred_ws = create_or_replace_sheet(workbook, "Deferred Inventory") - deferred_header = ["Source", "Enum", "Raw variable", "Reason", "Suggested next step"] - write_header(deferred_ws, deferred_header) - deferred_rows = [] - for java_path, enum_names in DEFERRED_ENUMS.items(): - for enum_name in enum_names: - for raw_name in parse_enum_constants(java_path, enum_name): - deferred_rows.append( - { - "Source": java_path.name, - "Enum": enum_name, - "Raw variable": raw_name, - "Reason": "Reviewed but left outside the core UK-style codebook because this enum is a regression term or validation series rather than a core state/output variable.", - "Suggested next step": "Handle in a second pass if you want regression/validation identifiers renamed as well.", - } - ) - for row_number, row in enumerate(deferred_rows, start=2): - for column_number, column_name in enumerate(deferred_header, start=1): - deferred_ws.cell(row=row_number, column=column_number, value=row.get(column_name)) - for column_number in range(1, len(deferred_header) + 1): - deferred_ws.cell(row=row_number, column=column_number).fill = DEFERRED_FILL - deferred_ws.cell(row=row_number, column=deferred_header.index("Reason") + 1).alignment = Alignment(wrap_text=True, vertical="top") - deferred_ws.cell(row=row_number, column=deferred_header.index("Suggested next step") + 1).alignment = Alignment(wrap_text=True, vertical="top") - autofit_columns(deferred_ws) - - summary_ws = create_or_replace_sheet(workbook, "EU Review Summary") - summary_header = ["Item", "Value"] - write_header(summary_ws, summary_header) - summary_rows = build_summary_rows(included_rows, uk_only_rows, excluded_rows, deferred_rows, control_rows, collision_rows, uk_issue_rows) - for row_number, (item, value) in enumerate(summary_rows, start=2): - summary_ws.cell(row=row_number, column=1, value=item) - summary_ws.cell(row=row_number, column=2, value=value) - if item == "Highlight legend": - summary_ws.cell(row=row_number, column=1).font = Font(bold=True) - summary_ws.cell(row=row_number, column=2).alignment = Alignment(wrap_text=True, vertical="top") - autofit_columns(summary_ws) - - if TEMP_OUTPUT_CODEBOOK.exists(): - TEMP_OUTPUT_CODEBOOK.unlink() - workbook.save(TEMP_OUTPUT_CODEBOOK) - TEMP_OUTPUT_CODEBOOK.replace(OUTPUT_CODEBOOK) - - print(f"Wrote {OUTPUT_CODEBOOK}") - print(f"Core rows: {len(included_rows)}") - print(f"UK-only rows: {len(uk_only_rows)}") - print(f"Excluded rows: {len(excluded_rows)}") - print(f"Deferred rows: {len(deferred_rows)}") - - -if __name__ == "__main__": - main() From e993ecd7dc10cda584a6e6aea621b3279ce13312 Mon Sep 17 00:00:00 2001 From: Mariia Var Date: Sat, 2 May 2026 12:51:26 +0100 Subject: [PATCH 10/13] Updated REAME.md and CLAUDE.md documentation --- README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/README.md b/README.md index 80f03da..7552533 100644 --- a/README.md +++ b/README.md @@ -202,9 +202,6 @@ The `documentation/` directory contains supplementary documentation that complem Helper Bash scripts in `scripts/` run `multirun.jar` across multiple alignment configs in sequence and move each scenario's output into `output//`: - `run_alignment_multiruns.sh` — full set of alignment scenarios -- `run_multiruns-alignPopOFF.sh` — same scenarios with population alignment disabled -- `run_multiruns-alignPopOFF_QUICK.sh` — quick variant of the above for development -- `run_TEST_multiruns.sh` — small smoke-test run used to validate the pipeline Defaults (start/end year, population size, runs per scenario, JVM heap, random seed) are set at the top of each script and can be overridden via environment variables, e.g.: From 92d313f90cbf7909beae0aae0c8e24a873b00e17 Mon Sep 17 00:00:00 2001 From: Mariia Var Date: Sat, 2 May 2026 12:53:28 +0100 Subject: [PATCH 11/13] Updated REAME.md and CLAUDE.md documentation --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7552533..c023e86 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,8 @@ by CeMPA (Centre for Microsimulation and Policy Analysis). The entire SimPaths documentation is available on its [website](https://simpaths.github.io/SimPaths/), which includes: a detailed description of its building blocks; instructions on how to set up and run the model; and information about contributing to the model's development. +The `documentation/` directory contains supplementary documentation that complements this README and the [SimPaths website](https://simpaths.github.io/SimPaths/) (model notes, variable references, and other materials not maintained inline with the code). + ## Introduction SimPaths is a family of models for individual and household life course events, all sharing common components. The framework is designed to project life histories through time, building up a detailed picture of career paths, family (inter)relations, health, and financial circumstances. The framework builds upon standardised assumptions and data sources, which facilitates adaptation to alternative countries. This repository, **SimPathsEU**, covers Greece (`EL`), Hungary (`HU`), Italy (`IT`), and Poland (`PL`), and integrates with EUROMOD for tax and benefit policy simulation. Careful attention is paid to model validation, and sensitivity of projections to key assumptions. The modular nature of the SimPaths framework is designed to facilitate analysis of alternative assumptions concerning the tax and benefit system, sensitivity to parameter estimates and alternative approaches for projecting labour/leisure and consumption/savings decisions. @@ -196,7 +198,6 @@ output/ Batch scripts in `scripts/` move each scenario's outputs into `output//` after the runs finish. -The `documentation/` directory contains supplementary documentation that complements this README and the [SimPaths website](https://simpaths.github.io/SimPaths/) (model notes, variable references, and other materials not maintained inline with the code). ### Batch scenario scripts From 80518dcaaae8ab5819b2338c263e8d9a013063b6 Mon Sep 17 00:00:00 2001 From: Mariia Var Date: Sat, 2 May 2026 13:06:54 +0100 Subject: [PATCH 12/13] Update README.md --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index c023e86..6112445 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,7 @@ by CeMPA (Centre for Microsimulation and Policy Analysis). ## Documentation -The entire SimPaths documentation is available on its [website](https://simpaths.github.io/SimPaths/), which includes: a detailed description of its building blocks; instructions on how to set up and run the model; and information about contributing to the model's development. - -The `documentation/` directory contains supplementary documentation that complements this README and the [SimPaths website](https://simpaths.github.io/SimPaths/) (model notes, variable references, and other materials not maintained inline with the code). +The entire SimPaths documentation is available on its [website](https://simpaths.github.io/SimPaths/), which includes: a detailed description of its building blocks; instructions on how to set up and run the model; and information about contributing to the model's development. The `documentation/` directory contains supplementary materials that complements this README (model specifications, variable references, etc.). ## Introduction From 816e70a8ddc5a53dd0dd0e25e855651e7130e5c3 Mon Sep 17 00:00:00 2001 From: Mariia Var Date: Thu, 7 May 2026 21:24:21 +0100 Subject: [PATCH 13/13] Corrected handling of wages below MIN_HOURLY_WAGE_RATE --- .../simpaths/data/startingpop/DataParser.java | 2 -- src/main/java/simpaths/model/Person.java | 19 +++++++++++++++---- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/main/java/simpaths/data/startingpop/DataParser.java b/src/main/java/simpaths/data/startingpop/DataParser.java index c56ae06..6183842 100644 --- a/src/main/java/simpaths/data/startingpop/DataParser.java +++ b/src/main/java/simpaths/data/startingpop/DataParser.java @@ -154,7 +154,6 @@ private static void parse(String inputFileLocation, String inputFileName, Connec //Labour Market Economic Status + "ALTER TABLE " + personTable + " ADD activity_status VARCHAR_IGNORECASE;" - + "UPDATE " + personTable + " SET labC4 = 3 WHERE labC4 = 1 AND CAST(labWageHrly AS FLOAT)<0.01;" + "UPDATE " + personTable + " SET activity_status = 'EmployedOrSelfEmployed' WHERE labC4 = 1;" + "UPDATE " + personTable + " SET activity_status = 'Student' WHERE labC4 = 2;" + "UPDATE " + personTable + " SET activity_status = 'NotEmployed' WHERE labC4 = 3;" @@ -164,7 +163,6 @@ private static void parse(String inputFileLocation, String inputFileName, Connec //Lag(1) of labC4 + "ALTER TABLE " + personTable + " ADD activity_status VARCHAR_IGNORECASE;" - + "UPDATE " + personTable + " SET labC4L1 = 3 WHERE labC4L1 = 1 AND CAST(labWageHrlyL1 AS FLOAT)<0.01;" + "UPDATE " + personTable + " SET activity_status = 'EmployedOrSelfEmployed' WHERE labC4L1 = 1;" + "UPDATE " + personTable + " SET activity_status = 'Student' WHERE labC4L1 = 2;" + "UPDATE " + personTable + " SET activity_status = 'NotEmployed' WHERE labC4L1 = 3;" diff --git a/src/main/java/simpaths/model/Person.java b/src/main/java/simpaths/model/Person.java index 5c7855d..24e2b93 100644 --- a/src/main/java/simpaths/model/Person.java +++ b/src/main/java/simpaths/model/Person.java @@ -148,6 +148,7 @@ public class Person implements EventListener, IDoubleSource, IIntSource, Weight, @Transient private Labour labHrsWorkEnumWeekL1; // Lag(1) (previous year's value) of weekly labour supply private Integer labHrsWorkWeek; + private Integer labHrsWorkWeekL1; // Potential earnings is the gross hourly wage an individual can earn while working // and is estimated, for each individual, on the basis of observable characteristics as @@ -493,6 +494,7 @@ else if (demAge > Parameters.MAX_AGE_TO_STAY_IN_CONTINUOUS_EDUCATION) healthPartnerSelfRatedL1 = originalPerson.healthPartnerSelfRatedL1; labHrsWorkWeek = originalPerson.labHrsWorkWeek; + labHrsWorkWeekL1 = originalPerson.labHrsWorkWeekL1; labHrsWorkEnumWeek = originalPerson.getLabourSupplyWeekly(); double[] sampleDifferentials = setMarriageTargets(); demAgeDiffDesired = Objects.requireNonNullElseGet(originalPerson.demAgeDiffDesired, () -> sampleDifferentials[0]); @@ -516,15 +518,24 @@ else if (demAge > Parameters.MAX_AGE_TO_STAY_IN_CONTINUOUS_EDUCATION) yBenReceivedFlag = originalPerson.yBenReceivedFlag; yBenReceivedFlagL1 = originalPerson.yBenReceivedFlagL1; - if (originalPerson.labWageHrly > Parameters.MIN_HOURLY_WAGE_RATE) { + + if (originalPerson.labWageHrly >= Parameters.MIN_HOURLY_WAGE_RATE) { labWageHrly = Math.min(Parameters.MAX_HOURLY_WAGE_RATE, Math.max(Parameters.MIN_HOURLY_WAGE_RATE, originalPerson.labWageHrly)); } else { - labWageHrly = -9.0; + labWageHrly = 0.0; + labHrsWorkWeek = 0; + labC4 = Les_c4.NotEmployed; } - if (originalPerson.labWageHrlyL1!=null && originalPerson.labWageHrlyL1>Parameters.MIN_HOURLY_WAGE_RATE) { + if (originalPerson.labWageHrlyL1!=null && originalPerson.labWageHrlyL1 >= Parameters.MIN_HOURLY_WAGE_RATE) { labWageHrlyL1 = Math.min(Parameters.MAX_HOURLY_WAGE_RATE, Math.max(Parameters.MIN_HOURLY_WAGE_RATE, originalPerson.labWageHrlyL1)); } else { - labWageHrlyL1 = labWageHrly; + if (originalPerson.labWageHrlyL1 == null && originalPerson.labWageHrly != null) + labWageHrlyL1 = labWageHrly; + if (labWageHrlyL1 == null || labWageHrlyL1 < Parameters.MIN_HOURLY_WAGE_RATE) { + labWageHrlyL1 = 0.0; + labHrsWorkWeekL1 = 0; + labC4L1 = Les_c4.NotEmployed; + } } }

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 diff --git a/input/PL/DoFilesTargets/TargetsPlots/inSchool_targets_ts.png b/input/PL/DoFilesTargets/TargetsPlots/inSchool_targets_ts.png deleted file mode 100644 index 6ae75950cd02b2bc1c6fe00ce64f518eb9d9df8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 148771 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 z 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