O conjunto de dados da íris é um bom exemplo para aprender o PCA. Dito isto, as quatro primeiras colunas que descrevem o comprimento e a largura de sépalas e pétalas não são um exemplo de dados fortemente distorcidos. Portanto, a transformação de log dos dados não altera muito os resultados, pois a rotação resultante dos componentes principais é bastante inalterada pela transformação de log.
Em outras situações, a transformação de log é uma boa escolha.
Executamos o PCA para obter uma visão geral da estrutura geral de um conjunto de dados. Centralizamos, dimensionamos e, às vezes, transformamos em log para filtrar alguns efeitos triviais, que poderiam dominar nosso PCA. O algoritmo de um PCA, por sua vez, encontrará a rotação de cada PC para minimizar os resíduos quadrados, ou seja, a soma das distâncias perpendiculares ao quadrado de qualquer amostra para os PCs. Valores grandes tendem a ter alta alavancagem.
Imagine injetar duas novas amostras nos dados da íris. Uma flor com comprimento de pétala de 430 cm e outra com comprimento de pétala de 0,0043 cm. Ambas as flores são muito anormais, sendo 100 vezes maiores e 1000 vezes menores, respectivamente, que os exemplos médios. A influência da primeira flor é enorme, de modo que os primeiros PCs descrevem principalmente as diferenças entre a flor grande e qualquer outra flor. O agrupamento de espécies não é possível devido a esse erro. Se os dados forem transformados em log, o valor absoluto agora descreverá a variação relativa. Agora a flor pequena é a mais anormal. No entanto, é possível conter todas as amostras em uma imagem e fornecer um agrupamento justo das espécies. Confira este exemplo:
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)