# Factor scores from discrete, ordinal responses

Is there a principled way to estimate factor scores when you have ordinal, discrete variables.

I have $n$ ordinal, discrete, variables. If I make the assumption that underlying each response is a continuous, normally distributed variable, then I can calculate an $n\times n$ polychoric correlation matrix. I can then run a factor analysis on this matrix and get factor loadings for each variable.

How can I combine the factor loadings and the variables to estimate the factor scores. The typical ways to estimate scores would appear to require that I treat the ordinal data as interval.

I suppose I might need to dig deeper into the guts of polychoric correlation to figure out a link function.

The 'principled' approach (that is to say the a priori defensible approach that may not empirically make much difference) is to use a graded response model, a rather useful member of the IRT family often used for Likert type items. The R package ltm makes this very straightforward.

You're then assuming there is a ordinal logistic regression relationship between the unobserved trait and each of your indicators. Choosing this model class allows you to take the ordinal nature of the indicators seriously and provides information about what part of the trait each item is most informative about. Like factor analysis, it gives you a standard error for the score, although FA people seem to ignore these for some reason.

On the other hand, choosing this model class limits your ability to do all the classic factor analysis stuff like rotating things until you like the look of them. I think this is a plus, but reasonable people disagree. If you're doing that sort of thing to find out how many 'scales' you have, you'll want to look at the Mokken procedures that try to identify scales, since the FA 'fit another dimension and rotate to simple structure' won't work.

• +1 but what would be the rationale for considering a rotation when the GRM actually assumes an unidimensional scale? – chl Dec 15 '10 at 20:00
• @chl The thought was that some people rotate to simple structure to be able to say things like 'indicators 1-4 measure one thing and indicators 5-11 measure something else' on the basis of the rotated loadings. The related but not quite identical thought with the IRT approach would be to say things like: 'this Mokken procedure tells me there's a scale underlying indicators 1-4 and another one underneath 5-11 so I'll apply my graded response model to each subset separately'. Hope that makes better sense. – conjugateprior Dec 15 '10 at 22:27
• Yes, indeed. Thanks for clarifying what I've extrapolated from your last sentence. Still we have no way of linking each latent trait if it happens they are truly correlated (unless looking at MIRT). – chl Dec 15 '10 at 23:48

It's commonplace to extract factor scores from ordinal-variable indicators. Researchers using likert measures do it all the time. Because factor scores are based on covariance, it's usually not that big a deal that the "intervals" might not be uniform within and across items, particularly if the items are comparable & use reasonably-compact scales (e.g., 5 or 7 pt "agree/disagree" likert items): all the subjects are responding to the same items, and if the items are indeed valid measures of some latent variable, the responses should should display a uniform covariance pattern. See Gorsuch, R. L. (1983). Factor Analysis. Hillsdale, NJ: Lawrence Erlbaum. 2nd. ed., pp. 119-20. But if bothers you to assume the responses for you ordinal variables are linear -- or even more important, if you want factor scores that aren't linear but reflect recurring nonlinear associations among categorical items (as you would be doing if your variables were nominal or qualitative)-- you should use a nonlinear scaling alternative to conventional factor analysis, such as latent class analysis or item response theory. (There is of course a family resemblance between this query and your query on use of ordinal predictors in logit regression models; maybe I can once again inspire chi or someone else who knows more than I to treat us to an even more fine-grained account of why you needn't worry-- or maybe why you should.)

Can I just clarify something here please, do you have items scored on different scales you need to pre-process and combine (interval, ordinal, nominal), or are you looking to do a factor analysis on just ordinal scale variables?

If it is the latter - here is one approach.

http://cran.r-project.org/web/packages/Zelig/vignettes/factor.ord.pdf

(note this link is now dead). There are other vignettes up, but not this one.

• Here is a mirrored version of the original vignette, in case it helps: bit.ly/x6eI4x. – chl Mar 15 '12 at 14:57
• That code does not seem to be implemented – fgregg Jun 15 '13 at 19:38