*! v.1.0 -- prediction commands for confa suite; 16 Oct 2008 program define confa_p version 10 * set trace on * di as inp "`0'" syntax anything [if] [in], [EBayes EMPiricalbayes REGression MLE BARTlett SCores] * fork to equation scores or factor scores if "`scores'"!="" EqScores `0' else if "`ebayes'`empiricalbayes'`regression'`mle'`bartlett'" != "" FScores `0' else { di as err "cannot figure those options out" exit 198 } end program define EqScores * implicitly used by _robust and svy * typical request: predict stub*, scores * stub* is not parsed well by newvarlist, have to use anything syntax anything [if] [in], scores marksample touse, novarlist ml score `anything' if `touse' end program define FScores * user requested factor predictions syntax newvarlist [if] [in], [EBayes EMPiricalbayes REGression MLE BARTlett] marksample touse, novarlist if "`ebayes'`empiricalbayes'`regression'`mle'`bartlett'" == "" | /// ( ("`ebayes'`empiricalbayes'`regression'"~="" ) & ("`mle'`bartlett'"~="" ) ) { di as err "One and only one factor scoring option must be specified" exit 198 } else { local nfactors = rowsof( e(Phi) ) if "`: word count `varlist''" ~= "`nfactors'" { di as err "Must specify as many new variables as there were factors in confa model" exit 198 } * generate new variables forvalues k=1/`nfactors' { tempname f`k' qui gen double `f`k'' = . local flist `flist' `f`k'' } if "`ebayes'`empiricalbayes'`regression`" ~= "" { * Empirical Bayes: mata : CONFA_P_EB("`flist'", "`e(observed)'", "`touse'") } if "`mle'`bartlett'" ~= "" { * MLE/Bartlett scoring: mata : CONFA_P_MLE("`flist'", "`e(observed)'", "`touse'") } nobreak { forvalues k=1/`nfactors' { local type : word `k' of `typlist' local name : word `k' of `varlist' qui gen `type' `name' = `f`k'' if `touse' label var `name' `"`e(factor`k')', `ebayes'`empiricalbayes'`regression'`mle'`bartlett' method"' } } } end exit History: v.1.0 -- June 12, 2008: Empirical Bayes and MLE scoring