clear all set mem 200M capture program drop xtivp1 program xtivp1 version 11 syntax varlist if, at(name) rhs(varlist) depvar(varlist) idvar(varlist) quietly { tempvar mu mubar ybar generate double `mu' = 1 `if' local i 1 foreach var of varlist `rhs' { replace `mu' = `mu' * exp(`var' * `at'[1,`i']) `if' local `++i' } egen double `mubar' = mean(`mu') `if', by(`idvar') egen double `ybar' = mean(`depvar') `if', by(`idvar') replace `varlist' = `depvar' - `mu'*`ybar'/`mubar' `if' } end capture program drop xtivp3 program xtivp3 version 11 syntax varlist if, at(name) rhs(varlist) depvar(varlist) idvar(varlist) quietly { tempvar mu gen double `mu' = 0 `if' local j 1 foreach var of varlist `rhs' { replace `mu' = `mu' + `var' * `at'[1,`j'] `if' local `++j' } replace `mu' = exp(`mu') replace `varlist' = (`depvar'/`mu') - (L.`depvar' / L.`mu') `if' } end ***** TEST REGRESSIONS ******* /* Simulated Data to Test Code*/ ** Y= 0.3 X + \gamma_i + lambda_t + \varepsilon set obs 150000 set seed 12345 gen id = floor(_n/8) bysort id: gen t = _n gen tmp = rnormal(0,1) replace tmp = -900000 if t>1 by id: egen gamma = max(tmp) drop tmp gen lambda = 0.01*t + runiform() gen epsilon = rnormal(0,2) gen x = runiform() gen y = exp(0.3*x + gamma + lambda + epsilon) gen z = 0.7*x + rnormal(0,0.2) ** Model 1: Poisson Fixed Effects (identical to xtpoisson, fe) ** gmm xtivp1, neq(1) depvar(y) rhs(x t) parameters(b1 b2) instruments(x t, noconstant) idvar(id) vce(cluster id) onestep xtpoisson y x t, fe i(id) robust gmm xtivp1, neq(1) depvar(y) rhs(x t) parameters(b1 b2) instruments(z t, noconstant) idvar(id) vce(cluster id) onestep ** Model 2: Poisson Quasi-Diffs ** xtset id t gmm xtivp3, neq(1) depvar(y) rhs(x t) parameters(b1 b2) instruments(x t, noconstant) idvar(id) vce(cluster id) onestep gmm xtivp3, neq(1) depvar(y) rhs(x t) parameters(b1 b2) instruments(z t, noconstant) idvar(id) vce(cluster id) onestep