# Lendo o pacote
library(titanic)
# Atribuindo titanic_train para o objeto dados
dados <- titanic_train
# Excluindo colunas
dados$PassengerId <- NULL
dados$Name <- NULL
dados$Ticket <- NULL
dados$Cabin <- NULLAulas de R - Bioestatística 2023.2
Aula 1
Na aula do dia 25/08/2023, vimos como carregar um pacote, ler um banco de dados e excluir colunas.
OBS: um asterisco antes e depois torna o texto em itálico. Dois asteriscos antes e depois torna o terno em negrito.
Aula 2
Para começar, vamos ler um banco de dados externo:
library(readxl)
dados_titanic <- read_excel("dados_titanic.xlsx")Vamos excluir o nome dos passageiros:
dados_titanic$Nome <- NULLVamos agora corrigir algumas variáveis:
# Vendo a estrutura dos dados
str(dados_titanic)tibble [891 × 8] (S3: tbl_df/tbl/data.frame)
$ Sobreviveu : num [1:891] 0 1 1 1 0 0 0 0 1 1 ...
$ Classe : num [1:891] 3 1 3 1 3 3 1 3 3 2 ...
$ Sexo : chr [1:891] "male" "female" "female" "female" ...
$ Idade : num [1:891] 22 38 26 35 35 NA 54 2 27 14 ...
$ N_irmaos_conjuges: num [1:891] 1 1 0 1 0 0 0 3 0 1 ...
$ N_pais_filhos : num [1:891] 0 0 0 0 0 0 0 1 2 0 ...
$ Tarifa : num [1:891] 7.25 71.28 7.92 53.1 8.05 ...
$ Porto : chr [1:891] "S" "C" "S" "S" ...
# Transformando para fator
dados_titanic$Sobreviveu <- as.factor(dados_titanic$Sobreviveu)
dados_titanic$Classe <- as.factor(dados_titanic$Classe)
dados_titanic$Sexo <- as.factor(dados_titanic$Sexo)
dados_titanic$Porto <- as.factor(dados_titanic$Porto)
# Verificando se mudou
str(dados_titanic)tibble [891 × 8] (S3: tbl_df/tbl/data.frame)
$ Sobreviveu : Factor w/ 2 levels "0","1": 1 2 2 2 1 1 1 1 2 2 ...
$ Classe : Factor w/ 3 levels "1","2","3": 3 1 3 1 3 3 1 3 3 2 ...
$ Sexo : Factor w/ 2 levels "female","male": 2 1 1 1 2 2 2 2 1 1 ...
$ Idade : num [1:891] 22 38 26 35 35 NA 54 2 27 14 ...
$ N_irmaos_conjuges: num [1:891] 1 1 0 1 0 0 0 3 0 1 ...
$ N_pais_filhos : num [1:891] 0 0 0 0 0 0 0 1 2 0 ...
$ Tarifa : num [1:891] 7.25 71.28 7.92 53.1 8.05 ...
$ Porto : Factor w/ 3 levels "C","Q","S": 3 1 3 3 3 2 3 3 3 1 ...
Vamos mudar agora os nomes das categorias das variáveis qualitativas:
levels(dados_titanic$Sobreviveu)[1] "0" "1"
levels(dados_titanic$Sobreviveu) <- c("Não", "Sim")
levels(dados_titanic$Classe)[1] "1" "2" "3"
levels(dados_titanic$Classe) <- c("Primeira", "Segunda", "Terceira")
levels(dados_titanic$Sexo)[1] "female" "male"
levels(dados_titanic$Sexo) <- c("Feminino", "Masculino")Vamos mudar agora o nome de uma variável:
colnames(dados_titanic)[1] "Sobreviveu" "Classe" "Sexo"
[4] "Idade" "N_irmaos_conjuges" "N_pais_filhos"
[7] "Tarifa" "Porto"
colnames(dados_titanic)[8] <- "Porto_de_Embarque"Vamos agora criar a variável faixa etária:
dados_titanic$Faixa_Etaria <- cut(dados_titanic$Idade,
c(0, 18, 65, 200))
dados_titanic$Faixa_Etaria
levels(dados_titanic$Faixa_Etaria) <- c("Até 18 anos",
"Maior que 18 anos e até 65 anos",
"Maior que 65 anos")Estatística Descritiva Univariada
Qualitativa
Vamos trabalhar com a variável classe econômica. Para começar, vamos construir uma tabela de distribuição de frequências.
Podemos observar que a maioria dos passageiros era da terceira classe (55,11%), com a segunda classe contendo a menor proporção de passageiros (20,65%) (Figura 1).
library(summarytools)
freq(dados_titanic$Classe)Frequencies
dados_titanic$Classe
Type: Factor
Freq % Valid % Valid Cum. % Total % Total Cum.
-------------- ------ --------- -------------- --------- --------------
Primeira 216 24.24 24.24 24.24 24.24
Segunda 184 20.65 44.89 20.65 44.89
Terceira 491 55.11 100.00 55.11 100.00
<NA> 0 0.00 100.00
Total 891 100.00 100.00 100.00 100.00
freq(dados_titanic$Porto_de_Embarque)Frequencies
dados_titanic$Porto_de_Embarque
Type: Factor
Freq % Valid % Valid Cum. % Total % Total Cum.
----------- ------ --------- -------------- --------- --------------
C 168 18.90 18.90 18.86 18.86
Q 77 8.66 27.56 8.64 27.50
S 644 72.44 100.00 72.28 99.78
<NA> 2 0.22 100.00
Total 891 100.00 100.00 100.00 100.00
Vamos agora fazer um gráfico de barras para a variável classe econômica:
# Mudando a ordem das categorias
# dados_titanic$Classe <- factor(dados_titanic$Classe, levels = c("Terceira", "Segunda", "Primeira"))
library(ggplot2)
ggplot(dados_titanic) +
aes(x = Classe) +
geom_bar(fill = "slateblue3") +
labs(x = "Classe econômica",
y = "Frequência", title = "Figura 1. Classe econômica dos passageiros do Titanic", caption = "Fonte: a autora") +
theme_gray() +
theme(plot.title = element_text(face = "bold.italic", hjust = 0.5))Aula 3
Quantitativa
A idade média dos passageiros foi de 29,70 anos (dp = 14,53 anos), com mediana igual a 28 anos. A variável pode ser classificada como assimétrica à direita (positiva) e heterogênea (CV > 0,30).
library(summarytools)
descr(dados_titanic$Idade)Descriptive Statistics
dados_titanic$Idade
N: 891
Idade
----------------- --------
Mean 29.70
Std.Dev 14.53
Min 0.42
Q1 20.00
Median 28.00
Q3 38.00
Max 80.00
MAD 13.34
IQR 17.88
CV 0.49
Skewness 0.39
SE.Skewness 0.09
Kurtosis 0.16
N.Valid 714.00
Pct.Valid 80.13
Vamos agora obser a distribuição da variável Idade pelos 3 gráficos aprendidos.
Histograma
library(dplyr)
Attaching package: 'dplyr'
The following objects are masked from 'package:stats':
filter, lag
The following objects are masked from 'package:base':
intersect, setdiff, setequal, union
library(ggplot2)
dados_titanic %>%
filter(!is.na(Idade)) %>%
ggplot() +
aes(x = Idade) +
geom_histogram(bins = 30L, fill = "#4682B4") +
labs(x = "Idade (anos)",
y = "Frequência absoluta", title = "Figura 2. Distribuição da variável Idade.") +
theme_gray()Densidades
library(dplyr)
library(ggplot2)
dados_titanic %>%
filter(!is.na(Idade)) %>%
ggplot() +
aes(x = Idade) +
geom_density(fill = "#4682B4") +
labs(x = "Idade (anos)",
y = "Densidade", title = "Figura 3. Distribuição da variável Idade.") +
theme_gray()Boxplot
library(dplyr)
library(ggplot2)
dados_titanic %>%
filter(!is.na(Idade)) %>%
ggplot() +
aes(y = Idade) +
geom_boxplot(fill = "#4682B4", width = 0.35) +
labs(x = "",
y = "Idade (anos)", title = "Figura 4. Distribuição da variável Idade.") +
theme_gray() + xlim(c(-1,1))Estatística Descritiva Bivariada
Quali x Quali
Será que existe relação entre a classe econômica e a sobrevivência ao desastre do Titanic?
- Variável explicativa: classe econômica
- Variável resposta: sobrevivência
A tabela abaixo mostra que, dos passageiros da primeira classe, 37% deles não sobreviveram, sendo este percentual maior na segunda (52,7%) e terceira (75,8%) classes.
library(summarytools)
ctable(dados_titanic$Classe, dados_titanic$Sobreviveu)Cross-Tabulation, Row Proportions
Classe * Sobreviveu
Data Frame: dados_titanic
---------- ------------ ------------- ------------- --------------
Sobreviveu Não Sim Total
Classe
Primeira 80 (37.0%) 136 (63.0%) 216 (100.0%)
Segunda 97 (52.7%) 87 (47.3%) 184 (100.0%)
Terceira 372 (75.8%) 119 (24.2%) 491 (100.0%)
Total 549 (61.6%) 342 (38.4%) 891 (100.0%)
---------- ------------ ------------- ------------- --------------
Gráfico de Barras Múltiplas
library(ggplot2)
ggplot(dados_titanic) +
aes(x = Classe, fill = Sobreviveu) +
geom_bar(position = "dodge") +
scale_fill_brewer(palette = "Set1",
direction = 1) +
labs(x = "Classe Econômica", y = "Frequência absoluta", title = "Figura 5. Relação entre classe econômica e desfecho do passageiro") +
theme_gray()Gráfico de Barras Empilhadas
library(ggplot2)
ggplot(dados_titanic) +
aes(x = Classe, fill = Sobreviveu) +
geom_bar(position = "fill") +
scale_fill_brewer(palette = "Set1",
direction = 1) +
labs(x = "Classe Econômica", y = "Frequência relativa", title = "Figura 6. Relação entre classe econômica e desfecho do passageiro") +
theme_gray()Quanti x Quanti
Existe correlação entre o número de filhos/pais a bordo e a idade do passageiro?
Ao analisar o coeficiente de correlação de Spearman, observamos uma correlação fraca e negativa (rho = -0,25).
library(ggplot2)
dados_titanic %>%
filter(!is.na(Idade)) %>%
ggplot() +
aes(x = Idade, y = N_pais_filhos) +
geom_point(shape = "triangle", size = 1.5,
colour = "#0C4C8A") +
geom_smooth(span = 1L) +
labs(x = "Idade (anos)", y = "Número de pais/filhos a bordo",
title = "Figura 7. Correlação entre número de pais/filhos e idade dos passageiros") +
theme_gray()`geom_smooth()` using method = 'loess' and formula = 'y ~ x'
cor(dados_titanic$Idade, dados_titanic$N_pais_filhos,
use = "complete.obs", method = "spearman")[1] -0.2542121
Quali x Quanti
Existe relação entre a idade do passageiro e sua sobrevivência?
A partir das estatísticas, podemos observar que ambos os grupos apresentaram medianas iguais a 28 anos (IQR = 18 anos para grupo Não e 17 anos para grupo Sim). Quanto à assimetria, ambas as distribuições foram assimétricas positivas. A idade possui distribuição heterogênea em ambos os desfechos (CV > 0,30).
library(summarytools)
with(dados_titanic, stby(Idade, Sobreviveu, descr))Descriptive Statistics
Idade by Sobreviveu
Data Frame: dados_titanic
N: 549
Não Sim
----------------- -------- --------
Mean 30.63 28.34
Std.Dev 14.17 14.95
Min 1.00 0.42
Q1 21.00 19.00
Median 28.00 28.00
Q3 39.00 36.00
Max 74.00 80.00
MAD 11.86 13.34
IQR 18.00 17.00
CV 0.46 0.53
Skewness 0.58 0.18
SE.Skewness 0.12 0.14
Kurtosis 0.25 -0.10
N.Valid 424.00 290.00
Pct.Valid 77.23 84.80
library(dplyr)
library(ggplot2)
dados_titanic %>%
filter(!is.na(Idade)) %>%
ggplot() +
aes(x = "", y = Idade, fill = Sobreviveu) +
geom_boxplot() +
scale_fill_brewer(palette = "Set1",
direction = 1) +
labs(x = " ", y = "Idade (anos)", title = "Figura 8. Distribuição da idade segundo o desfecho dos passageiros") +
theme_gray()