# umx!

## Factor scores with missing data!

It is often useful to obtain scores for subjects on the latent variables in a model.

A familiar method is `scores` from `fact.anal`. This has several limits: It’s limited to factor models and can’t handle missing data. This tutorial covers both cases briefly, begining with `umxEFA`.

#### Factor scores from factor analysis

`umx` provides `umxEFA` to conduct exploratory factor analysis, and this supports returning scores for subjects. Unlike `fact.anal` which doesn’t allow missing data, `umxEFA` support scores even in data with missing cells.

Like `fact.anal`, to get scores from `umxEFA` you simply set `scores = "Regression"`. `umxEFA` supports alternative methods for computing them.

Here’s a quick 2-factor model of some variables in the built-in `mtcars` data set:

``````myVars = c("mpg", "disp", "hp", "wt", "qsec")
x = umxEFA(mtcars[, myVars], factors =   2, rotation = "promax", scores= "Regression")
x
``````
row F1 F2
1 -0.50791846 -0.18514471
2 -0.33064492 0.06552157
3 -0.94419567 0.50718985
4 -0.15293406 0.65402567
5 0.34436572 -0.60262537
6 0.00162507 0.96319721
7 0.66518005 -1.47386057

#### Factor scores from arbitrary RAM models.

``````require(umx)
data(demoOneFactor)

manifests = names(demoOneFactor)
m1 = umxRAM("OneFactor", data = demoOneFactor,
umxPath("G", to = manifests),
umxPath(v.m. = manifests),
umxPath(v1m0 = "G")
)
``````

We can compute factor scores thus:

``````fs = umxFactorScores(m1, 'Regression')
``````
row G
1 -0.17
2 -0.11
3 -2.14
4 -0.16
5 1.11
6 0.11
7 -0.02
8 0.93

### Create some missing data and compute factor scores

All the data-points of demoOneFactor are present. Let’s delete 10% from each column at random:

``````df = demoOneFactor
n = dim(df);
for (i in dim(df)) {
df[sample(n, .1 * n), i] = NA
}
all(complete.cases(df))
``````

Run again with the missing data:

``````# 1. update model with new data
m2 = mxModel(m1, mxData(df, type = "raw"))
# 2. score factors
fs = umxFactorScores(m2, 'Regression')
umx_round(fs, digits=3)
``````
row G
1 -0.167
2 -0.106
3 -2.137
4 -0.157
5 1.106
6 0.110

Just saved yourself \$1000 buying Mplus for factor scores with missing data!