Análise de correspondência

A Análise de Correspondência (AC) é o equivalente do PCA para tabelas de contingência. Ela encontra uma representação de baixa dimensão das linhas e colunas de uma tabela de frequências bidirecional que preserva as distâncias qui-quadrado entre os perfis. O resultado é um biplot em que linhas e colunas próximas entre si estão associadas, e linhas ou colunas próximas da origem têm perfis pouco notáveis.

A tabela de contingência e os perfis

A AC começa com uma tabela de contingência \(\mathbf{N}\) de tamanho \(I \times J\), em que \(n_{ij}\) é a frequência da categoria de linha \(i\) e da categoria de coluna \(j\). Defina:

  • \(n = \sum_{i,j} n_{ij}\): total geral.
  • \(\mathbf{P} = \mathbf{N}/n\): matriz de correspondência (frequências relativas).
  • \(r_i = \sum_j p_{ij}\): marginais de linha.
  • \(c_j = \sum_i p_{ij}\): marginais de coluna.

O perfil de linha da linha \(i\) é \(\mathbf{f}_i = (p_{i1}/r_i, \ldots, p_{iJ}/r_i)\): a distribuição condicional das colunas dada a linha \(i\). O perfil de coluna da coluna \(j\) é \(\mathbf{g}_j = (p_{1j}/c_j, \ldots, p_{Ij}/c_j)\).

A AC encontra coordenadas para linhas e colunas tais que:

  1. Linhas (colunas) com perfis semelhantes ficam próximas.
  2. A distância usada é a distância qui-quadrado, que pondera cada coluna (linha) pelo inverso de sua frequência marginal, dando mais peso a categorias raras.

A distância qui-quadrado entre as linhas \(i\) e \(i'\):

\[d^2_\chi(i,i') = \sum_j \frac{1}{c_j}\left(\frac{p_{ij}}{r_i} - \frac{p_{i'j}}{r_{i'}}\right)^2\]

Decomposição SVD

A AC aplica a SVD à matriz de resíduos padronizados:

\[s_{ij} = \frac{p_{ij} - r_i c_j}{\sqrt{r_i c_j}}\]

O numerador \(p_{ij} - r_i c_j\) é o desvio em relação à independência: se linhas e colunas fossem independentes, a proporção esperada seria \(r_i c_j\). O denominador padroniza pela contagem esperada.

\[\mathbf{S} = \mathbf{U}\boldsymbol{\Sigma}\mathbf{V}^T\]

As coordenadas das linhas (escores) são \(\mathbf{F} = \mathbf{D}_r^{-1/2}\mathbf{U}\boldsymbol{\Sigma}\) e as das colunas são \(\mathbf{G} = \mathbf{D}_c^{-1/2}\mathbf{V}\boldsymbol{\Sigma}\), em que \(\mathbf{D}_r\) e \(\mathbf{D}_c\) são matrizes diagonais dos marginais de linha e coluna.

Os valores singulares ao quadrado \(\sigma_k^2\) são as inércias principais: elas medem quanto da estatística qui-quadrado total é capturado por cada dimensão. A inércia total é igual a \(\chi^2/n\), em que \(\chi^2\) é a estatística qui-quadrado da tabela de contingência.

Exemplo: hábitos de fumo por cargo

Uma pesquisa registra os hábitos de fumo (Nenhum, Leve, Médio, Intenso) por categoria de cargo (Gerente Sênior, Gerente Júnior, Funcionário Sênior, Funcionário Júnior, Secretário).

Biplot de análise de correspondência mostrando hábitos de fumo por categoria de cargo com linhas e colunas no mesmo espaço

SM = Gerente Sênior, JM = Gerente Júnior, SE = Funcionário Sênior, JE = Funcionário Júnior, SC = Secretário. Funcionários Júniores aparecem próximos de “Heavy” (fumo intenso); Gerentes Sêniores estão mais próximos de “None” (nenhum). A primeira dimensão separa fumantes leves de intensos; a segunda separa funções gerenciais de não gerenciais.

Inércia e quantas dimensões

Inércia total = \(\chi^2/n\): mede a associação total entre linhas e colunas. Inércia zero significa que linhas e colunas são independentes. Inércia alta significa associação forte.

Cada dimensão captura uma fração da inércia total (análogo à variância explicada no PCA). Um gráfico de sedimentação das inércias principais ajuda a decidir quantas dimensões reter.

Gráfico de sedimentação da inércia da AC mostrando quanta associação cada dimensão captura

Lendo o biplot

Três regras para interpretar um biplot da AC:

Regra 1: linhas próximas entre si têm perfis de coluna semelhantes. Duas categorias de cargo próximas têm distribuições de fumo semelhantes.

Regra 2: colunas próximas entre si aparecem em perfis de linha semelhantes. Dois níveis de fumo próximos tendem a caracterizar as mesmas categorias de cargo.

Regra 3: um ponto de linha próximo de um ponto de coluna indica associação. Uma categoria de cargo próxima de “Heavy” significa que essa categoria sobrerrepresenta fumantes intensos em relação à média.

Regra 4: distância da origem. Pontos próximos da origem têm perfis próximos da média (pouco interessantes); pontos distantes da origem têm perfis inusuais e impulsionam as dimensões.

⚠️ A proximidade linha-coluna exige cautela

Em um biplot de AC padrão (mapa simétrico), a distância exata entre um ponto de linha e um ponto de coluna não é diretamente interpretável como uma distância qui-quadrado. O biplot projeta linhas e colunas no mesmo espaço por conveniência visual, mas as distâncias qui-quadrado formais são definidas separadamente para linhas e para colunas.

Para uma distância totalmente interpretável entre linhas e colunas, use um biplot assimétrico: plote um conjunto de perfis como pontos e o outro como coordenadas naquele espaço de perfis. A função fviz_ca_biplot(asymmetric=TRUE) do FactoMineR faz isso.

Análise de Correspondência Múltipla (ACM)

A AC trata de duas variáveis categóricas. A Análise de Correspondência Múltipla (ACM) estende isso para três ou mais variáveis. Cada indivíduo é descrito por várias variáveis categóricas; a ACM encontra um espaço de baixa dimensão em que:

  • Indivíduos que deram respostas semelhantes ficam próximos.
  • Categorias que foram frequentemente escolhidas juntas ficam próximas.
  • Categorias próximas de um indivíduo significam que esse indivíduo tende a escolher aquela categoria.

A ACM é equivalente à AC aplicada à matriz indicadora (uma matriz binária com uma coluna por categoria e uma linha por indivíduo). É amplamente usada em análise de pesquisas e pesquisa de mercado.

💡 Análise de correspondência em R

library(FactoMineR)
library(factoextra)

# CA on a contingency table
ca_res <- CA(contingency_table, ncp=5, graph=FALSE)
summary(ca_res)          # inertia per dimension
ca_res$eig               # eigenvalues and % inertia
ca_res$row$coord         # row coordinates
ca_res$col$coord         # column coordinates

# Biplot
fviz_ca_biplot(ca_res, repel=TRUE)

# Scree plot
fviz_screeplot(ca_res)

# Contribution of rows/columns to each dimension
fviz_contrib(ca_res, choice="row", axes=1)
fviz_contrib(ca_res, choice="col", axes=1)

# MCA for multiple categorical variables
mca_res <- MCA(df_survey, graph=FALSE)
fviz_mca_biplot(mca_res, repel=TRUE)