Carga de librerías

library(ggplot2)
library(reshape2)
library(readxl)
library(dplyr)

Carga de datos

# Cargar datos limpios de la Actividad 3
data <- read_excel("/Users/lorenaumana/Desktop/Curso R/datos/a2_umana_lorena.xlsx")

# Ver estructura
head(data)
## # A tibble: 6 × 7
##     age sex    trestbps  chol thalch oldpeak target    
##   <dbl> <chr>     <dbl> <dbl>  <dbl>   <dbl> <chr>     
## 1    63 Male        145   233    150     2.3 Sano      
## 2    67 Male        160   286    108     1.5 <NA>      
## 3    67 Male        120   229    129     2.6 Enfermedad
## 4    37 Male        130   250    187     3.5 Sano      
## 5    41 Female      130   204    172     1.4 Sano      
## 6    56 Male        120   236    178     0.8 Sano
str(data)
## tibble [920 × 7] (S3: tbl_df/tbl/data.frame)
##  $ age     : num [1:920] 63 67 67 37 41 56 62 57 63 53 ...
##  $ sex     : chr [1:920] "Male" "Male" "Male" "Male" ...
##  $ trestbps: num [1:920] 145 160 120 130 130 120 140 120 130 140 ...
##  $ chol    : num [1:920] 233 286 229 250 204 236 268 354 254 203 ...
##  $ thalch  : num [1:920] 150 108 129 187 172 178 160 163 147 155 ...
##  $ oldpeak : num [1:920] 2.3 1.5 2.6 3.5 1.4 0.8 3.6 0.6 1.4 3.1 ...
##  $ target  : chr [1:920] "Sano" NA "Enfermedad" "Sano" ...

Pregunta de investigación

¿Existe relación entre la edad, el colesterol y la enfermedad cardíaca en hombres y mujeres?

Variables seleccionadas

Variables continuas:

Variables categóricas:

Gráfica 1: Relación entre variables continuas

# Filtrar datos sin NA en target
datos_clean <- data %>% 
  filter(!is.na(target))

ggplot(datos_clean, aes(x = age, y = chol, color = sex)) +
  geom_point(size = 2, alpha = 0.6) +
  geom_smooth(method = "lm", se = FALSE) +
  scale_color_brewer(palette = "Dark2", name = "Sexo") +
  labs(
    title = "Relación entre edad y colesterol según sexo",
    x = "Edad (años)",
    y = "Colesterol sérico (mg/dl)"
  ) +
  theme_minimal(base_size = 14)

Descripción de la gráfica 1

Este gráfico muestra la relación entre la edad y el colesterol, separando por sexo del paciente. Se observa que:

  • Existe una ligera tendencia positiva entre edad y colesterol en ambos sexos
  • Los pacientes masculinos (Male) muestran una mayor dispersión en los niveles de colesterol
  • La mayoría de los pacientes se concentra entre 40 y 65 años de edad
  • Los niveles de colesterol varían considerablemente entre individuos de la misma edad
  • Ambos sexos muestran tendencias similares en la relación edad-colesterol

Gráfica 2: Boxplot con facetado

# Filtrar datos sin NA en target
datos_clean <- data %>% 
  filter(!is.na(target))

ggplot(datos_clean, aes(x = target, y = chol, fill = target)) +
  geom_boxplot(show.legend = FALSE) +
  facet_wrap(~sex) +
  scale_fill_brewer(palette = "Pastel1") +
  labs(
    title = "Distribución del colesterol según presencia de enfermedad cardíaca y sexo",
    x = "Diagnóstico",
    y = "Colesterol sérico (mg/dl)"
  ) +
  theme_light(base_size = 14)

Descripción de la gráfica 2

Este gráfico muestra boxplots de la distribución de colesterol, facetados por sexo. Se observa que:

  • Cada panel representa un sexo diferente (Female y Male)
  • Dentro de cada panel se comparan pacientes sanos vs con enfermedad cardíaca
  • La mediana del colesterol es similar entre pacientes sanos y con enfermedad en ambos sexos
  • Los hombres (Male) muestran mayor variabilidad en los niveles de colesterol
  • Hay presencia de valores atípicos en todos los grupos (puntos fuera de los bigotes)
  • El colesterol por sí solo no parece ser un factor muy diferenciador entre los diagnósticos

Gráfica 3: Mapa de calor

# Seleccionar solo variables numéricas relevantes
datos_numericos <- data %>%
  select(age, trestbps, chol, thalch, oldpeak) %>%
  na.omit()

# Calcular matriz de correlación
data_cor <- cor(datos_numericos)

# Convertir a formato largo
data_melt <- melt(data_cor, varnames = c("Variable1", "Variable2"), 
                  value.name = "Correlación")

# Graficar
ggplot(data_melt, aes(x = Variable1, y = Variable2, fill = Correlación)) +
  geom_tile(color = "white") +
  scale_fill_gradient2(
    low = "#d73027", 
    mid = "white", 
    high = "#1a9850",
    midpoint = 0, 
    name = "Coeficiente"
  ) +
  labs(
    title = "Mapa de calor de correlaciones entre variables cardiovasculares",
    x = NULL, 
    y = NULL
  ) +
  theme_minimal(base_size = 13) +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1),
    panel.grid = element_blank()
  )

Descripción de la gráfica 3

Este mapa de calor muestra las correlaciones de Pearson entre las variables numéricas del conjunto de datos. Se observa que:

  • La edad tiene una correlación negativa moderada con la frecuencia cardíaca máxima (thalch): a mayor edad, menor frecuencia cardíaca máxima
  • La presión arterial (trestbps) y el colesterol (chol) muestran correlaciones débiles entre sí
  • La variable oldpeak (depresión del ST) tiene correlaciones débiles con las demás variables
  • Los colores rojos indican correlaciones negativas, blancos cercanas a cero, y verdes positivas
  • Las correlaciones en la diagonal son siempre 1 (cada variable consigo misma)
  • La mayoría de las variables tienen correlaciones débiles entre sí, lo que sugiere que aportan información relativamente independiente

Conclusiones

Las tres visualizaciones permiten observar que:

  1. La edad y el colesterol tienen una relación positiva débil, y esta relación es similar en ambos sexos
  2. El colesterol no muestra diferencias muy marcadas entre pacientes sanos y con enfermedad cardíaca
  3. Las variables cardiovasculares (edad, presión arterial, colesterol y frecuencia cardíaca) tienen correlaciones débiles entre sí, lo que sugiere que cada una aporta información diferente
  4. La frecuencia cardíaca máxima disminuye con la edad, como era de esperarse fisiológicamente
  5. Los hombres muestran mayor variabilidad en los niveles de colesterol que las mujeres