I'm working from caracal's great example conducting a factor analysis on dichotomous data using R and I'm now struggling to understand the difference between VSS complexity 1 and VSS complexity 2 in the Very Simple Structure (vss) from the psych package.

I read the help page here and the psych manual, but I think it is some statistical concept I do not get. The thing is that only the recommended number of factors from complexity 2 makes sense to me (complexity 1 suggest 1 factor ...).

Can anyone help me understand these two complexity levels from the vss function in R's psych package?

Please see caracal's example for the working example.

  • 1
    $\begingroup$ I haven't read through - just glanced over - the documents you link to, and I'm not R user. Nonetheless what seems clear to me is that "complexity" is just the number of factors you are testing, i.e. the number of columns in loading matrix A. VSS = 1-ss(R-AA')/ss(R), where R is the correlation matrix, "ss" means "sum of squared elements". By A in this formula the author means simplified loading matrix A, that is, matrix A after you have rounded low loadings in it to zero. If I'm correct. $\endgroup$
    – ttnphns
    Jul 20, 2012 at 7:00

1 Answer 1


When you use the very simple structure method, you can choose between the VSS and the MAP criteria, that not ever reach to identical conclusions. Of course your VSS complexity 2 value is greater than the value of VSS complexity 1: you have to consider the greater value, so you can accept the complexity 2 solution (if I'm not mistaking about your data). However, check also the Velicer MAP criterion, because the VSS criterion not ever is optimal. How many factors the MAP suggests you to retain? Are MAP and VSS in agree?

I suggest you to perform also a parallel analysis, submitting the tetrachoric correlation matrix (since your data are dichotomic).

A last suggestion. Recently, Ruscio and Roche have proposed a novel method to determine the optimal factor solution by comparison data (CD). Rather than generating random data, like parallel analysis does, this method use a simulation technique that reproduces the research data varying the factor structure, so it compares the correlation matrix of your data with that from simulated 1 factor data, 2 factors, 3 factors... and so on (you choose how many factors the program has to generate and compares). Although this is a recent method, I think it is promising, and so I suggets you to try it. The authors provide the R code to implement this method here. You have only to downlod the page as a text file and then import in R the program (source(txt file directory)).

Once you have imported the script, the command to conduct the analysis is very simple. In this case, x is a data frame with 9 variables, created such that there are three correlated factors:

> EFA.Comp.Data(Data=x, F.Max=9, Graph=T) # use the method on the data frame 'x'
                                          # extract from 1 to 9 factors
                                          # and plot the results
Number of factors to retain:  3

enter image description here

The program output returns you the number of factors to retain and in the graph you can see the number of factors and the relative RMSR eigenvalue. Note that when your data frame has many variables, the simulation process is slow, so you have to wait a bit for the results.

If I perform a VSS on the same data, the results are:

> vss(x)
Very Simple Structure
Call: VSS(x = x, n = n, rotate = rotate, diagonal = diagonal, fm = fm, 
n.obs = n.obs, plot = plot, title = title)
VSS complexity 1 achieves a maximimum of 0.79  with  1  factors
VSS complexity 2 achieves a maximimum of 0.88  with  6  factors

The Velicer MAP criterion achieves a minimum of 0.06  with  3  factors

Velicer MAP
[1] 0.10 0.10 0.06 0.10 0.16 0.27 0.50 1.00

Very Simple Structure Complexity 1
[1] 0.79 0.68 0.68 0.68 0.68 0.68 0.68 0.69

Very Simple Structure Complexity 2
[1] 0.00 0.87 0.87 0.86 0.86 0.88 0.88 0.75

As you can see, the MAP criterion is the only that give the correct 3 factors solution. And if I do a parallel analysis:

> fa.parallel(x)
Parallel analysis suggests that the number of factors =  3  and the number of components =  3

The PA results are correct. This is the reason why I suggest you to use both PA and CD, and compare the two techniques. And if you want to use the VSS method, the MAP criterion is more reliable.

Hope this helps. Cheers.



Ruscio, J., & Roche, B. (2012). Determining the number of factors to retain in an exploratory factor analysis using comparison data of known factorial structure. Psychological Assessment, 24, 282-292. (PubMed abstract)

  • $\begingroup$ Thank you for an extensive and very informative explanation! To answered your question, my vss, with varimax rotation, suggests 1 factor at complexity 1, 8 factors at complexity 1, and The Velicer MAP criterion achieves a minimum of 1 factor. With the oblimin rotation the vss suggest 1 factor at complexity 1, 3 factors at complexity 1, and The Velicer MAP criterion achieves a minimum of 1 factor. Finall, Ruscio and Roche's CD suggest 1 factor. It might be that my data is not that good. $\endgroup$
    – Eric Fail
    Jul 21, 2012 at 23:24
  • $\begingroup$ Why do you think your data are not good? I think that you should retain one factor, considering both the MAP and the CD. Try also the parallel analysis... $\endgroup$ Jul 22, 2012 at 7:42

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.