2015-09-29 8 views
12

próbuję wykonać następującą analizę MATLAB:Jak wykonać bezpośredni Oblimin Obrót w MATLAB

bezpośrednie Oblimin Obrót o wartości 0 i Delta "Kaiser normalizacji"

Wiem, że MATLAB ma funkcję o nazwie rotatefactors, jednak obrócenie obrót nie jest wspomniane (ani "Normalizacja Kaisera"). Jak mogę wykonać tę analizę w MATLAB?

Dokładniej, próbuję dopasować dokładny wynik SPSS podczas wykonywania tej analizy.

Tutaj można znaleźć wszystkie algorytmy używane w SPSS: link (sprawdź stronę 338, aby obrócić obrót). Niestety, nie mogę zrozumieć równań, a tym samym odtworzyć ich w MATLAB.


Przykładowo mi stosując następujące dane:

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

wykonuję PCA (w macierzy korelacji) i ekstrahować tylko dwa czynniki. Oto jak to zrobić w MATLAB w celu uzyskania dokładnego samej matrycy załadowczy w SPSS (które nazywają „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 

Następnie powinienem wykonać obrót na matrycy loadings pomocą funkcja rotatefactors, i to jest, gdzie utknąłem.

Oto składnia w 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. 

Jest to wyjście z SPSS, który próbuję odtworzyć w programie MATLAB:

rotated ouput (SPSS)

+0

i twoje pytanie byłoby? –

+0

Co to jest ... obliminacja rotacji? – rayryeng

+0

@ Benoit_11pokazywanie bezpośredniej rotacji obliminalnej w MATLAB – mat

Odpowiedz

3

MATLAB nie ma OBLIMIN metoda rotacji została zaimplementowana, ponieważ metoda promax robi to samo, tyle że jest znacznie szybsza.

Nie uzyskasz dokładnego wyniku z tą metodą w porównaniu do wyjścia SPSS OBLIMIN, ale powinny one być całkiem blisko, ponieważ robią to samo. (W rzeczywistości, promax jest również obrotowym ruchem obrotowym, z wyjątkiem tego, że najpierw jest on przybliżony przez ortogonalny obrót, zanim ortogonalność zostanie rozluźniona).

Może być możliwe ustawienie rotacji ortogonalnej wewnątrz promaxu, ale nie sądzę, że będziesz kiedykolwiek otrzymają takie same wyniki.

W tym celu obrót 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); 

Zauważ, że obroty są zdefiniowane Modulo jest pi kątem, więc trzeba macierzy wyjściowej równej + - co chcesz.

Running to na przykład, jeden dostaje wzoru:

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 

Wraz z matrycą struktury:

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 

Tak, to jest bardzo blisko, ale jednak różni się od wyjścia SPSS .

Widzimy jednak, że duże różnice dotyczą całkiem małych wartości. Ponieważ zawsze przyjmuje się największe wartości do analizy korelacji, nie powinno to stanowić większego problemu.

+0

Jest to naprawdę blisko tego, czego szukałem, ale nie jest to dokładnie to samo. Poczekam jeszcze kilka dni, żeby zobaczyć, czy jest nowa odpowiedź, inaczej przyjmuję twoją. Dziękuję Ci! – mat

+0

Nie ma za co, to było dobre pytanie. – BillBokeey

+0

@Adriaan: Przepraszam, angielski nie jest moim ojczystym językiem, czy "okrzyki" są zbyt nieoficjalne? A co z inicjałami? – BillBokeey