12

我正在尝试在 MATLAB 中执行以下分析:

Delta 值为 0 和“Kaiser Normalization”的 Direct Oblimin Rotation

我知道 MATLAB 有一个名为rotatefactors的函数,但是没有提到 oblimin 旋转(也没有“Kaiser Normalization”)。如何在 MATLAB 中执行此分析?

更具体地说,我在执行此分析时尝试匹配 SPSS 的确切输出。

在这里您可以找到 SPSS 中使用的所有算法:链接(查看第 338 页的 oblimin 旋转)。不幸的是,我无法理解这些方程,因此无法在 MATLAB 中重现它们。


例如,我使用以下数据:

A = magic(10);
writetable(array2table(A),'test.xlsx') % This data can be imported to SPSS

我执行 PCA(在相关矩阵上)并仅提取 2 个因子。以下是在 MATLAB 中如何获得与 SPSS 中完全相同的加载矩阵(他们称之为“组件矩阵”):

[eigvector,eigmatrix] = eig(corr(A));
[~,ind] = sort(diag(eigmatrix),'descend');
eigmatrix = eigmatrix(ind,ind);
eigvector = eigvector(:,ind);
eigvalues = diag(eigmatrix); % Eigeinvalues
loadings = eigvector*sqrt(eigmatrix);
loadings = loadings(:,1:2) % Extract only 2 factors

loadings接下来,我应该使用函数对矩阵执行旋转rotatefactors,这就是我卡住的地方。

这是SPSS中的语法:

FACTOR
/VARIABLES A1 A2 A3 A4 A5 A6 A7 A8 A9 A10
/MISSING LISTWISE 
/ANALYSIS A1 A2 A3 A4 A5 A6 A7 A8 A9 A10
/PRINT INITIAL EXTRACTION ROTATION
/CRITERIA FACTORS(2) ITERATE(25)
/EXTRACTION PC
/CRITERIA ITERATE(25) DELTA(0)
/ROTATION OBLIMIN
/METHOD=CORRELATION.

这是我试图在 MATLAB 中重现的 SPSS 输出:

旋转输出 (SPSS)

4

1 回答 1

3

MATLAB 还没有实现 OBLIMIN 旋转方法,因为 promax 方法做同样的事情,只是它要快得多。

与 SPSS OBLIMIN 输出相比,使用此方法不会获得完全相同的输出,但它们应该非常接近,因为它们正在做同样的事情。(实际上,promax 也是一个倾斜旋转,只是它在正交性放松之前首先通过正交旋转近似)

可以在 promax 中自定义正交旋转,但我认为您不会得到相同的输出。

为了做一个promax旋转:

[B,T]=rotatefactors(loadings,'method','promax');

% Your pattern matrix is in B, to get the structure matrix, you can do :

S=B*inv(T'*T);

请注意,旋转是以角度 pi 为模定义的,因此您将拥有一个等于 +- 您想要的输出矩阵。

在你的例子上运行这个,一个得到模式:

B =

   -0.0178    0.9765
   -0.9528    0.0563
   -0.0305   -1.0124
    0.9442   -0.0602
    0.9897   -0.0155
   -0.7625    0.1992
   -0.8823    0.0333
   -0.9776   -0.1919
   -0.7797    0.0719
    0.9950    0.0767

连同结构矩阵:

S =

   -0.5740    0.9867
   -0.9849    0.5990
    0.5461   -0.9950
    0.9785   -0.5980
    0.9985   -0.5791
   -0.8760    0.6335
   -0.9013    0.5358
   -0.8683    0.3649
   -0.8206    0.5160
    0.9513   -0.4899

因此,这非常接近,但仍与 SPSS 输出不同。

不过,我们可以看到,最大的差异是针对非常小的值。由于相关分析总是取最大值,所以这应该不是什么大问题。

于 2015-10-05T14:17:01.817 回答