<p>对于正交旋转(或根本不旋转),<code>FactorAnalyzer</code>不提供因子相关矩阵,因为它只是一个单位矩阵。对于倾斜旋转,可以使用<code>phi_</code>属性来获取因子相关矩阵</p>
<p><code>FactorAnalyzer</code>包的工作方式与R的<code>psych</code>包相同。比如说,</p>
<pre><code>library(tidyverse)
library(psych)
data(bfi)
bfi_subset = bfi %>% select(matches('^A[1-5]|^N'))
bfi_subset = bfi_subset %>%
mutate_all(~ifelse(is.na(.), median(., na.rm = TRUE), .))
model = fa(bfi_subset, 4, rotate = 'varimax')
print(model$Phi)
print(round(cor(model$scores), 3))
</code></pre>
<p>结果如下:</p>
<pre><code>NULL
MR2 MR1 MR3 MR4
MR2 1.000 -0.044 -0.004 -0.283
MR1 -0.044 1.000 0.297 -0.014
MR3 -0.004 0.297 1.000 0.116
MR4 -0.283 -0.014 0.116 1.000
</code></pre>
<p>考虑因素得分的相关性不一定会像你预期的那样起作用。比如说,</p>
<pre><code>round(cor(model1$scores), 3)
</code></pre>
<p>产出如下:</p>
<pre><code> MR2 MR1 MR3 MR4
MR2 1.000 -0.044 -0.004 -0.283
MR1 -0.044 1.000 0.297 -0.014
MR3 -0.004 0.297 1.000 0.116
MR4 -0.283 -0.014 0.116 1.000
</code></pre>
<p>如果您想向自己证明这些因素确实是正交的(不相关的),您可以在<code>FactorAnalyzer</code>中执行以下操作:</p>
<pre><code>fa = FactorAnalyzer(n_factors=4, rotation='varimax')
fa.fit(df_sub)
th = fa.rotation_matrix_
print(pd.DataFrame(th.T.dot(th)).round(2))
</code></pre>
<p>其输出如下:</p>
<pre><code> 0 1 2 3
0 1.0 0.0 -0.0 -0.0
1 0.0 1.0 0.0 -0.0
2 -0.0 0.0 1.0 0.0
3 -0.0 -0.0 0.0 1.0
</code></pre>