/* DO file for analysis at LPA level, as reported in: Hilber, C.A.L. and W. Vermeulen (2014), The impact of supply constraints on house prices in England, Economic Journal. Tables and figures are produced in order of appearance in the paper. Christian Hilber and Wouter Vermeulen, 22 July 2014 */ clear clear matrix set memory 700m set matsize 2000 set more 1 adopath + g:\stata // path of folder that contains ado files (xtivreg2, outreg2) cd "M:\p_wvm\SERC Projecten\Supply constraints in the UK (LUCK)\Published data and code" // path of folder that contains data capture log close log using "analysis LPA.log", replace use "data LPA.dta", clear ******************************************************************************************** * * * DATA PREPARATIONS * * * ******************************************************************************************** * generate year dummies qui tab year, gen(year_) * generate numerical identifier for counties prior to 1996 (spatial level of earnings data prior to 96) encode county_pre_96, gen(county_pre_96_num) * determine LPA-specific real house price values in 1974 gen realhp_1974_t = realhp if year == 1974 egen realhp_1974 = mean(realhp_1974_t), by(lpa_code) drop realhp_1974_t label variable realhp_1974 "Real house price 1974 in 2008 pounds" egen ann_realhp_1974 = mean(realhp_1974) label variable ann_realhp_1974 "England average real house price 1974 in 2008 pounds" * drop observations not in regression sample (missing data for Council of the Isles of Scilly) drop if lpa_name == "Council of the Isles of Scilly" * standardize variables and create interaction effect with log earnings and log labour demand shock #delimit ; foreach vari in refusal_maj_7908 delchange_maj1 delchange_maj5 delchange_maj6 pdevel90_m2 pop_density_1911_imp range_meters labourvotes1983 {; egen m_`vari' = mean(`vari'); egen sd_`vari' = sd(`vari'); gen st_`vari' = (`vari' - m_`vari') / sd_`vari'; gen `vari'_learn = st_`vari' * lmale_earn_real; gen `vari'_llds = st_`vari' * llds; }; #delimit cr * create indicator for boom / bust periods egen ann_rindex2 = mean(rindex2), by(year) gen lann_rindex2 = log(ann_rindex2) gen dlann_rindex2 = D.lann_rindex2 label variable dlann_rindex2 "National house price growth" codebook dlann_rindex2 if lpa_name == "Reading Borough Council" gen boom = 1 if dlann_rindex2 > 0 replace boom = 0 if dlann_rindex2 <= 0 replace boom = 0 if year == 1974 // based on Cameron et al. (2006) label variable boom "Rising (1) / declining (0) national house prices" tab boom if lpa_name == "Reading Borough Council" tab year if boom == 0 ******************************************************************************************** * * * TABLE 1: DESCRIPTIVE STATISTICS AT REGRESSION SAMPLE * * * ******************************************************************************************** * scaling of rates to percentages #delimit ; foreach vari in refusal_maj_7908 delchange_maj1 delchange_maj5 delchange_maj6 pdevel90_m2 labourvotes1983 {; replace `vari' = 100 * `vari'; }; #delimit cr * summary statistics panel variables xtsum rindex2 male_earn_real pred_emp71 * summary statistics cross sectional variables #delimit ; sum refusal_maj_7908 pdevel90_m2 range_meters delchange_maj1 delchange_maj5 delchange_maj6 labourvotes1983 pop_density_1911_imp dist_trafsquare total if year == 1991; #delimit cr ******************************************************************************************** * * * TABLE 2 - PANEL A: SECOND STAGE OF BASELINE RESULTS * * * ******************************************************************************************** #delimit ; * OLS specification; xtreg lrindex2 refusal_maj_7908_learn pdevel90_m2_learn lmale_earn_real range_meters_learn year_2-year_35, fe robust cluster(county_pre_96_num); outreg2 using "Table 2A", drop(year_*) nocon nolabel aster replace word nor2 title("Baseline results - second stage") ctitle("OLS") addstat("R-squared overall model", e(r2_o), "R-squared within model", e(r2_w), "R-squared between model", e(r2_b)); * obtain year fixed effects; gen period_ol = 0; forvalues y = 2/35 {; qui replace period_ol = _b[year_`y'] if year_`y' == 1; }; label variable period_ol "Year fixed effects (OLS)"; * specification using both instruments; xtivreg2 lrindex2 (refusal_maj_7908_learn pdevel90_m2_learn = delchange_maj1_learn labourvotes1983_learn pop_density_1911_imp_learn) lmale_earn_real range_meters_learn year_2-year_35, fe robust cluster(county_pre_96_num) ffirst; outreg2 using "Table 2A", drop(year_*) nocon nor2 nolabel aster append word ctitle("both") addstat("Kleibergen-Paap F", e(widstat)); #delimit cr * prepare counterfactual analysis for baseline estimates predict e_ba, e gen lrindex2_hat_ba = lrindex2 - e_ba label variable lrindex2_hat_ba "Predicted log of real house price index (baseline)" * create scenarios with constraints set to zero gen refusal_maj_7908_0_learn = ((0 - m_refusal_maj_7908) / sd_refusal_maj_7908) * lmale_earn_real gen pdevel90_m2_0_learn = ((0 - m_pdevel90_m2) / sd_pdevel90_m2) * lmale_earn_real gen range_meters_0_learn = ((0 - m_range_meters) / sd_range_meters) * lmale_earn_real gen lrindex2_cf1_ba = lrindex2_hat_ba -_b[refusal_maj_7908_learn] * (refusal_maj_7908_learn - refusal_maj_7908_0_learn) label variable lrindex2_cf1_ba "Prediction if refusal rates in all LPAs were set to zero (baseline)" gen lrindex2_cf2_ba = lrindex2_cf1_ba -_b[pdevel90_m2_learn] * (pdevel90_m2_learn - pdevel90_m2_0_learn) label variable lrindex2_cf2_ba "Prediction if ref. rates and share developed in all LPAs were set to zero (baseline)" gen lrindex2_cf3_ba = lrindex2_cf2_ba -_b[range_meters_learn] * (range_meters_learn - range_meters_0_learn) label variable lrindex2_cf3_ba "Prediction if ref. rates, share dev. and elevation range in all LPAs were set to zero (baseline)" gen lrindex2_cf4_ba = lrindex2_cf3_ba -_b[lmale_earn_real] * lmale_earn_real label variable lrindex2_cf4_ba "Prediction if ref. rates, share dev. elevation and income in all LPAs were set to zero (baseline)" * constraints lowered by one standard deviation gen lrindex2_cf1msd_ba = lrindex2_hat_ba -_b[refusal_maj_7908_learn] * lmale_earn_real label variable lrindex2_cf1msd_ba "Prediction if refusal rates in all LPAs were lowered by 1sd (baseline)" gen lrindex2_cf2msd_ba = lrindex2_cf1msd_ba -_b[pdevel90_m2_learn] * lmale_earn_real label variable lrindex2_cf2msd_ba "Prediction if ref. rates and share developed in all LPAs were lowered by 1sd (baseline)" gen lrindex2_cf3msd_ba = lrindex2_cf2msd_ba -_b[range_meters_learn] * lmale_earn_real label variable lrindex2_cf3msd_ba "Prediction if ref. rates, share dev. and elevation range in all LPAs were lowered by 1sd (baseline)" gen lrindex2_cf4msd_ba = lrindex2_cf3msd_ba -_b[lmale_earn_real] * lmale_earn_real label variable lrindex2_cf4msd_ba "Prediction if ref. rates, share dev. and elevation in all LPAs were lowered by 1sd and income to zero (baseline)" * regulatory constraint raised by one standard deviation gen lrindex2_cf1psd_ba = lrindex2_hat_ba + _b[refusal_maj_7908_learn] * lmale_earn_real label variable lrindex2_cf1psd_ba "Prediction if refusal rates in all LPAs were raised by 1sd (baseline)" * create scenarios with constraints at the 10th and 90th percentiles gen refusal_maj_7908_p10_learn = ((0.14387785 - m_refusal_maj_7908) / sd_refusal_maj_7908) * lmale_earn_real gen refusal_maj_7908_p90_learn = ((0.36599693 - m_refusal_maj_7908) / sd_refusal_maj_7908) * lmale_earn_real gen lrindex2_ref_p10_ba = lrindex2_hat_ba -_b[refusal_maj_7908_learn] * (refusal_maj_7908_learn - refusal_maj_7908_p10_learn) label variable lrindex2_ref_p10_ba "Prediction if refusal rates in all LPAs were as 10th percentile (baseline)" gen lrindex2_ref_p90_ba = lrindex2_hat_ba -_b[refusal_maj_7908_learn] * (refusal_maj_7908_learn - refusal_maj_7908_p90_learn) label variable lrindex2_ref_p90_ba "Prediction if refusal rates in all LPAs were as 90th percentile (baseline)" * create scenarios with constraints as in the most and least restrictive government office region gen refusal_maj_7908_rlo_learn = ((0.1589328 - m_refusal_maj_7908) / sd_refusal_maj_7908) * lmale_earn_real gen refusal_maj_7908_rhi_learn = ((0.3274666 - m_refusal_maj_7908) / sd_refusal_maj_7908) * lmale_earn_real gen lrindex2_ref_rlo_ba = lrindex2_hat_ba -_b[refusal_maj_7908_learn] * (refusal_maj_7908_learn - refusal_maj_7908_rlo_learn) label variable lrindex2_ref_rlo_ba "Prediction if refusal rates in all LPAs were as in North East (baseline)" gen lrindex2_ref_rhi_ba = lrindex2_hat_ba -_b[refusal_maj_7908_learn] * (refusal_maj_7908_learn - refusal_maj_7908_rhi_learn) label variable lrindex2_ref_rhi_ba "Prediction if refusal rates in all LPAs were as in South East (baseline)" #delimit ; * obtain year fixed effects; gen period_ba = 0; forvalues y = 2/35 {; qui replace period_ba = _b[year_`y'] if year_`y' == 1; }; label variable period_ba "Year fixed effects (both instruments)"; * specification using change in delay only; xtivreg2 lrindex2 (refusal_maj_7908_learn pdevel90_m2_learn = delchange_maj1_learn pop_density_1911_imp_learn) lmale_earn_real range_meters_learn year_2-year_35, fe robust cluster(county_pre_96_num) ffirst; outreg2 using "Table 2A", drop(year_*) nocon nor2 nolabel aster append word ctitle("delay") addstat("Kleibergen-Paap F", e(widstat)); #delimit cr * prepare counterfactual analysis for lower bound estimates predict e_lb, e gen lrindex2_hat_lb = lrindex2 - e_lb label variable lrindex2_hat_lb "Predicted log of real house price index (lower bound)" * create scenarios with constraints set to zero gen lrindex2_cf1_lb = lrindex2_hat_lb -_b[refusal_maj_7908_learn] * (refusal_maj_7908_learn - refusal_maj_7908_0_learn) label variable lrindex2_cf1_lb "Prediction if refusal rates in all LPAs were set to zero (lower bound)" gen lrindex2_cf2_lb = lrindex2_cf1_lb -_b[pdevel90_m2_learn] * (pdevel90_m2_learn - pdevel90_m2_0_learn) label variable lrindex2_cf2_lb "Prediction if ref. rates and share developed in all LPAs were set to zero (lower bound)" gen lrindex2_cf3_lb = lrindex2_cf2_lb -_b[range_meters_learn] * (range_meters_learn - range_meters_0_learn) label variable lrindex2_cf3_lb "Prediction if ref. rates, share dev. and elevation range in all LPAs were set to zero (lower bound)" gen lrindex2_cf4_lb = lrindex2_cf3_lb -_b[lmale_earn_real] * lmale_earn_real label variable lrindex2_cf3_lb "Prediction if ref. rates, share dev. elevation and income in all LPAs were set to zero (lower bound)" * constraints lowered by one standard deviation gen lrindex2_cf1msd_lb = lrindex2_hat_lb -_b[refusal_maj_7908_learn] * lmale_earn_real label variable lrindex2_cf1msd_lb "Prediction if refusal rates in all LPAs were lowered by 1sd (lower bound)" gen lrindex2_cf2msd_lb = lrindex2_cf1msd_lb -_b[pdevel90_m2_learn] * lmale_earn_real label variable lrindex2_cf2msd_lb "Prediction if ref. rates and share developed in all LPAs were lowered by 1sd (lower bound)" gen lrindex2_cf3msd_lb = lrindex2_cf2msd_lb -_b[range_meters_learn] * lmale_earn_real label variable lrindex2_cf3msd_lb "Prediction if ref. rates, share dev. and elevation range in all LPAs were lowered by 1sd (lower bound)" gen lrindex2_cf4msd_lb = lrindex2_cf3msd_lb -_b[lmale_earn_real] * lmale_earn_real label variable lrindex2_cf4msd_lb "Prediction if ref. rates, share dev. and elevation in all LPAs were lowered by 1sd and income to zero (lower bound)" * regulatory constraint raised by one standard deviation gen lrindex2_cf1psd_lb = lrindex2_hat_lb + _b[refusal_maj_7908_learn] * lmale_earn_real label variable lrindex2_cf1psd_lb "Prediction if refusal rates in all LPAs were raised by 1sd (lower bound)" * create scenarios with constraints at the 10th and 90th percentiles gen lrindex2_ref_p10_lb = lrindex2_hat_lb -_b[refusal_maj_7908_learn] * (refusal_maj_7908_learn - refusal_maj_7908_p10_learn) label variable lrindex2_ref_p10_lb "Prediction if refusal rates in all LPAs were as 10th percentile (lower bound)" gen lrindex2_ref_p90_lb = lrindex2_hat_lb -_b[refusal_maj_7908_learn] * (refusal_maj_7908_learn - refusal_maj_7908_p90_learn) label variable lrindex2_ref_p90_lb "Prediction if refusal rates in all LPAs were as 90th percentile (lower bound)" * create scenarios with constraints as in the most and least restrictive government office region gen lrindex2_ref_rlo_lb = lrindex2_hat_lb -_b[refusal_maj_7908_learn] * (refusal_maj_7908_learn - refusal_maj_7908_rlo_learn) label variable lrindex2_ref_rlo_lb "Prediction if refusal rates in all LPAs were as in North East (lower bound)" gen lrindex2_ref_rhi_lb = lrindex2_hat_lb -_b[refusal_maj_7908_learn] * (refusal_maj_7908_learn - refusal_maj_7908_rhi_learn) label variable lrindex2_ref_rhi_lb "Prediction if refusal rates in all LPAs were as in South East (lower bound)" #delimit ; * obtain year fixed effects; gen period_lb = 0; forvalues y = 2/35 {; qui replace period_lb = _b[year_`y'] if year_`y' == 1; }; label variable period_lb "Year fixed effects (change in delay only)"; * specification using share of votes to Labour only; xtivreg2 lrindex2 (refusal_maj_7908_learn pdevel90_m2_learn = labourvotes1983_learn pop_density_1911_imp_learn) lmale_earn_real range_meters_learn year_2-year_35, fe robust cluster(county_pre_96_num) ffirst; outreg2 using "Table 2A", drop(year_*) nocon nor2 nolabel aster append word ctitle("Labour") addstat("Kleibergen-Paap F", e(widstat)); #delimit cr * prepare counterfactual analysis for upper bound estimates predict e_ub, e gen lrindex2_hat_ub = lrindex2 - e_ub label variable lrindex2_hat_ub "Predicted log of real house price index (upper bound)" * create scenarios with constraints set to zero gen lrindex2_cf1_ub = lrindex2_hat_ub -_b[refusal_maj_7908_learn] * (refusal_maj_7908_learn - refusal_maj_7908_0_learn) label variable lrindex2_cf1_ub "Prediction if refusal rates in all LPAs were set to zero (upper bound)" gen lrindex2_cf2_ub = lrindex2_cf1_ub -_b[pdevel90_m2_learn] * (pdevel90_m2_learn - pdevel90_m2_0_learn) label variable lrindex2_cf2_ub "Prediction if ref. rates and share developed in all LPAs were set to zero (upper bound)" gen lrindex2_cf3_ub = lrindex2_cf2_ub -_b[range_meters_learn] * (range_meters_learn - range_meters_0_learn) label variable lrindex2_cf3_ub "Prediction if ref. rates, share dev. and elevation range in all LPAs were set to zero (upper bound)" gen lrindex2_cf4_ub = lrindex2_cf3_ub -_b[lmale_earn_real] * lmale_earn_real label variable lrindex2_cf3_ub "Prediction if ref. rates, share dev. elevation and income in all LPAs were set to zero (upper bound)" * constraints lowered by one standard deviation gen lrindex2_cf1msd_ub = lrindex2_hat_ub -_b[refusal_maj_7908_learn] * lmale_earn_real label variable lrindex2_cf1msd_ub "Prediction if refusal rates in all LPAs were lowered by 1sd (upper bound)" gen lrindex2_cf2msd_ub = lrindex2_cf1msd_ub -_b[pdevel90_m2_learn] * lmale_earn_real label variable lrindex2_cf2msd_ub "Prediction if ref. rates and share developed in all LPAs were lowered by 1sd (upper bound)" gen lrindex2_cf3msd_ub = lrindex2_cf2msd_ub -_b[range_meters_learn] * lmale_earn_real label variable lrindex2_cf3msd_ub "Prediction if ref. rates, share dev. and elevation range in all LPAs were lowered by 1sd (upper bound)" gen lrindex2_cf4msd_ub = lrindex2_cf3msd_ub -_b[lmale_earn_real] * lmale_earn_real label variable lrindex2_cf4msd_ub "Prediction if ref. rates, share dev. and elevation in all LPAs were lowered by 1sd and income to zero (upper bound)" * regulatory constraint raised by one standard deviation gen lrindex2_cf1psd_ub = lrindex2_hat_ub + _b[refusal_maj_7908_learn] * lmale_earn_real label variable lrindex2_cf1psd_ub "Prediction if refusal rates in all LPAs were raised by 1sd (upper bound)" * create scenarios with constraints at the 10th and 90th percentiles gen lrindex2_ref_p10_ub = lrindex2_hat_ub -_b[refusal_maj_7908_learn] * (refusal_maj_7908_learn - refusal_maj_7908_p10_learn) label variable lrindex2_ref_p10_ub "Prediction if refusal rates in all LPAs were as 10th percentile (upper bound)" gen lrindex2_ref_p90_ub = lrindex2_hat_ub -_b[refusal_maj_7908_learn] * (refusal_maj_7908_learn - refusal_maj_7908_p90_learn) label variable lrindex2_ref_p90_ub "Prediction if refusal rates in all LPAs were as 90th percentile (upper bound)" * create scenarios with constraints as in the most and least restrictive government office region gen lrindex2_ref_rlo_ub = lrindex2_hat_ub -_b[refusal_maj_7908_learn] * (refusal_maj_7908_learn - refusal_maj_7908_rlo_learn) label variable lrindex2_ref_rlo_ub "Prediction if refusal rates in all LPAs were as in North East (upper bound)" gen lrindex2_ref_rhi_ub = lrindex2_hat_ub -_b[refusal_maj_7908_learn] * (refusal_maj_7908_learn - refusal_maj_7908_rhi_learn) label variable lrindex2_ref_rhi_ub "Prediction if refusal rates in all LPAs were as in South East (upper bound)" * obtain year fixed effets #delimit ; gen period_ub = 0; forvalues y = 2/35 {; qui replace period_ub = _b[year_`y'] if year_`y' == 1; }; label variable period_ub "Year fixed effects (share of votes to Labour only)"; #delimit cr ******************************************************************************************** * * * TABLE 2 - PANEL B: FIRST STAGE OF BASELINE RESULTS * * * ******************************************************************************************** #delimit ; xtreg refusal_maj_7908_learn delchange_maj1_learn labourvotes1983_learn pop_density_1911_imp_learn lmale_earn_real range_meters_learn year_2-year_35, fe robust cluster(county_pre_96_num); outreg2 using "Table 2B", drop(year_*) nocon nolabel aster replace word nor2 title("First stage of baseline results") addstat("R-squared overall model", e(r2_o), "R-squared within model", e(r2_w), "R-squared between model", e(r2_b)); xtreg pdevel90_m2_learn delchange_maj1_learn labourvotes1983_learn pop_density_1911_imp_learn lmale_earn_real range_meters_learn year_2-year_35, fe robust cluster(county_pre_96_num); outreg2 using "Table 2B", drop(year_*) nocon nolabel aster append word nor2 addstat("R-squared overall model", e(r2_o), "R-squared within model", e(r2_w), "R-squared between model", e(r2_b)); xtreg refusal_maj_7908_learn delchange_maj1_learn pop_density_1911_imp_learn lmale_earn_real range_meters_learn year_2-year_35, fe robust cluster(county_pre_96_num); outreg2 using "Table 2B", drop(year_*) nocon nolabel aster append word nor2 addstat("R-squared overall model", e(r2_o), "R-squared within model", e(r2_w), "R-squared between model", e(r2_b)); xtreg pdevel90_m2_learn delchange_maj1_learn pop_density_1911_imp_learn lmale_earn_real range_meters_learn year_2-year_35, fe robust cluster(county_pre_96_num); outreg2 using "Table 2B", drop(year_*) nocon nolabel aster append word nor2 addstat("R-squared overall model", e(r2_o), "R-squared within model", e(r2_w), "R-squared between model", e(r2_b)); xtreg refusal_maj_7908_learn labourvotes1983_learn pop_density_1911_imp_learn lmale_earn_real range_meters_learn year_2-year_35, fe robust cluster(county_pre_96_num); outreg2 using "Table 2B", drop(year_*) nocon nolabel aster append word nor2 addstat("R-squared overall model", e(r2_o), "R-squared within model", e(r2_w), "R-squared between model", e(r2_b)); xtreg pdevel90_m2_learn labourvotes1983_learn pop_density_1911_imp_learn lmale_earn_real range_meters_learn year_2-year_35, fe robust cluster(county_pre_96_num); outreg2 using "Table 2B", drop(year_*) nocon nolabel aster append word nor2 addstat("R-squared overall model", e(r2_o), "R-squared within model", e(r2_w), "R-squared between model", e(r2_b)); #delimit cr ******************************************************************************************** * * * TABLE 3: SPLIT TO BOOM / BUST PERIODS (RISING / DECLINING NATIONAL HOUSE PRICES (6) * * * ******************************************************************************************** #delimit ; xtivreg2 lrindex2 (refusal_maj_7908_learn pdevel90_m2_learn = delchange_maj1_learn labourvotes1983_learn pop_density_1911_imp_learn) lmale_earn_real range_meters_learn year_2-year_35 if boom == 1, fe robust cluster(county_pre_96_num) ffirst; outreg2 using "Table 3", drop(year_*) nocon nolabel aster replace word nor2 title("Boom and bust (IV with both instruments") ctitle(Boom) addstat("Kleibergen-Paap F", e(widstat)); xtivreg2 lrindex2 (refusal_maj_7908_learn pdevel90_m2_learn = delchange_maj1_learn labourvotes1983_learn pop_density_1911_imp_learn) lmale_earn_real range_meters_learn year_2-year_35 if boom == 0, fe robust cluster(county_pre_96_num) ffirst; outreg2 using "Table 3", drop(year_*) nocon nolabel aster append word nor2 ctitle(Bust) addstat("Kleibergen-Paap F", e(widstat)); #delimit cr ******************************************************************************************** * * * TABLE 5 - PANEL A: SECOND STAGE OF IDENTIFICATION ON LABOUR DEMAND SHOCK * * * ******************************************************************************************** #delimit ; xtivreg2 lrindex2 (refusal_maj_7908_llds pdevel90_m2_llds = delchange_maj1_llds labourvotes1983_llds pop_density_1911_imp_llds) llds range_meters_llds year_2-year_35, fe robust cluster(county_pre_96_num) ffirst; outreg2 using "Table 5A LPA", drop(year_*) nocon nor2 nolabel aster replace word title(Identification on labour demand shock) ctitle(LPA) addstat("Kleibergen-Paap F", e(widstat)); #delimit cr * prepare counterfactual analysis for identification on labour demand shock predict e_llds, e gen lrindex2_hat_llds = lrindex2 - e_llds label variable lrindex2_hat_llds "Predicted log of real house price index (labour demand shock)" * create scenarios with constraints set to zero gen refusal_maj_7908_0_llds = ((0 - m_refusal_maj_7908) / sd_refusal_maj_7908) * llds gen pdevel90_m2_0_llds = ((0 - m_pdevel90_m2) / sd_pdevel90_m2) * llds gen range_meters_0_llds = ((0 - m_range_meters) / sd_range_meters) * llds * constraints set to zero gen lrindex2_cf1_llds = lrindex2_hat_llds -_b[refusal_maj_7908_llds] * (refusal_maj_7908_llds - refusal_maj_7908_0_llds) label variable lrindex2_cf1_llds "Prediction if refusal rates in all LPAs were set to zero (labour demand shock)" gen lrindex2_cf2_llds = lrindex2_cf1_llds -_b[pdevel90_m2_llds] * (pdevel90_m2_llds - pdevel90_m2_0_llds) label variable lrindex2_cf2_llds "Prediction if ref. rates and share developed in all LPAs were set to zero (labour demand shock)" gen lrindex2_cf3_llds = lrindex2_cf2_llds -_b[range_meters_llds] * (range_meters_llds - range_meters_0_llds) label variable lrindex2_cf3_llds "Prediction if ref. rates, share dev. and elevation range in all LPAs were set to zero (labour demand shock)" gen lrindex2_cf4_llds = lrindex2_cf3_llds -_b[llds] * llds label variable lrindex2_cf4_llds "Prediction if ref. rates, share dev. elevation and income in all LPAs were set to zero (labour demand shock)" * constraints lowered by one standard deviation gen lrindex2_cf1msd_llds = lrindex2_hat_llds -_b[refusal_maj_7908_llds] * llds label variable lrindex2_cf1msd_llds "Prediction if refusal rates in all LPAs were lowered by 1sd (labour demand shock)" gen lrindex2_cf2msd_llds = lrindex2_cf1msd_llds -_b[pdevel90_m2_llds] * llds label variable lrindex2_cf2msd_llds "Prediction if ref. rates and share developed in all LPAs were lowered by 1sd (labour demand shock)" gen lrindex2_cf3msd_llds = lrindex2_cf2msd_llds -_b[range_meters_llds] * llds label variable lrindex2_cf3msd_llds "Prediction if ref. rates, share dev. and elevation range in all LPAs were lowered by 1sd (labour demand shock)" gen lrindex2_cf4msd_llds = lrindex2_cf3msd_llds -_b[llds] * llds label variable lrindex2_cf4msd_llds "Prediction if ref. rates, share dev. and elevation in all LPAs were lowered by 1sd and income to zero (labour demand shock)" ******************************************************************************************** * * * TABLE 5 - PANEL B: FIRST STAGE RESULTS OF IDENTIFICATION ON LABOUR DEMAND SHOCK * * * ******************************************************************************************** #delimit ; xtreg refusal_maj_7908_llds delchange_maj1_llds labourvotes1983_llds pop_density_1911_imp_llds llds range_meters_llds year_2-year_35, fe robust cluster(county_pre_96_num); outreg2 using "Table 5B LPA", drop(year_*) nolabel aster replace word nor2 title("First stage") addstat("R-squared overall model", e(r2_o), "R-squared within model", e(r2_w), "R-squared between model", e(r2_b)); xtreg pdevel90_m2_llds delchange_maj1_llds labourvotes1983_llds pop_density_1911_imp_llds llds range_meters_llds year_2-year_35, fe robust cluster(county_pre_96_num); outreg2 using "Table 5B LPA", drop(year_*) nolabel aster append word nor2 addstat("R-squared overall model", e(r2_o), "R-squared within model", e(r2_w), "R-squared between model", e(r2_b)); #delimit cr ******************************************************************************************** * * * TABLE 6 - PANEL A: COUNTERFACTUAL ANALYSIS (BASELINE) * * * ******************************************************************************************** * compute local house price levels in 2008 pounds as well as annual means #delimit ; foreach vari in lrindex2 lrindex2_hat_ba lrindex2_cf1_ba lrindex2_cf2_ba lrindex2_cf3_ba lrindex2_cf4_ba lrindex2_cf1msd_ba lrindex2_cf2msd_ba lrindex2_cf3msd_ba lrindex2_cf4msd_ba lrindex2_cf1psd_ba lrindex2_ref_p10_ba lrindex2_ref_p90_ba lrindex2_ref_rlo_ba lrindex2_ref_rhi_ba {; gen a74_`vari' = `vari' if year == 1974; egen b74_`vari' = max(a74_`vari'), by(lpa_code); gen `vari'_norm = `vari' - b74_`vari'; egen ann_`vari'_norm = mean(`vari'_norm), by(year); gen ann_`vari'_level = ann_realhp_1974 * exp(ann_`vari'_norm); drop a74_`vari' b74_`vari'; }; macro drop _mean74 _mean08 _mat _a _rows; foreach vari in ann_lrindex2_hat_ba_level ann_lrindex2_cf1_ba_level ann_lrindex2_cf2_ba_level ann_lrindex2_cf3_ba_level ann_lrindex2_cf4_ba_level ann_lrindex2_cf1msd_ba_level ann_lrindex2_cf2msd_ba_level ann_lrindex2_cf3msd_ba_level ann_lrindex2_cf4msd_ba_level {; qui sum `vari' if year == 1974 & lpa_name == "Reading Borough Council"; local mean74 = `r(mean)'; qui sum `vari' if year == 2008 & lpa_name == "Reading Borough Council"; local mean08 = `r(mean)'; qui sum `vari' if lpa_name == "Reading Borough Council"; local mat `a' `mean74', `mean08', `r(sd)', `r(min)', `r(max)'; local a `mat' \ ; local rows `rows' `vari'; }; #delimit cr matrix Table6A = `mat' matrix rownames Table6A = `rows' matrix colnames Table6A = Val_1974 Val_2008 Sd Min Max matlist Table6A, twidth(32) ******************************************************************************************** * * * TABLE 6 - PANEL B: COUNTERFACTUAL ANALYSIS (LOWER BOUND) * * * ******************************************************************************************** * compute local house price levels in 2008 pounds as well as annual means #delimit ; foreach vari in lrindex2_hat_lb lrindex2_cf1_lb lrindex2_cf2_lb lrindex2_cf3_lb lrindex2_cf4_lb lrindex2_cf1msd_lb lrindex2_cf2msd_lb lrindex2_cf3msd_lb lrindex2_cf4msd_lb lrindex2_cf1psd_lb lrindex2_ref_p10_lb lrindex2_ref_p90_lb lrindex2_ref_rlo_lb lrindex2_ref_rhi_lb {; gen a74_`vari' = `vari' if year == 1974; egen b74_`vari' = max(a74_`vari'), by(lpa_code); gen `vari'_norm = `vari' - b74_`vari'; egen ann_`vari'_norm = mean(`vari'_norm), by(year); gen ann_`vari'_level = ann_realhp_1974 * exp(ann_`vari'_norm); drop a74_`vari' b74_`vari'; }; macro drop _mean74 _mean08 _mat _a _rows; foreach vari in ann_lrindex2_hat_lb_level ann_lrindex2_cf1_lb_level ann_lrindex2_cf2_lb_level ann_lrindex2_cf3_lb_level ann_lrindex2_cf4_lb_level ann_lrindex2_cf1msd_lb_level ann_lrindex2_cf2msd_lb_level ann_lrindex2_cf3msd_lb_level ann_lrindex2_cf4msd_lb_level {; qui sum `vari' if year == 1974 & lpa_name == "Reading Borough Council"; local mean74 = `r(mean)'; qui sum `vari' if year == 2008 & lpa_name == "Reading Borough Council"; local mean08 = `r(mean)'; qui sum `vari' if lpa_name == "Reading Borough Council"; local mat `a' `mean74', `mean08', `r(sd)', `r(min)', `r(max)'; local a `mat' \ ; local rows `rows' `vari'; }; #delimit cr matrix Table6B = `mat' matrix rownames Table6B = `rows' matrix colnames Table6B = Val_1974 Val_2008 Sd Min Max matlist Table6B, twidth(32) ******************************************************************************************** * * * TABLE 6 - PANEL C: COUNTERFACTUAL ANALYSIS (UPER BOUND) * * * ******************************************************************************************** * compute local house price levels in 2008 pounds as well as annual means #delimit ; foreach vari in lrindex2_hat_ub lrindex2_cf1_ub lrindex2_cf2_ub lrindex2_cf3_ub lrindex2_cf4_ub lrindex2_cf1msd_ub lrindex2_cf2msd_ub lrindex2_cf3msd_ub lrindex2_cf4msd_ub lrindex2_cf1psd_ub lrindex2_ref_p10_ub lrindex2_ref_p90_ub lrindex2_ref_rlo_ub lrindex2_ref_rhi_ub {; gen a74_`vari' = `vari' if year == 1974; egen b74_`vari' = max(a74_`vari'), by(lpa_code); gen `vari'_norm = `vari' - b74_`vari'; egen ann_`vari'_norm = mean(`vari'_norm), by(year); gen ann_`vari'_level = ann_realhp_1974 * exp(ann_`vari'_norm); drop a74_`vari' b74_`vari'; }; macro drop _mean74 _mean08 _mat _a _rows; foreach vari in ann_lrindex2_hat_ub_level ann_lrindex2_cf1_ub_level ann_lrindex2_cf2_ub_level ann_lrindex2_cf3_ub_level ann_lrindex2_cf4_ub_level ann_lrindex2_cf1msd_ub_level ann_lrindex2_cf2msd_ub_level ann_lrindex2_cf3msd_ub_level ann_lrindex2_cf4msd_ub_level {; qui sum `vari' if year == 1974 & lpa_name == "Reading Borough Council"; local mean74 = `r(mean)'; qui sum `vari' if year == 2008 & lpa_name == "Reading Borough Council"; local mean08 = `r(mean)'; qui sum `vari' if lpa_name == "Reading Borough Council"; local mat `a' `mean74', `mean08', `r(sd)', `r(min)', `r(max)'; local a `mat' \ ; local rows `rows' `vari'; }; #delimit cr matrix Table6C = `mat' matrix rownames Table6C = `rows' matrix colnames Table6C = Val_1974 Val_2008 Sd Min Max matlist Table6C, twidth(32) ******************************************************************************************** * * * TABLE 7 - PANEL A: COUNTERFACTUAL ANALYSIS (LABOUR DEMAND SHOCK) AT LPA LEVEL * * * ******************************************************************************************** * compute local house price levels in 2008 pounds as well as annual means #delimit ; foreach vari in lrindex2_hat_llds lrindex2_cf1_llds lrindex2_cf2_llds lrindex2_cf3_llds lrindex2_cf4_llds lrindex2_cf1msd_llds lrindex2_cf2msd_llds lrindex2_cf3msd_llds lrindex2_cf4msd_llds {; gen a74_`vari' = `vari' if year == 1974; egen b74_`vari' = max(a74_`vari'), by(lpa_code); gen `vari'_norm = `vari' - b74_`vari'; egen ann_`vari'_norm = mean(`vari'_norm), by(year); gen ann_`vari'_level = ann_realhp_1974 * exp(ann_`vari'_norm); drop a74_`vari' b74_`vari'; }; macro drop _mean74 _mean08 _mat _a _rows; foreach vari in ann_lrindex2_hat_llds_level ann_lrindex2_cf1_llds_level ann_lrindex2_cf2_llds_level ann_lrindex2_cf3_llds_level ann_lrindex2_cf4_llds_level ann_lrindex2_cf1msd_llds_level ann_lrindex2_cf2msd_llds_level ann_lrindex2_cf3msd_llds_level ann_lrindex2_cf4msd_llds_level {; qui sum `vari' if year == 1974 & lpa_name == "Reading Borough Council"; local mean74 = `r(mean)'; qui sum `vari' if year == 2008 & lpa_name == "Reading Borough Council"; local mean08 = `r(mean)'; qui sum `vari' if lpa_name == "Reading Borough Council"; local mat `a' `mean74', `mean08', `r(sd)', `r(min)', `r(max)'; local a `mat' \ ; local rows `rows' `vari'; }; #delimit cr matrix Table7A = `mat' matrix rownames Table7A = `rows' matrix colnames Table7A = Val_1974 Val_2008 Sd Min Max matlist Table7A, twidth(32) ******************************************************************************************** * * * FIGURE 2: PERIOD FIXED EFFECTS * * * ******************************************************************************************** #delimit ; twoway (line period_ol year if lpa_name == "Reading Borough Council", lwidth(medthick) lpattern(solid) lcolor(black)) (line period_ba year if lpa_name == "Reading Borough Council", lwidth(medthick) lpattern(dash) lcolor(blue)) (line period_lb year if lpa_name == "Reading Borough Council", lwidth(medthick) lpattern(dash_dot) lcolor(green)) (line period_ub year if lpa_name == "Reading Borough Council", lwidth(medthick) lpattern(shortdash) lcolor(red)), ytitle("Time fixed effects (1974 is omitted)") ylabel(, angle(horizontal)) xtitle("Year") xlabel(1974 1980 1990 2000 2008) legen(label(1 "OLS") label(2 "IV with both instruments") label(3 "IV with change in delay only") label(4 "IV with share of votes to Labour only") cols(1) region(lstyle(none))) scheme(s1mono); graph export "Figure 2.emf", replace; #delimit cr ******************************************************************************************** * * * FIGURE 3: PREDICTED REAL HOUSE PRICES W/WO CONSTRAINTS FOR AV. LPA - BASELINE * * * ******************************************************************************************** #delimit ; twoway (line ann_lrindex2_hat_ba_level year if lpa_name == "Reading Borough Council", lwidth(medthick) lpattern(solid) lcolor(black)) (line ann_lrindex2_cf1_ba_level year if lpa_name == "Reading Borough Council", lwidth(medthick) lpattern(dash) lcolor(blue)) (line ann_lrindex2_cf2_ba_level year if lpa_name == "Reading Borough Council", lwidth(medthick) lpattern(dash_dot) lcolor(green)) (line ann_lrindex2_cf3_ba_level year if lpa_name == "Reading Borough Council", lwidth(medthick) lpattern(shortdash) lcolor(red)) (line ann_lrindex2_cf4_ba_level year if lpa_name == "Reading Borough Council", lwidth(medthick) lpattern(dot) lcolor(brown)), ytitle("House prices in 2008 pounds") ylabel(, angle(horizontal)) xtitle("Year") xlabel(1974 1980 1990 2000 2008) legen(label(1 "Predicted real house prices in average English LPA") label(2 "Prediction with refusal rate set to zero") label(3 "- and share developed set to zero") label(4 "- and elevation range set to zero") label(5 "- and independent effect of earnings removed") cols(1) region(lstyle(none))) scheme(s1mono); graph export "Figure 3.emf", replace; #delimit cr ******************************************************************************************** * * * FIGURE 4: PREDICTED REAL HOUSE PRICES W/WO CONSTRAINTS AT AV. MINUS ONE STD.DEV. * * * ******************************************************************************************** #delimit ; twoway (line ann_lrindex2_hat_ba_level year if lpa_name == "Reading Borough Council", lwidth(medthick) lpattern(solid) lcolor(black)) (line ann_lrindex2_cf1msd_ba_level year if lpa_name == "Reading Borough Council", lwidth(medthick) lpattern(dash) lcolor(blue)) (line ann_lrindex2_cf2msd_ba_level year if lpa_name == "Reading Borough Council", lwidth(medthick) lpattern(dash_dot) lcolor(green)) (line ann_lrindex2_cf3msd_ba_level year if lpa_name == "Reading Borough Council", lwidth(medthick) lpattern(shortdash) lcolor(red)) (line ann_lrindex2_cf4msd_ba_level year if lpa_name == "Reading Borough Council", lwidth(medthick) lpattern(dot) lcolor(brown)), ytitle("House prices in 2008 pounds") ylabel(, angle(horizontal)) xtitle("Year") xlabel(1974 1980 1990 2000 2008) legen(label(1 "Predicted real house prices in average English LPA") label(2 "Prediction with refusal rate set to average minus one std. dev.") label(3 "- and share developed set to average minus one std. dev.") label(4 "- and elevation range set to average minus one std. dev.") label(5 "- and independent effect of earnings removed") cols(1) region(lstyle(none))) scheme(s1mono); graph export "Figure 4.emf", replace; #delimit cr ******************************************************************************************** * * * FIGURE 5: 10th / 90th PERCENTILE AND +/- 1 STD. DEV. AND NE vs. SE * * LEVEL OF RESTRICTIVENESS * * * ******************************************************************************************** #delimit ; twoway (line ann_lrindex2_hat_ba_level year if lpa_name == "Reading Borough Council", lwidth(medthick) lpattern(solid) lcolor(black)) (line ann_lrindex2_ref_rlo_ba_level year if lpa_name == "Reading Borough Council", lwidth(medthick) lpattern(dash) lcolor(red)) (line ann_lrindex2_ref_rhi_ba_level year if lpa_name == "Reading Borough Council", lwidth(medthick) lpattern(dash) lcolor(red)) (line ann_lrindex2_cf1msd_ba_level year if lpa_name == "Reading Borough Council", lwidth(medthick) lpattern(dash_dot) lcolor(green)) (line ann_lrindex2_cf1psd_ba_level year if lpa_name == "Reading Borough Council", lwidth(medthick) lpattern(dash_dot) lcolor(green)) (line ann_lrindex2_ref_p10_ba_level year if lpa_name == "Reading Borough Council", lwidth(medthick) lpattern(dot) lcolor(blue)) (line ann_lrindex2_ref_p90_ba_level year if lpa_name == "Reading Borough Council", lwidth(medthick) lpattern(dot) lcolor(blue)), ytitle("House prices in 2008 pounds") ylabel(, angle(horizontal)) xtitle("Year") xlabel(1974 1980 1990 2000 2008) legen(label(1 "Predicted real house prices in average English LPA") label(2 "Prediction with refusal rate as in NE / SE") label(4 "Prediction with refusal rate at average +/- 1 std.dev.") label(6 "Prediction with refusal rate as 10th/90th percentile") cols(1) region(lstyle(none)) order(1 2 4 6)) scheme(s1mono); graph export "Figure 5.emf", replace; #delimit cr ******************************************************************************************** * * * TABLE D1: BASELINE WITH INTERACTION TIME TREND x DISTANCE TO TRAFALGAR SQUARE * * * ******************************************************************************************** #delimit ; xtreg lrindex2 refusal_maj_7908_learn pdevel90_m2_learn lmale_earn_real range_meters_learn trafsqtrend year_2-year_35, fe robust cluster(county_pre_96_num); outreg2 using "Table D1", drop(year_*) nocon nolabel aster replace word nor2 title("Baseline with interaction trend x distance to Traf. sq.") ctitle("OLS") addstat("R-squared overall model", e(r2_o), "R-squared within model", e(r2_w), "R-squared between model", e(r2_b)); xtivreg2 lrindex2 (refusal_maj_7908_learn pdevel90_m2_learn = delchange_maj1_learn labourvotes1983_learn pop_density_1911_imp_learn) lmale_earn_real range_meters_learn trafsqtrend year_2-year_35, fe robust cluster(county_pre_96_num) ffirst; outreg2 using "Table D1", drop(year_*) nocon nor2 nolabel aster append word ctitle("both") addstat("Kleibergen-Paap F", e(widstat)); xtivreg2 lrindex2 (refusal_maj_7908_learn pdevel90_m2_learn = delchange_maj1_learn pop_density_1911_imp_learn) lmale_earn_real range_meters_learn trafsqtrend year_2-year_35, fe robust cluster(county_pre_96_num) ffirst; outreg2 using "Table D1", drop(year_*) nocon nor2 nolabel aster append word ctitle("delay") addstat("Kleibergen-Paap F", e(widstat)); xtivreg2 lrindex2 (refusal_maj_7908_learn pdevel90_m2_learn = labourvotes1983_learn pop_density_1911_imp_learn) lmale_earn_real range_meters_learn trafsqtrend year_2-year_35, fe robust cluster(county_pre_96_num) ffirst; outreg2 using "Table D1", drop(year_*) nocon nor2 nolabel aster append word ctitle("Labour") addstat("Kleibergen-Paap F", e(widstat)); #delimit cr ******************************************************************************************** * * * TABLE D2: EXCLUDE GREATER LONDON AREA * * * ******************************************************************************************** #delimit ; xtreg lrindex2 refusal_maj_7908_learn pdevel90_m2_learn lmale_earn_real range_meters_learn year_2-year_35 if go_name != "London", fe robust cluster(county_pre_96_num); outreg2 using "Table D2", drop(year_*) nocon nolabel aster replace word nor2 title("Baseline excluding Greater London Area") ctitle("OLS") addstat("R-squared overall model", e(r2_o), "R-squared within model", e(r2_w), "R-squared between model", e(r2_b)); xtivreg2 lrindex2 (refusal_maj_7908_learn pdevel90_m2_learn = delchange_maj1_learn labourvotes1983_learn pop_density_1911_imp_learn) lmale_earn_real range_meters_learn year_2-year_35 if go_name != "London", fe robust cluster(county_pre_96_num) ffirst; outreg2 using "Table D2", drop(year_*) nocon nor2 nolabel aster append word ctitle("both") addstat("Kleibergen-Paap F", e(widstat)); xtivreg2 lrindex2 (refusal_maj_7908_learn pdevel90_m2_learn = delchange_maj1_learn pop_density_1911_imp_learn) lmale_earn_real range_meters_learn year_2-year_35 if go_name != "London", fe robust cluster(county_pre_96_num) ffirst; outreg2 using "Table D2", drop(year_*) nocon nor2 nolabel aster append word ctitle("delay") addstat("Kleibergen-Paap F", e(widstat)); xtivreg2 lrindex2 (refusal_maj_7908_learn pdevel90_m2_learn = labourvotes1983_learn pop_density_1911_imp_learn) lmale_earn_real range_meters_learn year_2-year_35 if go_name != "London", fe robust cluster(county_pre_96_num) ffirst; outreg2 using "Table D2", drop(year_*) nocon nor2 nolabel aster append word ctitle("Labour") addstat("Kleibergen-Paap F", e(widstat)); #delimit cr ******************************************************************************************** * * * TABLE D3 - PANEL A: SECOND STAGE OF DIFFERENT TIME WINDOWS FOR CHANGE IN DELAY * * * ******************************************************************************************** #delimit ; xtivreg2 lrindex2 (refusal_maj_7908_learn pdevel90_m2_learn = delchange_maj1_learn pop_density_1911_imp_learn) lmale_earn_real range_meters_learn year_2-year_35, fe robust cluster(county_pre_96_num) ffirst; outreg2 using "Table D3A", drop(year_*) nocon nor2 nolabel aster replace word title(Different Time Windows for Planning Instrument - Second Stage) ctitle(base) addstat("Kleibergen-Paap F", e(widstat)); xtivreg2 lrindex2 (refusal_maj_7908_learn pdevel90_m2_learn = delchange_maj5_learn pop_density_1911_imp_learn) lmale_earn_real range_meters_learn year_2-year_35, fe robust cluster(county_pre_96_num) ffirst; outreg2 using "Table D3A", drop(year_*) nocon nor2 nolabel aster append word ctitle(79/01-03/08) addstat("Kleibergen-Paap F", e(widstat)); xtivreg2 lrindex2 (refusal_maj_7908_learn pdevel90_m2_learn = delchange_maj6_learn pop_density_1911_imp_learn) lmale_earn_real range_meters_learn year_2-year_35, fe robust cluster(county_pre_96_num) ffirst; outreg2 using "Table D3A", drop(year_*) nocon nor2 nolabel aster append word ctitle(96/01-03/08) addstat("Kleibergen-Paap F", e(widstat)); #delimit cr ******************************************************************************************** * * * TABLE D3 - PANEL B: FIRST STAGE OF DIFFERENT TIME WINDOWS FOR CHANGE IN DELAY * * * ******************************************************************************************** #delimit ; xtreg refusal_maj_7908_learn delchange_maj1_learn pop_density_1911_imp_learn lmale_earn_real range_meters_learn year_2-year_35, fe robust cluster(county_pre_96_num); outreg2 using "Table D3B", drop(year_*) nocon nolabel aster nor2 replace word title(Different Time Windows for Planning Instrument - First Stage) ctitle(base) addstat("R-squared overall model", e(r2_o), "R-squared within model", e(r2_w), "R-squared between model", e(r2_b)); xtreg refusal_maj_7908_learn delchange_maj5_learn pop_density_1911_imp_learn lmale_earn_real range_meters_learn year_2-year_35, fe robust cluster(county_pre_96_num); outreg2 using "Table D3B", drop(year_*) nocon nolabel aster append word nor2 ctitle(79/01-03/08) addstat("R-squared overall model", e(r2_o), "R-squared within model", e(r2_w), "R-squared between model", e(r2_b)); xtreg refusal_maj_7908_learn delchange_maj6_learn pop_density_1911_imp_learn lmale_earn_real range_meters_learn year_2-year_35, fe robust cluster(county_pre_96_num); outreg2 using "Table D3B", drop(year_*) nocon nolabel aster append word nor2 ctitle(96/01-03/08) addstat("R-squared overall model", e(r2_o), "R-squared within model", e(r2_w), "R-squared between model", e(r2_b)); #delimit cr ******************************************************************************************** * * * FIGURE B4: PREDICTED PRICES W/WO CONSTRAINTS FOR SELECTED LPAS - BASLINE * * * ******************************************************************************************** #delimit ; twoway (line lrindex2_hat_ba_norm year if lpa_name == "Westminster City Council", lwidth(medthick) lpattern(solid) lcolor(black)) (line lrindex2_cf1_ba_norm year if lpa_name == "Westminster City Council", lwidth(medthick) lpattern(dash) lcolor(blue)) (line lrindex2_cf2_ba_norm year if lpa_name == "Westminster City Council", lwidth(medthick) lpattern(dash_dot) lcolor(green)) (line lrindex2_cf3_ba_norm year if lpa_name == "Westminster City Council", lwidth(medthick) lpattern(shortdash) lcolor(red)) (line lrindex2_cf4_ba_norm year if lpa_name == "Westminster City Council", lwidth(medthick) lpattern(dot) lcolor(brown)), ytitle("Log of real house prices (1974 = 0)") ylabel(-0.5 0 0.5 1 1.5, angle(horizontal)) xtitle("Year") xlabel(1974 1980 1990 2000 2008) legen(label(1 "Predicted log real house prices in Westminster") label(2 "Prediction with refusal rate set to zero") label(3 "- and share developed set to zero") label(4 "- and elevation range set to zero") label(5 "- and independent effect of earnings removed") cols(1) region(lstyle(none))) scheme(s1mono); graph export "Figure B4 Westminster.emf", replace; twoway (line lrindex2_hat_ba_norm year if lpa_name == "Reading Borough Council", lwidth(medthick) lpattern(solid) lcolor(black)) (line lrindex2_cf1_ba_norm year if lpa_name == "Reading Borough Council", lwidth(medthick) lpattern(dash) lcolor(blue)) (line lrindex2_cf2_ba_norm year if lpa_name == "Reading Borough Council", lwidth(medthick) lpattern(dash_dot) lcolor(green)) (line lrindex2_cf3_ba_norm year if lpa_name == "Reading Borough Council", lwidth(medthick) lpattern(shortdash) lcolor(red)) (line lrindex2_cf4_ba_norm year if lpa_name == "Reading Borough Council", lwidth(medthick) lpattern(dot) lcolor(brown)), ytitle("Log of real house prices (1974 = 0)") ylabel(-0.5 0 0.5 1 1.5, angle(horizontal)) xtitle("Year") xlabel(1974 1980 1990 2000 2008) legen(label(1 "Predicted log real house prices in Reading") label(2 "Prediction with refusal rate set to zero") label(3 "- and share developed set to zero") label(4 "- and elevation range set to zero") label(5 "- and independent effect of earnings removed") cols(1) region(lstyle(none))) scheme(s1mono); graph export "Figure B4 Reading.emf", replace; twoway (line lrindex2_hat_ba_norm year if lpa_name == "Newcastle upon Tyne City Council", lwidth(medthick) lpattern(solid) lcolor(black)) (line lrindex2_cf1_ba_norm year if lpa_name == "Newcastle upon Tyne City Council", lwidth(medthick) lpattern(dash) lcolor(blue)) (line lrindex2_cf2_ba_norm year if lpa_name == "Newcastle upon Tyne City Council", lwidth(medthick) lpattern(dash_dot) lcolor(green)) (line lrindex2_cf3_ba_norm year if lpa_name == "Newcastle upon Tyne City Council", lwidth(medthick) lpattern(shortdash) lcolor(red)) (line lrindex2_cf4_ba_norm year if lpa_name == "Newcastle upon Tyne City Council", lwidth(medthick) lpattern(dot) lcolor(brown)), ytitle("Log of real house prices (1974 = 0)") ylabel(-0.5 0 0.5 1 1.5, angle(horizontal)) xtitle("Year") xlabel(1974 1980 1990 2000 2008) legen(label(1 "Predicted log real house prices in Newcastle upon Tyne") label(2 "Prediction with refusal rate set to zero") label(3 "- and share developed set to zero") label(4 "- and elevation range set to zero") label(5 "- and independent effect of earnings removed") cols(1) region(lstyle(none))) scheme(s1mono); graph export "Figure B4 Newcastle.emf", replace; twoway (line lrindex2_hat_ba_norm year if lpa_name == "Darlington Borough Council", lwidth(medthick) lpattern(solid) lcolor(black)) (line lrindex2_cf1_ba_norm year if lpa_name == "Darlington Borough Council", lwidth(medthick) lpattern(dash) lcolor(blue)) (line lrindex2_cf2_ba_norm year if lpa_name == "Darlington Borough Council", lwidth(medthick) lpattern(dash_dot) lcolor(green)) (line lrindex2_cf3_ba_norm year if lpa_name == "Darlington Borough Council", lwidth(medthick) lpattern(shortdash) lcolor(red)) (line lrindex2_cf4_ba_norm year if lpa_name == "Darlington Borough Council", lwidth(medthick) lpattern(dot) lcolor(brown)), ytitle("Log of real house prices (1974 = 0)") ylabel(-0.5 0 0.5 1 1.5, angle(horizontal)) xtitle("Year") xlabel(1974 1980 1990 2000 2008) legen(label(1 "Predicted log real house prices in Darlington") label(2 "Prediction with refusal rate set to zero") label(3 "- and share developed set to zero") label(4 "- and elevation range set to zero") label(5 "- and independent effect of earnings removed") cols(1) region(lstyle(none))) scheme(s1mono); graph export "Figure B4 Darlington.emf", replace; #delimit cr log close