psych: principal - loadings components
Asked Answered
D

1

7

My question is concerned with the principal() function in psych package.

set.seed(0)
x <- replicate(8, rnorm(10))
pca.x <- principal(x, nf=4, rotate="varimax")

I know if I want to see the loadings table, I can use loading.x <-loadings(pca.x), than I will have the following results.

> loading.x
Loadings:
     RC1    RC3    RC4    RC2   
[1,]        -0.892 -0.205  0.123
[2,]  0.154  0.158  0.909       
[3,] -0.660  0.255 -0.249  0.392
[4,] -0.352  0.412  0.614 -0.481
[5,]  0.950 -0.208  0.117       
[6,] -0.302  0.111         0.860
[7,]  0.852        -0.195 -0.358
[8,] -0.109  0.903         0.265

                 RC1   RC3   RC4   RC2
SS loadings    2.323 1.934 1.373 1.342
Proportion Var 0.290 0.242 0.172 0.168
Cumulative Var 0.290 0.532 0.704 0.871

My first confusion is the loadings object. Technically, it is a matrix, but look at its dimension, it is 8 * 4, which means the lower part is not included.

Basically, what I want to achieve is to extract this part alone:

                 RC1   RC3   RC4   RC2
SS loadings    2.323 1.934 1.373 1.342
Proportion Var 0.290 0.242 0.172 0.168
Cumulative Var 0.290 0.532 0.704 0.871

Either put it in a data.frame or a matrix, rather than looking at it in the console. It seems that William Revelle's answer in the post Extracting output from principal function in psych package as a data frame. is able to extract this lower part alone, but the print function still gives me the whole thing.

In fact, I'm also curious how the developers are able to construct a loading object (I can't figure it out by look at source code). Also, the part I need I can't find elsewhere in the 'pca.x' list, at least not a formatted table. I am using Rstudio Version 0.98.1102, R 3.1.2, on a mac, and psych 1.5.1.

Thank you in advance!

Dmz answered 20/2, 2015 at 18:10 Comment(3)
A reproducible example would be helpful here. Include sample code to create the object you are working with and describe exactly what you want to extract from it.Rancorous
William Revelle's example still seems to work, Can you use the Thurstone example from his answer to show what you need. tyGuffey
Using the answer form the linked question: for loadings try loadings(pca.x)[] and for the SS/var etc: p <- print(pca.x); p[[1]]. Re your question on the objects, a lot of this will be calculated/produced by the print method. Have a look at the print.psych function which will print different output to the screen depending on what object is passed to it (ive not gone through it all)Guffey
J
10

This was partly answered, but since it is my package, I will give a somewhat more complete answer.

The summary table of the PCA or FA factor loadings tables is calculated in the print function. It it is returned (invisibly by print). However, it is available as the Vaccounted object.

i.e. summary table of the PCA or FA output

set.seed(0)
x <- replicate(8, rnorm(10))
pca.x <- principal(x, nf=4, rotate="varimax")
p <- print(pca.x)

round(p$Vaccounted,2)   #shows the summary of the loadings table
                       PC1  PC3  PC4  PC2
SS loadings           2.32 1.93 1.37 1.34
Proportion Var        0.29 0.24 0.17 0.17
Cumulative Var        0.29 0.53 0.70 0.87
Proportion Explained  0.33 0.28 0.20 0.19
Cumulative Proportion 0.33 0.61 0.81 1.00

This works for the fa function as well.

Jacquelinejacquelyn answered 24/2, 2015 at 3:48 Comment(4)
Thank you very much William. Is this explained in the vignette or similar anywhere at all? I've been searching for a whileLarner
I have added this to the documentation for psych 1. 6.12 (coming soon).Jacquelinejacquelyn
This works for me as well but what it does is that it prints the whole thing, which in my use case is not needed. How can i use Vaccounted object without printing itTompkins
Currently, that is not possible. I will add that as a requested feature for the next release.Jacquelinejacquelyn

© 2022 - 2024 — McMap. All rights reserved.