2015-09-29 1 views
12

Я пытаюсь выполнить следующий анализ в MATLAB:Как выполнить прямое Oblimin вращение в MATLAB

Прямая Oblimin вращения со значением Delta 0 и «Kaiser Нормализация»

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

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

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


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

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

я выполнить PCA (на корреляционной матрицы) и извлечь только два фактора. Вот как это делается в 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)

+0

и ваш вопрос будет? –

+0

Что такое ... обмимин вращение? – rayryeng

+0

@ Benoit_11how, чтобы выполнить прямой поворот obimin в MATLAB – mat

ответ

3

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); 

Обратите внимание, что вращения определяются по модулю угол пи, так что вы будете иметь выходную матрицу, равную + - то, что вы хотите.

Запуск этого на вашем примере, один получает шаблон:

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 ,

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

+0

Это действительно близко к тому, что я искал, но это не совсем то же самое. Я подожду еще несколько дней, чтобы узнать, есть ли новый ответ, иначе я соглашусь с вами. Спасибо! – mat

+0

Приветствую вас, это был хороший вопрос. – BillBokeey

+0

@Adriaan: Извините, английский не мой родной язык, «приветствует» слишком неформально? Как насчет инициалов? – BillBokeey

Смежные вопросы