Introdução

Estamos interessados em fazer uma análise descritiva dos dados referentes a doenças cardiológicas, no banco de dados temos disponíveis as seguintes variáveis:
1. Idade
2. Sexo
3. Tipo de dor no peito (4 tipos)
4. Pressão arterial de descanso
5. Colesterol em mg/dl
6. Açúcar no sangue em jejum > 120 mg/dl
7. Resultados do eletrocardiograma em descanso (0,1,2)
8. Maior frequência cardíaca alcançada
9. Angina induzida pelo exercício
10. oldpeak = ST depression induced by exercise relative to rest
11. the slope of the peak exercise ST segment
12. number of major vessels (0-3) colored by flourosopy
13. thal: 3 = normal; 6 = fixed defect; 7 = reversable defect
14. target = indica a presença de doença cardíaca

A seguir podemos ver uma prévia dos dados.

glimpse(heart)
## Observations: 303
## Variables: 14
## $ age      <dbl> 63, 37, 41, 56, 57, 57, 56, 44, 52, 57, 54, 48, 49, 6...
## $ sex      <dbl> 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,...
## $ cp       <dbl> 3, 2, 1, 1, 0, 0, 1, 1, 2, 2, 0, 2, 1, 3, 3, 2, 2, 3,...
## $ trestbps <dbl> 145, 130, 130, 120, 120, 140, 140, 120, 172, 150, 140...
## $ chol     <dbl> 233, 250, 204, 236, 354, 192, 294, 263, 199, 168, 239...
## $ fbs      <dbl> 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0,...
## $ restecg  <dbl> 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1,...
## $ thalach  <dbl> 150, 187, 172, 178, 163, 148, 153, 173, 162, 174, 160...
## $ exang    <dbl> 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,...
## $ oldpeak  <dbl> 2.3, 3.5, 1.4, 0.8, 0.6, 0.4, 1.3, 0.0, 0.5, 1.6, 1.2...
## $ slope    <dbl> 0, 0, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 1, 2, 0,...
## $ ca       <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...
## $ thal     <dbl> 1, 2, 2, 2, 2, 1, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2,...
## $ target   <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,...

Análise Descritiva dos Dados

Uma das hipóteses que estamos interessados em verificar é se a idade e o sexo influenciam na presença de doença cardíaca. Primeiro verificamos a quantidade de ocorrências para cada sexo, além de verificar a quantidade de pessoas com doença cardíaca e os quantis da idade, lembrando que temos 303 observações no total. Podemos ver também o histograma da idade.

heart %>% count(sex)
## # A tibble: 2 x 2
##     sex     n
##   <dbl> <int>
## 1     0    96
## 2     1   207
heart %>% group_by(target) %>% summarise(N = n())
## # A tibble: 2 x 2
##   target     N
##    <dbl> <int>
## 1      0   138
## 2      1   165
quantile(heart$age, prob = c(.25, .5, .75))
##  25%  50%  75% 
## 47.5 55.0 61.0
heart %>% ggplot() + geom_histogram(aes(x = age), binwidth = 5, color = "red", fill = "red", alpha = .5) + xlab("Idade")+ylab("Número de observações") + ggtitle("Histograma de Idades")

Agora, fazendo dois histogramas das idades separando as pessoas com doença cardíaca das saudáveis temos o resultado a seguir. Como podemos observar dentre as pessoas saudáveis (em vermelho) temos uma grande concentração de pacientes em torno dos 60 anos, já no histograma das idades dos pacientes com doenças cardíacas (em azul) observamos as idades mais espalhadas.

heart %>% ggplot() + geom_histogram(aes(x = age, fill = factor(target), color = factor(target)), binwidth = 5, alpha = .5) + labs(x = "Idade", y = "Número de observações") + facet_wrap(.~factor(target)) + guides(fill = "none", color = "none")

Outra possibilidade seria observar o comportamento da pressão sistólica em repouso em relação ao colesterol.

heart %>% ggplot() + geom_point(aes(x = chol, y = trestbps, color = factor(sex))) + labs(x = 'Colesterol', y = 'Pressão sistólica em repouso', title = 'Gráfico de dispersão')

Separando os pacientes doentes e saudáveis e por sexo também temos o seguinte resultado.

heart %>% 
  filter(chol < 500) %>% 
  mutate(Sexo = if_else(sex == 0, "Feminino", "Masculino"), 
         Resposta = if_else(target == 0, "Saudável", "Doente")) %>% 
  ggplot() + geom_point(aes(x = chol, y = trestbps, color = factor(sex))) + labs(x = 'colesterol', y = 'Pressão sistólica em repouso', color = "Sexo", title = 'Gráfico de dispersão') + facet_grid(.~Resposta, scales = "free_x")

A pressão sistólica em repouso e o nível de colesterol não tem correlação linear aparente, porém observamos que o nível de pressão sistólica em repouso dos pacientes saudáveis aparenta ser mais elevado do que o dos pacientes doentes, que é um resultado contraintuitivo.

vamos analisar separadamente a pressão sistólica em repouso e o colesterol. Primeiro, pelo boxplot da pressão separando os pacientes doentes e saudáveis e também por sexo como visto abaixo. Os pacientes do sexo masculino tem um comportamento muito similar em relação a pressão sendo doentes ou saudáveis, porém no sexo feminino percebemos que os pacientes saudáveis tem um nível de pressão muito maior que os doentes, o que também é um resultado contraintuitivo.

heart %>% 
  mutate(Sexo = if_else(sex == 0, "Feminino", "Masculino"), 
         Resposta = if_else(target == 0, "Saudável", "Doente")) %>%
  ggplot() +
  geom_boxplot(aes(x = Sexo, y = trestbps, fill = Resposta)) + ylab("Pressão sistólica em repouso")

Já no boxplot do colesterol a seguir percebemos que os níveis de colesterol em ambos os sexos são maiores para as pessoas saudáveis, mais um resultado contraintuivo.

heart %>% 
  mutate(Sexo = if_else(sex == 0, "Feminino", "Masculino"), 
         Resposta = if_else(target == 0, "Saudável", "Doente")) %>%
  ggplot() +
  geom_boxplot(aes(x = Sexo, y = chol, fill = Resposta)) + ylab("Colesterol")

Com esses resultados podemos concluir que aparentemente ouve algum problema na coleta de dados, visto que os resultados são contraintuitivo e muito distantes dos resultados esperados.