The paper "Exploiting Information From Singleton in Panel Data Analysis" (joint with RL Bruno and M Stampini) has been published in Economics Letters: https://doi.org/10.1016/j.econlet.2019.07.004
We are working to build a STATA command for this estimator.
In this page we share the STATA codes used to perform the Monte Carlo simulations and the empirical analysis reported in the paper.
Monte Carlo simulations have been obtained using the following program.
We first simulate the observations for the full balanced panel of Ns+Np units, and then randomly assign the unique observation period for the singleton units. FE and GMM estimates are then obtained.
program define bsgmm, rclass syntax [, nbal(integer 100) ns(integer 100) tbal(integer 2) delta1(real 1) delta2(real 1) delta3(real 1) sigma2alpha(real 1) sigma2e(real 1)] drop _all tempvar iii ttt y x alphai gammai xxi xdemeaned balobs xcs ycs xobs periodoobs local nobs = (`nbal' + `ns')*`tbal' set obs `nobs' * set the unit and time variables gen `iii' = (ceil(_n/`tbal')) gen `ttt' = _n-`tbal'*(`iii'-1) sort `iii' `ttt' xtset `iii' `ttt' * Data generating process gen `alphai'=invnorm(uniform()) if `ttt'==1 by `iii': replace `alphai' = `alphai'[1] gen `gammai'=invnorm(uniform()) if `ttt'==1 by `iii': replace `gammai' = `gammai'[1] gen `x' = `delta1' * `alphai' + `delta2' * `gammai' + `delta3'*invnorm(uniform()) gen `y' = `x' + sqrt(`sigma2alpha')*`alphai' + invnorm(uniform())*sqrt(`sigma2e') drop `alphai' `gammai' * Randomly assign the period of observation for the singleton units gen `periodoobs'=runiformint(1,`tbal') if `ttt'==1 by `iii': replace `periodoobs' = `periodoobs'[1] replace `x'=. if `iii'>`nbal' & `ttt'!=`periodoobs' replace `y'=. if `iii'>`nbal' & `ttt'!=`periodoobs' gen `balobs'=0 replace `balobs'=1 if `iii'<=`nbal' * Within-group estimator xtreg `y' `x' , fe return scalar coeffbfe = _b[`x'] * GMM estimator sort `iii' `ttt' * Generate demeaned indpendent variable (within-group transformation) to be used as instrument by `iii': egen `xxi' = mean(`x') gen `xdemeaned' = `x'-`xxi' * Generate new variables that only contain values for the singleton units gen `xcs' = `x' if `iii'>`nbal' gen `ycs' = `y' if `iii'>`nbal' * GMM estimtor that allows exploiting information from the singletongmm (consres: `y' - {b1}*`x' -{b0}) (biasres: `y' - ({b1} +{d1})*`x' -({b0}+{d0})) (biasrescs: `ycs' - ({b1} +{d1})*`xcs' -({b0}+{d0})) , /// instruments(consres: `xdemeaned') instruments(biasres: `x') instruments(biasrescs: `xcs' ) twostep winitial(unadjusted, independent) /// nocommonesample vce(cluster `iii') wmatrix(cluster `iii') quickderivatives return scalar coeffb1gmm = _b[b1:_cons] return scalar coeffb0gmm = _b[b0:_cons] return scalar coeffd1gmm = _b[d1:_cons] return scalar coeffd0gmm = _b[d0:_cons] end