*! version 1.0.6 06feb2023 sk dcs program define ardl_p , sortpreserve version 11.2 syntax newvarname [if] [in] , /// must parse using 'newvarname' as this automatically defines `typlist' [ xb /// default Residuals /// ec /// ] marksample touse , novarlist if "`e(cmd)'" != "ardl" exit 301 local nstats : word count `xb' `residuals' `ec' if `nstats' > 1 { disp as error "More than one statistic specified." exit 198 } if `nstats'==0 { local xb xb disp as text "(option xb assumed; fitted values)" } tempname b matrix `b' = e(b) if "`xb'`residuals'"!="" { tempvar xbtemp if "`e(model)'"=="ec" { tempvar ec tempname srpart // may be variable or scalar qui predict double `ec' if `touse' , ec tempname srmat capture matrix `srmat' = `b'[1, "SR:"] if !_rc { qui matrix score `srpart' = `srmat' if `touse' } else { scalar `srpart' = 0 // no SR-part in model } if "`xb'"!="" { gen `typlist' `varlist' = `b'[1,1] * `ec' + `srpart' if `touse' label variable `varlist' "ardl: fitted values" } else { gen `typlist' `varlist' = `e(depvar)' - `b'[1,1] * `ec' - `srpart' if `touse' label variable `varlist' "ardl: residuals" } } else { qui mat score double `xbtemp' = `b' if `touse' if "`xb'"!="" { gen `typlist' `varlist' = `xbtemp' if `touse' label variable `varlist' "ardl: fitted values" } else { gen `typlist' `varlist' = `e(depvar)' - `xbtemp' if `touse' label variable `varlist' "ardl: residuals" } } exit } if "`ec'"!="" { if "`e(model)'"!="ec" { disp as error "Estimation not in error-correction form." exit 198 } tempname ecx y matrix `y' = 1 tsrevar `e(depvar)' , list // get rid of "D." or other TS ops before depvar local depvar = r(varlist) matrix colnames `y' = LR:L.`depvar' capture matrix `ecx' = -1 * `b'[1, "LR:"] matrix `ec' = (`y' , nullmat(`ecx')) // `ecx' does not exist if model contains no LR-xregs or LR deterministics matrix score `typlist' `varlist' = `ec' if `touse' , equation(LR) label variable `varlist' "ardl: error-correction term" } end