Interpretowanie rozbieżności między R i SPSS z eksploracyjną analizą czynnikową

14

Jestem absolwentem informatyki. Przeprowadziłem eksploracyjną analizę czynników dla projektu badawczego. Moi koledzy (którzy prowadzą projekt) używają SPSS, podczas gdy ja wolę używać R. To nie miało znaczenia, dopóki nie odkryliśmy dużej rozbieżności między dwoma pakietami statystycznymi.

Używamy faktoringu osi głównej jako metody ekstrakcji (pamiętaj, że jestem świadomy różnicy między PCA a analizą czynnikową i że nie używamy PCA , przynajmniej nie celowo). Z tego co czytałem, to powinien odpowiadać „osi głównej” metody w badania i albo „główną oś factoring” lub „nieważone najmniejszych kwadratów” w SPSS, zgodnie z dokumentacją R . Używamy metody rotacji skośnej (konkretnie promaksy ), ponieważ oczekujemy skorelowanych czynników i interpretujemy macierz wzorców .

Uruchomienie dwóch procedur w R i SPSS, istnieją duże różnice. Matryca wzorów daje różne obciążenia. Chociaż daje to mniej więcej ten sam współczynnik dla zależności zmiennych, istnieje nawet 0,15 różnicy między odpowiadającymi ładunkami, co wydaje się więcej niż można by oczekiwać po innej implementacji metody ekstrakcji i rotacji promaksy. Nie jest to jednak najbardziej zaskakująca różnica.

Skumulowana wariancja wyjaśniona przez czynniki wynosi około 40% w wynikach SPSS i 31% w wynikach R. To ogromna różnica, która sprawiła, że ​​moi koledzy chcieli używać SPSS zamiast R. Nie mam z tym problemu, ale tak duża różnica sprawia, że ​​myślę, że możemy interpretować coś niepoprawnie, co jest problemem.

Jeszcze bardziej zabłocąc wody, SPSS zgłasza różne rodzaje wyjaśnionej wariancji, gdy przeprowadzamy faktoring z nieważoną metodą najmniejszych kwadratów. Proporcja wyjaśnionej wariancji według początkowych wartości własnych wynosi 40%, podczas gdy proporcja wyjaśnionej wariancji z sum ekstrakcyjnych obciążeń kwadratowych (SSL) wynosi 33%. To prowadzi mnie do myślenia, że ​​Początkowe Wartości Własne nie są odpowiednią liczbą do oglądania (podejrzewam, że jest to wariancja wyjaśniona przed rotacją, chociaż ta tak duża jest poza mną). Jeszcze bardziej mylące, SPSS pokazuje również Rotation SSL, ale nie oblicza procentu wyjaśnionej wariancji (SPSS mówi mi, że posiadanie skorelowanych czynników oznacza, że ​​nie mogę dodać SSL, aby znaleźć całkowitą wariancję, co ma sens z matematyką, którą widziałem). Zgłoszone SSL z R nie pasują do żadnego z nich, a R mówi mi, że opisuje 31% całkowitej wariancji. SSL R najlepiej pasują do SSL rotacji. Wartości własne R z oryginalnej macierzy korelacji są zgodne z początkowymi wartościami własnymi SPSS.

Pamiętaj też, że bawiłem się różnymi metodami i że ULS i PAF SPSS wydają się najbardziej pasować do metody PA R.

Moje konkretne pytania:

  1. Jakiej różnicy należy się spodziewać między R i SPSS z implementacjami analizy czynnikowej?
  2. Które z sum obciążeń kwadratowych z SPSS powinienem interpretować, początkowe wartości własne, ekstrakcję lub rotację?
  3. Czy są jakieś inne problemy, które mogłem przeoczyć?

Moje połączenia do SPSS i R są następujące:

SPSS:

FACTOR
/VARIABLES <variables>
/MISSING PAIRWISE
/ANALYSIS <variables>
/PRINT INITIAL KMO AIC EXTRACTION ROTATION
/FORMAT BLANK(.35)
/CRITERIA FACTORS(6) ITERATE(25)
/EXTRACTION ULS
/CRITERIA ITERATE(25)
/ROTATION PROMAX(4).

R:

library(psych)
fa.results <- fa(data, nfactors=6, rotate="promax",
scores=TRUE, fm="pa", oblique.scores=FALSE, max.iter=25)
Oliver
źródło
Nie mogę tego sprawdzić, ponieważ nie używam R, ale podejrzewam, że w dokumentacji jest luka. fm = „pa” powinien odpowiadać / EKSTRAKCJI PAF. Spróbuj także porównać roztwory przed jakimkolwiek obrotem, ponieważ niewielkie różnice w algach rotacji mogą mieszać się z różnicami w metodach ekstrakcji.
ttnphns
1
Dzięki za obejrzenie! Spróbuję porównać rozwiązania przed rotacją. Powinienem wspomnieć, że wypróbowałem zarówno / EXTRACTION ULS, jak i / EXTRACTION PAF, i istnieje bardzo niewielka różnica w obciążeniach (ale żadna z nich nie jest tak naprawdę bliska metodzie R "pa"). Powodem, dla którego pokazuję / EXTRACTION ULS powyżej, jest to, że to polecenie daje różne SSL.
Oliver
1
Metoda osi głównej i nieważone metody najmniejszych kwadratów mogą czasami dawać podobne wyniki, ale zasadniczo różnią się algorytmicznie. Uważam, że równoważności między R i SPSS są następujące: „pa” = PAF, „minres” = ULS, „gls” = GLS, „ml” = ML
ttnphns
1
Sprawdź także sposób postępowania z brakującymi wartościami. W kodzie SPSS usuwasz je parami. W twoim kodzie R - ...?
ttnphns
Porównałem SSL przed rotacją z R i są one zgodne z SSL ekstrakcji w rozwiązaniu ULS z SPSS (niestety rozwiązanie PAF w SPSS nie dało mi tych wartości). Myślę, że winowajcą wydaje się rotacja promaxów. Cóż, to lub sposób, w jaki SPSS drukuje rotacyjne SSL. Być może R dokonuje oszacowania całkowitej wariancji wyjaśnionej przez końcowe SSL, podczas gdy SPSS mówi mi, że takie oszacowanie nie jest właściwe.
Oliver,

Odpowiedzi:

21

Przede wszystkim zalecam drugie ttnphns, aby przyjrzeć się rozwiązaniu przed rotacją. Analiza czynnikowa, ponieważ jest zaimplementowana w SPSS, jest złożoną procedurą składającą się z kilku kroków, a porównanie wyniku każdego z tych kroków powinno pomóc w określeniu problemu.

W szczególności możesz biegać

FACTOR
/VARIABLES <variables>
/MISSING PAIRWISE
/ANALYSIS <variables>
/PRINT CORRELATION
/CRITERIA FACTORS(6) ITERATE(25)
/EXTRACTION ULS
/CRITERIA ITERATE(25)
/ROTATION NOROTATE.

aby zobaczyć macierz korelacji, którą SPSS używa do przeprowadzenia analizy czynnikowej. Następnie w R samodzielnie przygotuj macierz korelacji, uruchamiając

r <- cor(data)

Wszelkie rozbieżności w sposobie postępowania z brakującymi wartościami powinny być widoczne na tym etapie. Po sprawdzeniu, że macierz korelacji jest taka sama, możesz podać ją do funkcji fa i ponownie uruchomić analizę:

fa.results <- fa(r, nfactors=6, rotate="promax",
scores=TRUE, fm="pa", oblique.scores=FALSE, max.iter=25)

Jeśli nadal otrzymujesz różne wyniki w SPSS i R, problem nie jest związany z wartościami.

Następnie możesz porównać wyniki samej analizy czynnikowej / metody ekstrakcji.

FACTOR
/VARIABLES <variables>
/MISSING PAIRWISE
/ANALYSIS <variables>
/PRINT EXTRACTION
/FORMAT BLANK(.35)
/CRITERIA FACTORS(6) ITERATE(25)
/EXTRACTION ULS
/CRITERIA ITERATE(25)
/ROTATION NOROTATE.

i

fa.results <- fa(r, nfactors=6, rotate="none", 
scores=TRUE, fm="pa", oblique.scores=FALSE, max.iter=25)

Ponownie porównaj macierze czynnikowe / wspólnoty / sumę kwadratów ładunków. Tutaj możesz spodziewać się drobnych różnic, ale na pewno nie tej wielkości, którą opisujesz. Wszystko to dałoby wyraźniejszy obraz tego, co się dzieje.

Teraz, aby bezpośrednio odpowiedzieć na trzy pytania:

  1. Z mojego doświadczenia wynika, że ​​można uzyskać bardzo podobne wyniki, czasem po spędzeniu czasu na rozmyślaniu nad różnymi terminologiami i majstrowaniu przy parametrach. Miałem kilka okazji do przeprowadzania analiz czynnikowych zarówno w SPSS, jak i R (zwykle pracuję w R, a następnie powielam analizę w SPSS, aby podzielić się nią z kolegami) i zawsze uzyskiwałem zasadniczo takie same wyniki. Dlatego ogólnie nie spodziewałbym się dużych różnic, co prowadzi mnie do podejrzeń, że problem może być specyficzny dla twojego zestawu danych. Szybko jednak wypróbowałem polecenia, które podałeś w zbiorze danych, który leżałem (to skala Likerta), a różnice były w rzeczywistości większe niż do tej pory, ale nie tak duże, jak te, które opisujesz. (Mogę zaktualizować swoją odpowiedź, jeśli będę miał więcej czasu na zabawę).
  2. Przez większość czasu ludzie interpretują sumę kwadratów obciążeń po obrocie jako „proporcję wariancji wyjaśnioną” przez każdy czynnik, ale nie ma to znaczenia po skośnej rotacji (dlatego nie jest w ogóle zgłaszane w raportach tylko psychicznych i SPSS wartości własne w tym przypadku - jest nawet mały przypis na ten temat w danych wyjściowych). Początkowe wartości własne są obliczane przed ekstrakcją czynników. Oczywiście nie mówią ci nic o proporcji wariancji wyjaśnionej przez twoje czynniki i nie są tak naprawdę „sumą kwadratowych ładunków” (są często używane do decydowania o liczbie czynników do zachowania). SPSS „Sumy ekstrakcyjne kwadratowych ładunków” powinny jednak pasować do „SS ładunków” dostarczonych przez psych .
  3. Jest to szalone przypuszczenie na tym etapie, ale czy sprawdziłeś, czy procedura ekstrakcji czynników jest zbieżna w 25 iteracjach? Jeśli rotacja się nie zbiegnie, SPSS nie wysyła żadnej macierzy wzorów / struktur i nie można tego przegapić, ale jeśli ekstrakcja nie zbiegnie się, wyświetlana jest jednak ostatnia macierz czynników i SPSS błogo kontynuuje rotację. Zobaczysz jednak notatkę „a. Próbowano wyodrębnić 6 czynników. Wymagane jest ponad 25 iteracji. (Konwergencja = XXX). Wydobycie zostało zakończone. ” Jeśli wartość zbieżności jest niewielka (coś w rodzaju .005, domyślny warunek zatrzymania wynosi „mniej niż .0001”), nadal nie uwzględniałby zgłaszanych rozbieżności, ale jeśli jest naprawdę duży, w twoich danych jest coś patologicznego.
Gala
źródło
2
Bardzo miła odpowiedź. Chciałem zasugerować (jeśli to możliwe), że autor dostarczy przykładową macierz korelacji, aby zobaczyć, gdzie leży problem. Nie powinno być zbyt trudne sfałszowanie go / uczynienie wystarczająco dwuznacznym, aby udostępnić dane. Także jeśli nie można odtworzyć problemu, rozpoczynając bezpośrednio od tej samej macierzy korelacji, która częściowo identyfikuje problem.
Andy W
Dzięki, to fantastyczna odpowiedź. Przejdę przez te kroki, gdy wrócę do mojego urządzenia SPSS. W odpowiedzi na punkt 3 rozwiązanie zbiega się w 9 iteracjach, ale będę o tym pamiętać podczas wszelkich przyszłych analiz. Bardzo pomocna była wiedza, że ​​różnice nie są zwykle tak duże, jak to opisałem (pracuję również z danymi w skali Likerta, 5-punktowymi).
Oliver,
Na wypadek, gdyby ktokolwiek się zastanawiał, fafunkcja w R pochodzi z psychpakietu. factanalFunkcji z pakietu podstawowego należy wykonać podobnie, ale psychjest warta używając do innych celów, w każdym razie. W rzeczywistości, ponieważ są to dane Likerta, rozsądnie byłoby zamiast tego użyć psychpakietu fa.poly: patrz dokumentacja pomocy .
Nick Stauner
6

Ostatnio odkryłem, że większość rozbieżności w analizie czynnikowej między SPSS i R (z pakietem Psych) usuwa się, gdy dane są traktowane jako brakujące w listach w każdym programie, macierz korelacji pokazuje się dokładnie tak samo w każdym i nie stosuje się skośnej rotacji.

Pozostała rozbieżność dotyczy szeregu wartości, które pojawiają się na wykresie piargowym, wskazując wartości własne po ekstrakcji. W „piargu (cor (mydata))” te „czynniki” nie pasują do tych wymienionych w tabeli wyjaśniającej wariancję SPSS w „Sumach ekstrakcyjnych kwadratów”. Zauważ, że „komponenty” wykresu piargowego R pasują do wykresu piaskowego SPSS, które również pasują do „Początkowych wartości własnych” tabeli wyjaśniającej wariancję.

Odkryłem również, że „Proporcja Var” wyjaśniona przez każdy czynnik jest czasami podawana jako R (proporcja dla danego czynnika) / (kwota wyjaśniona przez wszystkie czynniki), a innym razem jest to (proporcja dla danego czynnika) (liczba pozycji w analizie). Jeśli więc otrzymujesz to pierwsze, jest ono, choć nie pasuje, co najmniej proporcjonalne i dające się wyprowadzić z tego, co raportuje SPSS w „Sumach ekstrakcyjnych kwadratowych ładunków ...% wariancji”.

Wprowadzenie rotacji eliminacji w każdym programie powoduje jednak znaczne rozbieżności w ładowaniu przedmiotów lub wariancji czynników wyjaśniających, że nie byłem w stanie rozwiązać.

rolando2
źródło
1

Domyślną metodą obrotu w R jest eliminacja, więc prawdopodobnie spowoduje to różnicę. Jako test uruchom PAF / oblimin w SPSS i R, a znajdziesz prawie identyczne wyniki.

Stefan Dombrowski
źródło
0

Nie wiem, co powoduje różnice w ładowaniu wzorów, ale zakładam, że różnica w% wyjaśnionej wariancji wynika z: - czy być może interpretujesz pierwszą część (2 lub 3) tabeli wyjaśnianych wariancji SPSS, która faktycznie pokazuje wyniki analizy głównych składników. Druga część pokazuje wyniki dla analizy niezabezpieczonego czynnika, a trzecia po rotacji (jeśli jest zastosowana). - fakt, że funkcja fa (a ściślej jej metoda drukowania) błędnie oblicza SSL dla czynników ukośnych. Aby uzyskać% całkowitej wariancji wyjaśnionej przez czynnik, należy obliczyć sumę kwadratowych obciążeń strukturalnych przez czynnik i podzielić ją przez liczbę zmiennych. Jednak nie można ich podsumować (w przypadku skośnych obrotów), aby uzyskać% wariancji wyjaśniony przez wszystkie czynniki. Aby to zdobyć,

Aleš Žiberna
źródło
Witamy na stronie @AlesZiberna. Staramy się zbudować stałe repozytorium informacji statystycznych w formie pytań i odpowiedzi. Więc martwimy się o linkrot. Czy mógłbyś przedstawić przegląd informacji pod linkiem na wypadek, gdyby zginął, a czytelnicy mogą zdecydować, czy chcą je kontynuować?
gung - Przywróć Monikę
0

Ta odpowiedź jest addytywna do powyższych. Jak sugeruje Gala w swojej odpowiedzi, najpierw należy ustalić, czy rozwiązania dostarczone przez R (np. Fa in psych) i SPSS są różne przed rotacją. Jeśli są takie same, spójrz na ustawienia obrotu w każdym programie. (W przypadku SPSS wszystkie ustawienia można znaleźć w podręczniku użytkownika FACTOR).

Jednym z ważnych ustawień, na które należy zwrócić uwagę, jest normalizacja Kaiser . Domyślnie SPSS wykonuje normalizację Kaisera podczas obrotu, podczas gdy niektóre funkcje R, takie jak „fa”, nie. Możesz kontrolować to ustawienie w SPSS, określając / CRITERIA = NOKAISER / KAISER, aby sprawdzić, czy eliminuje ono jakiekolwiek rozbieżności między wynikami w każdym programie.

AlexR
źródło