Eu estou olhando para implementar um biplot para análise de componentes principais (PCA) em JavaScript. Minha pergunta é: como determinar as coordenadas das setas da saída da decomposição de vetor singular (SVD) da matriz de dados?
Aqui está um exemplo de biplot produzido por R:
biplot(prcomp(iris[,1:4]))
Tentei procurar no artigo da Wikipedia sobre biplot, mas não é muito útil. Ou correto. Não tenho certeza qual.
biplot()
. Além disso, por que se preocupar com a integração do R-JS para algo que requer apenas algumas linhas de código.Respostas:
Existem muitas maneiras diferentes de produzir um biplot de PCA e, portanto, não há uma resposta exclusiva para sua pergunta. Aqui está uma breve visão geral.
Assumimos que a matriz de dados possui pontos de dados nas linhas e está centralizada (ou seja, as médias das colunas são zero). Por enquanto, não assumimos que ele tenha sido padronizado, ou seja, consideramos o PCA na matriz de covariância (não na matriz de correlação). O PCA equivale a uma decomposição de valor singular você pode ver minha resposta aqui para obter detalhes: Relacionamento entre SVD e PCA. Como usar o SVD para executar o PCA? n X = U S V ⊤ ,X n
Em um biplot de PCA, dois primeiros componentes principais são plotados como um gráfico de dispersão, ou seja, a primeira coluna de é plotada contra sua segunda coluna. Mas a normalização pode ser diferente; por exemplo, pode-se usar:você
Além disso, as variáveis originais são plotadas como setas; ou seja, as coordenadas de um -simo seta ponto final são dados pela valor -ésimo na primeira e segunda coluna de . Mas, novamente, pode-se escolher diferentes normalizações, por exemplo:i i V( x , y) Eu Eu V
Aqui está como tudo isso se parece com o conjunto de dados Fisher Iris:
Combinar qualquer subtrama de cima com qualquer subtrama de baixo resultaria em possíveis normalizações. Mas, de acordo com a definição original de um biplot introduzida em Gabriel, 1971, A exibição gráfica de biplot de matrizes com aplicação à análise de componentes principais (este artigo tem 2 mil citações, por sinal), as matrizes usadas para biplot devem, quando multiplicadas juntas, aproximar-se (esse é o ponto). Portanto, um "biplot adequado" pode usar, por exemplo, e . Portanto, apenas três dos são "biplots adequados": ou seja, uma combinação de qualquer subparcela de cima com a diretamente abaixo.X U S α β V S ( 1 - α ) / β 99 X U Sαβ V S( 1 - α )/ β 9
[Qualquer que seja a combinação usada, pode ser necessário escalar as setas por algum fator constante arbitrário, para que as setas e os pontos de dados apareçam aproximadamente na mesma escala.]
O uso de carregamentos, por exemplo, , para setas tem um grande benefício, pois eles têm interpretações úteis (veja também aqui sobre carregamentos). O comprimento das setas de carregamento aproxima o desvio padrão das variáveis originais (o comprimento ao quadrado aproxima a variação), os produtos escalares entre duas setas aproximam a covariância entre eles e os cossenos dos ângulos entre as setas aproximam as correlações entre as variáveis originais. Para fazer um "biplot adequado", deve-se escolher , ou seja, PCs padronizados, para pontos de dados. Gabriel (1971) chama isso de "PCA biplot" e escreve que U √V S / n - 1-----√ U n - 1-----√
O uso de e permite uma boa interpretação: setas são projeções dos vetores de base originais no plano do PC, veja esta ilustração em @ hxd1011 .VU S V
Pode-se até optar por plotar PCs brutos junto com os carregamentos. Este é um "biplot impróprio", mas foi feito por @vqv no biplot mais elegante que já vi: Visualizando um milhão, edição PCA - mostra o PCA do conjunto de dados do wine.US
A figura que você postou (resultado padrão daU VS 0.8 n/(n−1) 1
biplot
função R ) é um "biplot adequado" com e . A função dimensiona duas subparcelas, de modo que abranjam a mesma área. Infelizmente, a função faz uma escolha estranha de reduzir todas as setas em um fator de e exibir os rótulos de texto onde os pontos finais das setas deveriam estar. (Além disso, não recebe o dimensionamento corretamente e em extremidades fato se traçando pontuação com soma dos quadrados, em vez de Ver esta investigação detalhada por @AntoniParellada:. Setas de subjacentes variáveis em PCA biplot em R . )V S 0,8 n / ( n - 1 ) 1biplot
biplot
PCA na matriz de correlação
Se ainda assumirmos que a matriz de dados foi padronizada para que os desvios padrão da coluna sejam todos iguais a , então estamos executando o PCA na matriz de correlação. Aqui está como a mesma figura se parece: 1X 1
Aqui, as cargas são ainda mais atraentes, porque (além das propriedades acima mencionadas), elas fornecem exatamente (e não aproximadamente) coeficientes de correlação entre variáveis originais e PCs. As correlações são todas menores que e as setas de carregamento precisam estar dentro de um "círculo de correlação" de raio , que às vezes também é desenhado em um biplot (plotei-o na subtrama correspondente acima). Observe que o biplot de @vqv (link acima) foi feito para um PCA na matriz de correlação e também possui um círculo de correlação.R = 11 R=1
Leitura adicional:
fonte