** LAST LAB ** clear all set obs 30000 set seed 123 /* regression of z1 and z2 on x */ scalar beta10 = -1 scalar beta11 = .75 scalar beta20 = .1 scalar beta21 = .9 gen x = rnormal(2,4) gen xi1 = rnormal(0,2) gen xi2 = rnormal(0,1.5) gen z1 = beta10 + beta11 * x + xi1 gen z2 = beta20 + beta21 * x + xi2 /* regression of ystar on x and z1,z2*/ scalar gamma0 = 2 scalar gamma1 = .3 scalar gamma2 = .25 scalar gamma3 = .1 scalar sigma2 = 1.45 gen epsilon2 = rnormal(0,sigma2) gen ystar = gamma0 + gamma1*x + gamma2*z1 + gamma3 * z2 + epsilon2 /* regression of ystar on x */ reg ystar x mat b = e(b) scalar alpha0 = b[1,2] scalar alpha1 = b[1,1] scalar sigma1 = e(rmse) /* generate observed outcome y*/ sum ystar,mean local ymean = r(mean) gen y = ystar > `ymean' /* run Probit */ * probit of y on x probit y x mat b = e(b) scalar alpha1_est = b[1,1] probit y x z1 z2 mat b = e(b) scalar gamma1_est = b[1,1] * residualize z reg z1 x predict zres1, res reg z2 x predict zres2, res probit y x zres1 zres2, nohead nolog mat b = e(b) scalar alpha1_est_resid = b[1,1] * compare ratios of gamma1/alpha di gamma1/alpha1 di gamma1_est/alpha1_est di gamma1_est/alpha1_est_resid /*** GSS example ***/ clear all set maxvar 10000 use gss7214 keep if year==2014 svyset vpsu [pw=wtssnr], strata(vstrat) singleunit(scale) recode region 1/2=1 3/4=2 5/7=3 8=4 9=5, gen(Region5) lab var Region5 "Region" lab def Region5 1 "Northeast" 2 "Midwest" 3 "South" 4 "Mountain" 5 "Pacific" lab val Region5 Region5 gen Repvote=pres12==2 if pres12<4 lab var Repvote "Voted for Republican" lab val Repvote yesno gen lat=hispanic>1 if hispanic<. replace lat = 1 if hispanic>=. & ethnic==17 replace lat = 1 if hispanic>=. & ethnic==22 replace lat = 1 if hispanic>=. & ethnic==25 replace lat = 1 if hispanic>=. & ethnic==28 replace lat = 1 if hispanic>=. & ethnic==38 replace lat = 1 if hispanic>=. & eth1==17 replace lat = 1 if hispanic>=. & eth1==22 replace lat = 1 if hispanic>=. & eth1==25 replace lat = 1 if hispanic>=. & eth1==28 replace lat = 1 if hispanic>=. & eth1==38 replace lat = 1 if hispanic>=. & eth2==17 replace lat = 1 if hispanic>=. & eth2==22 replace lat = 1 if hispanic>=. & eth2==25 replace lat = 1 if hispanic>=. & eth2==28 replace lat = 1 if hispanic>=. & eth2==38 replace lat = 1 if hispanic>=. & eth3==17 replace lat = 1 if hispanic>=. & eth3==22 replace lat = 1 if hispanic>=. & eth3==25 replace lat = 1 if hispanic>=. & eth3==28 replace lat = 1 if hispanic>=. & eth3==38 lab var lat "Hispanic Heritage" lab def lat 0 "Other" 1 "Hispanic" lab val lat lat recode race 1=1 2=2 3=4, gen(Race4) replace Race4 = 3 if lat==1 & race!=2 lab var Race4 "Racial ancestry" lab def Race4 1 White 2 Black 3 Latino 4 Other, modify lab val Race4 Race4 gen Partyid7=partyid+1 if partyid<=6 replace Partyid7=.o if partyid==7 replace Partyid7=partyid if partyid>=. lab var Partyid7 "Party identification" lab def Partyid7 1 "Dem: strong" 2 "Dem: not strong" 3 "Ind: lean Dem" 4 "Ind: no lean" 5 "Ind: lean Rep" 6 "Rep: not strong" 7 "Rep: strong" lab val Partyid7 Partyid7 gen Racdisc=racdif1==1 if racdif1<. replace Racdisc=racdif1 if racdif1>=. lab var Racdisc "Discrimination why blacks get less" lab val Racdisc yesno gen Raclack=racdif4==1 if racdif4<. replace Raclack=racdif4 if racdif4>=. lab var Raclack "Blacks lack what it takes" lab val Raclack yesno *** Combine -wrkwayup- & -racdif4- to one variable gen Racresent = 3-wrkwayup+Raclack-Racdisc *** Run Models svy: reg Racresent Partyid i.Region5 if Race4==1 & Repvote<. predict Racres_resid if e(sample), resid svy: logit Repvote i.Region5 Partyid Racres_resid if Race4==1 est stor Base_logit svy: logit Repvote i.Region5 Partyid Racresent if Race4==1 est stor Mediate_logit esttab *_logit , c(b(fmt(3)) se(fmt(3) par)) stat(N, fmt(0)) nocons