clear * cap log close set more off set mem 500m set matsize 2000 *cd "**FILL OUT YOUR DIRECTORY***" log using Step1robust.log, replace use MLBmaster.dta, replace egen helpmatchup=group(year teamid op_teamid) bysort game_id: egen helpmatchup2=min(helpmatchup) egen matchup=group(helpmatchup2) drop helpmatchup helpmatchup2 sum spellid op_spellid local maxspell=r(max) drop if lagtotalpay==. drop if op_lagtotalpay==. gen rundif=sc-op_sc sum *************************VARIABLE GENERATION**************************** *home advantage: gen op_home=1-home *log of wages: gen ltotalpay=log(totalpay) gen op_ltotalpay=log(op_totalpay) gen ltotalpayhome=ltotalpay*home gen op_ltotalpayhome=op_ltotalpay*op_home gen lpitcherpay=log(pitchersalary) gen op_lpitcherpay=log(op_pitchersalary) gen lpitcherpayhome=lpitcherpay*home gen op_lpitcherpayhome=op_lpitcherpay*op_home gen lagltotalpay=log(lagtotalpay) gen op_lagltotalpay=log(op_lagtotalpay) gen lstdevpay=log(stdevpay) gen op_lstdevpay=log(op_stdevpay) gen lstdevpayhome=lstdevpay*home gen op_lstdevpayhome=op_lstdevpay*op_home gen laglstdevpay=log(lagstdevpay) gen op_laglstdevpay=log(op_lagstdevpay) *log of market and game characteristics gen lpop=log(cmsapop) gen op_lpop=log(op_cmsapop) gen lteamscmsa=1 if teamscmsa==2 gen op_lteamscmsa=1 if op_teamscmsa==2 replace lteamscmsa=0 if lteamscmsa==. replace op_lteamscmsa=0 if op_lteamscmsa==. gen lstadcap=log(stadcap) gen op_lstadcap=log(op_stadcap) gen lattendance=log(attendance) gen latthome=lattendance*home gen op_latthome=lattendance*op_home gen lstadage=log(stadage) gen op_lstadage=log(op_stadage) gen lstadagehome=lstadage*home gen op_lstadagehome=op_lstadage*op_home gen lmarketten=log(marketten) gen op_lmarketten=log(op_marketten) gen lhomevalue=log(homevalue) gen op_lhomevalue=log(op_homevalue) gen lhomevaluehome=lhomevalue*home gen op_lhomevaluehome=op_lhomevalue*op_home *allow different wage effect in play off: gen ltotalpayplayoff=ltotalpay*playoff gen op_ltotalpayplayoff=op_ltotalpay*playoff gen homeplayoff=home*playoff gen op_homeplayoff=op_home*playoff gen lpitcherpayplayoff=lpitcherpay*playoff gen op_lpitcherpayplayoff=op_lpitcherpay*playoff *allow different wage effect in derby games: gen derby=(cmsapop==op_cmsapop) gen ltotalpayderby=ltotalpay*derby gen op_ltotalpayderby=op_ltotalpay*derby gen homederby=home*derby gen op_homederby=op_home*derby gen lpitcherpayderby=lpitcherpay*derby gen op_lpitcherpayderby=op_lpitcherpay*derby *make a league indicator egen leagueid=group(league) egen op_leagueid=group(op_league) *********GM and COACH CHARACTERISTICS replace gmdob=1 if gmdob==. replace op_gmdob=1 if op_gmdob==. replace gmmob=1 if gmmob==. replace op_gmmob=1 if op_gmmob==. gen gmbirthdate=mdy(gmmob,gmdob,gmyob) gen op_gmbirthdate=mdy(op_gmmob,op_gmdob,op_gmyob) gen gmage=date-gmbirthdate gen op_gmage=date-op_gmbirthdate gen gmlage=log(gmage) gen op_gmlage=log(op_gmage) gen gmagesq=gmage^2 gen op_gmagesq=op_gmage^2 gen gmlagesq=log(gmage)^2 gen op_gmlagesq=log(op_gmage)^2 *exp gm: gen gmcareerstartmonth=1 gen op_gmcareerstartmonth=1 gen gmcareerstartday=1 gen op_gmcareerstartday=1 gen gmcareerstartdate=mdy(gmcareerstartmonth,gmcareerstartday,gmstartfrontoffyear) gen op_gmcareerstartdate=mdy(op_gmcareerstartmonth,op_gmcareerstartday,op_gmstartfrontoffyear) gen gmexp=date-gmcareerstartdate+1 gen op_gmexp=date-op_gmcareerstartdate+1 gen gmlexp=log(gmexp) gen op_gmlexp=log(op_gmexp) gen gmexpsq=gmexp^2 gen op_gmexpsq=op_gmexp^2 gen gmlexpsq=log(gmexp)^2 gen op_gmlexpsq=log(op_gmexp)^2 *age coach gen coachbirthdate=mdy(coachmob,coachdob,coachyob) gen op_coachbirthdate=mdy(op_coachmob,op_coachdob,op_coachyob) gen coachage=date-coachbirthdate gen op_coachage=date-op_coachbirthdate gen coachlage=log(coachage) gen op_coachlage=log(op_coachage) gen coachagesq=coachage^2 gen op_coachagesq=op_coachage^2 gen coachlagesq=log(coachage)^2 gen op_coachlagesq=log(op_coachage)^2 *exp coach gen coachcareerstartdate=mdy(coachcareerstartmonth,coachcareerstartday,coachcareerstartyear) gen op_coachcareerstartdate=mdy(op_coachcareerstartmonth,op_coachcareerstartday,op_coachcareerstartyear) gen coachexp=date-coachcareerstartdate+1 gen op_coachexp=date-op_coachcareerstartdate+1 gen coachlexp=log(coachexp) gen op_coachlexp=log(op_coachexp) gen coachexpsq=coachexp^2 gen op_coachexpsq=op_coachexp^2 gen coachlexpsq=log(coachexp)^2 gen op_coachlexpsq=log(op_coachexp)^2 ***Tenure measures for the analysis pre-move vs post-move sort spellid date doubleorder gen tenure=1 if spellid[_n]!=spellid[_n-1] replace tenure=tenure[_n-1]+1 if tenure==. sort op_spellid date doubleorder gen op_tenure=1 if op_spellid[_n]!=op_spellid[_n-1] replace op_tenure=op_tenure[_n-1]+1 if op_tenure==. bysort spellid: egen maxtenure=max(tenure) bysort op_spellid: egen op_maxtenure=max(op_tenure) gen ltenure=log(tenure) gen op_ltenure=log(op_tenure) gen ltenuresq=log(tenure)^2 gen op_ltenuresq=log(op_tenure)^2 gen ltenuretrip=log(tenure)^3 gen op_ltenuretrip=log(op_tenure)^3 sum ltenure* op_ltenure* tenure op_tenure ltenuretrip op_ltenuretrip gen checker=tenure-op_tenure bysort game_id: egen check=total(checker) sum check *******FOR IDENTIFICATION OF THE FIXED EFFECTS WE ONLY WANT THE GUYS THAT MOVED AND THEIR COWORKERS *identify teams with movers in both categories felsdvreg rundif home ltotalpay op_ltotalpay lpitcherpay op_lpitcherpay lstdevpay op_lstdevpay lstadcap op_lstadcap lstadage op_lstadage, i(gmid) j(teamid) /// peff(pereff) feff(firmeff) xb(xb) res(res) mover(gmmover) group(teamgmgrp) mnum(nmoversperfirm) pobs(obsperperson) grouponly felsdvreg rundif home ltotalpay op_ltotalpay lpitcherpay op_lpitcherpay lstdevpay op_lstdevpay lstadcap op_lstadcap lstadage op_lstadage, i(coachid) j(teamid) /// peff(pereff) feff(firmeff) xb(xb) res(res) mover(coachmover) group(teamcoachgrp) mnum(nmoversperfirm) pobs(obsperperson) grouponly felsdvreg rundif home ltotalpay op_ltotalpay lpitcherpay op_lpitcherpay lstdevpay op_lstdevpay lstadcap op_lstadcap lstadage op_lstadage, i(op_gmid) j(op_teamid) /// peff(pereff) feff(firmeff) xb(xb) res(res) mover(op_gmmover) group(op_teamgmgrp) mnum(nmoversperfirm) pobs(obsperperson) grouponly felsdvreg rundif home ltotalpay op_ltotalpay lpitcherpay op_lpitcherpay lstdevpay op_lstdevpay lstadcap op_lstadcap lstadage op_lstadage, i(op_coachid) j(op_teamid) /// peff(pereff) feff(firmeff) xb(xb) res(res) mover(op_coachmover) group(op_teamcoachgrp) mnum(nmoversperfirm) pobs(obsperperson) grouponly table team, c(mean teamcoachgrp mean teamgmgrp mean teamid) ********FOR THE DECOMPOSITION AVOID GM COACHES WHO ARE ONLY PAIRED WITH EACH OTHER *To identify coaches and gms separately, we need each coach/gm to have been paired with at least one gm/coach who has been paired with another coach/gm. *This is for example a problem for Fred Claire, Tommy Podesda and Bill Russell, as Fred Claire has not been paired with any coach who was paired with another gm. *We obviously also need to avoid exact gm-coach pairings, but this is implied by the above felsdvreg rundif home ltotalpay op_ltotalpay lpitcherpay op_lpitcherpay lstdevpay op_lstdevpay lstadcap op_lstadcap lstadage op_lstadage, i(gmid) j(coachid) /// peff(pereff) feff(firmeff) xb(xb) res(res) mover(gmcoachmover) group(coachgmgrp) mnum(nmoversperfirm) pobs(obsperperson) grouponly felsdvreg rundif home ltotalpay op_ltotalpay lpitcherpay op_lpitcherpay lstdevpay op_lstdevpay lstadcap op_lstadcap lstadage op_lstadage, i(coachid) j(gmid) /// peff(pereff) feff(firmeff) xb(xb) res(res) mover(coachgmmover) group(gmcoachgrp) mnum(nmoversperfirm) pobs(obsperperson) grouponly felsdvreg rundif home ltotalpay op_ltotalpay lpitcherpay op_lpitcherpay lstdevpay op_lstdevpay lstadcap op_lstadcap lstadage op_lstadage, i(op_gmid) j(op_coachid) /// peff(pereff) feff(firmeff) xb(xb) res(res) mover(op_gmcoachmover) group(op_coachgmgrp) mnum(nmoversperfirm) pobs(obsperperson) grouponly felsdvreg rundif home ltotalpay op_ltotalpay lpitcherpay op_lpitcherpay lstdevpay op_lstdevpay lstadcap op_lstadcap lstadage op_lstadage, i(op_coachid) j(op_gmid) /// peff(pereff) feff(firmeff) xb(xb) res(res) mover(op_coachgmmover) group(op_gmcoachgrp) mnum(nmoversperfirm) pobs(obsperperson) grouponly gen gmidentified = (gmcoachgrp>0) gen coachidentified = (coachgmgrp>0) gen op_gmidentified = (op_gmcoachgrp>0) gen op_coachidentified = (op_coachgmgrp>0) bysort gmid: egen gmobs=count(gmid) bysort coachid: egen coachobs=count(coachid) bysort teamid: egen teamobs=count(teamid) table gmname, c(mean gmmover mean gmidentified mean gmcoachmover mean gmobs mean gmid) table coachname, c(mean coachmover mean coachidentified mean coachgmmover mean coachobs mean coachid) *Drop the observations with unidentified pairs of coach/gms and those of non-mover teams drop if gmcoachgrp==0 drop if op_gmcoachgrp==0 drop if coachgmgrp==0 drop if op_coachgmgrp==0 drop if teamcoachgrp==0 drop if op_teamcoachgrp==0 drop if teamgmgrp==0 drop if op_teamgmgrp==0 *Count the observations: bysort coachid: egen coachdecompobs=count(coachid) bysort op_coachid: egen op_coachdecompobs=count(op_coachid) bysort gmid: egen gmdecompobs=count(gmid) bysort op_gmid: egen op_gmdecompobs=count(op_gmid) bysort teamid: egen teamdecompobs=count(teamid) bysort spellid: egen spelldecompobs=count(spellid) *Put short career guys in the reference category gen coachcaretakerid=coachid+1 replace coachcaretakerid=1 if coachdecompobs<130 gen op_coachcaretakerid=op_coachid+1 replace op_coachcaretakerid=1 if op_coachdecompobs<130 replace gmcaretakerid=1 if gmdecompobs<260 replace op_gmcaretakerid=1 if op_gmdecompobs<260 *Redo the ids egen gmiddecomp=group(gmcaretakerid) egen op_gmiddecomp=group(op_gmcaretakerid) egen coachiddecomp=group(coachcaretakerid) egen op_coachiddecomp=group(op_coachcaretakerid) egen spelliddecomp=group(spellid) egen op_spelliddecomp=group(op_spellid) egen gameiddecomp=group(game_id) egen teamiddecomp=group(teamgmgrp teamid) egen op_teamiddecomp=group(op_teamgmgrp op_teamid) sum op_spelliddecomp sum spelliddecomp local numbspelldecomp=r(max) sum op_coachiddecomp sum coachiddecomp local maxcoach=r(max) sum op_gmiddecomp sum gmiddecomp local maxgm=r(max) sum op_teamiddecomp sum teamiddecomp local maxteam=r(max) local maxnetwork=r(max)-3 sum *grp ************************************************************************************************************* **********************ADRESS ENDOGENEITY OF EFFORT TO MOVING AS IN JACKSON (2013)**************************** ************************************************************************************************************* ***********COACHES************* **This analysis requires a before-after move subsample preserve bysort spellid: egen spellstart=min(date) egen coachspellid=group(coachid spellstart) bysort coachid: egen mincoachspellid=min(coachspellid) bysort coachid: egen maxcoachspellid=max(coachspellid) gen spellnumber=coachspellid-mincoachspellid+1 keep if maxtenure>160 keep if mincoachspellid!=maxcoachspellid sort coachspellid date gen hfirstspell = (coachspellid[_n+1]==coachspellid[_n]+1 & coachid[_n+1]==coachid[_n]) gen hsecondspell = (coachspellid[_n+1]==coachspellid[_n]+1 & coachid[_n+1]==coachid[_n]) bysort coachspellid: egen firstspell=max(hfirstspell) bysort coachspellid: egen secondspell=max(hsecondspell) keep if secondspell+firstspell>0 **Consider the periods around the move gen prequart1 = (maxtenure-tenure<40) gen prequart2 = (maxtenure-tenure<80 & prequart1==0) gen prequart3 = (maxtenure-tenure<120 & prequart2==0 & prequart1==0) gen prequart4 = (maxtenure-tenure<160 & prequart3==0 & prequart2==0 & prequart1==0) *gen prequart5 = (maxtenure-tenure<200 & prequart4==0 & prequart3==0 & prequart2==0 & prequart1==0) *gen prequart6 = (maxtenure-tenure<240 & prequart5==0 & prequart4==0 & prequart3==0 & prequart2==0 & prequart1==0) *gen prequart7 = (maxtenure-tenure<280 & prequart6==0 & prequart5==0 & prequart4==0 & prequart3==0 & prequart2==0 & prequart1==0) *gen prequart8 = (maxtenure-tenure<320 & prequart7==0 & prequart6==0 & prequart5==0 & prequart4==0 & prequart3==0 & prequart2==0 & prequart1==0) gen postquart1 = (tenure<40) gen postquart2 = (tenure<80 & postquart1==0) gen postquart3 = (tenure<120 & postquart2==0 & postquart1==0) gen postquart4 = (tenure<160 & postquart3==0 & postquart2==0 & postquart1==0) *gen postquart5 = (tenure<200 & postquart4==0 & postquart3==0 & postquart2==0 & postquart1==0) *gen postquart6 = (tenure<240 & postquart5==0 & postquart4==0 & postquart3==0 & postquart2==0 & postquart1==0) *gen postquart7 = (tenure<280 & postquart6==0 & postquart5==0 & postquart4==0 & postquart3==0 & postquart2==0 & postquart1==0) *gen postquart8 = (tenure<320 & postquart7==0 & postquart6==0 & postquart5==0 & postquart4==0 & postquart3==0 & postquart2==0 & postquart1==0) egen dropper1=rowtotal(prequart*) egen dropper2=rowtotal(postquart*) gen dropper=dropper1+dropper2 keep if dropper>0 sum tenure op_tenure maxtenure prequart* postquart* reg res postquart1-postquart4 prequart2-prequart4 /// home ltotalpay op_ltotalpay lpitcherpay op_lpitcherpay lstdevpay op_lstdevpay lhomevalue op_lhomevalue lstadage op_lstadage i.coachiddecomp, vce(cluster matchup) outreg2 using endogmodel, excel replace keep(postquart* prequart*) slow(750) dec(3) addtext(Coach FE, Yes, Team FE, No) testparm postquart* testparm prequart* reg rundif postquart1-postquart4 prequart2-prequart4 /// home ltotalpay op_ltotalpay lpitcherpay op_lpitcherpay lstdevpay op_lstdevpay lhomevalue op_lhomevalue lstadage op_lstadage i.coachiddecomp, vce(cluster matchup) outreg2 using endogmodel, excel append keep(postquart* prequart*) slow(750) dec(3) addtext(Coach FE, Yes, Team FE, No) testparm postquart* testparm prequart* reg res postquart1-postquart4 prequart2-prequart4 /// home ltotalpay op_ltotalpay lpitcherpay op_lpitcherpay lstdevpay op_lstdevpay lhomevalue op_lhomevalue lstadage op_lstadage i.coachiddecomp i.teamiddecomp i.op_teamiddecomp, vce(cluster matchup) outreg2 using endogmodel, excel append keep(postquart* prequart*) slow(750) dec(3) addtext(Coach FE, Yes, Team FE, Yes) testparm postquart* testparm prequart* reg rundif postquart1-postquart4 prequart2-prequart4 /// home ltotalpay op_ltotalpay lpitcherpay op_lpitcherpay lstdevpay op_lstdevpay lhomevalue op_lhomevalue lstadage op_lstadage i.coachiddecomp i.teamiddecomp i.op_teamiddecomp, vce(cluster matchup) outreg2 using endogmodel, excel append keep(postquart* prequart*) slow(750) dec(3) addtext(Coach FE, Yes, Team FE, Yes) testparm postquart* testparm prequart* restore ***********GMS************* **This analysis requires a before-after move subsample preserve bysort spellid: egen spellstart=min(date) egen gmspellid=group(gmid spellstart) bysort gmid: egen mingmspellid=min(gmspellid) bysort gmid: egen maxgmspellid=max(gmspellid) gen spellnumber=gmspellid-mingmspellid+1 keep if maxtenure>160 keep if mingmspellid!=maxgmspellid sort gmspellid date gen hfirstspell = (gmspellid[_n+1]==gmspellid[_n]+1 & gmid[_n+1]==gmid[_n]) gen hsecondspell = (gmspellid[_n+1]==gmspellid[_n]+1 & gmid[_n+1]==gmid[_n]) bysort gmspellid: egen firstspell=max(hfirstspell) bysort gmspellid: egen secondspell=max(hsecondspell) keep if secondspell+firstspell>0 **Consider the periods around the move gen prequart1 = (maxtenure-tenure<40) gen prequart2 = (maxtenure-tenure<80 & prequart1==0) gen prequart3 = (maxtenure-tenure<120 & prequart2==0 & prequart1==0) gen prequart4 = (maxtenure-tenure<160 & prequart3==0 & prequart2==0 & prequart1==0) *gen prequart5 = (maxtenure-tenure<200 & prequart4==0 & prequart3==0 & prequart2==0 & prequart1==0) *gen prequart6 = (maxtenure-tenure<240 & prequart5==0 & prequart4==0 & prequart3==0 & prequart2==0 & prequart1==0) *gen prequart7 = (maxtenure-tenure<280 & prequart6==0 & prequart5==0 & prequart4==0 & prequart3==0 & prequart2==0 & prequart1==0) *gen prequart8 = (maxtenure-tenure<320 & prequart7==0 & prequart6==0 & prequart5==0 & prequart4==0 & prequart3==0 & prequart2==0 & prequart1==0) gen postquart1 = (tenure<40) gen postquart2 = (tenure<80 & postquart1==0) gen postquart3 = (tenure<120 & postquart2==0 & postquart1==0) gen postquart4 = (tenure<160 & postquart3==0 & postquart2==0 & postquart1==0) *gen postquart5 = (tenure<200 & postquart4==0 & postquart3==0 & postquart2==0 & postquart1==0) *gen postquart6 = (tenure<240 & postquart5==0 & postquart4==0 & postquart3==0 & postquart2==0 & postquart1==0) *gen postquart7 = (tenure<280 & postquart6==0 & postquart5==0 & postquart4==0 & postquart3==0 & postquart2==0 & postquart1==0) *gen postquart8 = (tenure<320 & postquart7==0 & postquart6==0 & postquart5==0 & postquart4==0 & postquart3==0 & postquart2==0 & postquart1==0) egen dropper1=rowtotal(prequart*) egen dropper2=rowtotal(postquart*) gen dropper=dropper1+dropper2 keep if dropper>0 sum tenure op_tenure maxtenure prequart* postquart* reg res postquart1-postquart4 prequart2-prequart4 /// home ltotalpay op_ltotalpay lpitcherpay op_lpitcherpay lstdevpay op_lstdevpay lhomevalue op_lhomevalue lstadage op_lstadage i.gmiddecomp, vce(cluster matchup) outreg2 using endogmodel, excel append keep(postquart* prequart*) slow(750) dec(3) addtext(GM FE, Yes, Team FE, No) testparm postquart* testparm prequart* reg rundif postquart1-postquart4 prequart2-prequart4 /// home ltotalpay op_ltotalpay lpitcherpay op_lpitcherpay lstdevpay op_lstdevpay lhomevalue op_lhomevalue lstadage op_lstadage i.gmiddecomp, vce(cluster matchup) outreg2 using endogmodel, excel append keep(postquart* prequart*) slow(750) dec(3) addtext(GM FE, Yes, Team FE, No) testparm postquart* testparm prequart* reg res postquart1-postquart4 prequart2-prequart4 /// home ltotalpay op_ltotalpay lpitcherpay op_lpitcherpay lstdevpay op_lstdevpay lhomevalue op_lhomevalue lstadage op_lstadage i.gmiddecomp i.teamiddecomp i.op_teamiddecomp, vce(cluster matchup) outreg2 using endogmodel, excel append keep(postquart* prequart*) slow(750) dec(3) addtext(GM FE, Yes, Team FE, Yes) testparm postquart* testparm prequart* reg rundif postquart1-postquart4 prequart2-prequart4 /// home ltotalpay op_ltotalpay lpitcherpay op_lpitcherpay lstdevpay op_lstdevpay lhomevalue op_lhomevalue lstadage op_lstadage i.gmiddecomp i.teamiddecomp i.op_teamiddecomp, vce(cluster matchup) outreg2 using endogmodel, excel append keep(postquart* prequart*) slow(750) dec(3) addtext(GM FE, Yes, Team FE, Yes) testparm postquart* testparm prequart* restore ******************************************************************************************************************************************** ***********************THE SPELL FIXED EFFECTS REGRESSIONS FOR VARIOUS ALTERNATIVE ASSUMPTIONS ON THE 1ST STAGE***************************** ******************************************************************************************************************************************** *****************************************************SUMMARY STATS******************************************************************* sum year rundif res sc op_sc totalpay stdevpay pitchersalary homevalue tenure stadage stadcap marketten teamscmsa cmsapop leagueid /// op_totalpay op_stdevpay op_pitchersalary op_homevalue op_tenure op_stadage op_stadcap op_marketten op_teamscmsa op_cmsapop op_leagueid sum tenure ltenure ltenuresq gmexp coachexp op_tenure op_ltenure op_ltenuresq op_gmexp op_coachexp tab league leagueid ****FIRST STAGE reg ltotalpay lagltotalpay lhomevalue lpop lteamscmsa lmarketten lstadcap lstadage i.leagueid year predict payhat reg op_ltotalpay op_lagltotalpay op_lhomevalue op_lpop op_lteamscmsa op_lmarketten op_lstadcap op_lstadage i.op_leagueid year predict op_payhat reg lstdevpay laglstdevpay lhomevalue lpop lteamscmsa lmarketten lstadcap lstadage i.leagueid year predict stdevpayhat reg op_lstdevpay op_laglstdevpay op_lhomevalue op_lpop op_lteamscmsa op_lmarketten op_lstadcap op_lstadage i.op_leagueid year predict op_stdevpayhat *************************************BASELINE****************************************** ***No IV **res reg res home ltotalpay op_ltotalpay lpitcherpay op_lpitcherpay lstdevpay op_lstdevpay lhomevalue op_lhomevalue lstadage op_lstadage /// i.spelliddecomp i.op_spelliddecomp, vce(cluster matchup) outreg2 using resrobustmodel, excel replace keep(home ltotalpay lpitcherpay lstdevpay lhomevalue lstadage) slow(750) dec(3) predict double resid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen spellfe=. gen op_spellfe=. forvalues o=1/`numbspelldecomp'{ replace spellfe=_b[`o'.spelliddecomp] if spelliddecomp==`o' replace op_spellfe=_b[`o'.op_spelliddecomp] if op_spelliddecomp==`o' } } gen resy=spellfe+op_spellfe+resid drop resid **runs reg rundif home ltotalpay op_ltotalpay lpitcherpay op_lpitcherpay lstdevpay op_lstdevpay lhomevalue op_lhomevalue lstadage op_lstadage i.spelliddecomp i.op_spelliddecomp, vce(cluster matchup) outreg2 using runrobustmodel, excel replace keep(home ltotalpay lpitcherpay lstdevpay lhomevalue lstadage) slow(750) dec(3) predict double runresid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen runspellfe=. gen op_runspellfe=. forvalues o=1/`numbspelldecomp'{ replace runspellfe=_b[`o'.spelliddecomp] if spelliddecomp==`o' replace op_runspellfe=_b[`o'.op_spelliddecomp] if op_spelliddecomp==`o' } } gen runy=runspellfe+op_runspellfe+runresid drop runresid ***IV **res reg res home payhat op_payhat lpitcherpay op_lpitcherpay stdevpayhat op_stdevpayhat lhomevalue op_lhomevalue lstadage op_lstadage i.spelliddecomp i.op_spelliddecomp, vce(cluster matchup) predict double ivresid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen ivspellfe=. gen op_ivspellfe=. forvalues o=1/`numbspelldecomp'{ replace ivspellfe=_b[`o'.spelliddecomp] if spelliddecomp==`o' replace op_ivspellfe=_b[`o'.op_spelliddecomp] if op_spelliddecomp==`o' } } gen resivy=ivspellfe+op_ivspellfe+ivresid drop ivresid *Correct the s.e. quietly{ rename payhat payhatold rename op_payhat op_payhatold rename stdevpayhat stdevpayhatold rename op_stdevpayhat op_stdevpayhatold gen payhat=ltotalpay gen op_payhat=op_ltotalpay gen stdevpayhat=lstdevpay gen op_stdevpayhat=op_lstdevpay predict double corresid, residuals replace payhat=payhatold replace op_payhat=op_payhatold replace stdevpayhat=stdevpayhatold replace op_stdevpayhat=op_stdevpayhatold replace corresid=corresid^2 summarize corresid scalar realmse = r(mean)*r(N)/e(df_r) matrix bmatrix = e(b) matrix Vmatrix = e(V)*realmse/e(rmse)^2 drop payhatold op_payhatold stdevpayhatold op_stdevpayhatold corresid } ereturn post bmatrix Vmatrix, noclear ereturn display outreg2 using resrobustmodel, excel append keep(home payhat stdevpayhat lpitcherpay lhomevalue lstadage) slow(750) dec(3) **runs reg rundif home payhat op_payhat lpitcherpay op_lpitcherpay stdevpayhat op_stdevpayhat lhomevalue op_lhomevalue lstadage op_lstadage i.spelliddecomp i.op_spelliddecomp, vce(cluster matchup) predict runivresid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen runivspellfe=. gen op_runivspellfe=. forvalues o=1/`numbspelldecomp'{ replace runivspellfe=_b[`o'.spelliddecomp] if spelliddecomp==`o' replace op_runivspellfe=_b[`o'.op_spelliddecomp] if op_spelliddecomp==`o' } } gen runivy=runivspellfe+op_runivspellfe+runivresid drop runivresid *Correct the s.e. quietly{ rename payhat payhatold rename op_payhat op_payhatold rename stdevpayhat stdevpayhatold rename op_stdevpayhat op_stdevpayhatold gen payhat=ltotalpay gen op_payhat=op_ltotalpay gen stdevpayhat=lstdevpay gen op_stdevpayhat=op_lstdevpay predict double corresid, residuals replace payhat=payhatold replace op_payhat=op_payhatold replace stdevpayhat=stdevpayhatold replace op_stdevpayhat=op_stdevpayhatold replace corresid=corresid^2 summarize corresid scalar realmse = r(mean)*r(N)/e(df_r) matrix bmatrix = e(b) matrix Vmatrix = e(V) matrix Vmatrix = e(V)*realmse/e(rmse)^2 drop payhatold op_payhatold stdevpayhatold op_stdevpayhatold corresid } ereturn post bmatrix Vmatrix, noclear ereturn display outreg2 using runrobustmodel, excel append keep(home payhat lpitcherpay stdevpayhat lhomevalue lstadage) slow(750) dec(3) ************************ROB1: ADD POLYNOMIAL OF SPELL TENURE****************************** ***No IV reg res home ltotalpay op_ltotalpay lpitcherpay op_lpitcherpay lstdevpay op_lstdevpay lhomevalue op_lhomevalue lstadage op_lstadage /// ltenure op_ltenure ltenuresq op_ltenuresq ltenuretrip op_ltenuretrip i.spelliddecomp i.op_spelliddecomp, vce(cluster matchup) outreg2 using resrobustmodel, excel append keep(home ltotalpay lpitcherpay lstdevpay lhomevalue lstadage ltenure ltenuresq ltenuretrip) slow(750) dec(3) predict double resid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen spellferob1=. gen op_spellferob1=. forvalues o=1/`numbspelldecomp'{ replace spellferob1=_b[`o'.spelliddecomp] if spelliddecomp==`o' replace op_spellferob1=_b[`o'.op_spelliddecomp] if op_spelliddecomp==`o' } } gen resyrob1=spellferob1+op_spellferob1+resid drop resid reg rundif home ltotalpay op_ltotalpay lpitcherpay op_lpitcherpay lstdevpay op_lstdevpay lhomevalue op_lhomevalue lstadage op_lstadage /// ltenure op_ltenure ltenuresq op_ltenuresq ltenuretrip op_ltenuretrip i.spelliddecomp i.op_spelliddecomp, vce(cluster matchup) outreg2 using runrobustmodel, excel append keep(home ltotalpay lpitcherpay lstdevpay lhomevalue lstadage ltenure ltenuresq ltenuretrip) slow(750) dec(3) predict double runresid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen runspellferob1=. gen op_runspellferob1=. forvalues o=1/`numbspelldecomp'{ replace runspellferob1=_b[`o'.spelliddecomp] if spelliddecomp==`o' replace op_runspellferob1=_b[`o'.op_spelliddecomp] if op_spelliddecomp==`o' } } gen runyrob1=runspellferob1+op_runspellferob1+runresid drop runresid ***IV **res reg res home payhat op_payhat lpitcherpay op_lpitcherpay stdevpayhat op_stdevpayhat lhomevalue op_lhomevalue lstadage op_lstadage /// ltenure op_ltenure ltenuresq op_ltenuresq ltenuretrip op_ltenuretrip i.spelliddecomp i.op_spelliddecomp, vce(cluster matchup) predict double ivresid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen ivspellferob1=. gen op_ivspellferob1=. forvalues o=1/`numbspelldecomp'{ replace ivspellferob1=_b[`o'.spelliddecomp] if spelliddecomp==`o' replace op_ivspellferob1=_b[`o'.op_spelliddecomp] if op_spelliddecomp==`o' } } gen resivyrob1=ivspellferob1+op_ivspellferob1+ivresid drop ivresid *Correct the s.e. quietly{ rename payhat payhatold rename op_payhat op_payhatold rename stdevpayhat stdevpayhatold rename op_stdevpayhat op_stdevpayhatold gen payhat=ltotalpay gen op_payhat=op_ltotalpay gen stdevpayhat=lstdevpay gen op_stdevpayhat=op_lstdevpay predict double corresid, residuals replace payhat=payhatold replace op_payhat=op_payhatold replace stdevpayhat=stdevpayhatold replace op_stdevpayhat=op_stdevpayhatold replace corresid=corresid^2 summarize corresid scalar realmse = r(mean)*r(N)/e(df_r) matrix bmatrix = e(b) matrix Vmatrix = e(V) matrix Vmatrix = e(V)*realmse/e(rmse)^2 drop payhatold op_payhatold stdevpayhatold op_stdevpayhatold corresid } ereturn post bmatrix Vmatrix, noclear ereturn display outreg2 using resrobustmodel, excel append keep(home ltotalpay lpitcherpay lstdevpay lhomevalue lstadage ltenure ltenuresq ltenuretrip) slow(750) dec(3) **runs reg rundif home payhat op_payhat lpitcherpay op_lpitcherpay stdevpayhat op_stdevpayhat lhomevalue op_lhomevalue lstadage op_lstadage /// ltenure op_ltenure ltenuresq op_ltenuresq ltenuretrip op_ltenuretrip i.spelliddecomp i.op_spelliddecomp, vce(cluster matchup) predict double runivresid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen runivspellferob1=. gen op_runivspellferob1=. forvalues o=1/`numbspelldecomp'{ replace runivspellferob1=_b[`o'.spelliddecomp] if spelliddecomp==`o' replace op_runivspellferob1=_b[`o'.op_spelliddecomp] if op_spelliddecomp==`o' } } gen runivyrob1=runivspellferob1+op_runivspellferob1+runivresid drop runivresid *Correct the s.e. quietly{ rename payhat payhatold rename op_payhat op_payhatold rename stdevpayhat stdevpayhatold rename op_stdevpayhat op_stdevpayhatold gen payhat=ltotalpay gen op_payhat=op_ltotalpay gen stdevpayhat=lstdevpay gen op_stdevpayhat=op_lstdevpay predict double corresid, residuals replace payhat=payhatold replace op_payhat=op_payhatold replace stdevpayhat=stdevpayhatold replace op_stdevpayhat=op_stdevpayhatold replace corresid=corresid^2 summarize corresid scalar realmse = r(mean)*r(N)/e(df_r) matrix bmatrix = e(b) matrix Vmatrix = e(V) matrix Vmatrix = e(V)*realmse/e(rmse)^2 drop payhatold op_payhatold stdevpayhatold op_stdevpayhatold corresid } ereturn post bmatrix Vmatrix, noclear ereturn display outreg2 using runrobustmodel, excel append keep(home ltotalpay lpitcherpay lstdevpay lhomevalue lstadage ltenure ltenuresq ltenuretrip) slow(750) dec(3) ************************ROB2: ADD GM and COACH EXPERIENCE/AGE****************************** gen spellexpid=1 replace spellexpid=. if gmlexp==. replace spellexpid=. if gmlage==. replace spellexpid=. if coachlexp==. replace spellexpid=. if coachlage==. replace spellexpid=spellexpid*spelliddecomp egen spellid3=group(spellexpid) sum spellid3 local maxspell3=r(max) gen op_spellexpid=1 replace op_spellexpid=. if op_gmlexp==. replace op_spellexpid=. if op_gmlage==. replace op_spellexpid=. if op_coachlexp==. replace op_spellexpid=. if op_coachlage==. replace op_spellexpid=op_spellexpid*op_spelliddecomp egen op_spellid3=group(op_spellexpid) ***No IV reg res home ltotalpay op_ltotalpay lpitcherpay op_lpitcherpay lstdevpay op_lstdevpay lhomevalue op_lhomevalue lstadage op_lstadage /// gmlexp op_gmlexp gmlexpsq op_gmlexpsq coachlexp op_coachlexp coachlexpsq op_coachlexpsq i.spellid3 i.op_spellid3, vce(cluster matchup) outreg2 using resrobustmodel, excel append keep(home ltotalpay lpitcherpay lstdevpay lhomevalue lstadage gmlexp gmlexpsq coachlexp coachlexpsq) slow(750) dec(3) predict double resid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen spellferob2=. gen op_spellferob2=. forvalues o=1/`maxspell3'{ replace spellferob2=_b[`o'.spellid3] if spellid3==`o' replace op_spellferob2=_b[`o'.op_spellid3] if op_spellid3==`o' } } gen resyrob2=spellferob2+op_spellferob2+resid drop resid reg rundif home ltotalpay op_ltotalpay lpitcherpay op_lpitcherpay lstdevpay op_lstdevpay lhomevalue op_lhomevalue lstadage op_lstadage /// gmlexp op_gmlexp gmlexpsq op_gmlexpsq coachlexp op_coachlexp coachlexpsq op_coachlexpsq i.spellid3 i.op_spellid3, vce(cluster matchup) outreg2 using runrobustmodel, excel append keep(home ltotalpay lpitcherpay lstdevpay lhomevalue lstadage gmlexp gmlexpsq coachlexp coachlexpsq) slow(750) dec(3) predict double runresid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen runspellferob2=. gen op_runspellferob2=. forvalues o=1/`maxspell3'{ replace runspellferob2=_b[`o'.spellid3] if spellid3==`o' replace op_runspellferob2=_b[`o'.op_spellid3] if op_spellid3==`o' } } gen runyrob2=runspellferob2+op_runspellferob2+runresid drop runresid ***IV **res reg res home payhat op_payhat lpitcherpay op_lpitcherpay stdevpayhat op_stdevpayhat lhomevalue op_lhomevalue lstadage op_lstadage /// gmlexp op_gmlexp gmlexpsq op_gmlexpsq coachlexp op_coachlexp coachlexpsq op_coachlexpsq i.spellid3 i.op_spellid3, vce(cluster matchup) predict double ivresid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen ivspellferob2=. gen op_ivspellferob2=. forvalues o=1/`maxspell3'{ replace ivspellferob2=_b[`o'.spellid3] if spellid3==`o' replace op_ivspellferob2=_b[`o'.op_spellid3] if op_spellid3==`o' } } gen resivyrob2=ivspellferob2+op_ivspellferob2+ivresid drop ivresid *Correct the s.e. quietly{ rename payhat payhatold rename op_payhat op_payhatold rename stdevpayhat stdevpayhatold rename op_stdevpayhat op_stdevpayhatold gen payhat=ltotalpay gen op_payhat=op_ltotalpay gen stdevpayhat=lstdevpay gen op_stdevpayhat=op_lstdevpay predict double corresid, residuals replace payhat=payhatold replace op_payhat=op_payhatold replace stdevpayhat=stdevpayhatold replace op_stdevpayhat=op_stdevpayhatold replace corresid=corresid^2 summarize corresid scalar realmse = r(mean)*r(N)/e(df_r) matrix bmatrix = e(b) matrix Vmatrix = e(V) matrix Vmatrix = e(V)*realmse/e(rmse)^2 drop payhatold op_payhatold stdevpayhatold op_stdevpayhatold corresid } ereturn post bmatrix Vmatrix, noclear ereturn display outreg2 using resrobustmodel, excel append keep(home payhat lpitcherpay stdevpayhat lhomevalue lstadage gmlexp gmlexpsq coachlexp coachlexpsq) slow(750) dec(3) **runs reg rundif home payhat op_payhat lpitcherpay op_lpitcherpay stdevpayhat op_stdevpayhat lhomevalue op_lhomevalue lstadage op_lstadage /// gmlexp op_gmlexp gmlexpsq op_gmlexpsq coachlexp op_coachlexp coachlexpsq op_coachlexpsq i.spellid3 i.op_spellid3, vce(cluster matchup) predict double runivresid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen runivspellferob2=. gen op_runivspellferob2=. forvalues o=1/`maxspell3'{ replace runivspellferob2=_b[`o'.spellid3] if spellid3==`o' replace op_runivspellferob2=_b[`o'.op_spellid3] if op_spellid3==`o' } } gen runivyrob2=runivspellferob2+op_runivspellferob2+runivresid drop runivresid *Correct the s.e. quietly{ rename payhat payhatold rename op_payhat op_payhatold rename stdevpayhat stdevpayhatold rename op_stdevpayhat op_stdevpayhatold gen payhat=ltotalpay gen op_payhat=op_ltotalpay gen stdevpayhat=lstdevpay gen op_stdevpayhat=op_lstdevpay predict double corresid, residuals replace payhat=payhatold replace op_payhat=op_payhatold replace stdevpayhat=stdevpayhatold replace op_stdevpayhat=op_stdevpayhatold replace corresid=corresid^2 summarize corresid scalar realmse = r(mean)*r(N)/e(df_r) matrix bmatrix = e(b) matrix Vmatrix = e(V) matrix Vmatrix = e(V)*realmse/e(rmse)^2 drop payhatold op_payhatold stdevpayhatold op_stdevpayhatold corresid } ereturn post bmatrix Vmatrix, noclear ereturn display outreg2 using runrobustmodel, excel append keep(home payhat lpitcherpay stdevpayhat lhomevalue lstadage gmlexp gmlexpsq coachlexp coachlexpsq) slow(750) dec(3) ************************ROB3: INTERACT PLAY-OFF GAMES****************************** ***No IV **res reg res home ltotalpay op_ltotalpay lpitcherpay op_lpitcherpay lstdevpay op_lstdevpay lhomevalue op_lhomevalue lstadage op_lstadage i.spelliddecomp i.op_spelliddecomp /// homeplayoff op_homeplayoff ltotalpayplayoff op_ltotalpayplayoff lpitcherpayplayoff op_lpitcherpayplayoff, vce(cluster matchup) outreg2 using resrobustmodel, excel append keep(home ltotalpay lpitcherpay lstdevpay lhomevalue lstadage homeplayoff ltotalpayplayoff lpitcherpayplayoff) slow(750) dec(3) predict double resid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen spellferob3=. gen op_spellferob3=. forvalues o=1/`numbspelldecomp'{ replace spellferob3=_b[`o'.spelliddecomp] if spelliddecomp==`o' replace op_spellferob3=_b[`o'.op_spelliddecomp] if op_spelliddecomp==`o' } } gen resyrob3=spellferob3+op_spellferob3+resid drop resid **runs reg rundif home ltotalpay op_ltotalpay lpitcherpay op_lpitcherpay lstdevpay op_lstdevpay lhomevalue op_lhomevalue lstadage op_lstadage i.spelliddecomp i.op_spelliddecomp /// homeplayoff op_homeplayoff ltotalpayplayoff op_ltotalpayplayoff lpitcherpayplayoff op_lpitcherpayplayoff, vce(cluster matchup) outreg2 using runrobustmodel, excel append keep(home ltotalpay lpitcherpay lstdevpay lhomevalue lstadage homeplayoff ltotalpayplayoff lpitcherpayplayoff) slow(750) dec(3) predict double runresid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen runspellferob3=. gen op_runspellferob3=. forvalues o=1/`numbspelldecomp'{ replace runspellferob3=_b[`o'.spelliddecomp] if spelliddecomp==`o' replace op_runspellferob3=_b[`o'.op_spelliddecomp] if op_spelliddecomp==`o' } } gen runyrob3=runspellferob3+op_runspellferob3+runresid drop runresid ***IV **res reg res home payhat op_payhat lpitcherpay op_lpitcherpay stdevpayhat op_stdevpayhat lhomevalue op_lhomevalue lstadage op_lstadage i.spelliddecomp i.op_spelliddecomp /// homeplayoff op_homeplayoff ltotalpayplayoff op_ltotalpayplayoff lpitcherpayplayoff op_lpitcherpayplayoff, vce(cluster matchup) predict double ivresid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen ivspellferob3=. gen op_ivspellferob3=. forvalues o=1/`numbspelldecomp'{ replace ivspellferob3=_b[`o'.spelliddecomp] if spelliddecomp==`o' replace op_ivspellferob3=_b[`o'.op_spelliddecomp] if op_spelliddecomp==`o' } } gen resivyrob3=ivspellferob3+op_ivspellferob3+ivresid drop ivresid *Correct the s.e. quietly{ rename payhat payhatold rename op_payhat op_payhatold rename stdevpayhat stdevpayhatold rename op_stdevpayhat op_stdevpayhatold gen payhat=ltotalpay gen op_payhat=op_ltotalpay gen stdevpayhat=lstdevpay gen op_stdevpayhat=op_lstdevpay predict double corresid, residuals replace payhat=payhatold replace op_payhat=op_payhatold replace stdevpayhat=stdevpayhatold replace op_stdevpayhat=op_stdevpayhatold replace corresid=corresid^2 summarize corresid scalar realmse = r(mean)*r(N)/e(df_r) matrix bmatrix = e(b) matrix Vmatrix = e(V) matrix Vmatrix = e(V)*realmse/e(rmse)^2 drop payhatold op_payhatold stdevpayhatold op_stdevpayhatold corresid } ereturn post bmatrix Vmatrix, noclear ereturn display outreg2 using resrobustmodel, excel append keep(home payhat lpitcherpay stdevpayhat lhomevalue lstadage) slow(750) dec(3) **run reg rundif payhat op_payhat lpitcherpay op_lpitcherpay stdevpayhat op_stdevpayhat lhomevalue op_lhomevalue lstadage op_lstadage i.spelliddecomp i.op_spelliddecomp /// homeplayoff op_homeplayoff ltotalpayplayoff op_ltotalpayplayoff lpitcherpayplayoff op_lpitcherpayplayoff, vce(cluster matchup) predict double runivresid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen runivspellferob3=. gen op_runivspellferob3=. forvalues o=1/`numbspelldecomp'{ replace runivspellferob3=_b[`o'.spelliddecomp] if spelliddecomp==`o' replace op_runivspellferob3=_b[`o'.op_spelliddecomp] if op_spelliddecomp==`o' } } gen runivyrob3=runivspellferob3+op_runivspellferob3+runivresid drop runivresid *Correct the s.e. quietly{ rename payhat payhatold rename op_payhat op_payhatold rename stdevpayhat stdevpayhatold rename op_stdevpayhat op_stdevpayhatold gen payhat=ltotalpay gen op_payhat=op_ltotalpay gen stdevpayhat=lstdevpay gen op_stdevpayhat=op_lstdevpay predict double corresid, residuals replace payhat=payhatold replace op_payhat=op_payhatold replace stdevpayhat=stdevpayhatold replace op_stdevpayhat=op_stdevpayhatold replace corresid=corresid^2 summarize corresid scalar realmse = r(mean)*r(N)/e(df_r) matrix bmatrix = e(b) matrix Vmatrix = e(V) matrix Vmatrix = e(V)*realmse/e(rmse)^2 drop payhatold op_payhatold stdevpayhatold op_stdevpayhatold corresid } ereturn post bmatrix Vmatrix, noclear ereturn display outreg2 using runrobustmodel, excel append keep(home payhat lpitcherpay stdevpayhat lhomevalue lstadage) slow(750) dec(3) ************************ROB4: INTERACT WITH HOME****************************** ***No IV **res reg res ltotalpay op_ltotalpay lpitcherpay op_lpitcherpay lstdevpay op_lstdevpay lhomevalue op_lhomevalue lstadage op_lstadage /// ltotalpayhome op_ltotalpayhome lpitcherpayhome op_lpitcherpayhome lstdevpayhome op_lstdevpayhome lhomevaluehome op_lhomevaluehome lstadagehome op_lstadagehome /// i.spelliddecomp i.op_spelliddecomp, vce(cluster matchup) outreg2 using resrobustmodel, excel append keep(ltotalpay lpitcherpay lstdevpay lhomevalue lstadage ltotalpayhome /// lpitcherpayhome lstdevpayhome lhomevaluehome lstadagehome) slow(750) dec(3) predict double resid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen spellferob4=. gen op_spellferob4=. forvalues o=1/`numbspelldecomp'{ replace spellferob4=_b[`o'.spelliddecomp] if spelliddecomp==`o' replace op_spellferob4=_b[`o'.op_spelliddecomp] if op_spelliddecomp==`o' } } gen resyrob4=spellferob4+op_spellferob4+resid drop resid **runs reg rundif ltotalpay op_ltotalpay lpitcherpay op_lpitcherpay lstdevpay op_lstdevpay lhomevalue op_lhomevalue lstadage op_lstadage /// ltotalpayhome op_ltotalpayhome lpitcherpayhome op_lpitcherpayhome lstdevpayhome op_lstdevpayhome lhomevaluehome op_lhomevaluehome lstadagehome op_lstadagehome /// i.spelliddecomp i.op_spelliddecomp, vce(cluster matchup) outreg2 using runrobustmodel, excel append keep(ltotalpay lpitcherpay lstdevpay lhomevalue lstadage ltotalpayhome /// lpitcherpayhome lstdevpayhome lhomevaluehome lstadagehome) slow(750) dec(3) predict double runresid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen runspellferob4=. gen op_runspellferob4=. forvalues o=1/`numbspelldecomp'{ replace runspellferob4=_b[`o'.spelliddecomp] if spelliddecomp==`o' replace op_runspellferob4=_b[`o'.op_spelliddecomp] if op_spelliddecomp==`o' } } gen runyrob4=runspellferob4+op_runspellferob4+runresid drop runresid ***IV gen payhathome=payhat*home gen op_payhathome=op_payhat*op_home gen stdevpayhathome=stdevpayhat*home gen op_stdevpayhathome=op_stdevpayhat*op_home **res reg res payhat op_payhat lpitcherpay op_lpitcherpay stdevpayhat op_stdevpayhat lhomevalue op_lhomevalue lstadage op_lstadage /// payhathome op_payhathome lpitcherpayhome op_lpitcherpayhome stdevpayhathome op_stdevpayhathome lhomevaluehome op_lhomevaluehome /// lstadagehome op_lstadagehome i.spelliddecomp i.op_spelliddecomp, vce(cluster matchup) predict double ivresid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen ivspellferob4=. gen op_ivspellferob4=. forvalues o=1/`numbspelldecomp'{ replace ivspellferob4=_b[`o'.spelliddecomp] if spelliddecomp==`o' replace op_ivspellferob4=_b[`o'.op_spelliddecomp] if op_spelliddecomp==`o' } } gen resivyrob4=ivspellferob4+op_ivspellferob4+ivresid drop ivresid *Correct the s.e. quietly{ rename payhat payhatold rename op_payhat op_payhatold rename stdevpayhat stdevpayhatold rename op_stdevpayhat op_stdevpayhatold rename payhathome payhathomeold rename op_payhathome op_payhathomeold rename stdevpayhathome stdevpayhathomeold rename op_stdevpayhathome op_stdevpayhathomeold gen payhat=ltotalpay gen op_payhat=op_ltotalpay gen stdevpayhat=lstdevpay gen op_stdevpayhat=op_lstdevpay gen payhathome=ltotalpayhome gen op_payhathome=op_ltotalpayhome gen stdevpayhathome=lstdevpayhome gen op_stdevpayhathome=op_lstdevpayhome predict double corresid, residuals replace payhat=payhatold replace op_payhat=op_payhatold replace stdevpayhat=stdevpayhatold replace op_stdevpayhat=op_stdevpayhatold replace payhathome=payhathomeold replace op_payhathome=op_payhathomeold replace stdevpayhathome=stdevpayhathomeold replace op_stdevpayhathome=op_stdevpayhathomeold replace corresid=corresid^2 summarize corresid scalar realmse = r(mean)*r(N)/e(df_r) matrix bmatrix = e(b) matrix Vmatrix = e(V) matrix Vmatrix = e(V)*realmse/e(rmse)^2 drop payhatold op_payhatold stdevpayhatold op_stdevpayhatold payhathomeold op_payhathomeold stdevpayhathomeold op_stdevpayhathomeold corresid } ereturn post bmatrix Vmatrix, noclear ereturn display outreg2 using resrobustmodel, excel append keep(payhat lpitcherpay stdevpayhat lhomevalue lstadage payhathome lpitcherpayhome /// stdevpayhathome lhomevaluehome lstadagehome) slow(750) dec(3) **run reg rundif payhat op_payhat lpitcherpay op_lpitcherpay stdevpayhat op_stdevpayhat lhomevalue op_lhomevalue lstadage op_lstadage /// payhathome op_payhathome lpitcherpayhome op_lpitcherpayhome stdevpayhathome op_stdevpayhathome lhomevaluehome op_lhomevaluehome lstadagehome /// op_lstadagehome i.spelliddecomp i.op_spelliddecomp, vce(cluster matchup) predict double runivresid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen runivspellferob4=. gen op_runivspellferob4=. forvalues o=1/`numbspelldecomp'{ replace runivspellferob4=_b[`o'.spelliddecomp] if spelliddecomp==`o' replace op_runivspellferob4=_b[`o'.op_spelliddecomp] if op_spelliddecomp==`o' } } gen runivyrob4=runivspellferob4+op_runivspellferob4+runivresid drop runivresid *Correct the s.e. quietly{ rename payhat payhatold rename op_payhat op_payhatold rename stdevpayhat stdevpayhatold rename op_stdevpayhat op_stdevpayhatold rename payhathome payhathomeold rename op_payhathome op_payhathomeold rename stdevpayhathome stdevpayhathomeold rename op_stdevpayhathome op_stdevpayhathomeold gen payhat=ltotalpay gen op_payhat=op_ltotalpay gen stdevpayhat=lstdevpay gen op_stdevpayhat=op_lstdevpay gen payhathome=ltotalpayhome gen op_payhathome=op_ltotalpayhome gen stdevpayhathome=lstdevpayhome gen op_stdevpayhathome=op_lstdevpayhome predict double corresid, residuals replace payhat=payhatold replace op_payhat=op_payhatold replace stdevpayhat=stdevpayhatold replace op_stdevpayhat=op_stdevpayhatold replace payhathome=payhathomeold replace op_payhathome=op_payhathomeold replace stdevpayhathome=stdevpayhathomeold replace op_stdevpayhathome=op_stdevpayhathomeold replace corresid=corresid^2 summarize corresid scalar realmse = r(mean)*r(N)/e(df_r) matrix bmatrix = e(b) matrix Vmatrix = e(V) matrix Vmatrix = e(V)*realmse/e(rmse)^2 drop payhatold op_payhatold stdevpayhatold op_stdevpayhatold payhathomeold op_payhathomeold stdevpayhathomeold op_stdevpayhathomeold corresid } ereturn post bmatrix Vmatrix, noclear ereturn display outreg2 using runrobustmodel, excel append keep(payhat lpitcherpay stdevpayhat lhomevalue lstadage payhathome lpitcherpayhome stdevpayhathome /// lhomevaluehome lstadagehome) slow(750) dec(3) ************************ROB5: NO STDEV of PAY AND PITCHER SALARY****************************** ***No IV **res reg res home ltotalpay op_ltotalpay lhomevalue op_lhomevalue lstadage op_lstadage i.spelliddecomp i.op_spelliddecomp, vce(cluster matchup) outreg2 using resrobustmodel, excel append keep(home ltotalpay lhomevalue lstadage) slow(750) dec(3) predict double resid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen spellferob5=. gen op_spellferob5=. forvalues o=1/`numbspelldecomp'{ replace spellferob5=_b[`o'.spelliddecomp] if spelliddecomp==`o' replace op_spellferob5=_b[`o'.op_spelliddecomp] if op_spelliddecomp==`o' } } gen resyrob5=spellferob5+op_spellferob5+resid drop resid **runs reg rundif home ltotalpay op_ltotalpay lhomevalue op_lhomevalue lstadage op_lstadage i.spelliddecomp i.op_spelliddecomp, vce(cluster matchup) outreg2 using runrobustmodel, excel append keep(home ltotalpay lhomevalue lstadage) slow(750) dec(3) predict double runresid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen runspellferob5=. gen op_runspellferob5=. forvalues o=1/`numbspelldecomp'{ replace runspellferob5=_b[`o'.spelliddecomp] if spelliddecomp==`o' replace op_runspellferob5=_b[`o'.op_spelliddecomp] if op_spelliddecomp==`o' } } gen runyrob5=runspellferob5+op_runspellferob5+runresid drop runresid ***IV **res reg res home payhat op_payhat lhomevalue op_lhomevalue lstadage op_lstadage i.spelliddecomp i.op_spelliddecomp, vce(cluster matchup) predict double ivresid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen ivspellferob5=. gen op_ivspellferob5=. forvalues o=1/`numbspelldecomp'{ replace ivspellferob5=_b[`o'.spelliddecomp] if spelliddecomp==`o' replace op_ivspellferob5=_b[`o'.op_spelliddecomp] if op_spelliddecomp==`o' } } gen resivyrob5=ivspellferob5+op_ivspellferob5+ivresid drop ivresid *Correct the s.e. quietly{ rename payhat payhatold rename op_payhat op_payhatold rename stdevpayhat stdevpayhatold rename op_stdevpayhat op_stdevpayhatold gen payhat=ltotalpay gen op_payhat=op_ltotalpay gen stdevpayhat=lstdevpay gen op_stdevpayhat=op_lstdevpay predict double corresid, residuals replace payhat=payhatold replace op_payhat=op_payhatold replace stdevpayhat=stdevpayhatold replace op_stdevpayhat=op_stdevpayhatold replace corresid=corresid^2 summarize corresid scalar realmse = r(mean)*r(N)/e(df_r) matrix bmatrix = e(b) matrix Vmatrix = e(V) matrix Vmatrix = e(V)*realmse/e(rmse)^2 drop payhatold op_payhatold stdevpayhatold op_stdevpayhatold corresid } ereturn post bmatrix Vmatrix, noclear ereturn display outreg2 using resrobustmodel, excel append keep(home payhat lhomevalue lstadage) slow(750) dec(3) **run reg rundif home payhat op_payhat lhomevalue op_lhomevalue lstadage op_lstadage i.spelliddecomp i.op_spelliddecomp, vce(cluster matchup) predict double runivresid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen runivspellferob5=. gen op_runivspellferob5=. forvalues o=1/`numbspelldecomp'{ replace runivspellferob5=_b[`o'.spelliddecomp] if spelliddecomp==`o' replace op_runivspellferob5=_b[`o'.op_spelliddecomp] if op_spelliddecomp==`o' } } gen runivyrob5=runivspellferob5+op_runivspellferob5+runivresid drop runivresid *Correct the s.e. quietly{ rename payhat payhatold rename op_payhat op_payhatold rename stdevpayhat stdevpayhatold rename op_stdevpayhat op_stdevpayhatold gen payhat=ltotalpay gen op_payhat=op_ltotalpay gen stdevpayhat=lstdevpay gen op_stdevpayhat=op_lstdevpay predict double corresid, residuals replace payhat=payhatold replace op_payhat=op_payhatold replace stdevpayhat=stdevpayhatold replace op_stdevpayhat=op_stdevpayhatold replace corresid=corresid^2 summarize corresid scalar realmse = r(mean)*r(N)/e(df_r) matrix bmatrix = e(b) matrix Vmatrix = e(V) matrix Vmatrix = e(V)*realmse/e(rmse)^2 drop payhatold op_payhatold stdevpayhatold op_stdevpayhatold corresid } ereturn post bmatrix Vmatrix, noclear ereturn display outreg2 using runrobustmodel, excel append keep(home payhat lhomevalue lstadage) slow(750) dec(3) ************************ROB6: ADD INPUT MEASURES****************************** ***No IV **res reg res home ltotalpay op_ltotalpay lpitcherpay op_lpitcherpay lstdevpay op_lstdevpay lhomevalue op_lhomevalue lstadage op_lstadage /// lpop lteamscmsa lmarketten op_lpop op_lteamscmsa op_lmarketten i.spelliddecomp i.op_spelliddecomp, vce(cluster matchup) outreg2 using resrobustmodel, excel append keep(home ltotalpay lstdevpay lpitcherpay lhomevalue lstadage lpop lteamscmsa lmarketten) slow(750) dec(3) predict double resid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen spellferob6=. gen op_spellferob6=. forvalues o=1/`numbspelldecomp'{ replace spellferob6=_b[`o'.spelliddecomp] if spelliddecomp==`o' replace op_spellferob6=_b[`o'.op_spelliddecomp] if op_spelliddecomp==`o' } } gen resyrob6=spellferob6+op_spellferob6+resid drop resid **runs reg rundif home ltotalpay op_ltotalpay lpitcherpay op_lpitcherpay lstdevpay op_lstdevpay lhomevalue op_lhomevalue lstadage op_lstadage /// lpop lteamscmsa lmarketten op_lpop op_lteamscmsa op_lmarketten i.spelliddecomp i.op_spelliddecomp, vce(cluster matchup) outreg2 using runrobustmodel, excel append keep(home ltotalpay lpitcherpay lstdevpay lhomevalue lstadage lpop lteamscmsa lmarketten) slow(750) dec(3) predict double runresid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen runspellferob6=. gen op_runspellferob6=. forvalues o=1/`numbspelldecomp'{ replace runspellferob6=_b[`o'.spelliddecomp] if spelliddecomp==`o' replace op_runspellferob6=_b[`o'.op_spelliddecomp] if op_spelliddecomp==`o' } } gen runyrob6=runspellferob6+op_runspellferob6+runresid drop runresid ***IV **res reg res home payhat op_payhat lpitcherpay op_lpitcherpay stdevpayhat op_stdevpayhat lhomevalue op_lhomevalue lstadage op_lstadage /// lpop lteamscmsa lmarketten op_lpop op_lteamscmsa op_lmarketten i.spelliddecomp i.op_spelliddecomp, vce(cluster matchup) predict double ivresid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen ivspellferob6=. gen op_ivspellferob6=. forvalues o=1/`numbspelldecomp'{ replace ivspellferob6=_b[`o'.spelliddecomp] if spelliddecomp==`o' replace op_ivspellferob6=_b[`o'.op_spelliddecomp] if op_spelliddecomp==`o' } } gen resivyrob6=ivspellferob6+op_ivspellferob6+ivresid drop ivresid *Correct the s.e. quietly{ rename payhat payhatold rename op_payhat op_payhatold rename stdevpayhat stdevpayhatold rename op_stdevpayhat op_stdevpayhatold gen payhat=ltotalpay gen op_payhat=op_ltotalpay gen stdevpayhat=lstdevpay gen op_stdevpayhat=op_lstdevpay predict double corresid, residuals replace payhat=payhatold replace op_payhat=op_payhatold replace stdevpayhat=stdevpayhatold replace op_stdevpayhat=op_stdevpayhatold replace corresid=corresid^2 summarize corresid scalar realmse = r(mean)*r(N)/e(df_r) matrix bmatrix = e(b) matrix Vmatrix = e(V) matrix Vmatrix = e(V)*realmse/e(rmse)^2 drop payhatold op_payhatold stdevpayhatold op_stdevpayhatold corresid } ereturn post bmatrix Vmatrix, noclear ereturn display outreg2 using resrobustmodel, excel append keep(home payhat lpitcherpay stdevpayhat lhomevalue lstadage lpop lteamscmsa lmarketten) slow(750) dec(3) **run reg rundif home payhat op_payhat lpitcherpay op_lpitcherpay stdevpayhat op_stdevpayhat lhomevalue op_lhomevalue lstadage op_lstadage /// lpop lteamscmsa lmarketten op_lpop op_lteamscmsa op_lmarketten i.spelliddecomp i.op_spelliddecomp, vce(cluster matchup) predict double runivresid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen runivspellferob6=. gen op_runivspellferob6=. forvalues o=1/`numbspelldecomp'{ replace runivspellferob6=_b[`o'.spelliddecomp] if spelliddecomp==`o' replace op_runivspellferob6=_b[`o'.op_spelliddecomp] if op_spelliddecomp==`o' } } gen runivyrob6=runivspellferob6+op_runivspellferob6+runivresid drop runivresid *Correct the s.e. quietly{ rename payhat payhatold rename op_payhat op_payhatold rename stdevpayhat stdevpayhatold rename op_stdevpayhat op_stdevpayhatold gen payhat=ltotalpay gen op_payhat=op_ltotalpay gen stdevpayhat=lstdevpay gen op_stdevpayhat=op_lstdevpay predict double corresid, residuals replace payhat=payhatold replace op_payhat=op_payhatold replace stdevpayhat=stdevpayhatold replace op_stdevpayhat=op_stdevpayhatold replace corresid=corresid^2 summarize corresid scalar realmse = r(mean)*r(N)/e(df_r) matrix bmatrix = e(b) matrix Vmatrix = e(V) matrix Vmatrix = e(V)*realmse/e(rmse)^2 drop payhatold op_payhatold stdevpayhatold op_stdevpayhatold corresid } ereturn post bmatrix Vmatrix, noclear ereturn display outreg2 using runrobustmodel, excel append keep(home payhat lpitcherpay stdevpayhat lhomevalue lstadage lpop lteamscmsa lmarketten) slow(750) dec(3) ************************ROB7: INTERACT DERBY GAMES****************************** ***No IV **res reg res home ltotalpay op_ltotalpay lpitcherpay op_lpitcherpay lstdevpay op_lstdevpay lhomevalue op_lhomevalue lstadage op_lstadage i.spelliddecomp i.op_spelliddecomp /// homederby op_homederby ltotalpayderby op_ltotalpayderby lpitcherpayderby op_lpitcherpayderby, vce(cluster matchup) outreg2 using resrobustmodel, excel append keep(home ltotalpay lpitcherpay lstdevpay lhomevalue lstadage homederby ltotalpayderby lpitcherpayderby) slow(750) dec(3) predict double resid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen spellferob7=. gen op_spellferob7=. forvalues o=1/`numbspelldecomp'{ replace spellferob7=_b[`o'.spelliddecomp] if spelliddecomp==`o' replace op_spellferob7=_b[`o'.op_spelliddecomp] if op_spelliddecomp==`o' } } gen resyrob7=spellferob7+op_spellferob7+resid drop resid **runs reg rundif home ltotalpay op_ltotalpay lpitcherpay op_lpitcherpay lstdevpay op_lstdevpay lhomevalue op_lhomevalue lstadage op_lstadage i.spelliddecomp i.op_spelliddecomp /// homederby op_homederby ltotalpayderby op_ltotalpayderby lpitcherpayderby op_lpitcherpayderby, vce(cluster matchup) outreg2 using runrobustmodel, excel append keep(home ltotalpay lpitcherpay lstdevpay lhomevalue lstadage homederby ltotalpayderby lpitcherpayderby) slow(750) dec(3) predict double runresid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen runspellferob7=. gen op_runspellferob7=. forvalues o=1/`numbspelldecomp'{ replace runspellferob7=_b[`o'.spelliddecomp] if spelliddecomp==`o' replace op_runspellferob7=_b[`o'.op_spelliddecomp] if op_spelliddecomp==`o' } } gen runyrob7=runspellferob7+op_runspellferob7+runresid drop runresid ***IV **res reg res home payhat op_payhat lpitcherpay op_lpitcherpay stdevpayhat op_stdevpayhat lhomevalue op_lhomevalue lstadage op_lstadage i.spelliddecomp i.op_spelliddecomp /// homederby op_homederby ltotalpayderby op_ltotalpayderby lpitcherpayderby op_lpitcherpayderby, vce(cluster matchup) predict double ivresid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen ivspellferob7=. gen op_ivspellferob7=. forvalues o=1/`numbspelldecomp'{ replace ivspellferob7=_b[`o'.spelliddecomp] if spelliddecomp==`o' replace op_ivspellferob7=_b[`o'.op_spelliddecomp] if op_spelliddecomp==`o' } } gen resivyrob7=ivspellferob7+op_ivspellferob7+ivresid drop ivresid *Correct the s.e. quietly{ rename payhat payhatold rename op_payhat op_payhatold rename stdevpayhat stdevpayhatold rename op_stdevpayhat op_stdevpayhatold gen payhat=ltotalpay gen op_payhat=op_ltotalpay gen stdevpayhat=lstdevpay gen op_stdevpayhat=op_lstdevpay predict double corresid, residuals replace payhat=payhatold replace op_payhat=op_payhatold replace stdevpayhat=stdevpayhatold replace op_stdevpayhat=op_stdevpayhatold replace corresid=corresid^2 summarize corresid scalar realmse = r(mean)*r(N)/e(df_r) matrix bmatrix = e(b) matrix Vmatrix = e(V) matrix Vmatrix = e(V)*realmse/e(rmse)^2 drop payhatold op_payhatold stdevpayhatold op_stdevpayhatold corresid } ereturn post bmatrix Vmatrix, noclear ereturn display outreg2 using resrobustmodel, excel append keep(home payhat lpitcherpay stdevpayhat lhomevalue lstadage homederby ltotalpayderby lpitcherpayderby) slow(750) dec(3) **run reg rundif payhat op_payhat lpitcherpay op_lpitcherpay stdevpayhat op_stdevpayhat lhomevalue op_lhomevalue lstadage op_lstadage i.spelliddecomp i.op_spelliddecomp /// homederby op_homederby ltotalpayderby op_ltotalpayderby lpitcherpayderby op_lpitcherpayderby, vce(cluster matchup) predict double runivresid, residuals *Read out the estimated coefficients quietly{ *Read out the spell effects gen runivspellferob7=. gen op_runivspellferob7=. forvalues o=1/`numbspelldecomp'{ replace runivspellferob7=_b[`o'.spelliddecomp] if spelliddecomp==`o' replace op_runivspellferob7=_b[`o'.op_spelliddecomp] if op_spelliddecomp==`o' } } gen runivyrob7=runivspellferob7+op_runivspellferob7+runivresid drop runivresid *Correct the s.e. quietly{ rename payhat payhatold rename op_payhat op_payhatold rename stdevpayhat stdevpayhatold rename op_stdevpayhat op_stdevpayhatold gen payhat=ltotalpay gen op_payhat=op_ltotalpay gen stdevpayhat=lstdevpay gen op_stdevpayhat=op_lstdevpay predict double corresid, residuals replace payhat=payhatold replace op_payhat=op_payhatold replace stdevpayhat=stdevpayhatold replace op_stdevpayhat=op_stdevpayhatold replace corresid=corresid^2 summarize corresid scalar realmse = r(mean)*r(N)/e(df_r) matrix bmatrix = e(b) matrix Vmatrix = e(V) matrix Vmatrix = e(V)*realmse/e(rmse)^2 drop payhatold op_payhatold stdevpayhatold op_stdevpayhatold corresid } ereturn post bmatrix Vmatrix, noclear ereturn display outreg2 using runrobustmodel, excel append keep(home payhat lpitcherpay stdevpayhat lhomevalue lstadage homederby ltotalpayderby lpitcherpayderby) slow(750) dec(3) *****************************************PUT THIS IN THE SPELL FILE FOR ANALYSIS***************************************** **Rob 1: Include third degree polynomial of tenure **Rob 2: includes experience of GM and coach level and square **Rob 3: Interact with play-off games **Rob 4: includes home interaction on pay/stadium/value **Rob 5: no std dev of pay or starting pitcher salary **Rob 6: All input measure in first stage **Rob 7: Interact with derby games pwcorr resy*, sig obs pwcorr runy*, sig obs pwcorr resivy* resy, sig obs pwcorr runivy* runy, sig obs preserve collapse spellfe* ivspellfe* runspellfe* runivspellfe* spelliddecomp, by (spellid) tempfile spells save `spells' use spellresults.dta, clear cap drop spellfe* ivspellfe* runspellfe* runivspellfe* spelliddecomp merge m:1 spellid using `spells', nogen save spellresults.dta, replace pwcorr spellfe*, sig obs pwcorr ivspellfe*, sig obs pwcorr runspellfe*, sig obs pwcorr runivspellfe*, sig obs restore */ log close clear