Tidyverse CrossTable Dplyr Tidyr
Você não precisa usar o R, mas provavelmente é uma boa ideia.
Existem muitas opções para produzir tabelas de contingência e tabelas de resumo em R.
No passado, para fazer uma tabela cruzada, era utilizado um comando do tipo:
table(bancodedados$variavel1,bancodedados$variavel2)
Para fazer uma proporção, era necessário fazer algo parecido com:
pro.table(table(bancodedados$variavel1,bancodedados$variavel2),2)*100)
Vamos revisar esse e outros métodos. Pretendo fazer hoje algo do tipo:
O uso do dplyr para produzir estatísticas permite que você continue o código sem problemas na próxima tarefa (filtragem, plotagem, etc.).
Os comandos group_by(), resume() e spread() são uma combinação útil para produzir valores agregados ou resumidos de um bancos de dados.
Primeiro, vamos carregar os dois pacotes dplyr & tidyr.
Usaremos o banco de dados CARROS para essas atividades.
source('https://raw.githubusercontent.com/DATAUNIRIO/Miscellaneous_Functions_Rstats/master/CARROS.R',encoding = "UTF-8")
library(DT)
CARROS %>% datatable(options = list(pageLength = 5, dom = 'tip'),fillContainer = FALSE,
caption = 'Tabela 1: Base de dados CARROS.')
Aqui, podemos obter o número total de carros com cada combinação de Tipo de combustível (var:“Tipodecombustivel”) e Tipo de Marcha (var:“TipodeMarcha”) usando group_by() e summarize().
Para transformar esses dados em uma tabela de cruzada ou de contingência, precisamos que a variável A (Tipodecombustivel) seja listada por linha e a variável B (TipodeMarcha) seja listada por coluna.
Podemos conseguir isso incluindo o comando spread(), para criar colunas para cada valor da variável TipodeMarcha, com n como o valor de resposta da tabela cruzada.
Podemos encontrar proporções criando uma nova variável calculada, dividindo a frequência da linha pela frequência da tabela.
CARROS %>%
group_by(Tipodecombustivel) %>%
summarise(n=n()) %>%
mutate(prop=n/sum(n)*100) %>%
datatable()
Podemos criar uma tabela de contingência de proporção aplicando o mesmo comando spread de antes. Varie os argumentos group_by() e spread() para produzir proporções de diferentes variáveis.
O comando table funciona bem para contagens, por exemplo:
Todavia, acho anti-intuitivo quando trabalhamos com proporções.
Se você precisar de algo rápido, execute o comando CrossTable() com duas variáveis.
Instale e carregue o pacote gmodels
Cell Contents
|-------------------------|
| N |
| Chi-square contribution |
| N / Row Total |
| N / Col Total |
| N / Table Total |
|-------------------------|
Total Observations in Table: 32
| CARROS$TipodeMarcha
CARROS$Tipodecombustivel | Automático | Manual | Row Total |
-------------------------|------------|------------|------------|
Gasolina | 12 | 6 | 18 |
| 0.161 | 0.236 | |
| 0.667 | 0.333 | 0.562 |
| 0.632 | 0.462 | |
| 0.375 | 0.188 | |
-------------------------|------------|------------|------------|
Álcool | 7 | 7 | 14 |
| 0.207 | 0.303 | |
| 0.500 | 0.500 | 0.438 |
| 0.368 | 0.538 | |
| 0.219 | 0.219 | |
-------------------------|------------|------------|------------|
Column Total | 19 | 13 | 32 |
| 0.594 | 0.406 | |
-------------------------|------------|------------|------------|
Pacote que visa facilitar ainda mais a construção de crosstable. Ele tem um addin semelhante ao esquisse.
Cilindros | |||||
TipodeMarcha | Statistic | 4 | 6 | 8 | Total |
Automático | N | 3 | 4 | 12 | 19 |
% | 9.4% | 12.5% | 37.5% | 59.4% | |
Col % | 27.3% | 57.1% | 85.7% | 59.4% | |
Row % | 15.8% | 21% | 63.2% | 100% | |
Manual | N | 8 | 3 | 2 | 13 |
% | 25% | 9.4% | 6.2% | 40.6% | |
Col % | 72.7% | 42.9% | 14.3% | 40.6% | |
Row % | 61.5% | 23.1% | 15.4% | 100% | |
Total | N | 11 | 7 | 14 | 32 |
% | 34.4% | 21.9% | 43.8% | 100% | |
Col % | 100% | 100% | 100% | 100% | |
Row % | 34.4% | 21.9% | 43.8% | 100% |
Para fazer o download do banco de dados questionário estresse (e outros), copie e cole no R um desses dois códigos abaixo.
source('https://raw.githubusercontent.com/DATAUNIRIO/aulauniriov2/master/download_das_bases_de_dados_do_curso_de_estatistica.R')
install.packages("usethis")
usethis::use_course("https://github.com/DATAUNIRIO/Base_de_dados/archive/master.zip")
ideia original e fonte: Analytics with R