* Author: Robert J. Franzese, Jr., extended from William D. MacMillan's original code for base AR(y1) case * Prepared for Essex Course on Specification, Day 7 on Temporal Dynamics * complex, conditional dynamic counterfactuals: the DHSY model * Original: 5/21/09; Extension: 08/18/09 clear set mem 600m use http://www-personal.umich.edu/~franzese/debt_699.dta, clear set obs 1000 xtset ctry year gen intpay=(real_ix-growth)*L.debtx gen NoPdebtx1l=nop*L.debtx gen drig=real_ix-growth xtreg D.debtx D.L.debtx D.L2.debtx L2.debtx D.intpay L.intpay NoPdebtx1l D.drig L.drig nop D.ue L.ue D.dxrig L.dxrig D.D.lrgdpc D.L.lrgdpc L.lrgdpc D.oy L.oy ele L.ele cog stax , fe robust ` LRSS Response Unit Shift Unemployment: ' nlcom _b[L.ue]/(-_b[L2.debtx]) ` 90-percent life of effects: ' nlcom ln(.1)/ln(1+_b[L2.debtx]) more xtreg debtx L1.debtx L2.debtx L3.debtx intpay L.intpay NoPdebtx1l drig L.drig nop ue L.ue dxrig L.dxrig lrgdpc L.lrgdpc L2.lrgdpc oy L.oy ele L.ele cog stax , fe robust ` LRSS Response Unit Shift Unemployment: ' nlcom (_b[L.ue]+_b[ue])/(1-(_b[L1.debtx]+_b[L2.debtx]+_b[L3.debtx])) ` 90-percent life of effects: ' nlcom ln(.1)/ln(_b[L1.debtx]+_b[L2.debtx]+_b[L3.debtx]) more matrix bvec = e(b) matrix varcov = e(V) scalar b_l1_y = bvec[1,1] scalar b_l2_y = bvec[1,2] scalar b_l3_y = bvec[1,3] scalar b_intpay = bvec[1,4] scalar b_l1_intpay = bvec[1,5] scalar b_nopdebtx1l = bvec[1,6] scalar b_drig = bvec[1,7] scalar b_l1_drig = bvec[1,8] scalar b_nop = bvec[1,9] scalar b_ue = bvec[1,10] scalar b_l1_ue = bvec[1,11] matrix b = (b_l1_y , b_l2_y , b_l3_y , b_intpay , b_l1_intpay , b_nopdebtx1l , b_drig , b_l1_drig , b_nop , b_ue , b_l1_ue ) matrix v = (varcov[1..11,1..11]) more gen time = _n gen cf_due_1per=0 replace cf_due_1per=1 if _n==4 gen cf_due_perm=1 replace cf_due_perm=0 if _n<3.5 more drawnorm sims_b_l1_y sims_b_l2_y sims_b_l3_y sims_b_intpay sims_b_l1_intpay sims_b_nopdebtx1l sims_b_drig sims_b_l1_drig sims_b_nop sims_b_ue sims_b_l1_ue, cov(v) means(b) gen sumlags = sims_b_l1_y + sims_b_l2_y + sims_b_l3_y * histogram of sum of time-lags' coefficients more hist sumlags more tabstat drig nop, statistics( min p25 mean median p75 max sd ) columns(variables) * compare to conditional time-lags' coefficients sums gen sumlagsATmeans = sims_b_l1_y + sims_b_l2_y + sims_b_l3_y + sims_b_intpay*(-2) + sims_b_l1_intpay*(-2) + sims_b_nopdebtx1l*(2) hist sumlagsATmeans * Now generate dynamic responses ue_shock given dynamics at sample mean more forvalues i = 1/1000 { gen resp_temp_ue_shock`i'=0 gen resp_perm_ue_shock`i'=0 } forvalues i = 1/1000 { qui replace resp_temp_ue_shock`i' = (sims_b_l1_y[`i'])*(resp_temp_ue_shock`i'[_n-1]) + (sims_b_l2_y[`i'])*(resp_temp_ue_shock`i'[_n-2]) + (sims_b_l3_y[`i'])*(resp_temp_ue_shock`i'[_n-3]) + (sims_b_intpay[`i'])*(resp_temp_ue_shock`i'[_n-1])*(-2) + (sims_b_l1_intpay[`i'])*(resp_temp_ue_shock`i'[_n-2])*(-2) + (sims_b_nopdebtx1l[`i'])*(resp_temp_ue_shock`i'[_n-1])*(2) + (sims_b_ue[`i'])*(cf_due_1per[_n]) + (sims_b_l1_ue[`i'])*(cf_due_1per[_n-1]) if _n > 3.5 qui replace resp_perm_ue_shock`i' = (sims_b_l1_y[`i'])*(resp_perm_ue_shock`i'[_n-1]) + (sims_b_l2_y[`i'])*(resp_perm_ue_shock`i'[_n-2]) + (sims_b_l3_y[`i'])*(resp_perm_ue_shock`i'[_n-3]) + (sims_b_intpay[`i'])*(resp_perm_ue_shock`i'[_n-1])*(-2) + (sims_b_l1_intpay[`i'])*(resp_perm_ue_shock`i'[_n-2])*(-2) + (sims_b_nopdebtx1l[`i'])*(resp_perm_ue_shock`i'[_n-1])*(2) + (sims_b_ue[`i'])*(cf_due_perm[_n]) + (sims_b_l1_ue[`i'])*(cf_due_perm[_n-1]) if _n > 3.5 } ** NOTE - A better programmer would substitute some call to sample values for my brute force entry of (-2) and (2) for means here ** egen mean_resp_temp_ue_shock = rowmean(resp_temp_ue_shock*) egen sd_resp_temp_ue_shock = rowsd(resp_temp_ue_shock*) gen upper_resp_temp_ue_shock = mean_resp_temp_ue_shock + 1.645*sd_resp_temp_ue_shock gen lower_resp_temp_ue_shock = mean_resp_temp_ue_shock - 1.645*sd_resp_temp_ue_shock more twoway (rarea upper_resp_temp_ue_shock lower_resp_temp_ue_shock time) (line mean_resp_temp_ue_shock time) if time<50, ti("effect of a 1-period unit shock to unemployment") graphregion(ic(white) color(white)) ylabel(, glc(gs12) glw(thin)) legend(bmargin(zero) region(lw(thin) lc(white))) legend(off) more egen mean_resp_perm_ue_shock = rowmean(resp_perm_ue_shock*) egen sd_resp_perm_ue_shock = rowsd(resp_perm_ue_shock*) gen upper_resp_perm_ue_shock = mean_resp_perm_ue_shock + 1.645*sd_resp_perm_ue_shock gen lower_resp_perm_ue_shock = mean_resp_perm_ue_shock - 1.645*sd_resp_perm_ue_shock twoway (rarea upper_resp_perm_ue_shock lower_resp_perm_ue_shock time) (line mean_resp_perm_ue_shock time) if time<50, ti("effect of a permanent unit shock to unemployment") graphregion(ic(white) color(white)) ylabel(, glc(gs12) glw(thin)) legend(bmargin(zero) region(lw(thin) lc(white))) legend(off)