Czy znak wyników lub ładunków w PCA lub FA ma znaczenie? Czy mogę odwrócić znak?


37

Przeprowadziłem analizę składowych głównych (PCA) z R przy użyciu dwóch różnych funkcji ( prcompi princomp) i zauważyłem, że wyniki PCA różnią się znakiem. Jak to możliwe?

Rozważ to:

set.seed(999)
prcomp(data.frame(1:10,rnorm(10)))$x

            PC1        PC2
 [1,] -4.508620 -0.2567655
 [2,] -3.373772 -1.1369417
 [3,] -2.679669  1.0903445
 [4,] -1.615837  0.7108631
 [5,] -0.548879  0.3093389
 [6,]  0.481756  0.1639112
 [7,]  1.656178 -0.9952875
 [8,]  2.560345 -0.2490548
 [9,]  3.508442  0.1874520
[10,]  4.520055  0.1761397

set.seed(999)
princomp(data.frame(1:10,rnorm(10)))$scores
         Comp.1     Comp.2
 [1,]  4.508620  0.2567655
 [2,]  3.373772  1.1369417
 [3,]  2.679669 -1.0903445
 [4,]  1.615837 -0.7108631
 [5,]  0.548879 -0.3093389
 [6,] -0.481756 -0.1639112
 [7,] -1.656178  0.9952875
 [8,] -2.560345  0.2490548
 [9,] -3.508442 -0.1874520
[10,] -4.520055 -0.1761397

Dlaczego znaki ( +/-) różnią się w obu analizach? Gdybym wtedy używał głównych składowych PC1i PC2jako predyktorów w regresji, tj. lm(y ~ PC1 + PC2)Całkowicie zmieniłoby to moje rozumienie wpływu dwóch zmiennych w yzależności od zastosowanej metody! Jak więc mogę powiedzieć, że PC1ma to np. Pozytywny wpływ yi PC2np. Negatywny wpływ na y?


Ponadto: jeśli znak komponentów PCA nie ma znaczenia, czy dotyczy to również analizy czynnikowej (FA)? Czy dopuszczalne jest odwrócenie (odwrócenie) znaku wyników poszczególnych składników PCA / FA (lub obciążeń, jako kolumny macierzy obciążeń)?


10
+1. To pytanie jest często zadawane na tym forum, w różnych odmianach (czasem o PCA, czasem o analizie czynnikowej). Ten jest najpopularniejszym wątkiem na ten temat (dzięki doskonałej odpowiedzi @ stycznia), więc wygodnie byłoby oznaczyć inne istniejące i przyszłe pytania jako duplikaty tego. Pozwoliłem sobie na nieco bardziej ogólne pytanie, zmieniając tytuł i wspominając o analizie czynnikowej. Mam nadzieję, że nie będziesz miał nic przeciwko. Podałem również dodatkową odpowiedź.
ameba mówi Przywróć Monikę

1
Znak jest arbitralny; znaczenie merytoryczne logicznie zależy od znaku. Zawsze możesz zmienić znak dowolnego czynnika oznaczonego „X” na znak przeciwny i oznaczyć go następnie „przeciwny X”. Dotyczy to ładunków, wyników. Niektóre implementacje mogłyby - dla wygody - zmienić znak współczynnika, tak aby wartości dodatnie (w punktach lub ładunkach) w nim dominowały. Inne wdrożenia nic nie robią i pozostawiają decyzję, czy odwrócić znak na tobie - jeśli cię to obchodzi. Znaczenie statystyczne (takie jak siła efektu) nie zmienia się poza tym, że jego „kierunek” ulega odwróceniu.
ttnphns

Odpowiedzi:


38

PCA jest prostą transformacją matematyczną. Jeśli zmienisz znaki komponentu (ów), nie zmienisz wariancji zawartej w pierwszym komponencie. Ponadto po zmianie znaków wagi ( prcomp( ... )$rotation) również zmieniają znak, więc interpretacja pozostaje dokładnie taka sama:

set.seed( 999 )
a <- data.frame(1:10,rnorm(10))
pca1 <- prcomp( a )
pca2 <- princomp( a )
pca1$rotation

przedstawia

                 PC1       PC2
X1.10      0.9900908 0.1404287
rnorm.10. -0.1404287 0.9900908

i pca2$loadingspokaż

Loadings:
          Comp.1 Comp.2
X1.10     -0.99  -0.14 
rnorm.10.  0.14  -0.99 

               Comp.1 Comp.2
SS loadings       1.0    1.0
Proportion Var    0.5    0.5
Cumulative Var    0.5    1.0

Dlaczego więc interpretacja pozostaje taka sama?

Wykonujesz regresję PCA dla yskładnika 1. W pierwszej wersji ( prcomp) powiedz, że współczynnik jest dodatni: im większy składnik 1, tym większe y. Co to znaczy, jeśli chodzi o oryginalne zmienne? Ponieważ waga zmiennej 1 ( 1:10a) jest dodatnia, oznacza to, że im większa zmienna 1, tym większe y.

Teraz użyj drugiej wersji ( princomp). Ponieważ składnik ma zmieniony znak, im większy y, tym mniejszy składnik 1 - współczynnik y <na PC1 jest teraz ujemny. Ale tak samo jest z ładowaniem zmiennej 1; oznacza to, że im większa zmienna 1, tym mniejszy składnik 1, tym większe y - interpretacja jest taka sama.

Być może najłatwiejszym sposobem na sprawdzenie tego jest użycie biplota.

library( pca3d )
pca2d( pca1, biplot= TRUE, shape= 19, col= "black"  )

przedstawia

wprowadź opis zdjęcia tutaj

Ten sam biplot dla drugiego wariantu pokazuje

pca2d( pca2$scores, biplot= pca2$loadings[,], shape= 19, col= "black" )

Jak widać, obrazy są obracane o 180 °. Jednak związek między wagami / ładunkami (czerwone strzałki) a punktami danych (czarne kropki) jest dokładnie taki sam; dlatego interpretacja składników pozostaje niezmieniona.

wprowadź opis zdjęcia tutaj


I nawet teraz dodaje zdjęcia :-)
Styczeń

1
To prawda, ale co z projekcjami w PCA? Sam koduję PCA, a niektóre moje wektory własne są odwrócone w porównaniu z wbudowanym MATLAB princomp. Podczas projekcji moje rzutowane dane są również odwracane w znakach w niektórych wymiarach. Moim celem jest dokonanie klasyfikacji współczynników. Znak nadal nie ma znaczenia?
Sibbs Gambling

Więc jeśli tylko ze względu na łatwiejsze zrozumienie moich komputerów, chciałbym zamienić znaki wyników, czy to jest ważne?

13

To pytanie jest często zadawane na tym forum, dlatego chciałbym uzupełnić doskonałą odpowiedź @ stycznia o nieco bardziej ogólne uwagi.

Zarówno w analizie głównych składników (PCA), jak i analizie czynnikowej (FA) używamy oryginalnych zmiennych x1,x2),...xrez1,z2),...zkx1z1z2)x12)z1+3)z2)2)3)

OrjasoljanzalprzeciwkozarjazablmisS.doormisL.ozarejansols.

z1

-1-1=1.

Wniosek jest taki, że dla każdego komponentu PCA lub FA znak jego ocen i ładunków jest arbitralny i bez znaczenia. Można go odwrócić, ale tylko wtedy, gdy znak zarówno wyników, jak i ładunków zostanie odwrócony w tym samym czasie.


To prawda, ale co z projekcjami w PCA? Sam koduję PCA, a niektóre moje wektory własne są odwrócone w porównaniu z wbudowanym MATLAB princomp. Podczas projekcji moje rzutowane dane są również odwracane w znakach w niektórych wymiarach. Moim celem jest dokonanie klasyfikacji współczynników. Znak nadal nie ma znaczenia?
Sibbs Hazard

1
Nadal nie ma znaczenia. Dlaczego miałoby to Odwrócone dane są dokładnie równoważne z nieodrzuconymi danymi do wszystkich celów, w tym klasyfikacji.
ameba mówi Przywróć Monikę

Cóż, nie do wszystkich celów. Aby zachować spójność algorytmu, ja też naprawdę chciałbym dopasować znaki. Jednak nie wszystko jest odwrócone, gdy patrzy się na komponenty. Jak R wybiera znak, abym mógł zrobić to samo?
Myoch

1
@ Myoch Polecam wynaleźć własną konwencję i stosować ją wszędzie, zamiast próbować dowiedzieć się, co robi R. Możesz wybrać znak w taki sposób, że pierwsza wartość jest dodatnia lub że ponad połowa wartości jest dodatnia itp.
Amoeba mówi Przywróć Monikę

1
@ użytkownik_anon Nie ma odwrotności.
Ameba mówi Przywróć Monikę

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.