Análise de dados nominais e tabelas de contingência

EST212 - Bioestatística

Helgem de Souza

Introdução

Antes de iniciar nossa aula:

  1. Abra o RStudio.

  2. Crie um novo script.

  3. Crie uma pasta na área de trabalho com seu nome.

  4. Defina a pasta como diretório de trabalho

  5. Salve o script criado na pasta com o nome "aula18_est212.R".

  6. Baixe do Moodle o arquivo penguins.csv.

  7. Leia o arquivo listado acima para o objetos penguins.

Dados em escala nominal

Até o momento, todas as análises foram realizadas com variáveis numéricas ou, no mínimo, em escala ordinal.

Ou seja, as técnicas estão limitadas aos dados que podemos mensurar, ou na pior das hipóteses, ordenar.

Entretanto, existe uma categoria de suma importância na estatística, que não pertence à escala intervalar ou ordinal. São os dados categóricos, ou qualitativos, em escala nominal.

Definição: uma variável é dita categórica nominal (ou qualitativa nominal), quando seus valores expressam um atributo que não pode ser ordenado.

Dados em escala nominal

Exemplos:

  • sexo

  • religião

  • profissão

  • espécie

  • presença de doença

  • tipo de tratamento

  • tipo de intervenção

  • local de origem, etc.

Dados em escala nominal

Como os dados em escala nominal não apresentam valores numéricos, sua análise não pode ser realizada diretamente em seus valores.

De modo geral, sua análise se dá por meio de frequências, proporções e medidas congêneres.

Desse modo, é bastante comum a utilização de tabelas e gráficos específicos para este tipo de dados, como gráficos de barras, tabelas de frequência e contingência, por exemplo.

Vamos relembrar alguns conceitos vistos na disciplina de Bioestatística 1 e aprender a calculá-los no R.

Tabela de frequência

Uma tabela de frequência é uma tabela que agrupa seus elementos em classes, categorias, atributos, etc.

Como a partir dessa aula trataremos de dados em escala nominal, ilustraremos uma tabela de frequência cujos elementos são categorias ou atributos. Vamos utilizar nosso conjunto de dados penguins mais uma vez.

Em nosso conjunto de dados, se observarmos as espécies de penguins, chegaremos às seguintes contagens, de um total de 344 animais:

  • Adelie: 152

  • Chinstrap: 68

  • Gentoo: 124

Vamos organizar esses dados em uma tabela de frequência. Para isso, vamos definir as frequências absoluta e relativa.

Tabela de frequência

Para definir uma tabela de frequência, precisamos definir as seguintes quantidades:

  • \(n\) - Tamanho total da amostra
  • \(n_i\) - Frequência absoluta: Quantidade observada de elementos da categoria \(i\).
  • \(fi = \dfrac{n_i}{n}\) - Frequência relativa: Proporção de observações por categoria em relação ao todo.

Com essas quantidades, podemos construir uma tabela de frequências padrão.

Tabela de frequência

Usualmente, uma tabela de frequências para variáveis categóricas é ordenada de forma crescente ou decrescente, mas nada impede a utilização de outros ordenamentos, como alfabético por exemplo.

Espécie Frequência Absoluta (\(n_i\)) Frequencia Relativa (\(f_i\))
Adelie 152 0,442
Gentoo 124 0,360
Chinstrap 68 0,198
Total 344 1

Nessa tabela podemos observar que a maior parte da amostra é composta por penguins da espécie Adelie, seguidos pelos penguins Gentoo. Os penguins Chinstrap são os que apresentam menor frequência.

Tabela de frequência no R

No R, podemos gerar as frequências absolutas de uma variável categórica por meio da função table. Vamos gerar as frequências absolutas por espécie de penguim:

#Tabela de frequências absolutas de penguins por espécie
table(penguins$especie)

   Adelie Chinstrap    Gentoo 
      152        68       124 

Esse tipo de tabela será a base de nossas análises e testes de hipóteses daqui por diante.

Entretanto, se o objetivo for gerar uma tabela de frequências como a vista acima, mais completa, as funções base do R são um pouco mais limitadas e dependem de um conhecimento maior para gerá-las.

Para construir a tabela de frequências utilizaremos a função tabyl, do pacote janitor.

Tabela de frequência no R

Ela é utilizada da seguinte forma: tabyl(var1 = x, dat = dados)possui os seguintes parâmetros:

  • dat - conjunto de dados em estudo

  • var1 - variável para a qual se quer construir a tabela de frequências

Vamos refazer a tabela de espécies de penguins usando a função tabyl:

#Instalaçã do pacote janitor (necessário apenas uma vez) 
#install.packages("janitor")  

#Carregamento do pacote janitor 
library("janitor")  

#Tabela de frequência com a função tabyl 
tabyl(var1 = especie, dat = penguins) 
   especie   n   percent
    Adelie 152 0.4418605
 Chinstrap  68 0.1976744
    Gentoo 124 0.3604651

Tabela de frequência no R

Ao salvar nossa tabela como objeto, podemos usar as funções adorn_ para customizar nossa tabela. As principais funções adorn para tabelas de frequência são:

  • adorn_totals - Adiciona os totais por linha, coluna ou ambos

  • adorn_rounding(digits = n) - arredonda as porcentagens para o número de dígitos desejados

  • adorn_pc_formating - converte as frequências relativas para porcentagens

A seguir, algumas customizações em nossa tabela.

Tabela de frequência no R

Vamos usar as funções adorn_ para customizar a tabela:

#Tabela de frequência de espécies com a função tabyl 
tabela <- tabyl(var1 = especie, dat = penguins)  

#Adicionando totais 
adorn_totals(tabela)  
   especie   n   percent
    Adelie 152 0.4418605
 Chinstrap  68 0.1976744
    Gentoo 124 0.3604651
     Total 344 1.0000000
#Arredondamento das proporções para 2 dígitos 
adorn_rounding(tabela, digits = 2)  
   especie   n percent
    Adelie 152    0.44
 Chinstrap  68    0.20
    Gentoo 124    0.36
#Conversão para porcentagem 
adorn_pct_formatting(tabela)
   especie   n percent
    Adelie 152   44.2%
 Chinstrap  68   19.8%
    Gentoo 124   36.0%

Tabela de frequência no R

Podemos também aplicar todas as formatações à nossa tabela. Basta salvar o objeto formatado e aplicar a nova formatação a ele:

#Tabela de frequência de espécies com a função tabyl 
tabela <- tabyl(var1 = especie, dat = penguins)  

#Adicionando totais 
tabela <- adorn_totals(tabela) 

#Conversão para porcentagem 
tabela <- adorn_pct_formatting(tabela)  

#Arredondamento das proporções para 2 dígitos 
tabela <- adorn_rounding(tabela, digits = 2)  

#Resultado final 
tabela 
   especie   n percent
    Adelie 152   44.2%
 Chinstrap  68   19.8%
    Gentoo 124   36.0%
     Total 344  100.0%

Gráfico de barras

Assim como o boxplot é a visualização padrão quando queremos visualizar uma variável contínua, seja de forma isolada, ou separada por categorias, no caso de dados categóricos, o gráfico padrão é o gráfico de barras.

Para gerar um gráfico de barras no R, precisamos de uma tabela simples e a função barplot(height). O parâmetro height é um objeto que repasse a contagem de cada categoria, usualmente uma tabela gerada pela função table.

Ele possui uma série de parâmetros. Os principais são semelhantes aos da função boxplot:

  • main - Título do gráfico

  • col - cor(es) do gráfico

  • xlab e ylab - Títulos dos eixos x e y, respectivamente

Exemplo: Gráfico de barras

Vamos gerar o gráfico de barras de nossa tabela de penguins por espécie:

#Tabela Penguins por espécie
tabela_penguins <- table(penguins$especie)
tabela_penguins

   Adelie Chinstrap    Gentoo 
      152        68       124 
#Gráfico de barras de penguins por espécie
barplot(tabela_penguins)

Exemplo: Gráfico de barras

Podemos deixar ele mais sofisticado adicionando alguns detalhes:

#Gráfico de barras de penguins por espécie
barplot(tabela_penguins, col = "blue", main = "Penguins por espécie",
        xlab = "Espécies")

O gráfico exprime as mesmas as mesmas informações da tabela de frequências.

Exercício Prático 1

  1. Construa a tabela de frequência simples e a tabela de frequências completa.

  2. Utilize a tabela de frequência simples para gerar gráfico de barras com a frequência de penguins por ilha.

Exercício Prático 1

Primeiramente, vamos construir a tabela de frequências simples:

#Tabela de frequência simples
tab_simples <- table(penguins$ilha)
tab_simples

   Biscoe     Dream Torgersen 
      168       124        52 

Agora a tabela de frequências completa:

#Tabela de frequências completa
tab_completa <- tabyl(ilha, dat = penguins)
tab_completa <- adorn_totals(tab_completa)
tab_completa <- adorn_pct_formatting(tab_completa)
tab_completa
      ilha   n percent
    Biscoe 168   48.8%
     Dream 124   36.0%
 Torgersen  52   15.1%
     Total 344  100.0%

Exercício Prático 1

Agora vamos gerar o gráfico de barras

barplot(tab_simples, main = "Penguins por ilha", xlab = "Ilha",
        col = "darkblue")

A ilha mais populosa é a ilha Biscoe, seguida pelas ilhas Dream e Torgersen.

Tabelas de contingência

As tabelas de frequência são úteis para verificar o comportamento de uma variável qualitativa nominal. Entretanto, sua abordagem é fundamentalmente descritiva.

O objetivo principal desse curso está na análise inferencial, que é explorar relações entre variáveis e estender a conclusão para a população de interesse.

De modo geral, quando se trata de variáveis nominais, o principal interesse é analisar como se dá a interação entre duas variáveis qualitativas. Por exemplo:

  • Verificar se existe relação entre sexo e ocorrência de infarto.

  • Analisar se entre três tipos de tratamento algum deles cura mais indivíduos.

  • Checar se existe alguma atividade predominante em uma espécie animal por período do dia, dentre outras possibilidades.

Tabelas de contingência

Porém, conforme mencionado no início da aula, não há um valor numérico para ser diretamente analisado. Ambas as variáveis são qualitativas nominais:

  • Sexo - Masculino e Feminino. Ocorrência de Infarto - Sim e Não

  • Tipo de tratamento: tratamento 1, tratamento 2 e tratamento 3. Cura: Sim e Não

  • Atividade predominante: alimentação, socialização, migração. Período: Matutino, vespertino, noturno

Em situações como essa, não há uma variável quantitativa explicita. O que pode ser observado são as quantidades que ocorrem em cada uma das categorias.

Tabelas de contingência

Vamos utilizar novamente o exemplo dos golfinhos. Uma amostra de 15 observações foi extraída de nosso banco de dados, contendo a espécie e a ilha em que os penguins residem:

     especie      ilha
1     Gentoo    Biscoe
2     Gentoo    Biscoe
3     Adelie     Dream
4     Adelie    Biscoe
5     Adelie Torgersen
6     Adelie     Dream
7     Gentoo    Biscoe
8  Chinstrap     Dream
9     Adelie    Biscoe
10    Adelie Torgersen
11    Gentoo    Biscoe
12    Adelie    Biscoe
13    Adelie    Biscoe
14    Gentoo    Biscoe
15    Gentoo    Biscoe

Podemos contar quantos penguins de cada tipo vivem em cada ilha:

Tabelas de contingência

Os resultados da contagem seguem na tabela a seguir:

  Biscoe Dream Torgersen
Adelie 4 2 2
Chinstrap 0 1 0
Gentoo 6 0 0

A tabela acima representa a contagem de cada tipo de penguim segmentada pela ilha na qual ele reside.

Tabelas desse tipo são ditas tabelas de contingência.

Tabelas de contingência

Definição: Uma tabela de contingência é uma tabela que relaciona a frequência de duas (ou mais) variáveis categóricas. Também são conhecidas como tabelas cruzadas ou tabelas bidirecionais.

Uma tabela de contingência tem m linhas e k colunas, em que m e k são a quantidade de níveis das variáveis qualitativas presentes nas linhas e colunas da tabela, respectivamente. Consequentemente, a tabela terá \(m \times k\) elementos.

\(C_1\) \(C_2\) \(\cdots\) \(C_k\)
\(R_1\) \(n_{11}\) \(n_{12}\) \(\cdots\) \(n_{1k}\)
\(R_2\) \(n_{21}\) \(n_{22}\) \(\cdots\) \(n_{2k}\)
\(\vdots\) \(\vdots\) \(\vdots\) \(\vdots\)
\(R_m\) \(n_{m1}\) \(n_{m2}\) \(\cdots\) \(n_{mk}\)

A tabela acima tem duas variáveis, a primeira com \(m\) níveis e a segunda com \(k\) níveis.

Tabelas de contingência

Em nosso exemplo, temos uma tabela \(3\times 3\):

  Biscoe Dream Torgersen
Adelie 4 2 2
Chinstrap 0 1 0
Gentoo 6 0 0
  • Espécie - Níveis: Adelie, Chinstrap e Gentoo.

  • Ilhas: Biscoe, Torgersen e Dream.

Importante perceber que o tamanho da amostra é igual à soma das frequências, ou seja: \(n = \sum\limits_{i = 1}^m\sum\limits_{j = 1}^k n_{ij}\).

No nosso exemplo, o tamanho da amostra é \(n = 2 + 2 + 4 + 3 + 4 = 15\).

Tabela de contingência no R

Para construir uma tabela de contingência no R, também utilizamos a função table. Entretanto, informamos as duas variáveis de interesse: table (dados$x, dados$y), em que:

  • dados - conjunto de dados em análise

  • x - primeira variável de interesse

  • y - segunda variável de interesse

A seguir, vamos fazer a tabela de contingência de penguins por espécie para nossa base de dados completa.

Tabela de contingência no R

O código a seguir gera a tabela de contingência de penguins por espécie:

#Tabela de contingência - espécies de penguins por ilha
table(penguins$especie, penguins$ilha)
           
            Biscoe Dream Torgersen
  Adelie        44    56        52
  Chinstrap      0    68         0
  Gentoo       124     0         0

Perceba que apenas os penguins da espécie Adelie vivem nas três ilhas. Penguins Chinstrap vivem apenas nas ilhas Dream e penguins Gentoo vivem somente na ilha Torgersen.

Tabela de contingência no R

Podemos também adicionar totais à nossa tabela de contingência, por meio da função addmargins:

#Tabela de contingência - espécies de penguins por ilha
tab_especie_ilha <- table(penguins$especie, penguins$ilha)

#Adicionando os totais
addmargins(tab_especie_ilha)
           
            Biscoe Dream Torgersen Sum
  Adelie        44    56        52 152
  Chinstrap      0    68         0  68
  Gentoo       124     0         0 124
  Sum          168   124        52 344

Tabela de contingência no R

  Biscoe Dream Torgersen Sum
Adelie 44 56 52 152
Chinstrap 0 68 0 68
Gentoo 124 0 0 124
Sum 168 124 52 344

Além da informação que já tinhamos, o quantitativo de penguins por espécie e por ilha, agora temos as informações marginais: total por espécie e total por ilha.

A ilha mais povoada é a Biscoe e a menos povoada a Torgersen, na qual apenas penguins Adelie vivem.

Visualização de tabelas de contingência

Existem várias opções para visualizar dados em tabelas de contingência. As duas principais são gráficos de barras agrupados e empilhados.

No gráfico de barras empilhadas, o total da categoria principal fica evidenciado.

No gráfico de linhas agrupadas, os totais por grupo são destacados.

Ambos são gerados com a função barplot, e usam uma tabela de contingências como fonte de dados. A única diferença é o parâmetro beside = T, que indica que as barras serão agrupadas:

  • Gráfico de barras empilhadas: barplot(tabela, legend.text = T).

  • Gráfico de barras agrupadas: barplot(tabela, legend.text = T, beside = T).

Vamos usar os gráficos de barras para visualizar nossos dados.

Gráfico de barras empilhadas

Usaremos como base nossa tabela anterior, tab_especie_ilha:

#Gráfico de barras agrupadas - Penguins por espécie e ilha
barplot(tab_especie_ilha, legend.text = T)

Aqui é fácil perceber que a ilha Biscoe é a mais povoada, com maioria de penguins Gentoo. Também fica claro que só há penguins Adelie em Torgersen.

Gráfico de barras empilhadas

Usaremos novamente nossa tabela anterior, tab_especie_ilha:

#Gráfico de barras empilhadas - Penguins por espécie e ilha
barplot(tab_especie_ilha, legend.text = T, beside = T, 
        col = c("blue", "green", "yellow"))

O gráfico de barras agrupadas evidencia melhor a distribuiçã das espécies por ilha. Note que os parâmetros de formatação também funcionam nesse gráfico.

Exercício Prático 2

  1. Crie uma tabela de contingência de sexo por espécie. Depois adicione os totais a ela.

  2. Gere os gráficos de barras empilhadas e agrupadas com base na tabela de contingência de sexo por espécie.

Exercício Prático 2

Primeiramente, a tabela de contingência simples e a tabela com totais.

#Tabela de contingência simples
tab_sexo_especie <- table(penguins$especie, penguins$sexo)
tab_sexo_especie
           
            female male
  Adelie        73   73
  Chinstrap     34   34
  Gentoo        58   61
#Agora a tabela com totais
addmargins(tab_sexo_especie)
           
            female male Sum
  Adelie        73   73 146
  Chinstrap     34   34  68
  Gentoo        58   61 119
  Sum          165  168 333

É fácil ver que existe um equilíbrio entre os sexos dos penguins por espécie na amostra em estudo.

Exercício Prático 2

Vamos usar nossa tabela tab_sexo_especie como base para os gráficos:

#Gráfico de barras empilhadas
barplot(tab_sexo_especie, legend.text = T, col = c("red", "blue", "green"))

Nesse gráfico, o Equilíbrio entre os sexos por espécie fica bastante evidente.

Exercício Prático 2

Vamos usar nossa tabela tab_sexo_especie como base para os gráficos:

#Gráfico de barras agrupadas
barplot(tab_sexo_especie, legend.text = T, beside = T, 
        col = c("red", "blue", "green"))

Já nesse segundo gráfico, percebe-se que a distribuição das espécies por sexo é bastante semelhante também.

Conclusão

Hoje começamos a visualizar modos de analizar dados qualitativos por meio de tabelas de frequência e suas relações por meio das tabelas de contingência. Entretanto, se tratam de técnicas descritivas, ou seja, cujas conclusões valem apenas para a amostra em estudo.

A partir da próxima aula, estudaremos os métodos que permitem que testemos tais relações a nível populacional, dadas duas amostra.