El conjunto de datos de iris es un buen ejemplo para aprender PCA. Dicho esto, las primeras cuatro columnas que describen la longitud y el ancho de sépalos y pétalos no son un ejemplo de datos fuertemente sesgados. Por lo tanto, la transformación logarítmica de los datos no cambia mucho los resultados, ya que la rotación resultante de los componentes principales no cambia mucho por la transformación logarítmica.
En otras situaciones, la transformación logarítmica es una buena opción.
Realizamos PCA para obtener información sobre la estructura general de un conjunto de datos. Centramos, escalamos y, a veces, log-transform para filtrar algunos efectos triviales, que podrían dominar nuestro PCA. El algoritmo de una PCA a su vez encontrará la rotación de cada PC para minimizar los residuos al cuadrado, es decir, la suma de las distancias perpendiculares al cuadrado de cualquier muestra a las PC. Los valores grandes tienden a tener un alto apalancamiento.
Imagine inyectar dos nuevas muestras en los datos del iris. Una flor con una longitud de pétalo de 430 cm y otra con una longitud de pétalo de 0.0043 cm. Ambas flores son muy anormales, son 100 veces más grandes y 1000 veces más pequeñas, respectivamente, que los ejemplos promedio. El apalancamiento de la primera flor es enorme, de modo que las primeras PC en su mayoría describirán las diferencias entre la flor grande y cualquier otra flor. La agrupación de especies no es posible debido a ese valor atípico. Si los datos se transforman logarítmicamente, el valor absoluto ahora describe la variación relativa. Ahora la pequeña flor es la más anormal. No obstante, es posible contener todas las muestras en una imagen y proporcionar una agrupación justa de las especies. Mira este ejemplo:
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)