如何在MATLAB中执行直接奥布林旋转

12

我想在MATLAB中执行以下分析:

直接Obilmin旋转,Delta值为0,使用“Kaiser归一化”

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

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

您可以在此处找到SPSS中使用的所有算法:链接(请查看第338页以获取oblimin旋转)。不幸的是,我无法理解方程式,因此无法在MATLAB中重新生成它们。


例如,我正在使用以下数据:

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

我对相关矩阵进行主成分分析,并仅提取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的输出:

旋转输出(SPSS)


你有什么问题需要问吗? - Benoit_11
什么是 oblimin 旋转? - rayryeng
@Benoit_11如何在MATLAB中执行直接oblimin旋转 - mat
@rayryeng 我更新了帖子,请看一下! - mat
显然,你应该自己实现它 :)) - Ali Mirzaei
显示剩余7条评论
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);

请注意,旋转是模角度π定义的,因此您将获得一个输出矩阵等于所需值的正负号。
在您的示例上运行,会得到以下图案:
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输出。尽管如此,我们可以看出,大的差异可能是由非常小的值引起的。由于在相关性分析中一般总是考虑最大的值,这应该不会成为太大的问题。

这真的很接近我想要的,但还不完全相同。我会再等几天看看是否有新的回复,否则我会接受你的。谢谢! - mat
@Adriaan:抱歉,英语不是我的母语,“cheers”太不正式了吗?那缩写呢? - BillBokeey
它们是我们所谓的“废话”。它与问题本身无关,因此在这里不是必要的信息。在SO上说“谢谢”的方式是使用赞或接受答案。这是为了将答案中的文本最小化到解决问题所需的信息。很抱歉没有评论这个,我以为你知道这些SO惯例,因为你有200分! - Adriaan
谢谢Adriaan,现在我知道了! - BillBokeey
3
“我需要帮忙……”、“我不会MATLAB,我想要……”或者“谢谢/干杯”等的部分原因被编辑掉是因为它们经常出现在搜索结果中。如果你搜索“如何将两个数字相加?”,你不想看到:“大家好,我有一个问题,我已经尝试了几个小时,我真的希望你能帮助我……”,你只想看到问题和答案… :) 除此之外;在回答的结尾添加一些“干杯”或“希望有所帮助”是可以的,但是要预料到可能会被某人编辑掉 =) - Stewie Griffin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接