Resolução de exercícios


Informações sobre os dados:

Variáveis de interesse

  • Colesterol: chol (Variável Numérica)
  • Dor no peito: cp, (typical, asymptotic, nonanginal, nontypical) (Variável Categórica)
  • Idade: age (Variável Numérica)
  • Taxa máxima de batimentos cardíacos: thalach (Variável Numérica)
  • Sexo: sex, (0 = female; 1 = male) (Variável Categórica)

Formato Geral: 303 obs. (Linhas) e 14 Variáveis (Colunas).


Exercício 01: Carregue o conjunto de dados heart.csv utilizando a função read.csv, e apresente as 6 primeiras linhas do banco de dados.

# Carregando o conjunto de dados:

dados <- read.csv("heart.csv")  

# Observando  as 6 primeiras linhas do banco de dados:

head(dados)
##   age sex cp trestbps chol fbs restecg thalach exang oldpeak slope ca thal
## 1  63   1  3      145  233   1       0     150     0     2.3     0  0    1
## 2  37   1  2      130  250   0       1     187     0     3.5     0  0    2
## 3  41   0  1      130  204   0       0     172     0     1.4     2  0    2
## 4  56   1  1      120  236   0       1     178     0     0.8     2  0    2
## 5  57   0  0      120  354   0       1     163     1     0.6     2  0    2
## 6  57   1  0      140  192   0       1     148     0     0.4     1  0    1
##   target
## 1      1
## 2      1
## 3      1
## 4      1
## 5      1
## 6      1

Exercício 02: Atribua o tipo factor para a variável sex com níveis F e M.

dados$sex <- factor(dados$sex, levels = c(0, 1), labels = c("F", "M"))

# Verificando a mudança na variável:

str(dados$sex)
##  Factor w/ 2 levels "F","M": 2 2 1 2 1 2 1 2 2 2 ...

Exercício 03: Faça um gráfico de dispersão da idade versus colesterol. Faça isso separando as cores por sexo. O que você conclui desse gráfico?

# Carregando o pacote necessário para a análise:

library(ggplot2)

# Gráfico de dispersão para avaliar a relação entre idade e colesterol:

ggplot(dados, aes(x = age, y = chol, color = sex)) + 
  geom_point() 

Comentários: A distribuição dos níveis de colesterol em relação à idade é bastante similar para homens e mulheres. Podemos ver também uma variação ampla dos níveis de colesterol em todas as idades, indicando que o colesterol elevado não é exclusivo de uma faixa etária específica. Além disso, o sexo feminino aparenta apresentar uma maior variabilidade nos níveis de colesterol em comparação com o sexo masculino.


Exercício 04: Aperfeiçoe o gráfico do Exercício 3 incluindo título e melhorando o rótulo dos eixos.

# Melhorando o gráfico com mais detalhes:

ggplot(dados, aes(x = age, y = chol, color = sex)) + 
  geom_point() + ggtitle("Relação entre as variáveis Idade e Colesterol por sexo") +
  xlab("Idade") + ylab("Colesterol")


Exercício 05: Calcule a média e o desvio padrão do colesterol por sexo. As medidas corroboram sua análise gráfica realizada no Exercício 4? Reflita sobre o porquê desse resultado.

# Medidas de posição e dispersão para o Sexo Masculino:

# Filtro para sexo masculino e feminino:

dados_sex_masculino = dados[dados$sex == "M",]
dados_sex_feminino = dados[dados$sex == "F",]


# Média e Desvio padrão do colesterol para o sexo masculino:

media_col_masculino <- mean(dados_sex_masculino$chol)

desvio_padrao_col_masculino <- sd(dados_sex_masculino$chol)


# Média e Desvio padrão do colesterol para o sexo Feminino:

media_col_feminino <- mean(dados_sex_feminino$chol)

desvio_padrao_col_feminino <- sd(dados_sex_feminino$chol)


# Criando um Dataframe para salvar os dados obtidos:

medidas_resumo_col <- data.frame(
  Media = c(239.2899, 261.3021),
  Desvio_padrao = c(42.78239, 65.08895),
  Sexo = c("Masculino","Feminino")
  
)

# Exibindo:

medidas_resumo_col
##      Media Desvio_padrao      Sexo
## 1 239.2899      42.78239 Masculino
## 2 261.3021      65.08895  Feminino

Comentários: As medidas corroboram a análise gráfica, onde podemos notar uma variação significativa nos níveis de colesterol para ambos os sexos. Observamos um desvio padrão maior para o sexo feminino, indicando uma maior variabilidade nos níveis de colesterol em comparação com o sexo masculino. No entanto, os valores são dispersos em ambos os sexos, como comentado anteriormente.


Exercício 06: Faça um boxplot para cada categoria do sexo contra o colesterol (ordenando as “caixas” por mediana em ordem crescente). O que vê agora?

ggplot(dados,aes(x = reorder(sex, chol, median), y = chol)) + 
  geom_boxplot(aes(fill = sex)) + 
  xlab("Sexo") + 
  ylab("Colesterol") +
  ggtitle("Boxplot do Colesterol por Sexo Ordenado pela Mediana")

Comentários: Podemos observar que a mediana do colesterol para o sexo feminino é maior do que a do sexo masculino, indicando que, em geral, o sexo feminino têm níveis de colesterol mais altos do que o sexo masculino. Além disso, há a presença de outliers no grupo feminino, sugerindo valores de colesterol excepcionalmente altos entre individuos do sexo feminino. A “caixa” ou intervalo interquartil (IQR) para o sexo feminino é maior do que a do sexo masculino, indicando uma maior variabilidade nos níveis de colesterol entre o sexo feminino. No geral, o sexo feminino apresenta maior variabilidade e níveis mais altos de colesterol, conforme evidenciado pela mediana mais alta e pelo IQR mais amplo. Essas observações reforçam a análise anterior e corroboram que o sexo feminino tende a ter uma maior dispersão e níveis mais elevados de colesterol em comparação com o sexo masculino.


Exercício 07: Crie um novo banco de dados, heart_less_50 contendo apenas indivíduos com menos de 50 anos e refaça o boxplot do Exercício 6 para esse banco de dados. Algo mudou?

# Realizando o devido filtro:

heart_less_50 <- dados[dados$age < 50,]


# Refazendo o boxplot:

ggplot(heart_less_50, aes(x = reorder(sex, chol, median), y = chol)) +
  geom_boxplot(aes(fill = sex)) + 
  xlab("Sexo") + 
  ylab("Colesterol") +
  ggtitle("Boxplot do Colesterol por Sexo para Indivíduos com Idade Menor que 50 Anos")

Comentários: Podemos notar que agora a mediana do colesterol para o sexo masculino é maior em comparação com o sexo feminino, indicando que, para idades mais jovens, o sexo masculino têm, em geral, níveis mais altos de colesterol do que as mulheres. Também é possível observar que não há mais a presença de outliers para o sexo feminino. Isso sugere que, para indivíduos mais jovens, os homens tendem a ter níveis de colesterol mais altos no geral. Além disso, o sexo feminino continua apresentando uma maior variabilidade nos níveis de colesterol.


Exercício 08: Faça um gráfico da variável cp segmentado por sexo. O que você observa?

ggplot(dados, aes(x = cp)) +
  geom_bar(aes(fill = sex), position = "dodge", color = "black") +
  xlab("Dor no peito") + 
  ylab("Contagem") +
  ggtitle("Distribuição da Dor no Peito (cp) Segmentada por Sexo")

Comentários: Podemos observar que, para ambos os sexos, a dor no peito do tipo “0” é a mais frequente. Em contraste, a dor no peito do tipo “3” é a menos frequente tanto para o sexo masculino quanto para o feminino. Além disso, podemos notar que, para os tipos de dor “0” e “3”, há uma predominância significativa no sexo masculino. Os tipos de dor “1” e “2” apresentam frequências mais equilibradas entre os sexos, embora ainda haja uma leve predominância masculina.


Exercício 09: Refaça o gráfico do Exercício 8 com barras na mesma altura (por frequência relativa). O que você vê agora?

ggplot(dados, aes(x = cp)) +
  geom_bar(aes(fill = sex), position = "fill", color = "black") +
  xlab("Dor no peito") +
  ylab("frequência relativa") +
  ggtitle("Distribuição Relativa da Dor no Peito (cp) Segmentada por Sexo")

Comentários: Podemos observar com maior clareza, ao utilizar as proporções, que a categoria de dor no peito do tipo 3 apresenta a maior proporção de homens. Se olhássemos apenas para o primeiro gráfico, sem a frequência relativa, poderíamos erroneamente concluir que a categoria 0 tem a maior proporção de homens. Isso destaca a importância de comparar os grupos utilizando frequências relativas para evitar conclusões incorretas.


Exercício 10: Faça um histograma da taxa máxima de batimentos cardíacos (thalach) separado por sexo, em quadros diferentes. O que você vê?

ggplot(dados, aes(x = thalach)) +
  geom_histogram(aes(fill = sex), alpha = 0.5, color = "black") +
  ggtitle("Distribuição da taxa máxima de batimentos cardíacos por sexo") + 
  facet_wrap(~sex) + 
  xlab("Taxa máxima de batimentos cardíacos") +
  ylab("Contagem")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Comentários: Podemos observar que tanto para o sexo masculino quanto para o sexo feminino, encontramos um pico em torno de 150/160 batimentos cardíacos. É possível notar também que as distribuições são um pouco similares, mas o sexo masculino apresenta uma quantidade maior de batimentos mais elevados. Além disso, a distribuição dos dados é mais dispersa no sexo masculino em comparação com o sexo feminino, indicando uma maior variabilidade nas suas taxas máximas de batimentos cardíacos.


Exercício 11.a): Faça um histograma (tipo densidade) da taxa máxima de batimentos cardíacos (thalach) separado por sexo em quadros diferentes com a linha da densidade na cor cinza junto ao histograma. Por quê as alturas relativas mudaram? Como você interpreta os gráficos agora?

ggplot(dados, aes(x = thalach)) +
  geom_histogram(aes(fill = sex,y = after_stat(density)), alpha = 0.5, color = "black") +
  geom_density(color = "gray", alpha = 1) +
  facet_wrap(~sex) +
  xlab("Taxa máxima de batimentos cardíacos") +
  ylab("Densidade") +
  ggtitle("Distribuição da Taxa Máxima de Batimentos Cardíacos por Sexo com Linhas de Densidade")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Comentários: As alturas relativas mudaram porque agora estamos trabalhando com distribuições em termos de densidade, ao invés de frequência absoluta. Isso significa que a área sob cada curva de densidade é igual a 1, permitindo comparações diretas entre as formas das distribuições, independentemente do número total de observações em cada grupo. A distribuição para o sexo feminino está mais concentrada em torno do pico, sugerindo menor variabilidade nas taxas máximas de batimentos cardíacos. Ambos os sexos apresentam um pico em torno de 150/160 batimentos por minuto, mas os dados masculinos mostram uma maior dispersão, indicando uma variabilidade maior. Em resumo, mulheres tendem a ter uma distribuição de batimentos cardíacos mais concentrada, enquanto homens apresentam maior variabilidade nas suas taxas máximas de batimentos cardíacos.


Exercício 11.b): Média e Desvio Padrão para Corroborar as Conclusões do Gráfico:

# Filtrando os dados por sexo:

dados_sex_masculino = dados[dados$sex == "M",]
dados_sex_feminino = dados[dados$sex == "F",]


# Desvio padrão e média da taxa máxima de batimentos cardíacos (thalach) para ambos os sexos:

desvio_padrao_thalach_masc <- sd(dados_sex_masculino$thalach)

media_thalach_masc <- mean(dados_sex_masculino$thalach)


desvio_padrao_thalach_femin <- sd(dados_sex_feminino$thalach)

media_thalach_femin <- mean(dados_sex_feminino$thalach)


# Criando um dataframe com as medidas resumo:

dados_resumo_thalach <- data.frame(
  Media = c(media_thalach_femin, media_thalach_masc),
  Desvio_padrao = c(desvio_padrao_thalach_femin, desvio_padrao_thalach_masc),
  Sexo = c("Feminino","Masculino")
  
)


dados_resumo_thalach    
##      Media Desvio_padrao      Sexo
## 1 151.1250      20.04797  Feminino
## 2 148.9614      24.13088 Masculino

Comentários: As medidas resumo reforçam as conclusões tiradas do gráfico, fornecendo evidências quantitativas das diferenças na distribuição dos batimentos cardíacos máximos entre os sexos. As mulheres apresentam uma distribuição mais concentrada em torno da média (151.13), com um desvio padrão menor (20.05), indicando menor variabilidade. Em contraste, os homens mostram uma maior dispersão, com uma média ligeiramente menor (148.96) e um desvio padrão maior (24.13). Essas observações indicam que os homens têm uma variabilidade maior nas suas taxas máximas de batimentos cardíacos em comparação com as mulheres.