gpt4 book ai didi

matlab - 如何在 MATLAB 中执行直接 Oblimin 旋转

转载 作者:太空宇宙 更新时间:2023-11-03 19:14:11 24 4
gpt4 key购买 nike

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

Direct Oblimin Rotation with a Delta value of 0 and "KaiserNormalization"

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

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

在这里您可以找到 SPSS 中使用的所有算法:link (查看第 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

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

这是 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 输出:

rotated ouput (SPSS)

最佳答案

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 输出不同。

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

关于matlab - 如何在 MATLAB 中执行直接 Oblimin 旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32851010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com