从R中的主要负荷构建分数

时间:2015-04-19 06:45:35

标签: r pca principal psych

我想了解psych包中的principal()函数如何计算$ score元素。

我想尝试协方差矩阵而不是相关矩阵。

model <- principal(mtcars[8:11],nfactors=4, rotate='none', scores=T, cov=T)

基本上,PCA的分数应该是原始居中数据的线性组合,使用加载矩阵作为权重,所以我试过:

test <- scale(mtcars[8:11], center=T, scale=F) %*% model$loadings / model$scores

我理解principal()函数对加载使用某种缩放,但是每列的比例应该相同,test的情况并非如此。

如果我使用相关矩阵,这将不是问题。例如:

model <- principal(mtcars[8:11],nfactors=4, rotate='none', scores=T, cov=F)
test <- scale(mtcars[8:11], center=T, scale=T) %*% model$loadings / model$scores

帮助文档使用了因子分析术语,这让我更加困惑。希望有人能在这里启发我。

提前谢谢!

1 个答案:

答案 0 :(得分:1)

您在psych包中发现了一个错误。对于非标准化(协方差)解决方案,发现分数不正确。这将在下一个版本中修复(至少一个月内不会出现)。在此期间,您可以使用加载矩阵和(居中的)原始数据手动找到分数。

model <- principal(mtcars[8:11],nfactors=4, rotate='none', scores=T, cov=T)
L <- model$loadings            # Just get the loadings matrix
S <- model$scores              # This gives an incorrect answer in the current version

d <- mtcars[8:11]              # get your data
dc <- scale(d,scale=FALSE)     # center the data but do not standardize it
sc <- dc %*% L                 # scores are the centered data times the loadings
lowerCor(sc)                   #These scores, being principal components
                               # should be orthogonal 
    PC1 PC2 PC3 PC4
PC1 1              
PC2 0   1          
PC3 0   0   1      
PC4 0   0   0   1  

当你发现psych的问题没有在这里得到解答时,写信给我(包开发者)会很有用。

请注意,对于未旋转的解决方案,组件加载也是正交的(因为它们应该是)。

factor.congruence(L,L)
    PC1 PC2 PC3 PC4
PC1   1   0   0   0
PC2   0   1   0   0
PC3   0   0   1   0
PC4   0   0   0   1 

(Burt的因子同余度量,也称为Tucker系数,取出(未中心)加载的内积,然后除以各列的平方和)。您还可以找到负载的交叉产品

round( t(L) %*% L,3)
      PC1   PC2   PC3   PC4
PC1 2.742 0.000 0.000 0.000
PC2 0.000 0.721 0.000 0.000
PC3 0.000 0.000 0.142 0.000
PC4 0.000 0.000 0.000 0.051