Frequência cruzada no R

Analisar as variáveis da sua base é tarefa fundamental para qualquer analista de dados, cientista de dados, estatístico, etc. No R, é possível fazer isso usando o pacote Hmisc. Outra forma fácil de se fazer isso, com uma saída levemente diferente da explicada anteriormente, é utilizar a função table(). Vamos fazer algumas análises utilizando os dados de mtcars, base que já vem dentro do R. Primeiro, vamos verificar quantos carros temos para cada quantidade de cilindros:

table(mtcars$cyl)

Simples, certo? Não tem nenhum segredo. Para obter a frequência de uma variável, você pode simplesmente aplicar a função nela. Agora, e se você quiser saber uma frequência cruzada? Por exemplo, quantos carros de 4 cilindros são automáticos e quantos são manuais? Bom, a resposta, creio eu que seja intuitiva para todos. Basta incluir mais uma variável na função:

table(mtcars$cyl, mtcars$am)

Como você pode ver, dos 11 carros com 4 cilindros, temos 8 manuais e 3 automáticos.

Ok, e se eu quiser saber quantos carros com 4 cilindros e manuais possuem motor V-shaped? Posso incluir mais uma variável na função? Com certeza!

table(mtcars$cyl, mtcars$am, mtcars$vs)

Um exemplo mais elaborado, que eu adaptei do R-Bloggers (site fenomenal!), pode ser visto abaixo. Nele, primeiro construímos um conjunto de dados de 100 pacientes num determinado teste médico:

dados_medicos = data.frame(paciente = 1:100,
Idade = rnorm(100, mean = 60, sd = 6),
Tratamento = gl(2, 50,labels = c("Tratamento", "Controle")),
Centro = sample(paste("Centro", LETTERS[1:5]), 100, replace = TRUE))

Em seguida, vamos verificar quantos pacientes estão em cada centro médico:

table(dados_medicos$Centro)

Como você pode ver, temos 23 pacientes no Centro A, 17 no B, 15 no C, 19 no D e 26 no E. Se quiséssemos ver quantos pacientes no grupo Tratamento ou Controle temos em cada centro, bastaria incluir esta variável na função table():

table(dados_medicos$Centro, dados_medicos$Tratamento)

Podemos ver, por exemplo, que no Centro A temos 9 pacientes no grupo Tratamento e 14 no grupo de Controle.

Outra coisa que pode ser feita, é verificar quantos missing temos para alguma das variáveis. Vamos, propositalmente, imputar alguns missing para a variável Tratamento:

is.na(dados_medicos$Tratamento) = c(10,15,20,35)

Agora, vamos verificar a frequência de missing no campo Tratamento:

table(is.na(dados_medicos$Tratamento))

Note que nossa lógica está pergundando quantos Tratamento “is na”, ou seja, quantos são NA (=missing). Na resposta temos 96 FALSE, ou seja, 96 não são missing, e outros 4 TRUE, ou seja, são missing. Mas e se eu quiser verificar quantos missing temos em cada centro? Aí você deve combinar o código anterior com a frequência dos centros:

table(is.na(dados_medicos$Tratamento), dados_medicos$Centro)

Temos então 2 missing no Centro A, 1 no centro D e 1 no centro E.

Por fim, e se eu quiser saber a frequência de pacientes idosos nós temos?

Neste caso, utilizamos table com a variável que queremos analisar e a condição desejada. Se considerarmos que idoso é acima de 60 anos, queremos idade e maior que 60:

table(dados_medicos$Idade > 60)

Novamente, a resposta veio com TRUE e FALSE. Como a nossa lógica pedia maiores que 60, entendemos que 48 possuem menos de 60 e 52 possuem mais.

Lembre-se ainda, que se fossem variáveis contínuas, você poderia fazer um gráfico legal, vendo a relação de cilindros com câmbio automático/manual, utilizando cores diferentes para cada tipo de motor no gráfico. Porém, como são variáveis que representam categorias, o gráfico não vai ficar legal. Se você estiver querendo fazer gráficos desse tipo, dê uma passada no post Gráfico no R, colorindo pontos por categoria.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *