【问题标题】:How to perform a Direct Oblimin Rotation in MATLAB如何在 MATLAB 中执行直接 Oblimin 旋转
【发布时间】:2015-12-27 08:22:39
【问题描述】:

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

Delta 值为 0 和“Kaiser”的 Direct Oblimin Rotation 归一化”

我知道 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 输出:

【问题讨论】:

  • 你的问题是?
  • 什么是... oblimin rotation?
  • @Benoit_11如何在 MATLAB 中执行直接 oblimin 旋转
  • @rayryeng 我更新了帖子,请看一下!
  • 显然你应该自己实现它:))

标签: matlab statistics factor-analysis


【解决方案1】:

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

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

【讨论】:

  • 它与我所寻找的非常接近,但还不完全相同。我再等几天看看有没有新的回复,否则我会接受你的。谢谢!
  • @Adriaan : 抱歉,英语不是我的母语,“欢呼”是不是太不正式了?缩写呢?
  • 它们就是我们所说的“绒毛”。它与问题本身无关,因此在这里不是必要的信息。在 SO 上说“谢谢”的方式是使用赞成票或接受答案。这是为了将答案中的文本最小化为解决问题所需的信息。很抱歉没有对此发表评论,我假设您知道这些 SO-conventions,拥有 200 个代表!
  • 谢谢阿德里安,现在我知道了!
  • “我需要帮助...”、“我不知道 MATLAB,我想要...”或“谢谢/干杯”等内容的部分原因已被删除是因为它经常出现在搜索结果中。如果您搜索“我怎样才能添加两个数字?”,您不想阅读:“大家好,我有一个问题,我已经尝试了几个小时。我真的希望你能帮助我......”,你只想要问题和答案...... :) 除了;可以在答案末尾添加一点“欢呼”或“希望有所帮助”,但希望它可能会被某人编辑掉=)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-18
  • 1970-01-01
相关资源
最近更新 更多