Подтвердить что ты не робот

Как выполнить прямое вращение Oblimin в MATLAB

Я пытаюсь выполнить следующий анализ в MATLAB:

Прямое вращение Oblimin с дельта-значением 0 и "Kaiser Нормализация"

Я знаю, что MATLAB имеет функцию, называемую rotatefactors, однако обминание вращения не упоминается (ни "Нормализация кайзера" ). Как я могу выполнить этот анализ в MATLAB?

Чтобы быть более конкретным, я пытаюсь сопоставить точный вывод SPSS при выполнении этого анализа.

Здесь вы можете найти все алгоритмы, используемые в SPSS: ссылка (см. стр. 338 для вращения обмимина). К сожалению, я не могу понять уравнения и таким образом воспроизвести их в MATLAB.


В качестве примера я использую следующие данные:

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

Я выполняю PCA (по корреляционной матрице) и извлекаю только 2 фактора. Вот как это делается в MATLAB, чтобы получить ту же самую Матрицу загрузки, что и в SPSS (которую они называют "Component Matrix" ):

[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.

Это результат SPSS, который я пытаюсь воспроизвести в MATLAB:

rotated ouput (SPSS)

4b9b3361

Ответ 1

В MATLAB еще не реализован метод вращения OBLIMIN, поскольку метод promax делает то же самое, только намного быстрее.

Вы не получите тот же результат с этим методом по сравнению с выходом SPSS OBLIMIN, но они должны быть довольно близкими, поскольку они делают то же самое. (На самом деле, 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.

Мы можем видеть, однако, что большие различия для небольших значений. Поскольку каждый всегда принимает самые большие значения для корреляционного анализа, это не должно быть большой проблемой.