# Applied Analysis Note 3

Getting factor scores using a fixed set of parameter estimates.

Context: You want to use Mplus both as a parameter estimating machine and as a factor score generating machine. But, you want to apply parameter estimates to a wider sample than used in the parameter estimating procedure. In the following example, we estimate item parameters in a baseline sample, and then use those parameter estimates as fixed values including all observed (longitudinal) observations.

Note: it might be easier in the context of a longitudinal study to estimate a single measurement model for all observations (all time points) in a vertically stacked data set, and then standardize the factor score to some meaningful metric. But in case you really want to do it the hard way:

Example Stata and Stata/Runmplus code

``---------------------------------------``
``      capture log close``
``      log using c:\trash\fragment.log , text replace``
``      * note: newid is a unique identifier that``
``      * combines projid+time``
``      * modify the model generation process to incorporate other parameters.``
``      use c:\trash\ros.dta, clear``
``      _return drop _all``
``      * ESTIMATE THE BASELINE MEASUREMENT MODEL``
``      runmplus mmy* newid if obs==1, idvar(newid) cat(all) ///``
``          model(g by mmy1-mmy28*; g@1;) est(mlr) log(off)``
``      _return hold estimate``
``      _return restore estimate, hold``
``      * RUNMPLUS STORES PARAMETER ESTIMATES IN A ``
``      * MATRIX r(estimate).  HERE WE EXTRACT THOSE ``
``      * PARAMETER ESTIMATES AND BUILD A NEW Mplus ``
``      * MODEL STATEMENT``
``      mat b=r(estimate)``
``      foreach y of varlist mmy* {``
``         mat l=b["g_by_`y'",1]``
``         local l=l[1,1]``
``         local model "`model' g by `y'@`l'; "``
``         local j=0``
``         levelsof `y' , clean ``
``         foreach t in `r(levels)' {``
``            if `j'>0 {``
``               mat t=b["thresholds_`y'\$`j'",1]``
``               local t=t[1,1]``
``               local model "`model' [`y'\$`j' @ `t'];"``
``            }``
``            local j=`j'+1``
``         }``
``      }``
``      * Note that we will freely estimate the mean and ``
``      * variance of the factor. It is neither reasonable nor``
``      * interesting to assume that the mean and variances ``
``      * are constant over time``
``      local model "`model' g*`variances_g'; [g*];"``
``      di "`model'"``
``      * NOW WE RUN THE MODEL WITH MOSTLY FIXED PARAMETERS ``
``      * USING RUNMPLUS WITH THE SAVEDATA/FSCORES OPTION ``
``      runmplus mmy* newid , idvar(newid) cat(all) model(`model') log(off) est(mlr) ///``
``         savelog(c:\trash\trash) savedata(file is c:\trash\trash.dat; save is fscores;) ``
``      * NOW WE GO THROUGH THE MACHINATIONS NECESSARY TO BRING``
``      * THE FACTOR SCORE ESTIMATES BACK INTO THE WORKING STATA FILE``
``      preserve``
``      runmplus_load_savedata , out(c:/trash/trash.out) clear``
``      keep newid g``
``      sort newid``
``      tempfile f1``
``      save `f1'``
``      restore``
``      merge newid using `f1' , sort``
``      table _merge``
``      drop _merge``
``      su g``
``      table obs, c(mean g sd g) f(%8.3f)``
``      * NOW WE CAN USE THE FACTOR SCORE ESTIMATES``
``      * IN ANOTHER MODEL, LIKE A LATENT GROWTH CURVE MODEL``
``      * I SELECT ONLY OBSERVATIONS UP TO AND INCLUDING 10``
``      * BECAUSE DATA ARE MISSING AT THE FAR OBSERVATION``
``      * POINTS A RANDOM EFFECTS MODEL (TYPE=RANDOM WITH TSCORES)``
``      * WOULD BE BETTER FOR THESE DATA``
``      keep if obs<=10``
``      keep projid obs g``
``      reshape wide g , i(projid) j(obs)``
``      local model="i s | "``
``      foreach i of numlist 1/10 {``
``         local j=`i'-1``
``         local model = "`model' g`i'@`j'"``
``      }``
``      local model "`model'; retest by g2-g10@1; retest@0; [retest*]; i s with retest@0; "``
``      runmplus g* , model(`model') coverage(.02)``
``      ``
``      log close``
``      ``

Tags: factor analysis, factor scores, item response theory, runmplus, savedata, fscores, runmplus_load_savedata