Zestaw danych tęczówki jest doskonałym przykładem do nauki PCA. To powiedziawszy, pierwsze cztery kolumny opisujące długość i szerokość działek i płatków nie są przykładem mocno wypaczonych danych. Dlatego transformacja logów danych nie zmienia bardzo wyników, ponieważ wynikowa rotacja głównych składników jest niezmieniona przez transformację logów.
W innych sytuacjach log-transformacja jest dobrym wyborem.
Wykonujemy PCA, aby uzyskać wgląd w ogólną strukturę zestawu danych. Centrujemy, skalujemy, a czasem log-transform, aby odfiltrować niektóre trywialne efekty, które mogłyby zdominować nasz PCA. Algorytm PCA z kolei znajdzie obrót każdego PC, aby zminimalizować kwadratowe resztki, a mianowicie sumę kwadratowych prostopadłych odległości od dowolnej próbki do PC. Duże wartości mają zwykle wysoką dźwignię.
Wyobraź sobie, że wstrzykujesz dwie nowe próbki do danych tęczówki. Kwiat o długości płatka 430 cm i jeden o długości płatka 0,0043 cm. Oba kwiaty są bardzo nietypowe, są odpowiednio 100 razy większe i 1000 razy mniejsze niż przeciętne przykłady. Dźwignia pierwszego kwiatu jest ogromna, tak że pierwsze komputery PC głównie opisują różnice między dużym kwiatem a każdym innym kwiatem. Grupowanie gatunków nie jest możliwe z powodu tej jednej wartości odstającej. Jeśli dane są przekształcane w dzienniku, wartość bezwzględna opisuje teraz względną zmienność. Teraz mały kwiat jest najbardziej nienormalny. Niemniej jednak możliwe jest zarówno zawarcie wszystkich próbek na jednym zdjęciu, jak i zapewnienie sprawiedliwego skupienia gatunków. Sprawdź ten przykład:
data(iris) #get data
#add two new observations from two new species to iris data
levels(iris[,5]) = c(levels(iris[,5]),"setosa_gigantica","virginica_brevis")
iris[151,] = list(6,3, 430 ,1.5,"setosa_gigantica") # a big flower
iris[152,] = list(6,3,.0043,1.5 ,"virginica_brevis") # a small flower
#Plotting scores of PC1 and PC" without log transformation
plot(prcomp(iris[,-5],cen=T,sca=T)$x[,1:2],col=iris$Spec)
#Plotting scores of PC1 and PC2 with log transformation
plot(prcomp(log(iris[,-5]),cen=T,sca=T)$x[,1:2],col=iris$Spec)