L'ensemble de données sur l'iris est un bel exemple pour apprendre l'ACP. Cela dit, les quatre premières colonnes décrivant la longueur et la largeur des sépales et des pétales ne sont pas un exemple de données fortement asymétriques. Par conséquent, la transformation logarithmique des données ne modifie pas beaucoup les résultats, car la rotation résultante des principaux composants est pratiquement inchangée par la transformation logicielle.
Dans d'autres situations, la transformation du journal est un bon choix.
Nous effectuons l'ACP pour avoir un aperçu de la structure générale d'un ensemble de données. Nous centrons, mettons à l'échelle et parfois transformons par log pour filtrer certains effets triviaux, qui pourraient dominer notre ACP. L'algorithme d'une PCA trouvera à son tour la rotation de chaque PC pour minimiser les résidus au carré, à savoir la somme des distances perpendiculaires au carré de n'importe quel échantillon aux PC. Les grandes valeurs ont généralement un effet de levier élevé.
Imaginez injecter deux nouveaux échantillons dans les données de l'iris. Une fleur avec 430 cm de longueur de pétale et une avec une longueur de pétale de 0,0043 cm. Les deux fleurs sont très anormales étant respectivement 100 fois plus grandes et 1000 fois plus petites que les exemples moyens. L'effet de levier de la première fleur est énorme, de sorte que les premiers PC décriront principalement les différences entre la grande fleur et toute autre fleur. Le regroupement des espèces n'est pas possible en raison de cette valeur aberrante. Si les données sont transformées en journal, la valeur absolue décrit maintenant la variation relative. Maintenant, la petite fleur est la plus anormale. Néanmoins, il est possible à la fois de contenir tous les échantillons dans une seule image et de fournir un regroupement équitable des espèces. Découvrez cet exemple:
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)