*! version 02nov2020 by Michael Koch mkoch@econ.au.dk ******************************************************************************** /* Do-File to replicate results in "Working from home, wages, and regional inequality in the light of COVID-19", by Michael Irlacher and Michael Koch */ ******************************************************************************** /* The paper uses data from the BIBB/BAuA Employment Survey of the Working Population on Qualification and Working Conditions in Germany 2018, doi: 10.7803/501.18.1.1.10. The Survey was conducted by the Federal Institute for Vocational Education and Training (BIBB), and the Federal Institute for Occupational Safety and Health (BAuA). The data access was provided via a Scientific-Use-File of the Data Research Centre at the Federal Institute for Vocational Training and Education (BIBB-FDZ). */ ******************************** *** STEP 1. DATA PREPARATION *** ******************************** global ikdir "XXX\replication folder" // Specifiy data-folder use "$ikdir\Data\ZA7574_v1-0-0.dta" , clear // Load data *** Gross hourly wage *** recode F518_SUF 99998=. recode F518_SUF 99999=. gen mwage=. replace mwage = F518_SUF replace mwage = exp_wage_imp_extr1 if mwage==. // imputed wage for missings replace mwage = exp_wage_imp_extr1 if mwage<300 // imputed wage for extrem values (0.5) replace mwage = exp_wage_imp_extr1 if mwage>20000 // imputed wage for extrem values (99.5 percentil) label variable mwage "Gross Monthly Wage" *** Weekly working hours (no extra hours) *** /* Survey question: "Wie viele Wochenstunden beträgt in Ihrer Tätigkeit Ihre // mit dem Arbeitgeber vereinbarte Wochenarbeitszeit ohne Überstunden?" */ *** Only available for 17376 observations *** recode F200 97=. recode F200 99=. rename F200 normalhours *** Gross hourly wage *** gen hwage = mwage/(normalhours*4.25) label variable hwage "Gross Hourly Wage" gen lnhwage = log(hwage) label var lnhwage "Log Gross hourly wage" *** Gross hourly wage following Spitz-Oener (2008) *** * The variable values are midpoints of the wage bracket intervals (minumum for top interval)* gen mincomecont=mwage gen incvar = . replace incvar = 300 if mincomecont>0 & mincomecont<600 replace incvar = 800 if mincomecont>=600 & mincomecont<1000 replace incvar = 1250 if mincomecont>=1000 & mincomecont<1500 replace incvar = 1750 if mincomecont>=1500 & mincomecont<2000 replace incvar = 2250 if mincomecont>=2000 & mincomecont<2500 replace incvar = 2750 if mincomecont>=2500 & mincomecont<3000 replace incvar = 3250 if mincomecont>=3000 & mincomecont<3500 replace incvar = 3750 if mincomecont>=3500 & mincomecont<4000 replace incvar = 4250 if mincomecont>=4000 & mincomecont<4500 replace incvar = 4750 if mincomecont>=4500 & mincomecont<5000 replace incvar = 5250 if mincomecont>=5000 & mincomecont<5500 replace incvar = 5750 if mincomecont>=5500 & mincomecont<6000 replace incvar = 6500 if mincomecont>=6000 & mincomecont<7000 replace incvar = 7500 if mincomecont>=7000 & mincomecont<8000 replace incvar = 8500 if mincomecont>=8000 & mincomecont<9000 replace incvar = 9500 if mincomecont>=9000 & mincomecont<10000 replace incvar = 12500 if mincomecont>=10000 & mincomecont<15000 replace incvar = 15000 if mincomecont>=15000 & mincomecont<=50000 gen hwageso = incvar/(normalhours*4.25) label variable hwageso "Gross Hourly Wage " gen lnhwageso = log(hwageso) label var lnhwageso "Log Gross hourly wage [SO_2008]" *** Education (in years of schooling) *** gen school = 10 if S3 == 1 | S3 == 8 replace school = 9 if S3 == 2 | S3 == 4 replace school = 8 if S3 == 3 replace school = 8 if (S3 == 2 | S3 == 4) & (F1104 <= 1950) replace school = 10 if S3 == 5 | S3 == 6 replace school = 12 if S3 == 7 | S3 == 9 replace school = 13 if S3 == 8 replace school = 9 if S3 == 10 & S4== 1 /* Auslaendischer Schulabschluss: entspricht Hauptschulabschluss */ replace school = 10 if S3 == 10 & S4== 2 /* Auslaendischer Schulabschluss: entspricht Realschulabschluss */ replace school = 13 if S3 == 10 & S4== 3 /* Auslaendischer Schulabschluss: entspricht Abitur */ replace school = . if S3 == 11 | S3 == 99 | S3 == . /* Sonstiger Schulabschluss oder K.A. */ * training * gen train = 0 replace train = 1 if F1217==5 | F1217==6 /* 5: Praktikum 6: Berufsvorbereitung bzw. berufsvorbereitende Ma࠮ahme */ * length of training * gen length = F1216_ej - F1216_bj if F1216_ej <=2018 replace length = length + (F1216_em - F1216_bm)/12 if F1216_em <= 12 & F1216_bm <= F1216_em /* add number of months in cases where start month is < end month */ replace length = 0 if length < 0 replace length = 6 if length > 6 /* set max to 6 years */ replace train = train + (2/3)*length if F1202 == 1 /* Lehre, use */ replace train = train + length if F1202 >= 2 & F1202 <= 6 /* berufsfachsch, fh, uni, beamtenausb, anderer Ausbildungsabschluss */ replace train = . if F1202 >= 7 & F1202 <= 9 /* F1202 codes 7 - 9 are a mess */ replace train = . if F1202 == . drop length gen educ = school + train replace educ = 18 if educ > 18 replace educ = . if train == . label variable educ "Education in years [schooling and training]" *** Age *** gen age = 2018 - S2_j replace age = . if age < 15 | age > 65 label var age "Age in years" gen age2 = age*age label var age2 "Sq. Age" *** Experience *** gen exp = age - educ - 5 replace educ = age - 5 if exp < 0 replace exp = 0 if exp < 0 gen exp2 = (exp^2)/100 gen exp3 = (exp^3)/10000 gen exp4 = (exp^4)/1000000 label var exp "Potential labor-force experience" label var exp2 "Sq. Pot. labor-force experience" label var exp3 "Cubic Pot. labor-force experience" label var exp4 "Quartic Pot. labor-force experience" *** Female *** gen female=1 if S1==2 replace female=0 if S1==1 label var female "Indic.: Female" *** Married *** gen married = 0 replace married = 1 if F1600 == 1 /* Verheiratet */ replace married = 1 if F1600 == 5 /* Eingetragene Lebensgemeinschaft */ replace married = . if F1600 == 9 label var married "Indic.: Married" *** Part-time *** gen parttime=. replace parttime=0 if normalhours>=21 & normalhours!=. replace parttime=1 if normalhours<21 & normalhours!=. label var parttime "Indic.: Part-time" *** Migrant *** gen migrant = . replace migrant = 1 if Mig==1 replace migrant = 0 if Mig==0 | Mig==2 replace migrant =. if Mig==-4 label var migrant "Indic.: Migrant" *** TASKS (What type of activities you perform in your job) *** gen byte indact1 = F303==2 | F303==1 gen byte indact2 = F306==2 | F306==1 gen byte indact3 = F315==2 | F315==1 gen byte indact4 = F308==2 | F308==1 gen byte indact5 = F304==2 | F304==1 gen byte indact6 = F311==2 | F311==1 | F313==2 | F313==1 gen byte indact7 = F307==2 | F307==1 gen byte indact8 = F324==2 gen byte indact9 = F403_01==2 | F403_01==3 gen byte indact10 = F314==2 | F314==1 gen byte indact11 = F312==2 | F312==1 gen byte indact12 = F316==2 | F316==1 gen byte indact13 = F309==2 | F309==1 gen byte indact14 = F310==2 | F310==1 gen byte indact15 = F305==2 | F305==1 label var indact1 `"Indic.: Manufacture, Produce Goods"' label var indact2 `"Indic.: Repair, Maintain"' label var indact3 `"Indic.: Entertain, Accommodate, Prepare Foods"' label var indact4 `"Indic.: Transport, Store, Dispatch"' label var indact5 `"Indic.: Measure, Inspect, Control Quality"' label var indact6 `"Indic.: Gather Information, Develop, Research, Construct"' label var indact7 `"Indic.: Purchase, Procure, Sell"' label var indact8 `"Indic.: Program a Computer"' label var indact9 `"Indic.: Apply Legal Knowledge"' label var indact10 `"Indic.: Consult and Inform"' label var indact11 `"Indic.: Train, Teach, Instruct, Educate"' label var indact12 `"Indic.: Nurse, Look After, Cure"' label var indact13 `"Indic.: Advertise, Promote, Conduct Marketing and PR"' label var indact14 `"Indic.: Organize, Plan, Prepare (others' work)"' label var indact15 `"Indic.: Oversee, Control Machinery and Techn. Processes"' *** SKILLS (For each area, please tell us ...)*** lab var F403_01 "Legal knowledge" lab var F403_02 "Knowledge of project management" lab var F403_03 "Knowledge in the medical or nursing field" lab var F403_04 "Knowledge in mathematics, calculus, statistics" lab var F403_05 "Knowledge of German, written expression, spelling" lab var F403_06 "Knowledge of PC application programs" lab var F403_07 "Technical knowledge" lab var F403_08 "Commercial or business knowledge" gen byte indskill1 = F403_01==2 | F403_01==3 gen byte indskill2 = F403_02==2 | F403_02==3 gen byte indskill3 = F403_03==2 | F403_03==3 gen byte indskill4 = F403_04==2 | F403_04==3 gen byte indskill5 = F403_05==2 | F403_05==3 gen byte indskill6 = F403_06==2 | F403_06==3 gen byte indskill7 = F403_07==2 | F403_07==3 gen byte indskill8 = F403_08==2 | F403_08==3 label var indskill1 `"Indic.: Legal knowledge"' label var indskill2 `"Indic.: project management"' label var indskill3 `"Indic.: medical or nursing field"' label var indskill4 `"Indic.: mathematics, calculus, statistics"' label var indskill5 `"Indic.: German, written expression, spelling"' label var indskill6 `"Indic.: PC application programs"' label var indskill7 `"Indic.: Technical knowledge"' label var indskill8 `"Indic.: Commercial or business knowledge"' *** CATHRES *** gen byte cathres4 = 1 if F411_03==4 replace cathres4 = 2 if F411_03==3 replace cathres4 = 3 if F411_03==2 replace cathres4 = 4 if F411_03==1 gen byte cathres5 = 1 if F411_02==4 replace cathres5 = 2 if F411_02==3 replace cathres5 = 3 if F411_02==2 replace cathres5 = 4 if F411_02==1 label var cathres4 `"Intens. (1-4): Repeated worksteps"' label var cathres5 `"Intens. (1-4): Work procedures prescribed in detail"' *** Indicator Codifiability gen byte indcodi = (cathres5>=3 & cathres5~=.) label variable indcodi "Indic.: Codifiability" *** Indicator Routineness gen byte indrout = (cathres4>=3 & cathres4~=.) label variable indrout "Indic.: Routineness" *** Computer Use *** gen indcomp=(F318==1|F318==2) label var indcomp "Indic.: Computer use" *** Adjust WZ Information *** replace WZ2003=. if WZ2003==-1 *** Variables related to Home office *** * F228 F230_02 F231 F231_01 F231_02 F232 codebook F228 F230_02 F231 F231_01 F231_02 F232 replace F231=. if F231==997 | F231==998 | F231==999 gen wfh = . replace wfh = 0 if F228==2 replace wfh = 1 if F228==1 label var wfh "Indic.: Home-office" gen wfhh =. replace wfhh = F231 label var wfhh "Hours in home-office" * consider if hours in WFH are included in working time gen wfh_rest = . replace wfh_rest = 0 if F228==2 replace wfh_rest = 0 if F228==1 & F231_02==3 replace wfh_rest = 1 if F228==1 & F231_02==2 replace wfh_rest = 1 if F228==1 & F231_02==1 label var wfh "Indic.: Home-office restrictive" gen wfhh_rest =. replace wfhh_rest = F231 replace wfhh_rest = 0 if F231!=. & F231_02==3 label var wfhh_rest "Hours in home-office restrictive" * WFH not possible gen nowfh =. replace nowfh=0 if F232==1 | F232==2 & F228==2 | F228==9 replace nowfh=1 if F232==3 & F228==2 | F228==9 label var nowfh "Indic.: Home-Office not possible" /* Sample restriction to indiviudals where occupational status is "Worker", "Salaried employee" or "Civil servant" Hence, we drop "Self-employed person", "Freelancer (In German: freiberuflich tätig)" "Freelance collaborator (in German: Freie Mitarbeiter/in)", "Assisting family member" "Target person (ZP) can't choose between worker and salaried employee" and "Not specified" */ tab Stib keep if Stib==1 | Stib==2 | Stib==3 * Occupation using KLDB2010 Classification rename F100_kldb2010_3d kldb2010_3d rename F100_kldb2010_2d kldb2010_2d * Sector information using WZ2003 rename WZ2003 industry * Regional information using Nomenclature of Territorial Units for Statistics, Nuts2 rename nuts2 region * Plantsize rename F515 plantsize gen byte _plantsize = . if plantsize==99 // K.A. replace _plantsize = 1 if plantsize==1 | plantsize==2 | plantsize==3 replace _plantsize = 2 if plantsize==4 replace _plantsize = 3 if plantsize==5 | plantsize==6 replace _plantsize = 4 if plantsize==7 replace _plantsize = 5 if plantsize==8 | plantsize==9 replace _plantsize = 6 if plantsize==10 replace _plantsize = 7 if plantsize==11 drop plantsize rename _plantsize plantsize label define sizecat 1 " 1 to 4 persons" 2 " 5 to 9 persons" 3 " 10 to 49 persons" 4 " 50 to 99 persons" 5 " 100 to 499 persons" 6 " 500 to 999 persons" 7 "1000 or more persons" label values plantsize sizecat label var plantsize "Plant Employment [categorical]" save "$ikdir\Data\working_data.dta", replace **************************** *** STEP 2. DESCRIPTIVES *** **************************** use "$ikdir\Data\working_data.dta", clear * Note that No-WFH (question F232) is only put to the subset of respondents reporting no WFH experience qui sum wfh gen mean_wfh=r(mean) qui sum wfh [aweight=gew2018_hr17] gen mean_wfh_w=r(mean) gen nowfh_a = nowfh*(1-mean_wfh) gen nowfh_aw = nowfh*(1-mean_wfh_w) *** TABLE 1: Summary statistics for working from home in Germany *** estpost tabstat wfh wfhh wfh_rest wfhh_rest nowfh_aw [aweight=gew2018_hr17] , stats(mean sd min max count) columns(statistics) *** TABLE 2: Summary statistics for individual controls used in Table 3 *** * PANEL A (See Table 3) estpost tabstat lnhwage lnhwageso educ female married age exp migrant plantsize [aweight=gew2018_hr17] if wfh!=.& lnhwage!=. & lnhwageso!=. &educ!=. & female!=. & married!=. & age!=. & age2!=. & exp!=. & exp2!=. & exp3!=. & exp4!=. & migrant!=. & plantsize!=. & industry!=., stats(mean sd min max count) columns(statistics) * PANEL B (See Table 3) estpost tabstat lnhwage lnhwageso educ female married age exp migrant plantsize [aweight=gew2018_hr17] if wfhh!=.& lnhwage!=. & lnhwageso!=. &educ!=. & female!=. & married!=. & age!=. & age2!=. & exp!=. & exp2!=. & exp3!=. & exp4!=. & migrant!=. & plantsize!=. & industry!=., stats(mean sd min max count) columns(statistics) * PANEL C (See Table 3) estpost tabstat lnhwage lnhwageso educ female married age exp migrant plantsize [aweight=gew2018_hr17] if nowfh!=.& lnhwage!=. & lnhwageso!=. &educ!=. & female!=. & married!=. & age!=. & age2!=. & exp!=. & exp2!=. & exp3!=. & exp4!=. & migrant!=. & plantsize!=. & industry!=., stats(mean sd min max count) columns(statistics) *** TABLE A.5: Descriptive statistics on indicators for workplace characteristics *** * PANEL A (See Table 3) estpost tabstat indact* indskill* indcodi indrout indcomp [aweight=gew2018_hr17] if wfh!=.& lnhwage!=. & lnhwageso!=. &educ!=. & female!=. & married!=. & age!=. & age2!=. & exp!=. & exp2!=. & exp3!=. & exp4!=. & migrant!=. & plantsize!=. & industry!=., stats(mean sd) columns(statistics) * PANEL B (See Table 3) estpost tabstat indact* indskill* indcodi indrout indcomp [aweight=gew2018_hr17] if wfhh!=.& lnhwage!=. & lnhwageso!=. &educ!=. & female!=. & married!=. & age!=. & age2!=. & exp!=. & exp2!=. & exp3!=. & exp4!=. & migrant!=. & plantsize!=. & industry!=., stats(mean sd) columns(statistics) * PANEL C (See Table 3) estpost tabstat indact* indskill* indcodi indrout indcomp [aweight=gew2018_hr17] if nowfh!=.& lnhwage!=. & lnhwageso!=. &educ!=. & female!=. & married!=. & age!=. & age2!=. & exp!=. & exp2!=. & exp3!=. & exp4!=. & migrant!=. & plantsize!=. & industry!=., stats(mean sd ) columns(statistics) *** Logit Regressions for likelihood of WFH/NOWFH depending on Tasks and Computer use *** *** FIGURE A.6: WFH and workplace characteristics *** logit wfh indact* indskill* indcodi indrout indcomp coefplot, keep (indact* indskill* indcodi indrout indcomp ) msymbol(d) mfcolor(white) levels(99.9 99 95) graphregion(color(white)) ylabel(,labsize(vsmall)) *** FIGURE A.7: No-WFH and workplace characteristics *** logit nowfh indact* indskill* indcodi indrout indcomp coefplot, keep (indact* indskill* indcodi indrout indcomp ) msymbol(d) mfcolor(white) levels(99.9 99 95) graphregion(color(white)) ylabel(,labsize(vsmall)) ******************************** *** STEP 3. WFH AND COVID-19 *** ******************************** ****************************************************** *** WFH/NOWFH and GOOGLE MOBILITY CHANGES IN APRIL *** ****************************************************** use "$ikdir\Data\working_data.dta", clear collapse wfh nowfh [aweight=gew2018_hr17], by(Bula) replace nowfh = nowfh*(1-wfh) * Use Google Data on mobility changes from https://www.gstatic.com/covid19/mobility/2020-03-29_DE_Mobility_Report_en.pdf generate google_workplace = -.43 in 8 replace google_workplace = -.43 in 9 replace google_workplace = -.44 in 11 replace google_workplace = -.31 in 12 replace google_workplace = -.4 in 4 replace google_workplace = -.42 in 2 replace google_workplace = -.41 in 6 replace google_workplace = -.36 in 3 replace google_workplace = -.32 in 13 replace google_workplace = -.38 in 5 replace google_workplace = -.39 in 7 replace google_workplace = -.39 in 10 replace google_workplace = -.34 in 14 replace google_workplace = -.27 in 15 replace google_workplace = -.36 in 1 replace google_workplace = -.32 in 16 label define buland 1 "Schleswig-Holstein" 2 "Hamburg" 3 "Lower Saxony" 4 "Bremen" /// 5 "North Rhine-Westphalia" 6 "Hesse" 7 "Rhineland-Palatinate" 8 "Baden-Wuerttemberg" /// 9 "Bavaria" 10 "Saarland" 11 "Berlin" 12 "Brandenburg" 13 "Mecklenburg-Western Pomerania" /// 14 "Saxony" 15 "Saxony-Anhalt" 16 "Thuringia" label val Bula buland *** FIGURE 1: Changes in mobility trend for workplaces and working from home *** twoway (lfit google_workplace wfh) (scatter google_workplace wfh, msymbol(d) mfcolor(black) graphregion(color(white)) mlabel(Bula) mlabposition(12) mlabsize(small) ytitle("Mobility trends for places of work", size(medlarge)) xtitle("Share of respondents WFH", size(medlarge)) legend(off)) twoway (lfit google_workplace nowfh) (scatter google_workplace nowfh, msymbol(d) mfcolor(black) graphregion(color(white)) mlabel(Bula) mlabposition(12) mlabsize(small) ytitle("Mobility trends for places of work", size(medlarge)) xtitle("Share of respondents No-WFH", size(medlarge)) legend(off)) **************************************************** *** UNEMPLYMENT RATES AND WFH ACROSS OCCUPATIONS *** **************************************************** *** FIGURE 2: Unemployment changes and working from home across occupations *** use "$ikdir\Data\working_data.dta", clear collapse wfh nowfh educ female married age exp migrant [aweight=gew2018_hr17], by(kldb2010_3d) sort kldb2010_3d merge m:1 kldb2010_3d using "$ikdir\Data\jul.dta" drop _merge replace nowfh = nowfh*(1-wfh) gen ln_delta_abs=ln(delta_abs_jul) drop if delta_abs<0 twoway (lfit ln_delta_abs wfh) (scatter ln_delta_abs wfh, msymbol(d) mfcolor(black) graphregion(color(white)) ytitle("Log increase unemployed workers", size(medlarge)) xtitle("Share of respondents WFH", size(medlarge)) legend(off)) twoway (lfit ln_delta_abs nowfh) (scatter ln_delta_abs nowfh, msymbol(d) mfcolor(black) graphregion(color(white)) ytitle("Log increase unemployed workers", size(medlarge)) xtitle("Share of respondents No-WFH", size(medlarge)) legend(off)) *********************************** *** WFH AND WAGES ALONG DECILES *** *********************************** use "$ikdir\Data\working_data.dta", clear xtile d_lnhwage = lnhwage, nq(10) preserve collapse lnhwage wfh nowfh, by(d_lnhwage) drop if lnhwage==. replace nowfh = nowfh*(1-wfh) replace wfh = wfh*100 replace nowfh=nowfh*100 rename wfh WFH rename nowfh No_WFH *** FIGURE 3: WFH across the wage distribution *** graph bar WFH No_WFH, over(d_lnhwage) yscale(range(0 100)) ylabel(0(25)100) blabel(bar, format(%4.1f) size(vsmall)) graphregion(color(white)) nolabel bargap(25) legend(pos(12) ring(0)) ytitle("Share of workers", size(medlarge)) b1title("Deciles of log daily wage", size(medlarge)) ***************************************** *** STEP 4. WORKER LEVEL REGRESSIONS *** ***************************************** *** TABLE 3: Working from home and wage income *** use "$ikdir\Data\working_data.dta", clear eststo clear eststo: quietly regress lnhwage wfh if educ!=. & female!=. & married!=. & age!=. & age2!=. & exp!=. & exp2!=. & exp3!=. & exp4!=. & migrant!=. & plantsize!=. & industry!=. eststo: quietly regress lnhwage wfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize if industry!=. eststo: quietly regress lnhwage wfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry eststo: quietly regress lnhwage wfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region eststo: quietly areg lnhwage wfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region , absorb(kldb2010_3d) eststo: quietly areg lnhwage wfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* , absorb(kldb2010_3d) eststo: quietly areg lnhwage wfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp, absorb(kldb2010_3d) esttab , keep (wfh) star(* 0.1 ** 0.05 *** 0.01) se r2 gen lnwfhh = log(wfhh) label var lnwfhh "Log Hours in home-office" eststo clear eststo: quietly regress lnhwage lnwfhh if educ!=. & female!=. & married!=. & age!=. & age2!=. & exp!=. & exp2!=. & exp3!=. & exp4!=. & migrant!=. & plantsize!=. & industry!=. eststo: quietly regress lnhwage lnwfhh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize if industry!=. eststo: quietly regress lnhwage lnwfhh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry eststo: quietly regress lnhwage lnwfhh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region eststo: quietly areg lnhwage lnwfhh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region, absorb(kldb2010_3d) eststo: quietly areg lnhwage lnwfhh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact*, absorb(kldb2010_3d) eststo: quietly areg lnhwage lnwfhh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp, absorb(kldb2010_3d) esttab , keep (lnwfhh) star(* 0.1 ** 0.05 *** 0.01) se r2 eststo clear eststo: quietly regress lnhwage nowfh if educ!=. & female!=. & married!=. & age!=. & age2!=. & exp!=. & exp2!=. & exp3!=. & exp4!=. & migrant!=. & plantsize!=. & industry!=. eststo: quietly regress lnhwage nowfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize if industry!=. eststo: quietly regress lnhwage nowfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry eststo: quietly regress lnhwage nowfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region eststo: quietly areg lnhwage nowfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region , absorb(kldb2010_3d) eststo: quietly areg lnhwage nowfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* , absorb(kldb2010_3d) eststo: quietly areg lnhwage nowfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp, absorb(kldb2010_3d) esttab , keep (nowfh) star(* 0.1 ** 0.05 *** 0.01) se r2 *** DETAILED REGRESSION OUTPUT *** *** TABLE A.10: Working from home and wage income (detailed regression output) *** use "$ikdir\Data\working_data.dta", clear gen lnwfhh = log(wfhh) replace age2 = age2/100 label var lnwfhh "Log Hours in home-office" eststo clear eststo: quietly areg lnhwage wfh educ female married age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp, absorb(kldb2010_3d) eststo: quietly areg lnhwage lnwfhh educ female married age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp, absorb(kldb2010_3d) eststo: quietly areg lnhwage nowfh educ female married age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp, absorb(kldb2010_3d) esttab , keep (wfh lnwfhh nowfh educ female married age2 exp exp2 exp3 exp4 migrant) order(wfh lnwfhh nowfh educ female married age2 exp exp2 exp3 exp4 migrant) star(* 0.1 ** 0.05 *** 0.01) se r2 *** Robustness Spitz-Oener Wages *** TABLE A.6: Working from home and wage income (alternative wage definition) *** use "$ikdir\Data\working_data.dta", clear eststo clear eststo: quietly regress lnhwageso wfh if educ!=. & female!=. & married!=. & age!=. & age2!=. & exp!=. & exp2!=. & exp3!=. & exp4!=. & migrant!=. & plantsize!=. & industry!=. eststo: quietly regress lnhwageso wfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize if industry!=. eststo: quietly regress lnhwageso wfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry eststo: quietly regress lnhwageso wfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region eststo: quietly areg lnhwageso wfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region , absorb(kldb2010_3d) eststo: quietly areg lnhwageso wfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* , absorb(kldb2010_3d) eststo: quietly areg lnhwageso wfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp, absorb(kldb2010_3d) esttab , keep (wfh) star(* 0.1 ** 0.05 *** 0.01) se r2 gen lnwfhh = log(wfhh) label var lnwfhh "Log Hours in home-office" eststo clear eststo: quietly regress lnhwageso lnwfhh if educ!=. & female!=. & married!=. & age!=. & age2!=. & exp!=. & exp2!=. & exp3!=. & exp4!=. & migrant!=. & plantsize!=. & industry!=. eststo: quietly regress lnhwageso lnwfhh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize if industry!=. eststo: quietly regress lnhwageso lnwfhh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry eststo: quietly regress lnhwageso lnwfhh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region eststo: quietly areg lnhwageso lnwfhh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region, absorb(kldb2010_3d) eststo: quietly areg lnhwageso lnwfhh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact*, absorb(kldb2010_3d) eststo: quietly areg lnhwageso lnwfhh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp, absorb(kldb2010_3d) esttab , keep (lnwfhh) star(* 0.1 ** 0.05 *** 0.01) se r2 eststo clear eststo: quietly regress lnhwageso nowfh if educ!=. & female!=. & married!=. & age!=. & age2!=. & exp!=. & exp2!=. & exp3!=. & exp4!=. & migrant!=. & plantsize!=. & industry!=. eststo: quietly regress lnhwageso nowfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize if industry!=. eststo: quietly regress lnhwageso nowfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry eststo: quietly regress lnhwageso nowfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region eststo: quietly areg lnhwageso nowfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region , absorb(kldb2010_3d) eststo: quietly areg lnhwageso nowfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* , absorb(kldb2010_3d) eststo: quietly areg lnhwageso nowfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp, absorb(kldb2010_3d) esttab , keep (nowfh) star(* 0.1 ** 0.05 *** 0.01) se r2 ** Robustness restrictive WFH measures *** TABLE A.7: Working from home and wage income (restrictive WFH measures) *** use "$ikdir\Data\working_data.dta", clear eststo clear eststo: quietly regress lnhwage wfh_rest if educ!=. & female!=. & married!=. & age!=. & age2!=. & exp!=. & exp2!=. & exp3!=. & exp4!=. & migrant!=. & plantsize!=. & industry!=. eststo: quietly regress lnhwage wfh_rest educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize if industry!=. eststo: quietly regress lnhwage wfh_rest educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry eststo: quietly regress lnhwage wfh_rest educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region eststo: quietly areg lnhwage wfh_rest educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region , absorb(kldb2010_3d) eststo: quietly areg lnhwage wfh_rest educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* , absorb(kldb2010_3d) eststo: quietly areg lnhwage wfh_rest educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp, absorb(kldb2010_3d) esttab , keep (wfh_rest) star(* 0.1 ** 0.05 *** 0.01) se r2 gen lnwfhh_rest = log(wfhh_rest) label var lnwfhh_rest "Log Hours in home-office" eststo clear eststo: quietly regress lnhwage lnwfhh_rest if educ!=. & female!=. & married!=. & age!=. & age2!=. & exp!=. & exp2!=. & exp3!=. & exp4!=. & migrant!=. & plantsize!=. & industry!=. eststo: quietly regress lnhwage lnwfhh_rest educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize if industry!=. eststo: quietly regress lnhwage lnwfhh_rest educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry eststo: quietly regress lnhwage lnwfhh_rest educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region eststo: quietly areg lnhwage lnwfhh_rest educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region, absorb(kldb2010_3d) eststo: quietly areg lnhwage lnwfhh_rest educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact*, absorb(kldb2010_3d) eststo: quietly areg lnhwage lnwfhh_rest educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp, absorb(kldb2010_3d) esttab , keep (lnwfhh_rest) star(* 0.1 ** 0.05 *** 0.01) se r2 *** ROBUTSTNESS FOR PARTTIME *** *** TABLE A.8: Working from home and wage income (only full-time workers) *** use "$ikdir\Data\working_data.dta", clear drop if parttime==1 eststo clear eststo: quietly regress lnhwage wfh if educ!=. & female!=. & married!=. & age!=. & age2!=. & exp!=. & exp2!=. & exp3!=. & exp4!=. & migrant!=. & plantsize!=. & industry!=. eststo: quietly regress lnhwage wfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize if industry!=. eststo: quietly regress lnhwage wfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry eststo: quietly regress lnhwage wfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region eststo: quietly areg lnhwage wfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region , absorb(kldb2010_3d) eststo: quietly areg lnhwage wfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* , absorb(kldb2010_3d) eststo: quietly areg lnhwage wfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp, absorb(kldb2010_3d) esttab , keep (wfh) star(* 0.1 ** 0.05 *** 0.01) se r2 gen lnwfhh = log(wfhh) label var lnwfhh "Log Hours in home-office" eststo clear eststo: quietly regress lnhwage lnwfhh if educ!=. & female!=. & married!=. & age!=. & age2!=. & exp!=. & exp2!=. & exp3!=. & exp4!=. & migrant!=. & plantsize!=. & industry!=. eststo: quietly regress lnhwage lnwfhh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize if industry!=. eststo: quietly regress lnhwage lnwfhh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry eststo: quietly regress lnhwage lnwfhh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region eststo: quietly areg lnhwage lnwfhh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region, absorb(kldb2010_3d) eststo: quietly areg lnhwage lnwfhh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact*, absorb(kldb2010_3d) eststo: quietly areg lnhwage lnwfhh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp, absorb(kldb2010_3d) esttab , keep (lnwfhh) star(* 0.1 ** 0.05 *** 0.01) se r2 eststo clear eststo: quietly regress lnhwage nowfh if educ!=. & female!=. & married!=. & age!=. & age2!=. & exp!=. & exp2!=. & exp3!=. & exp4!=. & migrant!=. & plantsize!=. & industry!=. eststo: quietly regress lnhwage nowfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize if industry!=. eststo: quietly regress lnhwage nowfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry eststo: quietly regress lnhwage nowfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region eststo: quietly areg lnhwage nowfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region , absorb(kldb2010_3d) eststo: quietly areg lnhwage nowfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* , absorb(kldb2010_3d) eststo: quietly areg lnhwage nowfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp, absorb(kldb2010_3d) esttab , keep (nowfh) star(* 0.1 ** 0.05 *** 0.01) se r2 *** Quantile Regressions *** TABLE A.9: Working from home and wage income (quantile regressions) *** use "$ikdir\Data\working_data.dta", clear tab kldb2010_3d, gen(d_kldb2010) eststo clear eststo: qreg lnhwage nowfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp d_kldb2010*, q(0.1) eststo: qreg lnhwage nowfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp d_kldb2010*, q(0.2) eststo: qreg lnhwage nowfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp d_kldb2010*, q(0.3) eststo: qreg lnhwage nowfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp d_kldb2010*, q(0.4) eststo: qreg lnhwage nowfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp d_kldb2010*, q(0.5) eststo: qreg lnhwage nowfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp d_kldb2010*, q(0.6) eststo: qreg lnhwage nowfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp d_kldb2010*, q(0.7) eststo: qreg lnhwage nowfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp d_kldb2010*, q(0.8) eststo: qreg lnhwage nowfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp d_kldb2010*, q(0.9) eststo: reg lnhwage nowfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp d_kldb2010* esttab , keep (nowfh) star(* 0.1 ** 0.05 *** 0.01) se r2 pr2 ar2 use "$ikdir\Data\working_data.dta", clear tab kldb2010_3d, gen(d_kldb2010) eststo clear eststo: qreg lnhwage wfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp d_kldb2010*, q(0.1) eststo: qreg lnhwage wfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp d_kldb2010*, q(0.2) eststo: qreg lnhwage wfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp d_kldb2010*, q(0.3) eststo: qreg lnhwage wfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp d_kldb2010*, q(0.4) eststo: qreg lnhwage wfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp d_kldb2010*, q(0.5) eststo: qreg lnhwage wfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp d_kldb2010*, q(0.6) eststo: qreg lnhwage wfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp d_kldb2010*, q(0.7) eststo: qreg lnhwage wfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp d_kldb2010*, q(0.8) eststo: qreg lnhwage wfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp d_kldb2010*, q(0.9) eststo: reg lnhwage wfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry i.region indact* indskill* indcodi indrout indcomp d_kldb2010* esttab , keep (wfh) star(* 0.1 ** 0.05 *** 0.01) se r2 pr2 ar2 ********************************** *** STEP 5: REGIONAL ANALYSIS **** ********************************** use "$ikdir\Data\working_data.dta", clear quietly areg lnhwage wfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry indact* indskill* indcodi indrout indcomp, absorb(kldb2010_3d) predict reswage, res gen wfh_No=wfh gen nowfh_No=nowfh collapse lnhwage reswage wfh nowfh (count) wfh_No nowfh_No [aweight=gew2018_hr17], by(region) replace nowfh = nowfh*(1-wfh) label define nutslab 10 "DEF0" 20 "DE60" 31 " DE91 " 32 " DE92 " 33 " DE93 " /// 34 " DE94 " 40 " DE50 " 51 " DEA1 " 53 " DEA2 " 55 " DEA3 " /// 57 " DEA4 " 59 " DEA5 " 64 " DE71 " 65 " DE72 " 66 " DE73 " /// 71 " DEB1 " 72 " DEB2 " 73 " DEB3 " 81 " DE11 " 82 " DE12 " /// 83 " DE13 " 84 " DE14 " 91 " DE21 " 92 " DE22 " 93 " DE23 " /// 94 " DE24 " 95 " DE25 " 96 " DE26 " 97 " DE27 " 100 " DEC0 " /// 110 " DE30 " 120 " DE40 " 130 " DE80 " 141 " DED4 " 142 " DED2 " /// 143 " DED5 " 150 " DEE0 " 160 " DEG0 " label val region nutslab *** FIGURE 5: Working from home and wages in Germany *** *** Fig: Wages/Residual Wages and home office twoway (lfit lnhwage wfh) (scatter lnhwage wfh, msymbol(d) mfcolor(black) graphregion(color(white)) mlabel(region) mlabposition(12) mlabsize(vsmall) ytitle("Average log hourly wage", size(medlarge)) xtitle("Share of respondents WFH", size(medlarge)) legend(off)) twoway (lfit reswage wfh) (scatter reswage wfh, msymbol(d) mfcolor(black) graphregion(color(white)) mlabel(region) mlabposition(12) mlabsize(vsmall) ytitle("Average residual log hourly wage", size(medlarge)) xtitle("Share of respondents WFH", size(medlarge)) legend(off)) *** Fig: Wages/Residual Wages and no-home office twoway (lfit lnhwage nowfh) (scatter lnhwage nowfh, msymbol(d) mfcolor(black) graphregion(color(white)) mlabel(region) mlabposition(12) mlabsize(vsmall) ytitle("Average log hourly wage", size(medlarge)) xtitle("Share of respondents No-WFH", size(medlarge)) legend(off)) twoway (lfit reswage nowfh) (scatter reswage nowfh, msymbol(d) mfcolor(black) graphregion(color(white)) mlabel(region) mlabposition(12) mlabsize(vsmall) ytitle("Average residual log hourly wage", size(medlarge)) xtitle("Share of respondents No-WFH", size(medlarge)) legend(off)) *** TABLE A.11: Summary statistics for NUTS2 regions in Germany *** *** used to generate FIGURE 4: Working from home in Germany *** replace wfh = round(wfh, 0.01) replace nowfh = round(nowfh, 0.01) replace lnhwage = round(lnhwage, 0.01) replace reswage = round(reswage, 0.01) replace wfh_No = round(wfh_No, 0.01) replace nowfh_No = round(nowfh_No, 0.01) format wfh %04.2f format nowfh %04.2f format lnhwage %04.2f format reswage %04.2f format wfh_No %9.0f format nowfh_No %9.0f gen name= region label def namelab 10 "Schleswig-Holstein" 20 "Hamburg" 31 "Statistical region Brunswick" 32 "Statistical region Hanover" 33 "Statistical region Lueneburg" 34 "Statistical region Weser-Ems" /// 40 "Bremen" 51 "Duesseldorf" 53 "Cologne" 55 "Muenster" 57 "Detmold" 59 "Arnsberg" 64 "Darmstadt" 65 "Giessen" 66 "Kassel" 71 "Statistical region Koblenz" 72 "Statistical region Trier" /// 73 "Statistical region Rhine-Hesse-Palatinate" 81 "Stuttgart" 82 "Karlsruhe" 83 "Freiburg" 84 "Tuebingen" 91 "Upper Bavaria" 92 "Lower Bavaria" 93 "Upper Palatinate" 94 "Upper Franconia" /// 95 "Middle Franconia" 96 "Lower Franconia" 97 "Swabia" 100 "Saarland" 110 "Berlin" 120 "Barndenburg" 121 "Statistical region Brandenburg Northeast" 122 "Statistical region Brandenburg Southwest" /// 130 "Mecklenburg-Western Pomerania" 141 "Directorate region Chemnitz" 142 "Directorate region Dresden" 143 "Directorate region Leipzig" 150 "Saxony-Anhalt" 160 "Thuringia" label val name namelab order region name wfh nowfh lnhwage reswage wfh_No nowfh_No **************** ***** BULA ***** **************** use "$ikdir\Data\working_data.dta", clear quietly areg lnhwage wfh educ female married age age2 exp exp2 exp3 exp4 migrant i.plantsize i.industry indact* indskill* indcodi indrout indcomp, absorb(kldb2010_3d) predict reswage, res collapse lnhwage reswage wfh nowfh [aweight=gew2018_hr17], by(Bula) replace nowfh = nowfh*(1-wfh) label define buland 1 "Schleswig-Holstein" 2 "Hamburg" 3 "Lower Saxony" 4 "Bremen" /// 5 "North Rhine-Westphalia" 6 "Hesse" 7 "Rhineland-Palatinate" 8 "Baden-Wuerttemberg" /// 9 "Bavaria" 10 "Saarland" 11 "Berlin" 12 "Brandenburg" 13 "Mecklenburg-Western Pomerania" /// 14 "Saxony" 15 "Saxony-Anhalt" 16 "Thuringia" label val Bula buland *** FIGURE A.8: Working from home and wages across federal states in Germany *** *** Fig: Wages/Residual Wages and home office twoway (lfit lnhwage wfh) (scatter lnhwage wfh, msymbol(d) mfcolor(black) graphregion(color(white)) mlabel(Bula) mlabposition(12) mlabsize(vsmall) ytitle("Average log hourly wage", size(medlarge)) xtitle("Share of respondents WFH", size(medlarge)) legend(off)) twoway (lfit reswage wfh) (scatter reswage wfh, msymbol(d) mfcolor(black) graphregion(color(white)) mlabel(Bula) mlabposition(12) mlabsize(vsmall) ytitle("Average residual log hourly wage", size(medlarge)) xtitle("Share of respondents WFH", size(medlarge)) legend(off)) *** Fig: Wages/Residual Wages and no-home office twoway (lfit lnhwage nowfh) (scatter lnhwage nowfh, msymbol(d) mfcolor(black) graphregion(color(white)) mlabel(Bula) mlabposition(12) mlabsize(vsmall) ytitle("Average log hourly wage", size(medlarge)) xtitle("Share of respondents No-WFH", size(medlarge)) legend(off)) twoway (lfit reswage nowfh) (scatter reswage nowfh, msymbol(d) mfcolor(black) graphregion(color(white)) mlabel(Bula) mlabposition(12) mlabsize(vsmall) ytitle("Average residual log hourly wage", size(medlarge)) xtitle("Share of respondents No-WFH", size(medlarge)) legend(off)) **************************************** ****** WFH from FADINGER AND SCHIMYK *** **************************************** use "$ikdir\Data\working_data.dta", clear collapse lnhwage [aweight=gew2018_hr17], by(region) label define nutslab 10 "DEF0" 20 "DE60" 31 " DE91 " 32 " DE92 " 33 " DE93 " /// 34 " DE94 " 40 " DE50 " 51 " DEA1 " 53 " DEA2 " 55 " DEA3 " /// 57 " DEA4 " 59 " DEA5 " 64 " DE71 " 65 " DE72 " 66 " DE73 " /// 71 " DEB1 " 72 " DEB2 " 73 " DEB3 " 81 " DE11 " 82 " DE12 " /// 83 " DE13 " 84 " DE14 " 91 " DE21 " 92 " DE22 " 93 " DE23 " /// 94 " DE24 " 95 " DE25 " 96 " DE26 " 97 " DE27 " 100 " DEC0 " /// 110 " DE30 " 120 " DE40 " 130 " DE80 " 141 " DED4 " 142 " DED2 " /// 143 " DED5 " 150 " DEE0 " 160 " DEG0 " label val region nutslab replace region=120 if region==121 merge 1:1 region using "$ikdir\Data\wfh_sch.dta" *** FIGURE A.9: Working from home and wages in Germany (alternative WFH measure) *** *** Fig: Wages/Residual Wages and home office twoway (lfit lnhwage shr_homewk_pssb) (scatter lnhwage shr_homewk_pssb, msymbol(d) mfcolor(black) graphregion(color(white)) mlabel(region) mlabposition(12) mlabsize(vsmall) ytitle("Average log hourly wage", size(medlarge)) xtitle("Share of respondents WFH (alternative WFH)", size(medlarge)) legend(off)) ******************************* *** Spatial Autocorrelation *** ******************************* use "$ikdir\Data\working_data.dta", clear collapse wfh nowfh wfhh lnhwage [aweight=gew2018_hr17], by(region) label define nutslab 10 "DEF0" 20 "DE60" 31 " DE91 " 32 " DE92 " 33 " DE93 " /// 34 " DE94 " 40 " DE50 " 51 " DEA1 " 53 " DEA2 " 55 " DEA3 " /// 57 " DEA4 " 59 " DEA5 " 64 " DE71 " 65 " DE72 " 66 " DE73 " /// 71 " DEB1 " 72 " DEB2 " 73 " DEB3 " 81 " DE11 " 82 " DE12 " /// 83 " DE13 " 84 " DE14 " 91 " DE21 " 92 " DE22 " 93 " DE23 " /// 94 " DE24 " 95 " DE25 " 96 " DE26 " 97 " DE27 " 100 " DEC0 " /// 110 " DE30 " 120 " DE40 " 130 " DE80 " 141 " DED4 " 142 " DED2 " /// 143 " DED5 " 150 " DEE0 " 160 " DEG0 " label val region nutslab replace region=120 if region==121 merge 1:1 region using "$ikdir\Data\geo_data.dta" * Remark: One needs to install the package moransi in STATA first! ** moransi wfh, lon(longitude) lat(latitude) swm(pow 1) dist(.) dunit(km) moransi nowfh, lon(longitude) lat(latitude) swm(pow 1) dist(.) dunit(km) moransi lnhwage, lon(longitude) lat(latitude) swm(pow 1) dist(.) dunit(km) moransi wfh, lon(longitude) lat(latitude) swm(exp 0.03) dist(.) dunit(km) moransi nowfh, lon(longitude) lat(latitude) swm(exp 0.03) dist(.) dunit(km) moransi lnhwage, lon(longitude) lat(latitude) swm(exp 0.03) dist(.) dunit(km)