Análise de Correspondência

Author

Jessica Kubrusly

Introdução

Nesta análise, vamos realizar uma Análise de Correspondência (AC) sobre uma tabela de contingência.
A AC é uma técnica exploratória multivariada usada para investigar a associação entre duas variáveis qualitativas.

Pacotes necessários

# Instalação (se necessário)
#install.packages("FactoMineR")

library(FactoMineR)

Base de Dados

Vamos usar o conjunto de dados apresentado no material teórico. A tabela resume a distribuição das categorias de percepção do estado de saúde em diferentes faixas etárias.

tabela <- matrix(
  c(243, 789, 167, 18, 6,
    220, 809, 164, 35, 6,
    147, 658, 181, 41, 8,
    90, 469, 236, 50, 16,
    53, 414, 306, 106, 30,
    44, 267, 284, 98, 20,
    20, 136, 157, 66, 17),
  nrow = 7,
  byrow = TRUE
)

rownames(tabela) <- c("16-24", "25-34", "35-44", "45-54", "55-64", "65-74", "75+")
colnames(tabela) <- c("Very Good", "Good", "Regular", "Bad", "Very Bad")

tabela
      Very Good Good Regular Bad Very Bad
16-24       243  789     167  18        6
25-34       220  809     164  35        6
35-44       147  658     181  41        8
45-54        90  469     236  50       16
55-64        53  414     306 106       30
65-74        44  267     284  98       20
75+          20  136     157  66       17

Análise de Correspondência - contas na mão

O primeiro passo é encontrar a tabela padronizada.

n = sum(tabela)
P = as.matrix(tabela/n)
r = as.matrix(rowSums(P),ncol=1)
c = as.matrix(colSums(P),ncol=1)
sDr1 = as.matrix(diag(1/sqrt(as.numeric(r))))
sDc1 = as.matrix(diag(1/sqrt(as.numeric(c))))
P_ = sDr1%*%(P - r%*%t(c))%*%sDc1

Uma vez a matriz padronizada, podemos obter as coordenadas das linhas e colunas a partir da decomposição SVD usando a função svd().

# Decomposicao SVD
svd = svd(P_)
D = diag(svd$d)
U = svd$u
V = svd$v
Frows = sDr1%*%U%*%D
Fcols = sDc1%*%V%*%D

Análise de Correspondência - função CA

A função CA() do pacote FactoMineR realiza as contas para a análise de correspondência com a necessidade de menos linhas de comando. Os dados de entrada devem estar em forma de uma tabela de contingência.

ca = CA(tabela, graph = FALSE)

As coordenadas podem ser encontradas da seguinte forma. Se comparar os valores obridos antes com esses verá que são os mesmos.

Frows = ca$row$coord
Fcols = ca$col$coord

Gráfico

Uma vez obtidas as coordenadas o gráfico pode ser plotado, para linhas e/ou colunas e as interpretações feitas.

x_rows <- Frows[,1]
y_rows <- Frows[,2]

x_cols <- Fcols[,1]
y_cols <- Fcols[,2]

xlim <- 1.1*range(c(x_rows, x_cols))
ylim <- 1.1*range(c(y_rows, y_cols))

plot(x_rows, y_rows,
     xlim = xlim, ylim = ylim,
     pch = 19, col = "blue",
     xlab = "Dimensão 1", ylab = "Dimensão 2",
     main = "Mapa Perceptual - Análise de Correspondência")
text(x_rows, y_rows, labels = rownames(Frows), pos = 3, col = "blue")
points(x_cols, y_cols, pch = 17, col = "red")
text(x_cols, y_cols, labels = rownames(Fcols), pos = 3, col = "red")
abline(h = 0, v = 0, lty = 2)

Interpretação

Observando a dispersão das faixas etárias da direita para a esquerda, vemos que há apenas uma pequena mudança do grupo etário 1 para o grupo 2, depois um passo maior para o grupo 3, um ainda maior para o grupo 4, o maior de todos para o grupo 5, seguido de passos menores para o grupo 6 e, depois, para o grupo 7. A ordenação das categorias de estado de saúde ao longo dessa dimensão está de acordo com a ordem natural, indo de “muito bom” até “muito ruim”, e suas posições relativas fornecem valores de escala que podem ser interpretados; por exemplo, há muito pouca diferença entre “ruim” e “muito ruim”, mas uma grande diferença entre, por exemplo, “bom” e “regular”, no que diz respeito à distinção das respostas entre os diferentes grupos etários.