I am using parallel analysis (Horn 1965) to determine how many principal components I can extract from my data. I can add more variables to my dataset, but I cannot add more cases (I know, that's weird, see below for some more context). Presently, using a fixed number of cases (77), and relatively few variables (17), I can only be parallel-analysis-certain about 2 components (because only those parallel-analysis discounted eigenvalues are > 1), which isn't great for my purposes. I am wondering whether it would make sense to add more variables to alleviate this problem, that is, whether that would allow me to retain more components, that pass muster under parallel analysis.

It seems obvious that the random data eigenvalues from a parallel analysis will grow as more variables are added; it becomes more likely that by random chance, two cases will be similar one some of the many variables. The question is: how fast do the random eigenvalues grow, as more variables are added. If they grow linearly, I'm screwed, and there is no point in adding more variables: as I add another variable, any improvement in (raw) eigenvalues will (probabilistically) be "eaten up" by an equal increase in necessary parallel-analysis adjustment. If they grow at a diminishing rate as you variables (is that a concave relationship then?!), there is hope: as you add more variables, only some, but not all of the possible increase in eigenvalues must be discounted away.

I have gone ahead and simulated this (very) crudely in R, and here's what I got:

resparan <- matrix(data = NA, nrow = 400, ncol = 400)
for(i in 2:401) {
  rdata <- matrix(data = rnorm(n = 77, mean = 0, sd = 2.8), nrow = 77, ncol = i)
  resparan[1:i, i] <- paran(x = rdata, iterations = 100, centile = 95, quietly = TRUE, status = FALSE)$RndEv
  print(paste("Calculating for", i, "variables."))
resparan.long <- melt(data = resparan, varnames = c("ncomps", "nvars"), value.name = "randomeigen")

Parallel Analysis N = 77

Parallel Analysis N = 200

Above are two incarnations of the same plot, once for N (of item-cases) = 77, and once for N = 200. The point where the number of cases equals the number of variables is denoted by green line. The red line indicates Eigenvalue = 1, the Kaiser-Guttman criterion. It appears that the curvature extends up to the point where the number of variables equals the number of cases – does that make sense?

Note: don't do this at home, takes about 20mins or so.

It seems, that in fact, the relationship is not linear, and there is hope.

I am guessing that aside from this numerical simulation, there must be math to bear this out. Correct? What would be a source or proof for the non-linearity of random data eigenvalue growth as more variables are added?


  • The actual, observed people-variables to be added will (hopefully) not be random. However, I am here not interested in the development of their unadjusted (or otherwise), observed eigenvalues: those are an empirical phenomenon. I want to know how eigenvalues from random data (which parallel analysis discounts by) develop, as more random variables are added. (That's what parallel analysis does: it runs PCA on many random datasets).
  • By construction (see below), the additional random variables all have the same variance and mean.

Why would anyone want to do this? (Some context).

I'm glad you asked. It's called Q Methodology (if anyone with sufficient privileges could add a new tag to that effect, that would be great). In Q methodology, people as people-variables are asked to sort a (<100) number of statements as item-cases under a normal distribution. (Because they must sort all items under a given (normal), forced distribution, the SD and mean of all Q-sorts as people-variables will be the same, in this case sd = 2.8 and mean = 0.)

People place 77 cards with item-cases into the white boxes in the below template (unforunately in german). *The x-axis values of any given item-case is that case's value on the person-variable of that Q-sorter.

Q sorting template

You then extract factors (principal components, in my case) from the ranks of the cards, correlated across the people-variables. So it's basically like a normal factor analysis, but with a transposed data table. The idea is that the resulting factors (and their item-cases scores) can be interpreted as ideal-typical, shared viewpoints of people.

On the one hand, you want as many of such factors as possible, you decidedly don't care in Q by how many people any given viewpoint is shared. On the other hand, you do want to be certain that the viewpoint is really shared, and not just some random fluke, which you then interpret, making an ass of yourself in the process.

In this context, obviously, you cannot increase the number of item-cases above 100 or so, because people just can't be bothered with rank-ordering thousands of cards. You can, however, quite easily increase the number of variables, simply by having more people do the sorting.

Would that help?

I am quite fond of the rigorous standard of parallel analysis, I'm just not sure how it would translate to Q methodology.

Any and all suggestions and feedback would be very welcome, including explanations why my question is irrelevant / ill-formed, etc.

PS: it would be really nice if this could work. Not only would it allow a quite rigorous type of Q methodological work, it would also allow us to have some hunch about the necessary number of people-variables depending on the number of item-cases and desired number of components to be retained (if detected).

  • 1
    $\begingroup$ thanks @whuber. I am not sure I follow: I understand that I would have to know about the covariance of the actual, observed additional variables to estimate their eigenvalues (adjusted or otherwise). I don't understand why I would need that for simulating additional random variables (their covariance should be close to 0, because they're random data). Parallel analysis, as I understand it, is not based on the real data anyway, but on (again) random data with the same SD, mean, and number of variables and cases. $\endgroup$
    – maxheld
    Jun 23 '15 at 19:29
  • 1
    $\begingroup$ I still don't see any place in this question where you stipulate that the added variables are random and independent of the previous ones: it would be a good idea to emphasize that important condition. You certainly will also need to make some assumptions about their variances. After all, by including one high-variance random variable you could introduce a large new eigenvalue--but that wouldn't be of much interest. $\endgroup$
    – whuber
    Jun 23 '15 at 19:33
  • 3
    $\begingroup$ I can't quite be sure I'm following correctly, but this paper on the distribution of the largest eigenvalue may be relevant: statweb.stanford.edu/~imj/WEBLIST/2001/… There seems to be quite a few papers subsequently written on the subject. $\endgroup$ Jun 23 '15 at 23:19
  • 1
    $\begingroup$ I don't really understand where the number 2.8 comes from, but this clarification certainly makes your question more tractable. Have you heard of Marcenko-Pastur distribution? It explicitly describes the distribution of eigenvalues of a covariance matrix of a random $n \times m$ matrix where each element $x_{ij} \sim \mathcal N(0, \sigma^2)$. You seem to be interested in how the largest eigenvalue will grow (is that right?) and that's a bit more difficult then, but one can quickly simulate it from Marcenko-Pastur. $\endgroup$
    – amoeba
    Jun 29 '15 at 9:08
  • 1
    $\begingroup$ I, in turn, don't know anything about R, but it seems that ndf should be 77 (it's your $N$), pdim is the number of variables, and you should also specify var=2.8. Input parameter n is just a number of random variables you want to generate; if you want a whole eigenvalue spectrum it probably should be equal to 77, because that's how many eigenvalues you get from one random dataset. $\endgroup$
    – amoeba
    Jun 29 '15 at 11:18

Your Answer

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

Browse other questions tagged or ask your own question.