diegogentilepassaro / min_wage_rent

GNU General Public License v3.0
0 stars 0 forks source link

Explore model with state by year-month fixed effects #257

Closed santiagohermo closed 1 year ago

santiagohermo commented 1 year ago

Follow-up to https://github.com/diegogentilepassaro/min_wage_rent/issues/250#issuecomment-1500303715.

In this issue we will try to understand what drives the null results in the model that controls for state by year-month fixed effects. Things we want to look at controlling for state by year-month FE:

We need a good response on why this model looks different for the new submission.

santiagohermo commented 1 year ago

Some replies to the points in the opening comment


  • How does the unbalanced model look like?

Results of estimating unbalanced models:

baseline state-time cbsa-time county-time
D.mw_wkp_tot_17 0.0479 -0.00750 0.0723 0.0645
(1.58) (-0.32) (1.25) (1.35)
D.mw_res 0.0263 -0.00271 -0.0408 -0.0304
(-1.23) (-0.14) (-1.65) (-0.94)
N 193292 192863 188048 183103

Note: t-statistics are in parentheses. Models include controls.

Code ```STATA cd C:\Users\shermo\Documents\GitHub\min_wage_rent\analysis\fd_test\code local instub "../../../drive/derived_large/estimation_samples" #delimit ; local keep_vars "zipcode_num year_month fullbal_sample_SFCC county_num cbsa_num statefips_num ln_rents mw_wkp_tot_17 mw_res ln_emp* ln_estc* ln_avg* "; #delimit cr use `keep_vars' using `instub'/zipcode_months.dta, clear xtset zipcode_num year_month reghdfe D.ln_rents D.mw_wkp_tot_17 D.mw_res /// D.(ln_emp* ln_avg* ln_est*), /// absorb(year_month) nocons /// cluster(statefips_num) eststo baseline reghdfe D.ln_rents D.mw_wkp_tot_17 D.mw_res /// D.(ln_emp* ln_avg* ln_est*), /// absorb(statefips_num##year_month) nocons /// cluster(statefips_num) eststo state_time reghdfe D.ln_rents D.mw_wkp_tot_17 D.mw_res /// D.(ln_emp* ln_avg* ln_est*), /// absorb(cbsa_num##year_month) nocons /// cluster(statefips_num) eststo cbsa_time reghdfe D.ln_rents D.mw_wkp_tot_17 D.mw_res /// D.(ln_emp* ln_avg* ln_est*), /// absorb(county_num##year_month) nocons /// cluster(statefips_num) eststo county_time esttab *, keep(D.mw_wkp_tot_17 D.mw_res) ```

  • How do pre-trends look like in this model?

Figures from https://github.com/diegogentilepassaro/min_wage_rent/commit/17c240c2e8b1a3ade5c7534714e661d75b358cbf

See figures | baseline | state-time | | --- | --- | | ![fd_time_fe_baseline_wkp_dyn](https://user-images.githubusercontent.com/45404755/232232200-2f1c7ebc-d46d-4a0b-a81f-96e1e6b66701.png) | ![fd_time_fe_statefips_wkp_dyn](https://user-images.githubusercontent.com/45404755/232232205-b876eb10-41f6-469a-b7cd-f38236a04bad.png) | | cbsa-time | county-time | | --- | --- | | ![fd_time_fe_cbsa_wkp_dyn](https://user-images.githubusercontent.com/45404755/232232202-990aa8e6-2131-49f4-9c25-22be1bdb1597.png) | ![fd_time_fe_county_wkp_dyn](https://user-images.githubusercontent.com/45404755/232232203-6ea983f1-2274-476f-b798-226460eef70e.png) |

  • What happens if we include or drop controls?

Not much changes.

Results of estimating unbalanced models:

No ctrls Empl. ctrls Est. count ctrls. Avg. wag ctrls All controls
D.mw_wkp_tot_17 -0.00757 -0.0114 -0.00711 -0.0104 -0.0103
(-0.14) (-0.22) (-0.13) (-0.20) (-0.20)
D.mw_res 0.0142 0.0152 0.0137 0.0148 0.0141
(0.59) (0.64) (0.58) (0.60) (0.58)
N 80393 79928 80393 79928 79928

Note: t-statistics are in parentheses.

Code ```STATA clear all cd C:\Users\shermo\Documents\GitHub\min_wage_rent\analysis\fd_test\code local instub "../../../drive/derived_large/estimation_samples" #delimit ; local keep_vars "zipcode_num year_month fullbal_sample_SFCC county_num cbsa_num statefips_num ln_rents mw_wkp_tot_17 mw_res ln_emp* ln_estc* ln_avg* "; #delimit cr use `keep_vars' using `instub'/zipcode_months.dta, clear xtset zipcode_num year_month reghdfe D.ln_rents D.mw_wkp_tot_17 D.mw_res /// if fullbal_sample_SFCC == 1, /// absorb(statefips_num##year_month) nocons /// cluster(statefips_num) eststo no_controls reghdfe D.ln_rents D.mw_wkp_tot_17 D.mw_res /// D.(ln_emp*) /// if fullbal_sample_SFCC == 1, /// absorb(statefips_num##year_month) nocons /// cluster(statefips_num) eststo emp_controls reghdfe D.ln_rents D.mw_wkp_tot_17 D.mw_res /// D.(ln_est*) /// if fullbal_sample_SFCC == 1, /// absorb(statefips_num##year_month) nocons /// cluster(statefips_num) eststo estcount_controls reghdfe D.ln_rents D.mw_wkp_tot_17 D.mw_res /// D.(ln_avg*) /// if fullbal_sample_SFCC == 1, /// absorb(statefips_num##year_month) nocons /// cluster(statefips_num) eststo avgwage_controls reghdfe D.ln_rents D.mw_wkp_tot_17 D.mw_res /// D.(ln_emp* ln_est* ln_avg*) /// if fullbal_sample_SFCC == 1, /// absorb(statefips_num##year_month) nocons /// cluster(statefips_num) eststo all_controls esttab *, keep(D.mw_wkp_tot_17 D.mw_res) ```

  • What happens if we drop states (CA)?

The states with the most observations in the fullbalanced sample are California (fips: 6, % of zip-months: 11.6), Florida (fips: 12, % of zip-momths: 20.59), Texas (fips: 48, % of zip-months: 12.94).

Results look like this:

Baseline Excl. CA Excl. FL Excl. TX
D.mw_wkp_tot_17 -0.0103 0.0696 -0.0298 -0.00985
(-0.20) (0.85) (-0.58) (-0.19)
D.mw_res 0.0141 -0.00438 0.0284 0.0130
(0.58) (-0.12) (1.11) (0.54)
N 79928 70581 63316 69488

Note: t-statistics are in parentheses.

Code ```stata clear all cd C:\Users\shermo\Documents\GitHub\min_wage_rent\analysis\fd_test\code local instub "../../../drive/derived_large/estimation_samples" #delimit ; local keep_vars "zipcode_num year_month fullbal_sample_SFCC county_num cbsa_num statefips_num ln_rents mw_wkp_tot_17 mw_res ln_emp* ln_estc* ln_avg* "; #delimit cr use `keep_vars' using `instub'/zipcode_months.dta, clear xtset zipcode_num year_month reghdfe D.ln_rents D.mw_wkp_tot_17 D.mw_res /// D.(ln_emp* ln_est* ln_avg*) /// if fullbal_sample_SFCC == 1, /// absorb(statefips_num##year_month) nocons /// cluster(statefips_num) eststo baseline reghdfe D.ln_rents D.mw_wkp_tot_17 D.mw_res /// D.(ln_emp* ln_est* ln_avg*) /// if fullbal_sample_SFCC == 1 & statefips_num != 6, /// absorb(statefips_num##year_month) nocons /// cluster(statefips_num) eststo no_CA reghdfe D.ln_rents D.mw_wkp_tot_17 D.mw_res /// D.(ln_emp* ln_est* ln_avg*) /// if fullbal_sample_SFCC == 1 & statefips_num != 12, /// absorb(statefips_num##year_month) nocons /// cluster(statefips_num) eststo no_FL reghdfe D.ln_rents D.mw_wkp_tot_17 D.mw_res /// D.(ln_emp* ln_est* ln_avg*) /// if fullbal_sample_SFCC == 1 & statefips_num != 48, /// absorb(statefips_num##year_month) nocons /// cluster(statefips_num) eststo no_TX esttab *, keep(D.mw_wkp_tot_17 D.mw_res) ```

  • What happens if we only use workplace MW?

Things remain mostly insignificant:

Both Only wkp Only res
D.mwwkp~17 -0.0103 0.00961
(-0.20) (0.40)
D.mw_res 0.0141 0.00853
(0.58) (0.78)
N 79928 79928 79928

Note: t-statistics are in parentheses.

Code ```stata clear all cd C:\Users\shermo\Documents\GitHub\min_wage_rent\analysis\fd_test\code local instub "../../../drive/derived_large/estimation_samples" #delimit ; local keep_vars "zipcode_num year_month fullbal_sample_SFCC county_num cbsa_num statefips_num ln_rents mw_wkp_tot_17 mw_res ln_emp* ln_estc* ln_avg* "; #delimit cr use `keep_vars' using `instub'/zipcode_months.dta, clear xtset zipcode_num year_month reghdfe D.ln_rents D.mw_wkp_tot_17 D.mw_res /// D.(ln_emp* ln_est* ln_avg*) /// if fullbal_sample_SFCC == 1, /// absorb(statefips_num##year_month) nocons /// cluster(statefips_num) eststo baseline reghdfe D.ln_rents D.mw_wkp_tot_17 /// D.(ln_emp* ln_est* ln_avg*) /// if fullbal_sample_SFCC == 1, /// absorb(statefips_num##year_month) nocons /// cluster(statefips_num) eststo only_wkp reghdfe D.ln_rents D.mw_res /// D.(ln_emp* ln_est* ln_avg*) /// if fullbal_sample_SFCC == 1, /// absorb(statefips_num##year_month) nocons /// cluster(statefips_num) eststo only_res esttab *, keep(D.mw_wkp_tot_17 D.mw_res) ```
santiagohermo commented 1 year ago

I responded the questions in the opening comment @diegogentilepassaro @gabrieleborg. See https://github.com/diegogentilepassaro/min_wage_rent/issues/257#issuecomment-1509863148

I also formally tested whether the model with state-time FE is inconsistent with the baseline. The final run with the results is in commit https://github.com/diegogentilepassaro/min_wage_rent/commit/c37befef9622cff59a66ee0d7bf4bafa0e740bb1. In particular, see this table.

santiagohermo commented 1 year ago
santiagohermo commented 1 year ago

Continues in its PR #259