Rodrigo Almeida Figueira 15/03/2021
No nosso dia a dia de trabalho chegam diversas demandas, muitas delas complexas, cheias de desenvolvimentos e aplicações de técnicas, mas existem outras que são mais leves, pois requerem uma análise mais direta e prática. Neste material, tentarei abordar algumas opções de técnincas estatísticas e de vizualizações que nos respondem questionamentos simples, com um devido embasamento para nossas afirmações.
Vamos firmar aqui, alguns termos que serão utilizados neste material:
-
Hipótese: Será o “questionamento” que faremos para obtermos respostas
-
Teste de Hipótese: Será o teste que nos trará a resposta sobre nossos questionamentos
-
Nível descritivo: Será o valor que vamos comparar nossa estatística para rejeitar ou não rejeitar nossas hipóteses (mais conhecido como p-valor)
Para este material utilizarei algumas bases já bem famosas pela comunidade de ciência de dados. São estas:
-
Mtcars: informações de veículos
-
Auto: informações de veículos antigos
-
Iris: informações de plantas
-
Titanic: informações sobre a tripulação do naufrágio do Navio Titanic
mtcars <- mtcars %>%
mutate(
vs = ifelse(vs == 1, "straight", "V-shaped"),
am = ifelse(am == 1, "manual", "automatic")
)
mtcars %>% head() %>% knitr::kable(align = "c")
mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb | |
---|---|---|---|---|---|---|---|---|---|---|---|
Mazda RX4 | 21.0 | 6 | 160 | 110 | 3.90 | 2.620 | 16.46 | V-shaped | manual | 4 | 4 |
Mazda RX4 Wag | 21.0 | 6 | 160 | 110 | 3.90 | 2.875 | 17.02 | V-shaped | manual | 4 | 4 |
Datsun 710 | 22.8 | 4 | 108 | 93 | 3.85 | 2.320 | 18.61 | straight | manual | 4 | 1 |
Hornet 4 Drive | 21.4 | 6 | 258 | 110 | 3.08 | 3.215 | 19.44 | straight | automatic | 3 | 1 |
Hornet Sportabout | 18.7 | 8 | 360 | 175 | 3.15 | 3.440 | 17.02 | V-shaped | automatic | 3 | 2 |
Valiant | 18.1 | 6 | 225 | 105 | 2.76 | 3.460 | 20.22 | straight | automatic | 3 | 1 |
auto <- ISLR::Auto %>%
mutate(
origin = ifelse(origin == 1, "American",
ifelse(origin == 2, "European", "Japanese"))
)
auto %>% head() %>% knitr::kable(align = "c")
mpg | cylinders | displacement | horsepower | weight | acceleration | year | origin | name |
---|---|---|---|---|---|---|---|---|
18 | 8 | 307 | 130 | 3504 | 12.0 | 70 | American | chevrolet chevelle malibu |
15 | 8 | 350 | 165 | 3693 | 11.5 | 70 | American | buick skylark 320 |
18 | 8 | 318 | 150 | 3436 | 11.0 | 70 | American | plymouth satellite |
16 | 8 | 304 | 150 | 3433 | 12.0 | 70 | American | amc rebel sst |
17 | 8 | 302 | 140 | 3449 | 10.5 | 70 | American | ford torino |
15 | 8 | 429 | 198 | 4341 | 10.0 | 70 | American | ford galaxie 500 |
iris %>% head() %>% knitr::kable(align = "c")
Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species |
---|---|---|---|---|
5.1 | 3.5 | 1.4 | 0.2 | setosa |
4.9 | 3.0 | 1.4 | 0.2 | setosa |
4.7 | 3.2 | 1.3 | 0.2 | setosa |
4.6 | 3.1 | 1.5 | 0.2 | setosa |
5.0 | 3.6 | 1.4 | 0.2 | setosa |
5.4 | 3.9 | 1.7 | 0.4 | setosa |
titanic <- titanic::titanic_train %>%
mutate(
Survived = as.factor(Survived),
Pclass = as.factor(Pclass)
)
titanic %>% head() %>% knitr::kable(align = "c")
PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | 0 | 3 | Braund, Mr. Owen Harris | male | 22 | 1 | 0 | A/5 21171 | 7.2500 | S | |
2 | 1 | 1 | Cumings, Mrs. John Bradley (Florence Briggs Thayer) | female | 38 | 1 | 0 | PC 17599 | 71.2833 | C85 | C |
3 | 1 | 3 | Heikkinen, Miss. Laina | female | 26 | 0 | 0 | STON/O2. 3101282 | 7.9250 | S | |
4 | 1 | 1 | Futrelle, Mrs. Jacques Heath (Lily May Peel) | female | 35 | 1 | 0 | 113803 | 53.1000 | C123 | S |
5 | 0 | 3 | Allen, Mr. William Henry | male | 35 | 0 | 0 | 373450 | 8.0500 | S | |
6 | 0 | 3 | Moran, Mr. James | male | NA | 0 | 0 | 330877 | 8.4583 | Q |
Antes de definir a melhor forma de abordagem do conteúdo deste material, sugiro uma breve revisão sobre os tipo de variáveis. Neste caso, vamos definir em quatro tipo bem rapidamente:
- Variáveis quantitativas: São as variáveis numéricas
- Discretas: Numéricas que podem ser contadas e não admitem valores decimais (número de pessoas, quantidade de peças de um carro)
- Contínuas: Numéricas que admitem valores decimais (média de consumo de água, altura dos jogadores da NBA)
- Variáveis qualitativas: São as variáveis não numéricas que
atribuem características às observações
- Nominais: Características/Atributos que não possuem relação de nível entre suas classes (Marca do automóvel, área de atuação dos colaboradores de uma empresa)
- Ordinais: Características/Atributos que possuem relação de nível entre suas classes (Grau de Escolaridade, Faixa salarial)
Agora nós vamos falar de algumas estratégias para definir as visualizações e os testes apropriados para cada problema abordado. Isso decorre muito da natureza da variável que se é trabalhada e o que se deseja descobrir, então além desta pequena estratégia, podem existir diversas outras maneiras de abordar uma situação problema.
Para as variáveis quantitativas, temos alguns tipos de tratamentos ou vizualizações que podem nos dar alguns indicativos sobre o atributo que estamos trabalhando. Existem também técnicas para verificarmos a distribuição destas variáveis, mas acredito que isso seja mais específico para suposições que alguns testes estatísticos requerem (veremos isso posteriormente).
No mais, acredito que gráficos como histogramas, boxplots e gráficos de densidade possam ajudar muito nas nossas análises univariadas de variáveis quantitativas:
source("R/Functions.R")
Nesta circunstância, vamos tratar duas variáveis quantitativas (sejam contínuas ou discretas):
- Análise de correlação
A análise de correlação mede o grau de relação entre duas variáveis numéricas. Os métodos mais utilizados são os que geram os coeficientes de correlação de Pearson e Spearmam. O primeiro serve para variáveis numéricas que possuam uma relação linear, já o segundo serve para variáveis que possuem relações não lineares e para variáveis qualitativas ordinais que podem assumir valores numéricos (ou seja, viram variáveis numéricas).
Coeficiente de correlação de Pearson:
Para este exemplo, vamos utilizar algumas variáveis da base Mtcars para gerar o coeficiente de correlação de Pearson:
# hp versus gear
cor(mtcars$hp, mtcars$gear)
#> [1] -0.1257043
# wt versus disp
cor(mtcars$wt, mtcars$hp)
#> [1] 0.6587479
Na análise acima, podemos verificar os graus de correlação entre dos dois cruzamentos: a potência bruta (hp) possui fraca correlação negativa com o número de marchas (gear); enquanto que ao peso (wt) possui correlação forte positiva com a potência bruta (wt). Mesmo com toda a técnica aplicada ainda existe uma etapa da análise de correlação que muitas vezes é esquecida e não menos importante: a significância dos coeficiente.
A significância do coeficiente de correlação de Pearson: Lembremos que o coeficiente de Pearson mede o grau de relação linear entre duas variáveis, sendo assim, podemos ter graus de correlações elevados, mas não significantes para a linearidade. Para isso, faremos o teste de hipótese a fim de sabermos se o coficiente de correlação de Pearson é significante para um nível descritivo de 5%. Nossas hipóteses são:
(H_0): Não existe correlação linear
(H_1:) Existe correlação linear
Obs: essa hipótese para linearidade é específica para correlação de Pearson, dado que os outros métodos medem a correlação não linear também.
Selecionamos os mesmos exemplos da análise anterior para testar as hipóteses acima:
# hp versus gear
cor.test(mtcars$hp, mtcars$gear)
#>
#> Pearson's product-moment correlation
#>
#> data: mtcars$hp and mtcars$gear
#> t = -0.69402, df = 30, p-value = 0.493
#> alternative hypothesis: true correlation is not equal to 0
#> 95 percent confidence interval:
#> -0.4544774 0.2332119
#> sample estimates:
#> cor
#> -0.1257043
# mpg versus drat
cor.test(mtcars$wt, mtcars$hp)
#>
#> Pearson's product-moment correlation
#>
#> data: mtcars$wt and mtcars$hp
#> t = 4.7957, df = 30, p-value = 4.146e-05
#> alternative hypothesis: true correlation is not equal to 0
#> 95 percent confidence interval:
#> 0.4025113 0.8192573
#> sample estimates:
#> cor
#> 0.6587479
Como nós podemos verificar, no exemplo acima, o coeficiente de
correlação de Pearson para as variáveis hp
e gear
não é
significativo ao nível de 95% de confiança, dado que o seu p-valor é
0,493 (>0,05), isso nos faz não rejeitar a hipóteses nula ((H_0)), em
que afirma que não existe correlação entre as variáveis. Já para as
variáveis wt
e hp
, o coeficiente de correlação de Pearson é
significativo ao nível de confianca de 95% (p-valor > 0,05), e isso nos
faz afirmar que existe correlação entre as variáveis (rejeita a hipótese
nula (H_0)).
Porém, uma estratégia ótima para representar tanto o grau de correlação entre as variáveis quanto a significância desses coeficientes, se resolve com uma esta ferramenta visual bem bacana:
# precisa do pacote rstatix
p.mat <- mtcars %>%
select(where(is.numeric)) %>%
rstatix::cor_pmat() %>% as.data.frame()
rownames(p.mat) <- p.mat$rowname
p.mat <- p.mat[,-1]
# precisa do pacote ggcorplot
mtcars %>%
select(where(is.numeric)) %>%
cor() %>%
ggcorrplot::ggcorrplot(hc.order = TRUE,
type = "lower",
lab = TRUE,
lab_size = 2.5,
p.mat = p.mat,
tl.cex = 6,
method="circle",
colors = c("tomato2", "white", "springgreen3"),
title="Correlograma",
ggtheme=theme_bw, insig = "blank")
Agora, não só enxergarmos o grau de correlação de cada variável, como também quais os coeficientes são significantes, dado que os que não são, foram retirados da visualização.
- Dispersão: O gráfico de dispersão é um dos mais famosos para visualizar a relação entre duas variáveis numéricas. Sendo assim, vamos selecionar algumas relações para visualizarmos de acordo com os coeficiente de correlação de Pearson e suas significâncias que foram observados anteriormente:
iris %>%
grafico_dispersao(x = Sepal.Length, y = Petal.Length, color = "red")