program define pantest2 * Requires name of time variable as 1st argument * *! Version 1.0.2 *! 10/09/98 * * Various diagnostic tests in fixed effects panel regression. * (1) Test for serial correlation of residuals [See B.H. Baltagi * "Econometric analysis of panel data" (Wiley, 1995), pp. 93-100]. * (2) F test for significance of fixed effects [Baltagi (1995), p.12] * (3) Test for normality of residuals * version 5.0 if "`1'"=="" { dis in red "Name of time variable required as 1st argument" exit } confirm variable `1' if "$S_E_cmd2"~="xtreg_fe" { dis "last command was not xtreg ..., fe" error 301 } tempname np LM LM5 see see1 N T nobs chi URSS K tempvar e ee ee1 sumee sumee1 smpl * scalar `T'= S_E_nobs/S_E_n * Actually, this is 'Tbar' if panel is unbalanced scalar `N'= S_E_n scalar `nobs'=S_E_nobs scalar `URSS'=S_E_sse * "Unrestricted Residual Sum of Squares" from within regression scalar `K' = $S_E_dfb * No of RHS variables, excluding constant & fixed effects local depvar $S_E_depv local rhsvl $S_E_vl local id $S_E_ivar * * (1) Test for serial correlation in residuals * qui { xtpred `e', e sort `id' `1' gen `ee'=`e'*`e' gen `sumee'=sum(`ee') drop `ee' scalar `see'=`sumee'[_N] drop `sumee' gen `ee1'=`e'*`e'[_n-1] if `id'==`id'[_n-1] /* omit 1st obs on each unit */ gen `sumee1'=sum(`ee1') drop `ee1' scalar `see1'=`sumee1'[_N] drop `sumee1' scalar `LM'=`N'*`T'*(`T'/(`T'-1))*((`see1'/`see')^2) * strictly, valid only for balanced panel scalar `LM5'=sqrt(`LM') * strictly, valid only for balanced panel scalar `chi'=chiprob(1,`LM') scalar `np'=1-normprob(abs(`LM5')) } * dis _newline dis in gr "Test for serial correlation in residuals" dis in gr "Null hypothesis is either that rho=0 if residuals are AR(1)" dis in gr "or that lamda=0 if residuals are MA(1)" if $S_E_Tcon==0 /* */ {dis in gr "Following tests only approximate for unbalanced panels" } dis in gr "LM= " in ye `LM' dis in gr "which is asy. distributed as chisq(1) under null, so:" dis in gr "Probability of value greater than LM is " in ye `chi' dis in gr "LM5= " in ye `LM5' dis in gr "which is asy. distributed as N(0,1) under null, so:" dis in gr "Probability of value greater than abs(LM5) is " in ye `np' dis _newline * * (2) Test for significance of fixed effects [Baltagi (1995), p.12]. * tempname F RRSS quietly { fit `depvar' `rhsvl' scalar `RRSS'=_result(4) scalar `F'=((`RRSS'-`URSS')/(`N'-1))/(`URSS'/(`nobs'-`N'-`K')) } dis in gr "Test for significance of fixed effects" dis in gr "F= " in ye `F' dis in gr "Probability>F= " in ye fprob(`N'-1,`nobs'-`N'-`K',`F') dis _newline * * (3) Test for normality of residuals * dis in gr "Test for normality of residuals" sktest `e' dis _newline * end