Statistics Toolbox | ![]() ![]() |
Factor Rotation
As the results above illustrate, the estimated loadings from an unrotated Factor Analysis fit can have a complicated structure. The goal of factor rotation is to find a parameterization in which each variable has only a small number of large loadings, i.e., is affected by a small number of factors, preferably only one. This can often make it easier to interpret what the factors represent.
If you think of each row of the loadings matrix as coordinates of a point in M-dimensional space, then each factor corresponds to a coordinate axis. Factor rotation is equivalent to rotating those axes, and computing new loadings in the rotated coordinate system. There are various ways to do this. Some methods leave the axes orthogonal, while others are oblique methods that change the angles between them. For this example, rotate the estimated loadings by using the promax criterion, a common oblique method.
[LoadingsPM,specVarPM] = factoran(stocks,3,'rotate','promax'); LoadingsPM LoadingsPM = 0.9452 0.1214 -0.0617 0.7064 -0.0178 0.2058 0.3885 -0.0994 0.0975 0.4162 -0.0148 -0.1298 0.1021 0.9019 0.0768 0.0873 0.7709 -0.0821 -0.1616 0.5320 -0.0888 0.2169 0.2844 0.6635 0.0016 -0.1881 0.7849 -0.2289 0.0636 0.6475
Promax rotation has created a simpler structure in the loadings, one in which most of the stocks have a large loading on only one factor. To see this more clearly, you can plot each stock using the factor loadings as coordinates. "Simple" structure in the loadings appears in this plot as stocks that fall along one of the factor axes. Because there are three factors, it's easier to see the loadings if you make a pair of two-dimensional plots.
subplot(1,2,1); plot(LoadingsPM(:,1),LoadingsPM(:,2),'b.'); text(LoadingsPM(:,1),LoadingsPM(:,2), num2str((1:10)')); line([-1 1 NaN 0 0 NaN 0 0],[0 0 NaN -1 1 NaN 0 0],... 'Color','black'); xlabel('Factor 1'); ylabel('Factor 2'); axis square; subplot(1,2,2); plot(LoadingsPM(:,1),LoadingsPM(:,3),'b.'); text(LoadingsPM(:,1),LoadingsPM(:,3), num2str((1:10)')); line([-1 1 NaN 0 0 NaN 0 0],[0 0 NaN -1 1 NaN 0 0],... 'Color', 'black'); xlabel('Factor 1'); ylabel('Factor 3'); axis square;
This plot shows that promax has succeeded in rotating the factor loadings to a simpler structure. Each stock depends primarily on only one factor, and it is possible to describe each factor in terms of the stocks that it affects. Based on which companies are near which axes, you could reasonably conclude that the first factor axis represents the financial sector, the second retail, and the third technology. The original conjecture, that stocks vary primarily within sector, is apparently supported by the data.
![]() | Example: Finding Common Factors Affecting Stock Prices | Predicting Factor Scores | ![]() |