# 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.
<- matrix(
tabela 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.
= sum(tabela)
n = as.matrix(tabela/n)
P = as.matrix(rowSums(P),ncol=1)
r = as.matrix(colSums(P),ncol=1)
c = as.matrix(diag(1/sqrt(as.numeric(r))))
sDr1 = as.matrix(diag(1/sqrt(as.numeric(c))))
sDc1 = sDr1%*%(P - r%*%t(c))%*%sDc1 P_
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(P_)
svd = diag(svd$d)
D = svd$u
U = svd$v
V = sDr1%*%U%*%D
Frows = sDc1%*%V%*%D Fcols
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(tabela, graph = FALSE) ca
As coordenadas podem ser encontradas da seguinte forma. Se comparar os valores obridos antes com esses verá que são os mesmos.
= ca$row$coord
Frows = ca$col$coord Fcols
Gráfico
Uma vez obtidas as coordenadas o gráfico pode ser plotado, para linhas e/ou colunas e as interpretações feitas.
<- Frows[,1]
x_rows <- Frows[,2]
y_rows
<- Fcols[,1]
x_cols <- Fcols[,2]
y_cols
<- 1.1*range(c(x_rows, x_cols))
xlim <- 1.1*range(c(y_rows, y_cols))
ylim
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.