Il set di dati dell'iride è un ottimo esempio per imparare il PCA. Detto questo, le prime quattro colonne che descrivono la lunghezza e la larghezza dei sepali e dei petali non sono un esempio di dati fortemente distorti. Pertanto, la trasformazione dei log dei dati non modifica molto i risultati, poiché la rotazione risultante dei componenti principali è pressoché invariata dalla trasformazione dei log.
In altre situazioni, la trasformazione dei log è una buona scelta.
Eseguiamo PCA per ottenere informazioni sulla struttura generale di un set di dati. Centriamo, ridimensioniamo e talvolta trasformiamo il log per filtrare alcuni effetti banali, che potrebbero dominare il nostro PCA. L'algoritmo di un PCA troverà a sua volta la rotazione di ciascun PC per minimizzare i residui quadrati, vale a dire la somma delle distanze perpendicolari quadrate da qualsiasi campione ai PC. Valori elevati tendono ad avere una leva elevata.
Immagina di iniettare due nuovi campioni nei dati dell'iride. Un fiore con una lunghezza di 430 cm di petalo e uno con una lunghezza di petalo di 0,0043 cm. Entrambi i fiori sono molto anormali essendo 100 volte più grandi e 1000 volte più piccoli rispettivamente rispetto agli esempi medi. L'effetto leva del primo fiore è enorme, in modo che i primi PC descriveranno principalmente le differenze tra il grande fiore e qualsiasi altro fiore. Il raggruppamento di specie non è possibile a causa di quello anomalo. Se i dati vengono trasformati in log, il valore assoluto ora descrive la variazione relativa. Ora il piccolo fiore è il più anormale. Tuttavia è possibile sia contenere tutti i campioni in un'unica immagine sia fornire un giusto raggruppamento delle specie. Dai un'occhiata a questo esempio:
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)