STATA COMMAND FOR PANEL DATA ANALYSIS
Declaring panel data
xtset id year
How to fill missing data for panel time series
bysort countryname: ipolate x time, gen(xi) epolate
Suppose you want to describe data:
xtsum y x1 x2 x3 x4
How to run Im-Pesaran-Shin Unit-root test (IPS)
Command for ips unit root for constant and no trend
xtunitroot ips x
For constant and trend:
xtunitroot ips x, trend
Panel unit-root test for constant after taking first difference:
xtunitroot ips d.x
For constant and trend variable after differencing:
xtunitroot ips d.x, trend
How to run correlation matrix:
pwcorr y x1 x2 x3 x4, sig
How to run pooled OLS:
reg y x1 x2 x3 x4
Command for regression with Driscoll-Kraay standard errors:
xtscc y x1 x2 x3 x4 x5, lag(4)
Command for fixed effect (FE) model:
xtreg y x1 x2 x3 x4, fe
Use the following command to store FE result
est sto fe
How to run random effect (RE) model:
xtreg y x1 x2 x3 x4, re
Command for storing random effect result
est sto re
Now run hausman test to choose suitable model between fixed and random effect
If the probability value <0.05, then FE otherwise RE model should be selected.
Command for Breusch and Pagan Lagrangian multiplier (LM) test to choose b/w RE model and
POLS
xttest0
After estimating RE, If the probability value <0.05, then RE is better, otherwise POLS model should be
selected
Command for detecting heteroskedasticity problem:
estat hottest
prob value of more than 10% indicates presence of heteroscedasticity
Command for checking specification error test:
estat ovtest
How to check multicollinearity:
estat vif
Command for detecting serial correlation problem:
xtserial y x1 x2 x3 x4
Command for checking heteroskedasticity in fixed effect
xttest3
How to solve heteroskedasticity problem in FE model
xtreg y x1 x2 x3 x4, fe robust
Command for solving serial correlation in FE model:
xtregar y x1 x2 x3 x4 , fe
How to solve serial correlation when RE model is selected:
xtregar y x1 x2 x3 x4, re
Command for removing outlier data:
winsor x gen(Wx) p(0.1)
Command for fully modified ordinary least square
cointreg y x1 x2 x3 x4 x5, est(fmols) vlag(1) kernel(qs) bmeth(andrews) eqtrend(1) nodivn
Command for dynamic ordinary least square (DOLS)
xtdolshm y x1 x2 x3 x4 x5
Command for canonical cointegration regression:
cointreg smd rq bd lep lpvr un ir, est(ccr) vlag(1) kernel(qs) bmeth(andrews) eqtrend(1) nodivn
Command for Westerlund panel cointegration test:
xtwest y x1 x2 x3 x4, constant lags(1 3) leads(0 3) lrwindow(3)
Command for mean group (MG) model estimation:
xtpmg d.y d.x1 d.x2 d.x3, lr(l.y l.x1 l.x2 l.x3) replace mg
est sto mg
Command for pooled mean group (PMG) model
Xtpmg d.y d.x1 d.x2 d.x3, lr(l.y l.x1 l.x2 l.x3) replace pmg
est sto pmg
The coefficient of the speed of adjustment should be negative, less than one and statistically significant as
a condition for correcting the disequilibrium.
Now use hausman test to compare MG PMG models as follows:
hausman mg pmg sigmamore
If P-value>0.05 then run PMG otherwise MG should be estimated
Choosing between MG and DFE
Run dynamic fixed effect (DFE) model as follows:
xtpmg d.y d.x1 d.x2 d.x3, lr(l.y l.x1 l.x2 l.x3) replace dfe
Assuming you already run and stored MG result then:
Run hausman test to choose between MG and DFE
hausman mg dfe sigmamore
If P-value>0.05 use DFE otherwise use MG
Running PMG model (individual)
xtpmg d.y d.x1 d.x2 d.x3, lr(l.y l.x1 l.x2 l.x3) replace replace full pmg
Running MG model (individual)
xtpmg d.y d.x1 d.x2 d.x3, lr(l.y l.x1 l.x2 l.x3) replace full mg
Command for estimating cross sectional dependency (CD)
pescadf x, lags(1)
pescadf d.x, lags(1)
How to estimate panel unit root test by using CIPS test (2nd generation)
pescadf x, lags(1)
pescadf d.x, lags(1)
How to run augmented mean group
xtmg y x1 x2 x3, trend aug or xtmg y x1 x2 x3, aug
How to run common correlated effect mean group
xtpmg y x1 x2 x3, cce
xtpmg y x1 x2 x3 x4, cce full
Command for dynamic common correlated effect estimator -pooled mean group
xtdcce2 d.y d.L.y d.x1 d.x2, cr(_all) reportc lr(y x1 x2 ) p(y x1 x2)
d.yl d.l.y d.x1 d.x2 y x1 x2
Command for Instrumental variable (2SLS) regression
ivreg lncons (l.lncons = l2.lncons) lnrp lnyd lnps
Command for difference (GMM)
1st step Difference System GMM
xtabond2 y L.y L2.y x1 L.x1 L(0/2).(x2 x3) i.year, gmm(L.y) iv(x1 L.x1 L(0/2).(x2 x3) i.year) nolevel
robust
xtabond2 y L.y L2.y x1 L.x1 L(0/2).(k ys) yr*, gmm(L.(n w k)) iv(L(0/2).ys yr*) nolevel robust small
xtabond2 y L.y L2.y x1 L.x1 L(0/2).(x2 x3) i.year, gmm ( L.(y x1 x2)) iv( L(0/2).x2 i.year) nolevel
robust
Two-step Difference System GMM
xtabond2 y L.y L2.y x1 L.x2 L(0/2).(x2 x3) i.year, gmm(L.y) iv(x1 L.x1 L(0/2).(x2 x3) i.year) nolevel
twostep
Two step difference GMM with Orthogonal sub-option command
xtabond2 y L.y L(0/1).(x1 x2) i.year , gmm(L.(x1 x2 y), lag(1 1) orthog) iv(i.year) h(2) robust twostep
orthog noleveleq
Where xtabond2 stands for gmm command, the variables in the first bracket represents endogenous
variables while the second bracket contains instrumental variables of the model.
Command for System GMM:
To run system gmm, we remove “nolevel” in the ‘difference gmm’ command above
One step System GMM
xtabond2 y L.y L(0/1).(x1 x2) yr*, gmmstyle(L.(y x1 x2)) ivstyle(yr*, equation(level)) robust
small
xtabond2 y L.y L(0/1).(x1 x2) i.year , gmmstyle(L.(y x1 x2)) ivstyle(i.year, equation(level))
robust small
Two step System GMM:
xtabond2 y L.y L(0/1).(x1 x2) i.year , gmmstyle(L.(y x1 x2)) ivstyle(i.year, equation(level))
twostep small
xtabond2 y L.y L(0/1).(x1 x2) yr1978-yr1984, gmm(L.(y x1 x2), lag(1 1)) iv(yr1978-yr1984,
eq(level)) h(2) robust twostep
Command for checking Endogeneity
The first step is to regress using the following command:
ivregress gmm dv X1 X2 X3 (X4=X5 X6)
Then test for endogeneity as follows:
estat endog
A lower probability value is a sign of the endogeneity problem existing in the model
The next step is to test for validity of the instruments used as follows:
estat overid
A higher probability value of the Sagan/Hansen test signifies model is correctly specified
otherwise instruments are invalid.