Capítulo 9 Análise bidimensional: variáveis qualitativas
Até agora exploramos formas de representar visualmente uma única variável por vez (Capítulos 3 e 4) e discutimos medidas para descrever algumas propriedades desta variável (Capítulo 5 a 8). A partir de agora veremos como representar e resumir padrões de associação entre pares de variáveis. Segundo a natureza dos dados envolvidos, estas associações podem ser entre:
duas variáveis qualitativas (este capítulo);
duas variáveis quantitativas (Capítulo 10) e;
uma variável qualitativa e uma quantitativa (Capítulo 11)
Exemplo
Imagine que haverá uma obra de revitalização de uma área na região central da cidade. A obra implicará na melhoria de acesso e segurança, ferta de serviços, mas levará tempo para ser concluída e precisará passar por ações de remoção de moradias irregulares, interdição de ruas e avenidas por longos períodos, etc. A prefeitura encomenda uma pesquisa para saber a opinião dos munícipes. A cada entrevistado são feitas duas perguntas:
- Qual sua opinião sobre a necessidade de realização da obra?
- A favor
- Contra
- Você reside na região diretamente afetada:
- Residente
- Não-Residente
A base de dados está disponível em: Entrevista_municipes.csv
Importe a tabela e veja os primeiros 12 resultados das entrevistas:
# Carrega pacotes
library(tidyverse)
# Importa base de dados
= read_delim('Entrevista_municipes.csv',
mun delim = ',')
= nrow(mun) # Número de entrevistados n
Entrevistado | Opiniao | Moradia |
---|---|---|
1 | A favor | Residente |
2 | A favor | Residente |
3 | A favor | Residente |
4 | A favor | Residente |
5 | Contra | Não-Residente |
6 | Contra | Residente |
7 | A favor | Não-Residente |
8 | Contra | Não-Residente |
9 | A favor | Não-Residente |
10 | A favor | Não-Residente |
11 | A favor | Residente |
12 | A favor | Não-Residente |
Após entrevistar \(200\) pessoas selecionadas ao acaso de uma lista da moradores da cidade, é construída uma tabela com três colunas: Entrevistado
(sequência numérica do primeiro ao último respondente), Opinião
e Moradia
.
Estão descritos acima os resultados das primeiras 12 entrevistas, onde é possível ver ao menos uma combinação de todas as possíveis respostas. O entrevistado pode ser: i) A favor
e ser Residente
da região; ii) A favor
e ser Não-Residente
, iii) Contra
e ser Residente
; iv) Contra
e ser Não-Residente
.
Vamos inicialmente representar cada uma das variáveis individualmente por meio de uma tabela de frequência dos 200 entrevistados.
= mun %>%
resumo_opiniao group_by(Opiniao) %>%
summarise(Op_n = n()) %>%
mutate(Op_rel = Op_n/sum(Op_n))
resumo_opiniao
Opiniao | Op_n | Op_rel |
---|---|---|
A favor | 144 | 0.72 |
Contra | 56 | 0.28 |
Das \(200\) respostas tivemos \(144\) pessoas A favor (\(72\%\)) e \(56\) pessoas Contra (\(28\%\)).
Com relação ao local de residência:
= mun %>%
resumo_morad group_by(Moradia) %>%
summarise(Morad_n = n()) %>%
mutate(Morad_rel = Morad_n/sum(Morad_n))
resumo_morad
Moradia | Morad_n | Morad_rel |
---|---|---|
Não-Residente | 117 | 0.585 |
Residente | 83 | 0.415 |
Temos um total de \(117\) pessoas Não-Residente (\(58.5\%\)) e \(83\) pessoas Residente (\(41.5\%\))
Se visualizarmos estes totais em gráficos de barras individuais teremos:
= ggplot(mun, aes(x = Opiniao)) +
plt_op geom_bar(fill = 'darkblue', color = 'white') +
coord_cartesian(ylim = c(0, 150)) +
labs(y = 'Número de respostas') +
theme_classic()
= ggplot(mun, aes(x = Moradia)) +
plt_morad geom_bar(fill = 'darkred', color = 'white') +
coord_cartesian(ylim = c(0, 150)) +
labs(y = 'Número de respostas') +
theme_classic()
# Obs: para que a linha abaixo funcione, é necessário habilitar o pacote 'patchwork'.
# Caso não tenha, instale e carregue com os comandos:
# install.packages('patchwork')
# library(patchwork)
+ plt_morad plt_op
Existe portanto um predomínio de pessoas A Favor
e um ligeiro predomínio de entrevistados Não-Residentes
.
Estamos interessados em entender se existe alguma associação entre as respostas dadas às duas perguntas, uma questão que pode ser colocada da seguinte forma:
Será que moradores
Residentes
tendem ter uma opinião consistentemente diferente de moradoresNão-residentes
no que se refere a serA favor
ouContra
a obra?
Para começar a entender esta questão vamos explorar a distribuição das variáveis conjuntamente.
9.1 Tabelas de contingência
Tabelas de contigência são organizadas para verificarmos a associação entre duas variáveis qualitativas. São conhecidas também como tabelas de dupla entrada. Nas colunas estão os níveis da variável \(X\) e nas linhas os níveis da variável \(Y\).
Para nosso exemplo, podemos fazer simplesmente:
= table(mun$Opiniao, mun$Moradia)
tcont tcont
##
## Não-Residente Residente
## A favor 81 63
## Contra 36 20
Temos portanto:
81 - A favor e Não-Residente;
63 - A favor e Residente;
36 - Contra e Não-Residente;
20 - Contra e Residente
Podemos ver os totais marginais das linhas:
= apply(tcont, 1, sum) # Totais das linhas
tcont_linhas tcont_linhas
## A favor Contra
## 144 56
Ou os totais marginais das colunas:
= apply(tcont, 2, sum) # Totais das colunas
tcont_colunas tcont_colunas
## Não-Residente Residente
## 117 83
Que são justamente os totais que verificamos nas distribuições individuais.
Se quisermos ver as frequências relativas marginais podemos fazer:
= prop.table(tcont, 1) # Frequencia relativa marginal das linhas
trel_linha trel_linha
##
## Não-Residente Residente
## A favor 0.5625000 0.4375000
## Contra 0.6428571 0.3571429
Neste caso, estamos vendo as frequências relativas das linhas, isto é, cada linha nesta tabela soma \(1\). O que vemos nesta tabela é:
dos \(144\) entrevistados que são A favor, cerca de \(56.25\%\) são Não-Residente, enquanto os demais \(43.75\%\) são Residente
dos \(56\) entrevistados que são Contra, cerca de \(64.29\%\) são Não-Residente, enquanto os demais \(35.71\%\) são Residente
Podemos fazer exatamente a mesma coisa olhando agora para as frequências marginais por colunas:
= prop.table(tcont, 2) # Frequencia relativa marginal das colunas
trel_coluna trel_coluna
##
## Não-Residente Residente
## A favor 0.6923077 0.7590361
## Contra 0.3076923 0.2409639
Neste caso são as colunas que somam \(1\), portanto:
dos \(117\) entrevistados que são Não-Residente, cerca de \(69.23\%\) são A favor, enquanto os demais \(30.77\%\) são Contra
dos \(83\) entrevistados que são Residente, cerca de \(75.9\%\) são A favor, enquanto os demais \(75.9\%\) são Contra
Podemos finalmente ver a frequência relativa conjunta:
= prop.table(tcont) # Frequencia relativa conjunta
trel_conjunta trel_conjunta
##
## Não-Residente Residente
## A favor 0.405 0.315
## Contra 0.180 0.100
Neste caso, o somatório das linhas é igual a:
/ sum(tcont_linhas) tcont_linhas
## A favor Contra
## 0.72 0.28
E indica os valores relativos das opiniões A Favor
e Contra
.
O somatório das colunas é igual a:
/ sum(tcont_colunas) tcont_colunas
## Não-Residente Residente
## 0.585 0.415
E indica os valores relativos de Não-Residentes
e Residentes
.
Na tabela de frequência relativa conjunta, o somatório total da tabela deve ser igual a \(1\).
9.2 O gráfico de barras para duas variáveis qualitativas
Existem várias formas de gerar um gráfico de barras combinando as duas variáveis. Se quisermos utilizar a própria tabela de contingência obtida a partir do comando table(mun$Opiniao, mun$Moradia)
, podemos utilizar o comando barplot()
. Por outro lado, se quisermos utilizar a tabela original de dados (objeto mun
) podemos fazer uso do pacote ggplot2
:
= ggplot(mun) +
plt_bar1 aes(x = Moradia, fill = Opiniao) +
geom_bar(color = 'white', position = 'dodge') +
scale_fill_manual(values = c('Contra' = 'darkred',
'A favor' = 'darkblue')) +
coord_cartesian(ylim = c(0, 80)) +
labs(y = 'Número de respostas') +
theme_classic()
plt_bar1
Veja que nesta figura, existem mais opiniões A favor
independente do entrevistado ser ou não residente. Este padrão é o mesmo que observamos no gráfico da variável Opinião
isoladamente. Isto sugere que não existe associação entre as variáveis Opinião
e Moradia
. Isto é, a opinião de um entrevistado sobre a construção da obra não depende do seu local de moradia.
Exemplos de associações entre duas variáveis
Abaixo são apresentadas situações em que existe uma associação.
Em todos estes exemplos, note que a relação entre as opiniões A favor
ou Contra
depende se o entrevistado é ou não Residente na região. Todos estes padrões configuram uma associação entre as variáveis Opinião
e Moradia
.
Figura A: Não-Residentes tendem a ser
A favor
e Residentes são em sua maioriaContra
;Figura B: Todos tendem a ser
Contra
, mas a diferença de opiniões é maior entre os Residentes;Figura C: Não-Residentes tendem a ser
Contra
, enquanto não parece haver diferenças entre os Residentes;Figura D: Residentes tendem a ser
A favor
, enquanto não parece haver diferenças entre os Residentes;
9.3 Medindo a discrepância com o índice de \(\chi^2\) de Pearson
O índice de qui-quadrado (\(\chi^2\)) mede a discrepância entre os valores observados e os valores esperados em uma tabela de contingência.
Digamos que um município tenha \(20\%\) de sua população morando em área Rural e os outros \(80\%\) em área Urbana. Se fizermos uma amostragem ao acaso dos moradores é esperado que esta frequência relativa se reflita na amostra. Neste caso se sorteamos \(200\) pessoas, seria esperado:
Zona Rural: \(40\) moradores
Zona Urbana \(160\) moradores
Regiao | Freq |
---|---|
Rural | 40 |
Urbana | 160 |
Entretando, se fazemos um sorteio ao acaso, haverá alguma variação ao redor destes valores. O \(\chi^2\) mede esta discrepância entre as frequências observadas (\(o\)) e esperadas (\(e\)) para cada célula da tabela:
\[\chi^2 = \sum_{i=1}^{n}\frac{(o_i - e_i)^2}{e_i}\] Para uma tabela de frequências, devemos determinar portanto os valores de \(o_i\) e \(e_i\).
Suponha que uma amostra de \(200\) moradores tenha resultado em:
Regiao | Freq |
---|---|
Rural | 31 |
Urbana | 169 |
As frequências observadas e esperadas serão:
- Zona Rural:
\(o_{Rural} = 31\)
\(e_{Rural} = 0.2 \times 200 = 40\)
- Zona Urbana
\(o_{Urbana} = 169\)
\(e_{Urbana} = 0.8 \times 200 = 160\)
De modo que o valor de \(\chi^2\) será:
\(\chi^2 = \frac{(31 - 40)^2}{40} + \frac{(169 - 160)^2}{160} = \frac{(-9)^2}{40} + \frac{(9)^2}{160} = 2.025 + 0.50625 = 2.53125\)
9.4 O índice de \(\chi^2\) em uma tabela de contigência
No exemplo acima, as contagens esperadas foram definidas a partir de um modelo que dizia que as populações rurais e urbanas se dividiam nas proporções \(20\%:80\%\). Em uma tabela de contigência, a hipótese em verificação é a de que não há associação entre \(X\) e \(Y\). Se for assim, é esperado que as frequências conjuntas sejam porporcionais às frequências marginais*. Vamos apresentar esta ideia utilizando uma notação geral para tabelas de contingência e em seguida discutir com um exemplo.
A tabela abaixo apresenta \(r\) linhas por \(s\) colunas com as contagens de todas as combinações dos níveis da variável \(X\) (Níveis \(A_{1}\) a \(A_{r}\)) e da variável \(Y\) (Níveis \(B_{1}\) a \(B_{s}\)). Os totais marginais de \(X\) e \(Y\) são expressos respectivamente na última coluna e na última linha.
X ⟍ Y | \(B_{1}\) | \(B_{2}\) | \(\cdots\) | \(B_{j}\) | \(\cdots\) | \(B_{s}\) | Totais em \(X\) |
---|---|---|---|---|---|---|---|
\(A_{1}\) | \(n_{11}\) | \(n_{12}\) | \(\cdots\) | \(n_{1j}\) | \(\cdots\) | \(n_{1s}\) | \(n_{1.}\) |
\(A_{2}\) | \(n_{21}\) | \(n_{22}\) | \(\cdots\) | \(n_{2j}\) | \(\cdots\) | \(n_{2s}\) | \(n_{2.}\) |
\(\vdots\) | \(\vdots\) | \(\vdots\) | \(\vdots\) | \(\vdots\) | \(\vdots\) | \(\vdots\) | \(\vdots\) |
\(A_{i}\) | \(n_{i1}\) | \(n_{i2}\) | \(\cdots\) | \(n_{ij}\) | \(\cdots\) | \(n_{is}\) | \(n_{i.}\) |
\(\vdots\) | \(\vdots\) | \(\vdots\) | \(\vdots\) | \(\cdots\) | \(\cdots\) | \(\vdots\) | \(\vdots\) |
\(A_{r}\) | \(n_{r1}\) | \(n_{r2}\) | \(\cdots\) | \(n_{rj}\) | \(\cdots\) | \(n_{rs}\) | \(n_{r.}\) |
Totais em \(Y\) | \(n_{.1}\) | \(n_{.2}\) | \(\cdots\) | \(n_{.j}\) | \(\cdots\) | \(n_{rs}\) | \(n\) |
Sob a hipótese de não associação entre \(X\) e \(Y\) teremos que:
\(\frac{n_{i1}}{n_{.1}} = \frac{n_{i2}}{n_{.2}} = \cdots = \frac{n_{is}}{n_{.s}} = \frac{n_{i.}}{n}\)
e assim:
\(\frac{n_{ij}}{n_{.j}} = \frac{n_{i.}}{n}\)
Deste modo:
\(n_{ij}^{e} = \frac{n_{i.} \times n_{.j}}{n}\)
A notação \(n_{ij}^{e}\) está sendo utilizada para denotar que a expressão acima determina a contagem de cada célula da tabela sob a hipótese de não associação e portanto, se refere ao valor esperado de \(n_{ij}\).
Tendo definido os valores esperados em uma tabela de contingência de \(r \times s\), o \(\chi^2\) é dado por:
\[\chi^2 = \sum_{i=1}^{r}\sum_{j=1}^{s}\frac{(n_{ij} - n_{ij}^{e})^2}{n_{ij}^{e}}\]
Retornando ao exemplo das entrevistas
A tabela de contingência contendo os dados observados do início do capítulo pode ser escrita como:
Não-Residente | Residente | Total Opinião | |
---|---|---|---|
A favor | 81 | 63 | 144 |
Contra | 36 | 20 | 56 |
Total Moradia | 117 | 83 | 200 |
Os Valores esperados na linha \(i\) e coluna \(j\) são:
- Linha \(1\) - Coluna \(1\) (
Não-Residente
-A favor
):
\(n_{ii}^{e} = \frac{n_{1.} \times n_{.1}}{n} = \frac{144 \times 117}{200} = 84.24\)
- Linha \(1\) - Coluna \(2\) (
Residente
-A favor
):
\(n_{ii}^{e} = \frac{n_{1.} \times n_{.2}}{n} = \frac{144 \times 83}{200} = 59.76\)
- Linha \(2\) - Coluna \(1\) (
Não-Residente
-Contra
):
\(n_{ii}^{e} = \frac{n_{2.} \times n_{.1}}{n} = \frac{56 \times 117}{200} = 32.76\)
- Linha \(2\) - Coluna \(2\) (
Residente
-Contra
):
\(n_{ii}^{e} = \frac{n_{2.} \times n_{.2}}{n} = \frac{56 \times 83}{200} = 23.24\)
De modo que a tabela com os valores esperados será:
Não-Residente | Residente | Total Opinião | |
---|---|---|---|
A favor | 84.24 | 59.76 | 144 |
Contra | 32.76 | 23.24 | 56 |
Total Moradia | 117 | 83 | 200 |
Finalmente, o valor \(\chi^2\) pode ser obtido por:
\(\chi^2 = \frac{(81 - 84.24)^2}{84.24} + \frac{(36 - 32.76)^2}{84.24} + \frac{(63 - 59.76)^2}{84.24} + \frac{(20 - 23.24)^2}{84.24} = 1.072\)
9.5 Valores de \(\chi^2\) quando existe associação
O valor de \(\chi^2\) será zero somente se os valores observados forem exatamente igauis aos valores esperados. Pequenas discrepâncias irão gerar valores de \(\chi^2\) acima de zero. Os valores se tornarão mais altos à medida que aumentam as diferenças entre \(n_{ij}\) e \(n_{ij}^e\).
Abaixo estão diferentes exemplos em que existe associação entre Opinião
e Moradia
. Compare os valores e os gráficos abaixo os que fizemos no exemplo do capítulo e veja que todos os valores de \(\chi^2\) são mais elevados.
- Tente aplicar a fórmula do \(\chi^2\) para chegar aos resultados apresentados em cada exemplo.
9.6 Variações do índice de \(\chi^2\)
O valor de \(\chi^2\) aumenta com o tamanho da amostra, o que torna difícil comparações entre diferentes estudos. Para corrigir este efeito existe o coeficiente de contigência de Pearson (\(C\)) que é baseado no resultado de \(\chi^2\)
\[C = \sqrt{\frac{\chi^2}{\chi^2 + n}}\]
em que \(n\) é o tamanho da amostra. O valor máximo de \(C\) depende do número de linhas (\(r\)) e de colunas (\(s\)) na tabela de contingêcia, deste modo podemos ainda definir um outro coeficiente que varia entre \(0\) e \(1\):
\[T = \sqrt{\frac{\frac{\chi^2}{n}}{(r-1) \times (s-1)}}\] O valor \(T = 0\) ocorre quando não há associação (\(\chi^2 = 0\)) e o valor máximo de \(T = 1\) só será atingido quando houver associação e \(r = s\)
Todos estes índices aumentam conforme aumenta o grau de associação entre as variáveis. Entretanto, não dissemos em que ponto passamos a aceitar a hipótese de associação as variáveis \(X\) e \(Y\). Iremos tratar deste assunto na seção sobre estatística inferencial. Ao tratarmos deste ponto é importante termos claro o que siginifica uma associação (ou dependêcia) entre duas variáveis qualitativas e como o índice de \(\chi^2\) mede esta associação.
9.7 Obtendo o índice de \(\chi^2\) de uma tabela de dados
A função para o cálculo do \(\chi^2\) no R é chisq.test
e pode ser utilizada a partir da tabela de contigência gerada pela função table
:
= table(mun$Opiniao, mun$Moradia)
tcont chisq.test(tcont)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: tcont
## X-squared = 0.76697, df = 1, p-value = 0.3812
O resultado mostra o o valor de \(\chi^2\) calculado (X-squared
) e outras duas quantias denominadas de graus de liberdade (df
) e valor de p (p-value
), sobre as quais falaremos na seção sobre Inferência estatística (Capítulos 12 a 18).
Note que o resultado é diferente do que obtivemos neste capítulo. Isto ocorre pois, por padrão, a função utiliza a correção de Yates (veja aqui), em que \(\chi_{Yates}^{2}\) é calculado por:
\[\chi_{Yates}^{2} = \sum_{i=1}^{r}\sum_{j=1}^{s}\frac{(|n_{ij} - n_{ij}^{e}| - 0,5)^2}{n_{ij}^{e}}\]
O termo \(|n_{ij} - n_{ij}^{e}|\) se refere ao módulo da distância entre os valores observados e calculados.
Esta correção será abordada ao falarmos de testes de hipóteses para variáveis categóricas. Por hora, se quisermos obter exatamente os resultados descritos no exemplo deste capítulo, basta fazermos:
chisq.test(tcont, correct = FALSE)
##
## Pearson's Chi-squared test
##
## data: tcont
## X-squared = 1.0724, df = 1, p-value = 0.3004