*! archlm V1.11 C F Baum/Vince Wiggins 9823 program define archlm, rclass version 6.0 syntax [if] [in] [,Lags(numlist integer>0) Nosample] if "`e(cmd)'" ~= "regress" { error 301 } if "`lags'" == "" { local lags=1 } marksample touse if "`sample'" == "" { qui replace `touse' = 0 if !e(sample) } /* get time variables */ _ts timevar, sort markout `touse' `timevar' tempname res2 /* fetch residuals */ qui predict double `res2' if `touse' , res qui replace `res2' = `res2'*`res2' qui count if `touse' return scalar N = r(N) tsreport if `touse', report return scalar N_gaps = r(N_gaps) qui count if `touse' return scalar N = r(N) return scalar k = e(N) - e(df_r) tokenize `lags' local i 1 while "``i''" != "" { ArchLM1 ``i'' `res2' return scalar arch``i'' = r(arch) return scalar df``i'' = r(df) return scalar p``i'' = r(p) local i = `i' + 1 } return local lags `lags' end program define ArchLM1, rclass args lags res2 tempname regest /* regress resids^2 on lagged * resids^2 to order `lags' */ estimates hold `regest' qui regress `res2' l(1/`lags').`res2' return scalar arch = e(N)*e(r2) return scalar df = `lags' return scalar p = chiprob(`lags',return(arch)) estimates unhold `regest' di in gr "ARCH LM test statistic, order(" %3.0f `lags' "): " /* */ in ye %9.0g return(arch) in gr /* */ in gr " Chi-sq(" %2.0f return(df) ") P-value = " /* */ in ye %6.0g return(p) end exit