*! 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