# Instalação (se necessário)
#install.packages("FactoMineR")
library(FactoMineR)Análise de Correspondência
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
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))%*%sDc1Uma 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%*%DAná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$coordGrá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.