Tenho um grande amigo que uma vez me disse uma definição de maestria que reproduzo aqui:
“A nota dez na prova não me diz nada sobre a pessoa! Isso só me diz que a pessoa atingiu uma forma de fazer estatística. A maestria vem quando você sabe umas três ou quatro formas de resolver o mesmo problema.”
Ele ainda continuou….
“O ideial é pensar as diferentes abordagens para o problema e o resultado que você pode alcançar. Por exemplo, antes de executar uma metodologia, podemos pensar algo do tipo: posso usar a abordagem bayesiana e chegar mais ou menos aqui, usar um método multivariado e chegar mais ou menos ali, usar um modelo de regressão e alcançar tal resultado, ou ainda usar um Machine learning e fazer tal coisa….
Essa fala dele me fez pensar muito. Não concordo com tudo com que ele disse, mas concordo que é bom saber vários métodos. Assim, penso que podemos essa publicação para explorar várias abordagens na programação no R. Inclusive, poderíamos comparar os métodos R-Base com os métodos tidyverse :)
Qual seria a melhor forma de examinar os seus dados? Aqui, apresento as formas que eu mais utilizo para esse fim.
Para isso, vamos criar uma base de dados.
### Banco de dados
Entrada <- ("
Palestrante Nota
Stark 3
Stark 5
Stark 4
Stark 4
Stark 4
Stark 4
Stark 4
Stark 4
Stark 5
Stark 5
Targaryen 2
Targaryen 4
Targaryen 2
Targaryen 2
Targaryen 1
Targaryen 2
Targaryen 3
Targaryen 2
Targaryen 2
Targaryen 3
")
dados <- read.table(textConnection(Entrada), head = TRUE)
Apresento a seguir as principais funções para inspecionar os seus dados.
Essas são as funções clássicas para ver a estrutura de dados. Além disso, essas foram as primeiras que aprendi.
head(dados)
Palestrante Nota
1 Stark 3
2 Stark 5
3 Stark 4
4 Stark 4
5 Stark 4
6 Stark 4
summary(dados)
Palestrante Nota
Length:20 Min. :1.00
Class :character 1st Qu.:2.00
Mode :character Median :3.50
Mean :3.25
3rd Qu.:4.00
Max. :5.00
Essa função serve para mostrar a estrutura de dados das variáveis.
str(dados)
'data.frame': 20 obs. of 2 variables:
$ Palestrante: chr "Stark" "Stark" "Stark" "Stark" ...
$ Nota : int 3 5 4 4 4 4 4 4 5 5 ...
Função interessante do pacote psych.
library(psych)
describe(dados)
vars n mean sd median trimmed mad min max range skew kurtosis
Palestrante* 1 20 1.50 0.51 1.5 1.50 0.74 1 2 1 0.00 -2.10
Nota 2 20 3.25 1.21 3.5 3.25 1.48 1 5 4 -0.12 -1.34
se
Palestrante* 0.11
Nota 0.27
Função do pacote do dplyr. Eu amo o tidyverse! Se der para usar o tidyverse, use-o.
library(dplyr)
glimpse(dados)
Rows: 20
Columns: 2
$ Palestrante <chr> "Stark", "Stark", "Stark", "Stark", "Stark", "Stark", "Sta~
$ Nota <int> 3, 5, 4, 4, 4, 4, 4, 4, 5, 5, 2, 4, 2, 2, 1, 2, 3, 2, 2, 3
Função um pouco mais visual para o mesmo fim. Ela é do pacote dataMaid.
library(dataMaid)
visualize(dados)
Função um pouco mais detalhada. Ela é do pacote skimr. Funciona com o operador pipe.
library(skimr)
skim(dados)
Name | dados |
Number of rows | 20 |
Number of columns | 2 |
_______________________ | |
Column type frequency: | |
character | 1 |
numeric | 1 |
________________________ | |
Group variables | None |
Variable type: character
skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
---|---|---|---|---|---|---|---|
Palestrante | 0 | 1 | 5 | 9 | 0 | 2 | 0 |
Variable type: numeric
skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
---|---|---|---|---|---|---|---|---|---|---|
Nota | 0 | 1 | 3.25 | 1.21 | 1 | 2 | 3.5 | 4 | 5 | ▁▇▃▇▃ |
Apresento a seguir as principais funções para o cruzamento de variáveis quantitativas e variáveis qualitativas. A ideia aqui será fazer um resumo numérico dos dados quantitativos por uma variável categórica.
Função simples do pacote psych. ótima para os primeiros passos no R.
Vantagem: simples para um aula de estatística báica.
Desvantagem: não é compatível com o operador pipe.
describeBy(dados$Nota, group = dados$Palestrante)
Descriptive statistics by group
group: Stark
vars n mean sd median trimmed mad min max range skew kurtosis se
X1 1 10 4.2 0.63 4 4.25 0 3 5 2 -0.09 -0.93 0.2
------------------------------------------------------------
group: Targaryen
vars n mean sd median trimmed mad min max range skew kurtosis se
X1 1 10 2.3 0.82 2 2.25 0 1 4 3 0.58 -0.45 0.26
Função do pacote dplyr. Com certeza, a função que eu mais uso.
Vantagem: totalmente customizável e pode ser usada com o operador pipe. Além disso, você pode integrá-la ao reactable, flextable, DT, stargazer ou outro pacote de tabelas de sua preferência.
Desvantagem: não é fácil para os alunos que não tem noção de programação.
library(flextable)
dados %>%
select(Nota,Palestrante) %>%
group_by(Palestrante) %>%
summarise(nota_média=mean(Nota),desvio_padrão=round(sd(Nota),1),tamanho=n()) %>% flextable() %>%
bg(bg = "white") %>%
bg(bg = "white", part = "header")
Palestrante | nota_média | desvio_padrão | tamanho |
Stark | 4.2 | 0.6 | 10 |
Targaryen | 2.3 | 0.8 | 10 |
Função do pacote rstatix. Descobri essa função na semana passada e é muito semelhante com uma união das duas outras funções. Planejo apresentar essa função para meus os alunos(as) no próximo semestre. Espero que funcione :) .
library(rstatix)
dados %>%
select(Nota,Palestrante) %>%
group_by(Palestrante) %>%
get_summary_stats(Nota) %>% flextable() %>%
theme_vader()
Palestrante | variable | n | min | max | median | q1 | q3 | iqr | mad | mean | sd | se | ci |
Stark | Nota | 10 | 3 | 5 | 4 | 4 | 4.75 | 0.75 | 0 | 4.2 | 0.632 | 0.20 | 0.452 |
Targaryen | Nota | 10 | 1 | 4 | 2 | 2 | 2.75 | 0.75 | 0 | 2.3 | 0.823 | 0.26 | 0.589 |
Outras funções interessantes do mesmo pacote.
# Show only common summary
#get_summary_stats(Nota, type = "common")
# Robust summary statistics
#get_summary_stats(Nota, type = "robust")
# Five number summary statistics
#get_summary_stats(Nota, type = "five_number")
# Compute only mean and sd
#get_summary_stats(Nota, type = "mean_sd")
# Compute full summary statistics but show only mean, sd, median, iqr
#get_summary_stats(Nota, show = c("mean", "sd", "median", "iqr"))
library(modelsummary)
datasummary_skim(dados, type="categorical")
Palestrante | N | % |
---|---|---|
Stark | 10 | 50.0 |
Targaryen | 10 | 50.0 |
datasummary(Nota ~ (mean + sd) * Palestrante,data=dados)
Stark | Targaryen | Stark | Targaryen | |
---|---|---|---|---|
Nota | 4.20 | 2.30 | 0.63 | 0.82 |
# CROSSTAB
#datasummary_crosstab(species ~ sex, data = dados)
#Counts and Percentages
#datasummary(species * sex + 1 ~ N + Percent(), data = penguins)