Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Dúvida] Normalização para análise de adequação pré-PCA

Olá!

É comum que se normalize os dados antes de realizar o teste bartlett? E a estatística KMO? Senti falta desse tópico.

As variáveis estão em grandezas diferentes e a literatura da estatística multivariada trabalha com a matriz normalizada de correlações desde e estatísticas mais simples como a variância generalizada.

1 resposta

Oi, Fabio. Tudo bem?

A sua intuição sobre as grandezas diferentes tá certa, ela só se aplica em um momento diferente do fluxo.

Para o KMO e o teste de Bartlett, normalizar não muda nada. O motivo é que as duas estatísticas não são calculadas a partir dos dados brutos, e sim da matriz de correlação. Repare que na aula passamos variaveis_numericas (os dados crus) para as funções, mas internamente o factor_analyzer faz um .corr() antes de qualquer conta.

E aí entra o ponto que você mesmo levantou: a matriz de correlação já é a matriz de covariâncias normalizada. Cada elemento é dividido pelo produto dos desvios-padrão, o que elimina as unidades de medida. Como consequência:

  • O qui-quadrado de Bartlett depende de ln(det(R)), onde R é a matriz de correlação;
  • O KMO compara correlações simples com correlações parciais, ambas derivadas de R.

Nenhum dos dois enxerga as escalas originais. Formalmente, a correlação de Pearson é invariante a qualquer transformação linear positiva, z-score, min-max, mudar de reais para milhares de reais.

Onde a escala importa de verdade é no PCA em si. Aí sua observação é fundamental: se você aplicar o PCA sobre a matriz de covariâncias de variáveis em grandezas distintas, a variável de maior variância absoluta domina os primeiros componentes, renda, medida em reais, esmagaria uma taxa que varia entre 0 e 1. Por isso a análise é feita sobre a matriz de correlação (equivalente a padronizar antes). Vale ficar atento porque o PCA do scikit-learn só centraliza os dados, não padroniza, se for por esse caminho, o StandardScaler antes é obrigatório.

Um último detalhe: essa invariância vale para transformações lineares. Transformações não lineares, como log ou Box-Cox, alteram as correlações e, portanto, mudam sim o KMO e o Bartlett. Mas essas você aplicaria por uma razão estatística (assimetria, relações não lineares entre variáveis), não como etapa de padronização. Vale lembrar também que o Bartlett pressupõe normalidade multivariada e é bastante sensível ao tamanho da amostra, com n grande, ele tende a rejeitar a hipótese nula quase sempre, o que é um argumento para não olhar só para o p-valor e sim para o conjunto dos critérios.

Se quiser se aprofundar, vale olhar o código-fonte do factor_analyzer, nas duas funções aparece um x_corr = corr(x) logo na primeira linha, o que confirma que a padronização já está embutida. A documentação da API traz a fórmula do Bartlett com o determinante da matriz de correlação. E para o outro lado da moeda, o exemplo Importance of Feature Scaling do scikit-learn mostra visualmente o efeito da escala sobre os componentes principais.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!