3
$\begingroup$

[This question is modified based on suggestion from @ttnphns]

I am doing linear principal component analysis (PCA) based on polychoric correlations between the variables (rather than on native Pearson correlations between them). I want to compute component scores from my analysis.

I found that the component scores calculated from orthogonal rotation (i.e. with the help of eigenvectors) based on polychoric correlations are correlated (I expect components should not correlate!).

After discussing with @ttnphns, it seems that using the eigenvectors or the loadings extracted from polychoric (or tetrachoric) correlations cannot give me proper component scores - when used the usual way as it is done in PCA. Because those correlations are inferred correlations and are not Pearson correlations directly computable from the variables. There is no "direct connection" on the level of individual values between my ordinal variables and the polychoric correlations. That makes computation of proper component scores a problem. So how to compute the component scores?

The code of my analysis in R:

  1. Save the polychoric correlation into polycorC1

    polycorC1<- polychoric(C1C_fa_[,c(1:3,5:14)])

  2. Use the polycorC1 to run a PCA using varimax (factor = 2 as recommended by parallel analysis)

    C1Cpca <- principal(polycorC1$rho, nfactor= 2, n.obs=nrow(na.omit(C1C_fa_)) , rotate='varimax', residuals=TRUE)

  3. Calculated the component scores using matrix multiplication with the loadings from the PCA

    C1C_fa_Com<- as.matrix(scale(C1C_fa_[,c(1:3,5:14)]))%*%t(pracma::pinv(C1Cpca$loadings[,1:2])

The below are the data sample I used

> polycorC1
Call: polychoric(x = C1C_fa_[, c(1:3, 5:14)])
Polychoric correlations 
             C01 C02 C03 C05 C06 C07 C08 C09 C10 C11 C12 C13 C14
C01  1.00                                                                                                  
C02  0.84    1.00                                                                                          
C03  0.76    0.85    1.00                                                                                  
C05  0.56    0.65    0.69    1.00                                                                          
C06 -0.30   -0.20   -0.10   -0.05    1.00                                                                  
C07 -0.35   -0.41   -0.42   -0.48    0.35    1.00                                                          
C08  0.46    0.48    0.43    0.30   -0.55   -0.65    1.00                                                  
C09 -0.16    0.12    0.18   -0.23    0.58    0.49   -0.46    1.00                                          
C10 -0.28   -0.11   -0.04   -0.11    0.63    0.53   -0.61    0.69    1.00                                  
C11 -0.24   -0.23   -0.20   -0.28    0.45    0.55   -0.66    0.53    0.54    1.00                          
C12 -0.21   -0.12   -0.11   -0.13    0.52    0.61   -0.64    0.66    0.66    0.54    1.00                  
C13 -0.25   -0.39   -0.42   -0.43    0.32    0.65   -0.61    0.41    0.43    0.47    0.55    1.00          
C14 -0.49   -0.54   -0.51   -0.54    0.25    0.49   -0.42    0.33    0.34    0.53    0.30    0.52    1.00  

 with tau of 
                  1      2    3    4
C01 -0.568 -0.205 0.94 1.52
C02  0.044  0.205 1.26 1.74
C03  0.176  0.205 1.68 2.11
C05 -0.621 -0.250 1.81 2.27
C06 -1.991 -0.638 1.19 1.19
C07 -1.743  0.468 0.98  Inf
C08 -0.871  0.058 1.36  Inf
C09 -1.680 -0.058 1.03 1.03
C10 -1.813 -1.007 0.98 0.98
C11 -1.991 -1.224 0.42 0.64
C12 -2.110 -1.031 0.50 0.83
C13 -2.523 -1.322 0.33 0.45
C14 -2.110 -1.571 0.47 0.59
  > head(C1C_fa_[,c(1:3,5:14)])  
  C01 C02 C03 C05 C06 C07 C08 C09 C10
1            3            3            3            2            2            3            3            3            3
2            1            1            1            1            2            2            4            2            2
3            3            3            4            3            3            3            1            3            5
4            1            1            1            1            5            5            1            5            5
5            3            1            1            3            2            3            4            1            1
6            2            1            1            2            3            4            2            3            3
  C11 C12 C13 C14
1            2            2            3            3
2            2            2            3            5
3            5            5            4            3
4            5            5            5            5
5            3            2            2            2
6            5            5            5            5
> C1Cpca$loadings[,1:2]
                     RC1         RC2
C01 -0.16661714  0.81706044
C02 -0.03981366  0.93794572
C03  0.01248097  0.94517952
C05 -0.12835191  0.78302564
C06  0.71467993 -0.07219318
C07  0.66413675 -0.45425580
C08 -0.72581724  0.43025104
C09  0.85410423  0.10239328
C10  0.85163361 -0.04177471
C11  0.72659138 -0.24209655
C12  0.84231783 -0.07579838
C13  0.59548110 -0.44222574
C14  0.39604549 -0.62564654
> head(C1C_fa_Com)
  C_RC1 C_RC2
1   11.635377   5.7926567
2    9.848028  -0.8181452
3   20.691296   5.1087066
4   27.176833  -5.3445258
5    7.159462   3.9442215
6   20.651074  -2.8367836
$\endgroup$
  • 3
    $\begingroup$ Polychoric correlations are inferred Pearson correlations; they are the correlations of the underlying variables which values you have no. What you have - is the observed ordinal variables. Multiplying them with the eigenvectors extracted from those correlations won't give you the component scores you expect. $\endgroup$ – ttnphns Apr 13 '15 at 6:14
  • 2
    $\begingroup$ I doubt it. Either use usual correlations and then you can do it (provided that when you multiply, the variables are in standardized form). Or do some tricky form of estimation (actually, I don't know which - will need to look for a literature) if you insist on using polychoric correlations. $\endgroup$ – ttnphns Apr 13 '15 at 6:21
  • 1
    $\begingroup$ BTW, it is a good and interesting question and you might want to post it here. "How to compute component or factor scores when the analysis is based on polychoric/tetrachoric correlations?" $\endgroup$ – ttnphns Apr 13 '15 at 6:25
  • 1
    $\begingroup$ @ceoec. I dared to edit the question considerably. Please revise it now. Did I ask correctly what you wanted to know? $\endgroup$ – ttnphns Apr 13 '15 at 7:01
  • 1
    $\begingroup$ Wait. The problem is that your question currently confuses two different issues: one is about polychoric correlations and another is about varimax rotations. I think you first need to figure out how to get PCA scores with polychoric correlations without any varimax rotations. Do you know how to do it? How exactly do you do that? Do you obtain uncorrelated scores? $\endgroup$ – amoeba Apr 13 '15 at 12:58

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.