开发者

Plotting More than 2 Factors

开发者 https://www.devze.com 2023-03-23 21:22 出处:网络
Suppose I ran a factor analysis & got 5 relevant factors. Now, I want to graphically represent the loading of these factors on the variables. Can anybody please tell me how to do it. I can do usin

Suppose I ran a factor analysis & got 5 relevant factors. Now, I want to graphically represent the loading of these factors on the variables. Can anybody please tell me how to do it. I can do using 2 factors. But can't able to do when number of factors are more than 2.

The 2 factor plotting is given in "Modern Applied Statistics with S", Fig 11.13. I want to create similar graph but with more than 2 factors. Please find the snap of the Fig mentio开发者_开发知识库ned above:

Plotting More than 2 Factors

X & y axes are the 2 factors.

Regards, Ari


Beware: not the answer you are looking for and might be incorrect also, this is my subjective thought.

I think you run into the problem of sketching several dimensions on a two dimension screen/paper. I would say there is no sense in plotting more factors' or PCs' loadings, but if you really insist: display the first two (based on eigenvalues) or create only 2 factors. Or you could reduce dimension by other methods also (e.g. MDS).

Displaying 3 factors' loadings in a 3 dimensional graph would be just hardly clear, not to think about more factors.


UPDATE: I had a dream about trying to be more ontopic :)

You could easily show projections of each pairs of factors as @joran pointed out like (I am not dealing with rotation here):

f <- factanal(mtcars, factors=3)
pairs(f$loadings)

Plotting More than 2 Factors

This way you could show even more factors and be able to tweak the plot also, e.g.:

f <- factanal(mtcars, factors=5)
pairs(f$loadings, col=1:ncol(mtcars), upper.panel=NULL, main="Factor loadings")
par(xpd=TRUE) 
legend('topright', bty='n', pch='o', col=1:ncol(mtcars), attr(f$loadings, 'dimnames')[[1]], title="Variables")

Plotting More than 2 Factors

Of course you could also add rotation vectors also by customizing the lower triangle, or showing it in the upper one and attaching the legend on the right/below etc.

Or just point the variables on a 3D scatterplot if you have no more than 3 factors:

library(scatterplot3d)
f <- factanal(mtcars, factors=3)
scatterplot3d(as.data.frame(unclass(f$loadings)), main="3D factor loadings", color=1:ncol(mtcars), pch=20)

Plotting More than 2 Factors

Note: variable names should not be put on the plots as labels, but might go to a distinct legend in my humble opinion, specially with 3D plots.


It looks like there's a package for this: http://factominer.free.fr/advanced-methods/multiple-factor-analysis.html

Comes with sample code, and multiple factors. Load the FactoMineR package and play around.

Good overview here: http://factominer.free.fr/docs/article_FactoMineR.pdf

Graph from their webpage:

Plotting More than 2 Factors


You can also look at the factor analysis object and see if you can't extract the values and plot them manually using ggplot2 or base graphics.


As daroczig mentions, each set of factor loadings gets its own dimension. So plotting in five dimensions is not only difficult, but often inadvisable.

You can, though, use a scatterplot matrix to display each pair of factor loadings. Using the example you cite from Venables & Ripley:

#Reproducing factor analysis from Venables & Ripley
#Note I'm only doing three factors, not five
data(ability.cov)
ability.FA <- factanal(covmat = ability.cov,factor = 3, rotation = "promax")
load <- loadings(ability.FA)
rot <- ability.FA$rot

#Pairs of factor loadings to plot
ind <- combn(1:3,2)
par(mfrow = c(2,2))
nms <- row.names(load)
#Loop over pairs of factors and draw each plot
for (i in 1:3){
    eqscplot(load[,ind[1,i]],load[,ind[2,i]],xlim = c(-1,1),
        ylim = c(-0.5,1.5),type = "n",
        xlab = paste("Factor",as.character(ind[1,i])),
        ylab = paste("Factor",as.character(ind[2,i])))
    text(load[,ind[1,i]],load[,ind[2,i]],labels = nms)

    arrows(c(0,0),c(0,0),rot[ind[,i],ind[,i]][,1],
        rot[ind[,i],ind[,i]][,2],length = 0.1)
}

which for me resulting in the following plot:

Plotting More than 2 Factors

Note that I had to play a little with the the x and y limits, as well as the various other fiddly bits. Your data will be different and will require different adjustments. Also, plotting each pair of factor loadings with five factors will make for a rather busy collection of scatterplots.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号