Ao construir um biplot para uma análise PCA, você tem pontuações PC1 do componente principal no eixo x e pontuações PC2 no eixo y. Mas quais são os outros dois eixos à direita e na parte superior da tela?
Ao construir um biplot para uma análise PCA, você tem pontuações PC1 do componente principal no eixo x e pontuações PC2 no eixo y. Mas quais são os outros dois eixos à direita e na parte superior da tela?
Respostas:
Você quer dizer, por exemplo, no gráfico que o seguinte comando retorna?
biplot(prcomp(USArrests, scale = TRUE))
Se sim, os eixos superior e direito devem ser usados para interpretar as setas vermelhas (pontos que representam as variáveis) no gráfico.
Se você sabe como a análise de componentes principais funciona e pode ler o código R, o código abaixo mostra como os resultados prcomp()
são inicialmente tratados biplot.prcomp()
antes da plotagem final biplot.default()
. Essas duas funções são chamadas em segundo plano quando você plota com biplot()
, e o seguinte trecho de código modificado é de biplot.prcomp()
.
x<-prcomp(USArrests, scale=TRUE)
choices = 1L:2L
scale = 1
pc.biplot = FALSE
scores<-x$x
lam <- x$sdev[choices]
n <- NROW(scores)
lam <- lam * sqrt(n)
lam <- lam^scale
yy<-t(t(x$rotation[, choices]) * lam)
xx<-t(t(scores[, choices])/lam)
biplot(xx,yy)
Logo, no exemplo acima, a matriz de cargas variáveis ( x$rotation
) é escalada pelo desvio padrão dos componentes principais ( x$sdev
) vezes a raiz quadrada do número de observações. Isso define a escala dos eixos superior e direito para o que é visto na plotagem.
Existem outros métodos para dimensionar as cargas variáveis também. Estes são oferecidos, por exemplo, pelo pacote vegano R.
Eu tenho uma melhor visualização para o biplot. Por favor, verifique a figura a seguir.
No experimento, estou tentando mapear pontos 3D em 2d (conjunto de dados simulados).
O truque para entender o biplot em 2d é encontrar o ângulo correto para ver a mesma coisa em 3d. Todos os pontos de dados são numerados, você pode ver o mapeamento claramente.
Aqui está o código para reproduzir os resultados.
require(rgl)
set.seed(0)
feature1=round(rnorm(50)*10+20)
feature2=round(rnorm(50)*10+30)
feature3=round(runif(50)*feature1)
d=data.frame(feature1,feature2,feature3)
head(d)
plot(feature1,feature2)
plot(feature2,feature3)
plot(feature1,feature3)
plot3d(d$feature1, d$feature2, d$feature3, type = 'n')
points3d(d$feature1, d$feature2, d$feature3, color = 'red', size = 10)
shift <- matrix(c(-2, 2, 0), 12, 3, byrow = TRUE)
text3d(d+shift,texts=1:50)
grid3d(c("x", "y", "z"))
pr.out=prcomp(d,scale.=T)
biplot(pr.out)
grid()
biplot
comando em R e reproduzido em sua figura no lado direito: lá a nuvem de pontos é padronizada, mas as setas têm comprimentos correspondentes às variações.
biplot
produz com scale=0
argumento.