Análise de Dados com o Software R:
Métodos Estatísticos, Computacionais e Econométricos

Prof. Adriano Azevedo Filho (azevedofilho@usp.br)

Análise de frequências nos casos univariado e multivariado

sumário geral | anterior | próximo

Conteúdo do Módulo

 1 - Lendo o arquivo de dados para o módulo (esalq2012mod.csv)
 
 2 - Frequências absolutas e relativas
     comandos básicos, table, prop.table, barplot, pie, mean, var, sd

 3 - Frequências conjuntas (absolutas e relativas)
     package vcd, structable, mosaic

 4 - Frequências condicionais (absolutas e relativas)
     structable, mosaic, doubledecker
    
 5 - Criação de variáveis auxiliares para sumarização de categorias
     ifelse, atribuição de valores condicional
     
 6 - Sumarização de variáveis quantitativas em variáveis qualitativas I - caso geral
     cut
     
 7 - Sumarização de variáveis quantitativas em variáveis qualitativas II - histogramas
     hist

1 - Lendo o arquivo “esalq2012mod.csv” de site na internet

Leia o arquivo “esalq2012mod.csv” que é o mesmo arquivo “esalq2012.csv”, com as modificações nos nomes das variáveis e categorias realizadas por procedimentos descritos aqui.

rm(list=ls())   ## apaga (quase tudo) antes de uma nova análise
alunos<-read.csv2("http://ihbs.com.br/html/esalq2012mod.csv")
alunos[1:5,]
##   sex cur  ing ida cid rep pub pes alt tim sat rmat   pg  car      imc
## 1   m   e 2010  20 isp   1   0  57 172   t   2    s nsei nsei 19.26717
## 2   m   e 2010  20 isp   4   0  78 175   p   2    s nint priv 25.46939
## 3   f   e 2010  22 isp   2   5  59 170   s   2    s pgou priv 20.41522
## 4   m   e 2009  22 isp   6   0  78 179   o   2    s nint nsei 24.34381
## 5   m   e 2010  22 isp   3   4  80 180   t   5    s nsei priv 24.69136
names(alunos)
##  [1] "sex"  "cur"  "ing"  "ida"  "cid"  "rep"  "pub"  "pes"  "alt"  "tim" 
## [11] "sat"  "rmat" "pg"   "car"  "imc"

2 - Frequências absolutas e relativas

A análise de variáveis qualitativas ou categóricas é fundamentada na noção de frequência, detalhada a seguir.

**Frequência absoluta**: número de observações no conjunto de dados 
      com uma dada categoria ou nível da variável de interesse.

**Frequência relativa**: % das observações do conjunto de dados com
      uma dada categoria ou nível da variável de interesse.

**Tabela de frequências**: Tabela que apresenta as frequências 
      absolutas e/ou relativas de todas as categorias ou níveis da
      variável de interesse.

2.1 Definição formal

Para os próximos desenvolvimentos considere que * conjunto de dados tem \(n\) observações * \(x\) é uma variável qualitativa cujos valores podem assumir \(m_x\) categorias: \(c_1\), \(c_2\), \(\ldots\), \(c_{m_x}\)

Com essa notação podemos mais formalmente definir as noções de frequência.

  • \(\mbox{frequência absoluta de } c_j\ \rightarrow\ \# (x == c_j),\ \ \ j=1,2,\ldots,m_x\)

nesta última expressão, a notação \(\#(x == c_j)\) indica o número de observações em que a variável categórica \(x\) apresenta a categoria \(c_j\).

  • \(\mbox{frequência relativa de } c_j\ \rightarrow\ \displaystyle \frac{\# (x == c_j)}{n},\ \ \ j=1,2,\ldots,m_x\)

A especificação da tabela de frequências exigirá a especificação de todas as \(m_x\) frequências para as \(m_x\) categorias disponíveis.

  • nota: as frequências absolutas ou relativas, quando não envolvem qualquer condicionamento, também são chamadas de frequências (absolutas ou relativas) incondicionais.

2.2 Implementação de frequências no R: tabelas e gráficos

Suponha que deseja calcular as frequências de cada sexo nas observações do conjunto de dados (variável alunos$sex, com categorias “f” e “m”):

n<-length(alunos$sex)    ## definindo o número de observações
sum(alunos$sex=="f")     ## frequência absoluta de mulheres
## [1] 22
sum(alunos$sex=="f")/n   ## frequência relativa de mulheres
## [1] 0.3928571
sum(alunos$sex=="m")     ## frequência absoluta de homens
## [1] 34
sum(alunos$sex=="m")/n   ## frequência relativa de mulheres
## [1] 0.6071429

2.2.1 Funções “table” e “prop.table” para frequências

Para facilitar esse tipo de operação, o R tem 2 comandos poderosos: table e prop.table, que podem gerar, facilmente, tabelas de frequências absolutas e relativas para as variáveis de interesse. Outros recursos mais sofisticados serão mostrados oportunamente.

## tabela de frequências absolutas
table(alunos$sex)      
## 
##  f  m 
## 22 34
## tabela de frequências relativas
prop.table(table(alunos$sex)) 
## 
##         f         m 
## 0.3928571 0.6071429

As frequencias relativas podem ser apresentadas diretamente em percentagem, multiplicando-se o último comando por 100.

## tabela de frequências relativas expressas em percentagem
prop.table(table(alunos$sex))*100
## 
##        f        m 
## 39.28571 60.71429

2.2.2 Frequências apresentadas em gráficos de barra e pizza

Há 2 formas usuais para apresentação gráfica de frequências:

  • gráfico de barras (“barplot”)
  • gráfico de pizza (“pie”)

Essas modalidades de gráfico serão ilustradas a seguir, através das funções “barplot” e “pie”, 2 funções elementares no R para apresentação de frequências em gráficos. Outras formas mais avançadas de mostrar informação associada a frequências serão apresentadas em outros tópicos.

2.2.3 Função “barplot” (gráfico de barras)

A função “barplot” implementa gráficos de barras elementares no R, apresentando barras construídas a partir de um vetor com números e um vetor com a identificação de cada barra, utilizados como argumentos, como em por exemplo:

## função barplot apresentando dados de um vetor
x<-c(1,2,3,5,2)
ident<-c("a","b","c","d","e")
barplot(x,names.arg=ident) 

Podemos utilizar a função “barplot” diretamente com tabelas e, nesse caso, os identificadores das barras serão definidos pelos nomes das categorias, se a opção “names.arg” não for especificada, como em:

## gráfico de frequências absolutas
barplot(table(alunos$sex)) 

Abaixo é ilustrado o uso de algumas opções para definição de cores nas barras, legendas dos eixos e título principal. Os nomes de cores disponíveis podem ser examinados aqui. O tema cores é de vital importância na visualização e pode ser tratado de forma muito detalhada no R, através da opção “col” do “barplot”:

## gráfico de frequências relativas (barras)
barplot(prop.table(table(alunos$sex))*100, col=c("pink","lightblue"))
title("Frequência relativa - sexo",xlab="sexo",ylab="%") 

2.2.4 Função “pie” (gráfico de pizza)

Outra alternativa para mostrar frequências é o gráfico de pizza, implementado, por exemplo, com a função “pie” no R. Essa função utiliza convenções similares às utilizadas na função “barplot”. Nesse caso, os identificadores das categorias são definidos com a opção “labels”

## função barplot apresentando dados de um vetor
x<-c(1,2,3,5,2)
ident<-c("a","b","c","d","e")
pie(x,labels=ident)

Esse tipo de gráfico, ainda que popular, é considerado pelos estudiosos da visualização de informações como menos informativo que o gráfico de barras para apresentação de frequências.

A seguir, são utilizadas opções para mudança de cores e nomes das categorias no gráfico de pizza (em lugar de “f” e “m”, foram utilizados os rótulos “mulheres”, “homens”):

## gráfico de frequências absolutas (pizza)
pie(table(alunos$sex),labels=c("mulheres","homens"),col=c(gray(0.4),gray(0.8)))
title("Sexo dos alunos") 

Nos últimos comandos, as cores dos segmentos foram definidas com o apoio da função “gray” que pode ser utilizada para definir gradações do cinza, de 0 (preto) até 1 (branco) para os segmentos. Altere valores da função “gray”, ou utilize nomes de cores como na função “barplot” para obter outros resultados.

2.3 Exercícios recomendados

1 - Obtenha tabelas com frequências absolutas e relativas todas às variáveis qualitativas (fatores) do data frame alunos. Variáveis quantitativas discretas, com poucos valores possíveis, também podem ser tratadas com as mesmas técnicas. Inclua essas variáveis na sua análise.

2 - Produza gráficos de barra e pizza para ilustrar as frequências, explorando as opções (veja mais opções dos gráficos usando ?barplot e ?pie).

3 - Organize todos resultados em slide do Powerpoint de forma a dar uma visão global do conjunto de dados, como se fosse para uma apresentação. Exclua da análise as variáveis que não se prestam ao uso dessas técnicas. Seja o mais conciso possível. Para colocar a figura no slide, copie o gráfico (pressionando o botão direito do mouse com o ponteiro no gráfico e selecione a opção) e cole no slide do PowerPoint, ajustando o tamanho da figura no slide de acordo com a necessidade.

  • Note que algum detalhamento ou informação adicional podem ser incluídos no próprio slide, posteriormente à elaboração do gráfico no R.

3 - Frequências conjuntas (absolutas e relativas)

As noções de frequência utilizadas para o contexto de 1 variável (análise univariada), vistos no tópico anterior, podem ser expandidas para o contexto de 2 ou mais variáveis (análise bivariada ou multivariada), analisadas simultaneamente. Esse é o objetivo das análise de frequências conjuntas.

Por exemplo, podemos querer saber a frequência conjunta absoluta de mulheres que torcem para o time Corinthians no conjunto de dados. Para isso teremos que “contar” o número de observações que atendem as duas condições simultaneamente: sexo é feminino e time é Corinthians, e calcular a proporção dessas observações no conjunto de dados. Para a frequência conjunta relativa, bastaria expressar o resultado absoluto na forma relativa ao total de observações.

Essa noção pode envolver mais de 2 variáveis: para a frequência conjunta absoluta de mulheres que fazem economia e que torcem para o Corinthins, teríamos que contar o número de observações que atendem as 3 condições: sexo é feminino, curso é economia e time é Corínthians.

3.1 Definições formais

Para os próximos desenvolvimentos considere que * conjunto de dados tem \(n\) observações * \(x\) é uma variável cujos valores podem assumir \(m_x\) categorias: \(c_1\), \(c_2\), \(\ldots\), \(c_{m_x}\) * \(y\) é uma variável cujos valores podem assumir \(m_y\) categorias: \(k_1\), \(k_2\), \(\ldots\), \(k_{m_y}\)

O conceito de frequências conjuntas será definido para 2 variáveis mas pode ser expandido para o caso de mais de 2 variáveis. No caso de duas variáveis temos

  • \(\mbox{frequência conjunta absoluta de } c_j\ \&\ k_t\ \rightarrow\ \displaystyle \# (x\ ==\ c_j\ \&\ y\ ==\ k_t)\)

  • \(\mbox{frequência conjunta relativa de } c_j\ \&\ k_t\ \rightarrow\ \displaystyle \frac{\# (x\ ==\ c_j\ \&\ y\ ==\ k_t)}{n}\)

Nos dois casos, a obtenção da tabela de frequências exigirá a especificação das expressões para todas as possibilidades (produto cartesiano) de \(j=1,2,\ldots,m_x\), e \(t=1,2,\ldots,m_y\), ou seja, \(m_x \times m_y\) frequências.

Tabelas de frequência absoluta envolvendo 2 ou mais variáveis também são chamadas tabelas de contingência em estatística.

3.2 Implementação de frequências conjuntas no R: tabelas e gráficos

Podemos utilizar noções mais básicas do R para obtenção das frequências conjuntas absolutas e relativas. Para obter obter essas frequências, para mulheres que torcem para o Corinthians podemos usar

n<-length(alunos$sex)
sum(alunos$sex=="f"&alunos$tim=="c") ## frequência conjunta absoluta
## [1] 3
sum(alunos$sex=="f"&alunos$tim=="c")/n ## frequência conjunta relativa
## [1] 0.05357143

para obtenção de todas as frequências para elaborar uma tabela de frequencias conjuntas teríamos que considerar todas as possiveis combinações de sexo e time, ou seja,

cat(length(levels(alunos$sex)) * length(levels(alunos$tim))," frequências") 
## 12  frequências

3.2.1 Frequências conjuntas com os comandos “table” e “prop.table”

Para facilitar a tarefa podemos usar diretamente as funções “table” e “prop.table”, introduzidas no tópico anterior.

## tabela de frequências conjuntas absolutas
table(alunos$sex,alunos$tim) 
##    
##      c  n  o  p  s  t
##   f  3  5  1  3  2  8
##   m  9  6  1 10  2  6
## tabela de frequências conjuntas relativas
prop.table(table(alunos$sex,alunos$tim)) 
##    
##              c          n          o          p          s          t
##   f 0.05357143 0.08928571 0.01785714 0.05357143 0.03571429 0.14285714
##   m 0.16071429 0.10714286 0.01785714 0.17857143 0.03571429 0.10714286

As 3 categorias conjuntas mais frequentes nessa tabela, na ordem, são: homens palmeireses (17,9%), homens corintianos (16,1%) e mulheres tricolores (torcedoras do São Paulo, 14,3%). As percentagens são relativas ao total de observações.

3.2.1 Visualização de frequências conjuntas com gráficos de barras usando o “barplot”

A visualização pode ser feita através de gráficos elementares como o “barplot”, utilizando barras justapostas por categorias (opção “beside=TRUE” no “barplot”), ou barras empilhadas (opção “beside=FALSE” ou não especificada no “barplot”). No caso de barras justapostas:

## gráfico de barras justapostas (segunda variável no eixo x)
barplot(table(alunos$sex,alunos$tim),beside=TRUE,legend.text=TRUE, 
      args.legend=list(x=18,y=10,title="sexo",horiz=TRUE,cex=0.7))
title("Frequências conjuntas absolutas\n sexo x time",xlab="time", 
      ylab="alunos")

Nesses últimos comandos, experimente alterar os valores de x e y para mudar o posicionamento da legenda na figura.

Para obter barras empilhadas, use:

## gráfico de barras empilhadas (segunda variável no eixo x)
barplot(prop.table(table(alunos$sex,alunos$tim))*100,legend.text=TRUE, xpd=TRUE, 
args.legend=list(x="right",title="sexo",horiz=FALSE,inset=-0.12,cex=0.7))
title("Frequências conjuntas relativas\n sexo x time",xlab="time", ylab="%")

Note, nos últimos comandos, que conseguimos o efeito de colocar o texto “sexo x time” na segunda linha do título, utilizando o caracter “” que significa “vá para a próxima linha”.

Alterando a ordem das variáveis pode-se alterar a apresentação das variáveis no gráfico:

## alterando a ordem das variáveis no gráfico
barplot(table(alunos$tim,alunos$sex),legend.text=TRUE, xpd=TRUE, 
args.legend=list(x="right",title="time",horiz=FALSE,inset=- 0.12, cex=0.7))
title("Frequências conjuntas absolutas\n sexo x time", xlab="sexo", ylab="alunos")

Muitas das opções colocadas nos gráficos foram utilizadas para o posicionamento das legendas na figura (algo que pode ser trabalhoso para um posicionamento exato). Veja ?legend e ?barplot para significados dessas opções. Em algumas situações é conveniente colocar informações no gráfico posteriormente.

Podemos obter tabelas de frequências conjuntas (absolutas e relativas) para situações envolvendo mais de 2 variáveis, com o comando table:

## tabela de frequências conjuntas absolutas ou tabela de contingência (sexo, curso, time)
table(alunos$sex,alunos$tim,alunos$cur) 
## , ,  = a
## 
##    
##     c n o p s t
##   f 0 2 0 0 0 0
##   m 0 2 0 2 0 0
## 
## , ,  = e
## 
##    
##     c n o p s t
##   f 3 3 1 3 2 8
##   m 9 4 1 8 2 6
## tabela de frequências conjuntas relativas
prop.table(table(alunos$sex,alunos$tim,alunos$cur)) 
## , ,  = a
## 
##    
##              c          n          o          p          s          t
##   f 0.00000000 0.03571429 0.00000000 0.00000000 0.00000000 0.00000000
##   m 0.00000000 0.03571429 0.00000000 0.03571429 0.00000000 0.00000000
## 
## , ,  = e
## 
##    
##              c          n          o          p          s          t
##   f 0.05357143 0.05357143 0.01785714 0.05357143 0.03571429 0.14285714
##   m 0.16071429 0.07142857 0.01785714 0.14285714 0.03571429 0.10714286

Para visualizar os resultadosem gráficos, nesse caso envolvendo 3 variáveis, poderíamos utilizar vários gráficos, um por categoria de uma das variáveis, escolhida segundo a conveniência, apresentando os gráficos simultaneamente.

## 2 gráficos com frequências absolutas para cada categoria de uma variável
## alterando configuração para gráficos em 1 linha e 2 colunas
par(mfrow=c(1,2))  
## primeiro o gráfico para alunos de cursando agronomia
barplot(table(alunos$tim[alunos$cur=="a"],alunos$sex[alunos$cur=="a"]),beside=TRUE,ylim=c(0,10))
## ylim = c(0,10) força o uso de uma escala 0 a 10 no eixo y
title(xlab="sexo (agro)",ylab="alunos")
## segundo o gráfico para alunos de cursando economia
barplot(table(alunos$tim[alunos$cur=="e"],alunos$sex[alunos$cur=="e"]),beside=TRUE,ylim=c(0,10),
   legend.text=TRUE, xpd=TRUE, args.legend=list(x="right",title="time",horiz=FALSE,
   inset=- 0.11, cex=0.7))
title(xlab="sexo (econ)")
mtext("Frequências conjuntas absolutas (sexo x time x curso)", outer = TRUE, line=-2, cex=1.5)

par(mfrow=c(1,1))  ## retornando a 1 gráfico por página gráfica

Esses últimos comandos mostram que é possível fazer gráficos muito específicos, conhecendo-se a linguagem utilizada pelo R. Isso não significa que isso é necessáriamente fácil. Experimente copiar essas linhas para um editor de texto e verifique o que acontece quando você altera opções utilizadas. Inicialmente, elimine a opção ylim=c(0,10) e observe o que ocorre. Faça outras alterações nas opções para se familiarizar com elas.

A seguir veremos a utilização do package “vcd” que facilita a análise de tabelas de contingência em situações envolvendo muitas variáveis.

3.2.2 Visualização de frequências conjuntas com o package vcd (“structable” e “mosaic”)

O package “vcd” oferece funções adicionais para análise e visualização de variáveis qualitativas. Para seu uso, é necessário carregar pacote, caso este já esteja instalado (instale o package caso seja necessário).

As funções “structable” e “mosaic” do package “vdc” serão exploradas nesse tópico

Função “structable” para tabelas de contingência

A função “structable” que pode facilitar a observação de frequências conjuntas em situações que envolvem tabelas de contingência que tenham mais de 2 variáveis.

require(vcd)  ## carregando o package vcd
## Warning: package 'vcd' was built under R version 3.3.3
## visualização de tabelas de contingência (2 variáveis)
structable(~sex+tim,data=alunos) 
##     tim  c  n  o  p  s  t
## sex                      
## f        3  5  1  3  2  8
## m        9  6  1 10  2  6
## visualização de tabelas de contingência (3 variáveis)
structable(tim~sex+cur,data=alunos) 
##         tim c n o p s t
## sex cur                
## f   a       0 2 0 0 0 0
##     e       3 3 1 3 2 8
## m   a       0 2 0 2 0 0
##     e       9 4 1 8 2 6

A função “structable” é poderosa e tem um grande número de opções. Veja ?structable para detalhes. Experimente alterar a ordem das variáveis na última expressão para ver o efeito na apresentação dos dados.

Função “mosaic” para gráficos tipo mosaico

O uso de gráfico de barras para visualização de tabelas de contingência com mais de 2 variáveis pode levar a dificultades para entendimento das situações de interesse. O gráfico tipo mosaico facilita a visualização nesses casos.

Um primeiro exemplo, que possibilita a visualização da frequência conjunta relativa das variáveis sexo e time é apresentada a seguir:

## gráfico tipo mosaic 
mosaic(~tim+sex,data=alunos,highlighting_fill = rainbow(6),highlighting=c(1))

No gráfico tipo mosaico, os retângulos menores são proporcionais à quantidade de observações na categoria conjunta representada pelo retângulo. A opção “highlighting_fill” controla o tipo de cor que deve ser utilizada para os quadrados e “highlighting” indica a variável, na ordem, que deve ser “colorida” (veja ?mosaic). Uma das vantagens desse tipo de gráfico é que ele mostra, ao mesmo tempo, as frequências relativas, conjuntas e condicionais (vistas no próximo tópicos), algo que o gráfico de barras tradicional não faz.

Experimente trocar a opção “rainbow(6)” por “heat.colors(6)” e depois por “gray.colors” (veja ?rainbow para mais detalhes sobre opções de cores). O número 6 corresponde ao número de cores que devem ser alocadas aos 6 times de futebol. Uma outra opção seria definir um vetor com os nomes das cores desejadas.

Vamos agora usar as mesmas funções para obter resultados associados à tabela de frequencias conjuntas relativas e sua visualização para as variáveis sexo, reprovação em matemática (sim ou não) e time (sex, rmat, tim) no conjunto de dados alunos.

require(vcd)  ## carregando o package vcd
## tabela de frequências conjuntas relativas (curso, time e sexo)
prop.table(structable(~rmat+tim+sex,data=alunos))  
##          tim          c          n          o          p          s          t
## rmat sex                                                                      
## n    f       0.05357143 0.08928571 0.01785714 0.03571429 0.01785714 0.12500000
##      m       0.12500000 0.08928571 0.00000000 0.14285714 0.01785714 0.05357143
## s    f       0.00000000 0.00000000 0.00000000 0.01785714 0.01785714 0.01785714
##      m       0.03571429 0.01785714 0.01785714 0.03571429 0.01785714 0.05357143
## gráfico tipo mosaic
mosaic(~rmat+tim+sex,data=alunos,highlighting_fill = gray.colors,highlighting=c(1))

A análise da tabela e do gráfico mostra, claramente, que a categoria que tem mais reprovações em matemática é a de alunos tricolores. Não só isso é verdade do ponto de vista conjunto, quanto do ponto de vista relativo, examinado mais adiante neste mesmo módulo.

3.3 Exercícios recomendados

1 - Examine, conjuntamente, as variáveis qualitativas do data frame. Primeiro examine 2 de cada vez, e depois 3 de cada vez. As variáveis quantitativas discretas, com poucas categorias podem ser incluidas na análise.

2 - Tente fazer sua análise no contexto de responder a pergunta:

  • As mulheres ou os homens desse conjunto de dados parecem ser mais decididos com relação ao futuro? faça sua análise com relação considerando as respostas dadas por alunos e alunas às perguntas sobre a carreira que pretendem seguir e sobre fazer ou não pós-graduação.

4 - Frequências condicionais (absolutas e relativas)

No caso mais trivial, a frequência condicional é a frequência de uma categoria de uma variável, condicional ao fato de que outra variável tem uma dada categoria (ou seja dentro das observações em que essa variável tem essa dada categoria). A frequência pode envolver situações mais complexas, envolvendo 2 ou mais categorias de 2 ou mais variáveis, condicionadas por 2 ou mais categorias de outras variáveis.

4.1 Definições formais

Para os próximos desenvolvimentos considere que

  • conjunto de dados tem \(n\) observações
  • \(x\) é uma variável cujos valores podem assumir \(m_x\) categorias: \(c_1\), \(c_2\), \(\ldots\), \(c_{m_x}\)
  • \(y\) é uma variável cujos valores podem assumir \(m_y\) categorias: \(k_1\), \(k_2\), \(\ldots\), \(k_{m_y}\)

Caso de 2 variáveis com 1 delas condicionando (situação mais trivial):

  • \(\mbox{frequência condicional absoluta de } c_j\ \mid \ k_t\ \rightarrow\ \displaystyle \# (x\ ==\ c_j\ \&\ y\ ==\ k_t)\)

O conceito de frequência condicional relativa é definido por

  • \(\mbox{frequência condicional relativa de } c_j\ \mid \ k_t\ \rightarrow\ \displaystyle \frac{\# (x\ ==\ c_j\ \&\ y\ ==\ k_t)}{\# ( y\ ==\ k_t)}\)

4.2 Implementação no R das frequências condicionais com “table”, “prop.table”, “structable” e “mosaic”

Podemos utilizar as noções mais básicas para obtenção das frequências condicionais relativas.

Inicialmente vamos calcular a frequência condicional Corinthians \(\mid\) Mulher, ou seja a frequência de alunos que torcem para o Corinthians, dado que o aluno é do sexo feminino. Isso é o mesmo que dizer a frequência de mulheres que torcem para o Corinthians, dentro das observações que correspondem às mulheres.

##Frequência condicional relativa (Corinthians | Feminino)
sum(alunos$tim=="c" & alunos$sex=="f")/sum(alunos$sex=="f") 
## [1] 0.1363636

Ou seja, cerca de 13,6% das mulheres torcem para o Corinthians (percentual relativo ao total de mulheres).

A seguir, será obtida a frequência condicional Mulher | Corinthians, ou seja a frequência de alunos do sexo feminino, dentro das observações de alunos que torcem para o Corinthians. Note que a ordem de condicionamento é super importante.

##Frequência condicional relativa (Feminino | Corinthians)
sum(alunos$sex=="f"&alunos$tim=="c")/sum(alunos$tim=="c") 
## [1] 0.25

Nesse caso, 25% dos alunos que torcem para o Corinthians são do sexo feminino (percentual relativo ao total de alunos que torcem para o Corinthians).

Esses cálculos podem ser realizados mais facilmente com o uso dos comandos “table” e “prop.table”, que já obtém diretamente a tabela de frequências condicionais, considerando todas as situações de interesse com respeito às variáveis de interesse. O número que aparece no comando “prop.table” indica a variável que irá condicionar, na ordem de apresentação de variáveis definida no comando.

##Frequência condicional relativa (time | sexo)
prop.table(table(alunos$sex,alunos$tim),1)
##    
##              c          n          o          p          s          t
##   f 0.13636364 0.22727273 0.04545455 0.13636364 0.09090909 0.36363636
##   m 0.26470588 0.17647059 0.02941176 0.29411765 0.05882353 0.17647059

Nesse último resultado, é importante observar que a variável condicionante é o sexo (alunos$sex), e que as frequencias relativas apresentadas nas linhas somam 1 (ou 100%).

##Frequência condicional relativa (sexo | time)
prop.table(table(alunos$sex,alunos$tim),2)
##    
##             c         n         o         p         s         t
##   f 0.2500000 0.4545455 0.5000000 0.2307692 0.5000000 0.5714286
##   m 0.7500000 0.5454545 0.5000000 0.7692308 0.5000000 0.4285714

Agora a variável condicionante é o time (alunos$sex), e que as frequencias relativas apresentadas nas colunas somam 1 (ou 100%).

Sem qualquer dificuldade poderíamos achar a frequencia condicional da situação com relação ao time condicionada ao sexo e curso, através de

##Frequência condicional relativa (time | sexo, curso)
prop.table(table(alunos$tim,alunos$sex,alunos$cur),c(2,3))
## , ,  = a
## 
##    
##              f          m
##   c 0.00000000 0.00000000
##   n 1.00000000 0.50000000
##   o 0.00000000 0.00000000
##   p 0.00000000 0.50000000
##   s 0.00000000 0.00000000
##   t 0.00000000 0.00000000
## 
## , ,  = e
## 
##    
##              f          m
##   c 0.15000000 0.30000000
##   n 0.15000000 0.13333333
##   o 0.05000000 0.03333333
##   p 0.15000000 0.26666667
##   s 0.10000000 0.06666667
##   t 0.40000000 0.20000000

O resultado mostra, por exemplo, que dentro dos alunos que cursam agronomia, do sexo masculino, 50% torce para o time Palmeiras (p) e 50% não torce para time de futebol (n).

Com a ajuda do comando structable poderíamos encontrar as frequencias condicionais absolutas de cada categoria de time condicional ao sexo e curso do aluno:

require(vcd)
##Frequência condicional absoluta (time | sexo, curso)
structable(tim~sex+cur,data=alunos)
##         tim c n o p s t
## sex cur                
## f   a       0 2 0 0 0 0
##     e       3 3 1 3 2 8
## m   a       0 2 0 2 0 0
##     e       9 4 1 8 2 6

No comando recém apresentado, o símbolo “~” indica “condicionado por”. As variáveis condicionantes são concatenadas com o símbolo “+”.

O gráfico das frequências condicionais relativas pode ser obtido com o “barplot”. A seguir são apresentadas, em gráfico, as frequências condicionais sexo | time:

## alterando a ordem das variáveis no gráfico
barplot(prop.table(table(alunos$sex,alunos$tim),2)*100,legend.text=TRUE, xpd=TRUE, ylim=c(0,100),
        args.legend=list(x="right",title="sexo",horiz=FALSE,inset=- 0.129, cex=0.65))
title("Frequências condicionais relativas\n sexo | time", xlab="time", ylab="%")

Experimente mudar o posicionamento das barras para o sentido horizontal, usando a opção “horiz=TRUE”, alterando “ylim=c(0,100)” para “xlim=c(0,100)”, e invertendo os rótulos dos eixos x e y (opções xlab e ylab). Ajuste o posicionamento da legenda se for necessário.

Um resultado mais interessante pode ser obtido através do gráfico tipo mosaico. Nesse caso, o gráfico dá, simultaneamente, uma idéia da frequência condicional e conjunta (relativas), a partir das dimensões dos retângulos.

require(vcd)
## gráfico tipo mosaico - frequências relativas (condicionais e conjuntas)
mosaic(sex~tim,data=alunos,highlighting_fill = c("pink","lightblue"))

Uma outra opção de gráfico para frequências condicionais é o implementado pela função “doubledecker” do package “vcd”. É uma possível alternativa à função “mosaic”, já apresentado no tópico anterior, quando o condicionamento é complexo. O uso dessa função é ilustrado para obtenção das frequências condicionais relativas de reprovações em matemática (rmat) | sexo (sex) e time (tim).

require(vcd)
## gráfico tipo doubledecker, reprovação em matemática | sexo e time
doubledecker(rmat~sex+tim,data=alunos)

A idéia de condicionamento é central em estatística e será explorada em mais profundidade em outros módulos.

4.3 Exercícios recomendados

1 - O condicionamento é muito usado para análise do “efeito” de uma (ou mais) variavel(is) sobre uma determinada variável. Por exemplo, podemos estar interessados no efeito da variável sexo nos níveis de reprovação em matemática. Para avaliar um possível efeito, podemos inicialmente encontrar as frequências relativas (incondicionais) de reprovação em matemática (rmat) e, em seguida, obter as frequências de reprovação (relativas) condicionais às categorias da variável alunos$sex, associada ao sexo. Se essas frequências forem muito distintas, isso é um indício de “efeito” da variável sexo sobre as reprovações. Em outros módulos a significância estatística desse possível efeito poderá ser testado através de métodos apropriados.

  • verifique se os dados do data frame alunos sugerem um possível “efeito” do sexo (alunos\(sex) sobre a reprovação em matemática (alunos\)rmat).

2 - Examine, conjuntamente as variáveis qualitativas do conjunto de dados, de forma a fazer uma análise que possa esclarecer a pergunta:

  • Foque sua análise somente nos alunos de economia do conjunto de dados. A reprovação em matemática parece ser um fator importante para o atraso do aluno no curso de economia, ou seja, é possível “efeito” sobre a o atraso do aluno? examine a relação entre rmat e ing (ano de ingresso).

5 - Criação de variáveis auxiliares para sumarização de categorias

5.1 Conceito

Em muitas situações desejamos condensar categorias de variáveis. Isso pode ser obtido através da criação de uma nova variável com categorias que sumarizem categorias de interesse.

5.2 Implementação no R

Suponha que deseja uma variável que simplesmente indique se o indivíduo indicou interesse por ser empresário/a (categoria “empr”). A variável relacionada a essa informação é alunos$car. Use “s” para indicar que indivíduo deseja ser empresário e “n” para as outras situações. Chame essa variável de “catemp”.

Podemos criar essa nova variável “catemp” usando 2 procedimentos:

catemp<-as.factor(ifelse(alunos$car=="empr","s","n"))
catemp
##  [1] n n n n n n n n n n n n n s n n n n n n n n n n n n n n n n n s s n n
## [36] n n n n n n n s n n n n n n n n n n n n n
## Levels: n s
table(catemp)
## catemp
##  n  s 
## 52  4

ou

catemp<-rep("n",length(alunos$car))
catemp[alunos$car=="empr"]<-"s"
catemp<-as.factor(catemp)
table(catemp)
## catemp
##  n  s 
## 52  4

Esses mesmos procedimentos podem ser utilizados para o caso da sumarização de variáveis quantitativas. Suponha que deseja uma variável que simplesmente indique se o indivíduo fez escola pública ou privada. A variável relacionada a essa informação é alunos$pub, que indica o número de anos em escola pública de cada aluno. Use “s” para indicar que o aluno cursou escola pública (qualquer número de anos) e “n” para indicar que não cursou escola pública. Chame essa variável de “catpub”.

Podemos criar essa nova variável “catpub” usando 2 procedimentos:

catpub<-as.factor(ifelse(alunos$pub==0,"n","s"))
catpub
##  [1] n n s n s n n n s n s n n n n s n n s s n s s n n n n s n n s n s s s
## [36] n s s n n s s s s s n n s s s n n s s n s
## Levels: n s
table(catpub)
## catpub
##  n  s 
## 29 27

ou

catpub<-rep("s",length(alunos$pub))
catpub[alunos$pub==0]<-"n"
catpub<-as.factor(catpub)
table(catpub)
## catpub
##  n  s 
## 29 27

5.3 Exercícios recomendados

1 - Verifique se há alguma possível associação entre a nova variável catpub e o fato do aluno ter sido reprovado em matemática (alunos$rmat). Uma possível associação estatística pode ser também como sendo um “efeito” de uma variável sobre a outra.

2 - Crie uma variável categórica denominada catobeso que assuma valor “s” se o indivíduo for obeso, segundo os critérios da OMS, e “n” caso contrário.

6 - Sumarizando variáveis quantitativas em variáveis qualitativas I - caso geral

6.1 Conceito

Podemos criar variaveis qualitativas sumarizando intervalos relacionados com variáveis quantitativas e isso é algo de interesse em algumas situações. As noções examinadas neste tópico, de uma certa forma, estendem as idéias discutidas no tópico anterior.

6.2 Implementação no R

A criação de variaveis qualitativas ou categóricas a partir de variáveis quantitativas podem o segundo método explorado no tópico anterior. Contudo, é usualmente mais prático utilizar a função “cut”, nas situações em que os intervalos de interesse seguem uma ordem crescente de interesse na definição das categorias qualitativas.

Suponha que deseja criar uma variável qualitativa (um fator), denominado “catimc” que siga a seguinte codificação para as categorias baseada na OMS:

  • “m” : imc < 18,5 (muito magro)
  • “n” : 18,5 <= imc <= 25 (peso normal)
  • “p” : 25 < imc <= 30 (pesados)
  • “o” : imc > 30 (obeso)

Para operacionalizar essa noção use:

catimc<-cut(alunos$imc,breaks=c(0,18.5,25,30,Inf),include.lowest=TRUE) 
## mostrando as categorias criadas
catimc
##  [1] (18.5,25] (25,30]   (18.5,25] (18.5,25] (18.5,25] (18.5,25] (25,30]  
##  [8] (18.5,25] (18.5,25] (18.5,25] (18.5,25] (18.5,25] (25,30]   (18.5,25]
## [15] (18.5,25] (18.5,25] (18.5,25] (30,Inf]  (18.5,25] (25,30]   (25,30]  
## [22] (18.5,25] (18.5,25] (18.5,25] (18.5,25] (18.5,25] [0,18.5]  (18.5,25]
## [29] (18.5,25] (18.5,25] (18.5,25] (18.5,25] (18.5,25] (18.5,25] (18.5,25]
## [36] (25,30]   (25,30]   (18.5,25] (25,30]   (18.5,25] (18.5,25] (30,Inf] 
## [43] (18.5,25] (18.5,25] (18.5,25] (25,30]   (30,Inf]  (18.5,25] [0,18.5] 
## [50] (18.5,25] (18.5,25] (18.5,25] (18.5,25] (18.5,25] (18.5,25] (18.5,25]
## Levels: [0,18.5] (18.5,25] (25,30] (30,Inf]
table(catimc)
## catimc
##  [0,18.5] (18.5,25]   (25,30]  (30,Inf] 
##         2        42         9         3

O procedimento adotado pela função “cut”, na opção especificada, é definir categorias nos intervalos entre os números especificados pela opção “breaks”, assumindo intervalo aberto a esquerda e intervalo fechado à direita. Quando desejamos que o intervalo seja fechado à esquerda, adicionamos a opção “include.lowest=TRUE”. A variável criada é automaticamente definida como sendo um fator.

Para alterar os nomes das categorias, de acordo com o interesse existente, use:

levels(catimc)<-c("m","n","p","o")
table(catimc)
## catimc
##  m  n  p  o 
##  2 42  9  3

Para agregar categorias, juntando os pesados (p) e obesos (o) em uma unica categoria com a codificação “o” bastaria redefinir a nomenclatura dos níveis de forma apropriada, como no exemplo a seguir:

levels(catimc)<-c("m","n","o","o") # o nível p (pesados) é incluido no nível o (obesos)
table(catimc)
## catimc
##  m  n  o 
##  2 42 12

6.3 Exercícios recomendados

1 - Verifique se há alguma aparente associação entre reprovações em matemática (alunos$rmat) e a categoria de peso representada pela variável catimc, criada neste tópico.

2 - Crie uma variável qualitativa “catrep” que sumarize a situação do aluno com relação ao número de reprovações. Considere as técnicas desenvolvidas nos tópicos 5 e 6. Mostre a tabela de frequências relativas para as categorias a essa variável. Use o seguinte critério para a codificação: * “a” : com zero reprovações * “b” : com 1 ou 2 reprovações * “c” : com mais de 2 reprovações

7 - Sumarizando variáveis quantitativas em variáveis qualitativas II - histograma

7.1 Conceito

Um caso importante das noções desenvolvidas no tópico anterior inclui a noção de histograma, que é um gráfico que mostra as frequências absolutas ou relativas associadas a intervalos, usualmente de igual dimensão (ainda que isso não seja um requisito).

7.2 Implementação do histograma no R através da função “hist”

Obtenção de um histograma que descreva o peso dos alunos, através da função “hist”:

hist(alunos$pes,xlab="peso em kg",ylab="alunos",main="Peso dos alunos")

O número de classes é definido através de regras que levam em consideração o número de observações, de forma que o histograma apresente uma visibilidade adequada, e os intervalos sejam inteiros e de mesma dimensão. É possível alterar o número de classes, através da opção “breaks”, assim como colocar uma caixa ao redor do histograma, utilizando:

hist(alunos$pes,xlab="peso em kg",ylab="alunos",main="Peso dos alunos",col="bisque", breaks=20)
box()

Ainda que solicitado a fazer 20 classes no histograma, o R encontrou a divisão mais adequada que chega próximo de 20 mas com uma divisão inteira visualmente atrativa (classes espaçadas de 5 kg).

Num histograma, tipicamente, todos os intervalos, exceto o primeiro, é aberto a esquerda e fechado a direita. O primeiro intervalo é fechado nos 2 lados.

Uma opção importante dentro do histograma apresentado pelo R é “freq=FALSE”. Quando essa opção é utilizada, o eixo y mostra a chamada densidade de frequência, um conceito que será desenvolvido em outros módulos. Em termos simplificados, o valor da densidade de frequência da classe multiplicado pela largura da classe (ou barra) definirá a frequência relativa da classe. Esse conceito, futuramente, terá relação com a noção de distribuição de probabilidade.

hist(alunos$pes,xlab="peso em kg",ylab="densidade de frequência",main="Peso dos alunos",col="bisque",freq=FALSE)

No histograma acima, a segunda classe (60,70] tem uma densidade de frequência de 0,025 e uma largura de 10 unidades (kg no eixo x). Isso quer dizer que a frequência dessa classe será 0,25 ou 25%. Uma outra consequência dessa definição é que a soma das áreas das barras será 1.

Como exercício final do módulo, vamos mostrar os histogramas que apresentam a distribuição dos pesos dos homens e mulheres, usando uma mesma escala para os eixos.

par(mfrow = c(1, 2))
hist(alunos$pes[alunos$sex=="m"],xlab="kg",ylab="obs",main="Peso dos homens",col="bisque",xlim=c(40,120),ylim=c(0,10),breaks=10)
hist(alunos$pes[alunos$sex=="f"],xlab="kg",ylab="obs",main="Peso das mulheres",col="bisque",xlim=c(40,120),ylim=c(0,10),breaks=10)

7.3 Exercício recomendado

1 - Faça histogramas das variáveis quantitativas contínuas do data frame alunos como peso e altura (alunos$pes e alunos$alt). * Observe que o histograma se presta a variáveis quantitativas contínuas. Para variáveis quantitativas discretas, como idade (alunos$ida), satisfação quanto ao curso (alunos$sat) e ano de ingresso (alunos$ing), que tem poucos valores diferentes, podem ser melhor descritas, do ponto de vista gráfico, através do gráfico de barras ou do gráfico de pizza.