简体   繁体   English

如何使用 factanal() 函数获取 R 中的结构矩阵?

[英]How to get the structure matrix in R using the factanal() function?

This is my first post on this forum.这是我在这个论坛上的第一篇文章。 I am new to R and factor analysis and I think I have a very simple question.我是 R 和因子分析的新手,我想我有一个非常简单的问题。 I'm following Andy Field's "Discovering Statistics Using R" book (2012) for general guidance.我正在关注 Andy Field 的“Discovering Statistics Using R”一书(2012 年)以获得一般指导。 Field recommends providing both the pattern and structure matrices when performing factor analysis using oblique rotation. Field 建议在使用倾斜旋转进行因子分析时同时提供模式和结构矩阵。

While the pattern matrix is simply the table of loadings, I am having more difficulty obtaining the structure matrix in R using the factanal() function.虽然模式矩阵只是载荷表,但我在使用factanal()函数获取 R 中的结构矩阵时遇到了更多困难。

To obtain the structure matrix for a PCA using the principal() function, Field provides the following formula: fit$loadings %*% fit$Phi , which multiplies the factor loading matrix by the factor correlation matrix.为了使用principal()函数获取 PCA 的结构矩阵,Field 提供了以下公式: fit$loadings %*% fit$Phi ,它将因子加载矩阵乘以因子相关矩阵。 Although factanal() does store the factor correlations somewhere—as it provides them in a section of the general output (under loadings)—I cannot find an object called "Phi", "Factor Correlations", or an equivalent, within the output of the fit model (within R Studio).尽管factanal()确实将因子相关性存储在某处——因为它在一般输出的一部分(负载下)中提供它们——但我在输出中找不到名为“Phi”、“因子相关性”或等效物的对象拟合模型(在 R Studio 中)。 Thus, I don't know what term to put in Field's formula to replace Phi in order to get the structure matrix.因此,我不知道在 Field 的公式中放入什么术语来替换 Phi 以获得结构矩阵。

I have seen here and here that earlier, factanal() did not provide the factor correlations—yet now it does provide it in the output;我在这里这里看到,之前, factanal()没有提供因子相关性——但现在它确实在输出中提供了; I just don't know the right terminology to access it.我只是不知道访问它的正确术语。 Thanks for any help on this!感谢您对此的任何帮助!


Edit: As per the book, I use the following formula with four factors and oblique rotation for PCA:编辑:根据这本书,我使用以下公式与四个因子和 PCA 的倾斜旋转:

pc4 <- principal(raqData, nfactors = 4, rotate = "oblimin").

In that case when I double click on object "pc4" in R Studio there is an object called "Phi" and I have no trouble obtaining the structure matrix with pc4$loadings %*% pc4$Phi .在这种情况下,当我在 R Studio 中双击对象“pc4”时,有一个名为“Phi”的对象,我可以pc4$loadings %*% pc4$Phi使用pc4$loadings %*% pc4$Phi获取结构矩阵。

Next, I attempt to use EFA, instead of PCA, again with four factors and oblique rotation (promax).接下来,我尝试使用 EFA,而不是 PCA,再次使用四个因子和倾斜旋转 (promax)。 This step works and I can get the factor correlations with (cut some output for conciseness):这一步有效,我可以得到因子相关性(为了简洁起见,减少一些输出):

> fit <- factanal(mydata, 4, rotation="promax")
> fit
Call...
Uniquenesses...
Loadings...
SS loadings...
Factor Correlations:
        Factor1 Factor2 Factor3 Factor4
Factor1   1.000  -0.874   0.632   0.571
Factor2  -0.874   1.000  -0.118  -0.438
Factor3   0.632  -0.118   1.000   0.356
Factor4   0.571  -0.438   0.356   1.000
Test of the hypothesis that 4 factors are sufficient...

Next, I attempt the structure matrix formula and get the following error:接下来,我尝试结构矩阵公式并得到以下错误:

> fit$loadings %*% fit$Phi
Error in fit$loadings %*% fit$Phi : 
  requires numeric/complex matrix/vector arguments

But when I inspect the "fit" object obtained with factanal() , there is no object called 'Phi" (as there were for principal() ). Not sure how to interpret the error above either. I have seen this error discussed here and here but I'm not clear about how to resolve it here.但是,当我检查与所获得的“适合”的对象factanal()不存在所谓的“披”对象(因为有对principal()不知道如何解释上述任何错误。我已经看到了这个错误讨论在这里这里,但我不清楚如何在这里解决它。

Though this is an old post but for helping other people out, the two components loadings and psi (not phi) in factanal output are fit$loadings and fit$uniqueness.虽然这是一篇旧帖子,但为了帮助其他人,实际输出中的两个组件负载和 psi(不是 phi)是 fit$loadings 和 fit$uniqueness。 You can access loadings matrix by writing fit$loadings[,1:q] where q is the factor you used.您可以通过编写 fit$loadings[,1:q] 来访问负载矩阵,其中 q 是您使用的因子。 For example- I ran factanal on Harman23.cor data present in the R studio.例如 - 我在 R 工作室中的 Harman23.cor 数据上运行了 factanal。 And checked for loadings to get below output.并检查负载以低于输出。

> Harman23.FA <- factanal(factors = 3, covmat = Harman23.cor)
> Harman23.FA$loadings

Loadings:
               Factor1 Factor2 Factor3
height          0.886   0.267  -0.130 
arm.span        0.937   0.195   0.280 
forearm         0.874   0.188         
lower.leg       0.877   0.230  -0.145 
weight          0.242   0.916  -0.106 
bitro.diameter  0.193   0.777         
chest.girth     0.137   0.755         
chest.width     0.261   0.646   0.159 

               Factor1 Factor2 Factor3
SS loadings      3.379   2.628   0.162
Proportion Var   0.422   0.329   0.020
Cumulative Var   0.422   0.751   0.771

Clearly $loadings is not returning a matrix.显然 $loadings 没有返回矩阵。 Instead you can use this:相反,您可以使用这个:

> as.matrix(Harman23.FA$loadings[,1:3])
                 Factor1   Factor2      Factor3
height         0.8859687 0.2666293 -0.130079754
arm.span       0.9371891 0.1951310  0.280364451
forearm        0.8741374 0.1876181  0.089154498
lower.leg      0.8768750 0.2303982 -0.144815728
weight         0.2422827 0.9164637 -0.106482093
bitro.diameter 0.1925419 0.7766283 -0.020581101
chest.girth    0.1368022 0.7554074  0.003677235
chest.width    0.2605798 0.6458413  0.159110501

Note that the factor used here is 3 and hence while accessing loadings we have mentioned colums 1:3.请注意,此处使用的因子是 3,因此在访问加载时我们提到了 1:3 列。 Similarly for running factanal with a factor q, you should mention Harman23.FA$loadings[,1:q].同样,对于使用因子 q 运行 factanal,您应该提及 Harman23.FA$loadings[,1:q]。

Also note that psi which is the uniquess matrix is a diagonal matrix.另请注意,作为唯一性矩阵的 psi 是对角矩阵。 So you should access it like this所以你应该像这样访问它

> psihat <- diag(Harman23.FA$uniquenesses)
> psihat
          [,1]  [,2]     [,3]      [,4]       [,5]      [,6]      [,7]      [,8]
[1,] 0.1270475 0.000 0.000000 0.0000000 0.00000000 0.0000000 0.0000000 0.0000000
[2,] 0.0000000 0.005 0.000000 0.0000000 0.00000000 0.0000000 0.0000000 0.0000000
[3,] 0.0000000 0.000 0.192735 0.0000000 0.00000000 0.0000000 0.0000000 0.0000000
[4,] 0.0000000 0.000 0.000000 0.1570353 0.00000000 0.0000000 0.0000000 0.0000000
[5,] 0.0000000 0.000 0.000000 0.0000000 0.09005497 0.0000000 0.0000000 0.0000000
[6,] 0.0000000 0.000 0.000000 0.0000000 0.00000000 0.3593523 0.0000000 0.0000000
[7,] 0.0000000 0.000 0.000000 0.0000000 0.00000000 0.0000000 0.4106308 0.0000000
[8,] 0.0000000 0.000 0.000000 0.0000000 0.00000000 0.0000000 0.0000000 0.4896708

Otherwise your matrix multiplication fit$loadings %*% fit$Phi will be non-conformal否则你的矩阵乘法 fit$loadings %*% fit$Phi 将是非共形的

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM