library(ggplot2)
library(reshape2)
library(readxl)
library(dplyr)
# 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" ...
¿Existe relación entre la edad, el colesterol y la enfermedad cardíaca en hombres y mujeres?
Variables continuas:
age: Edad del paciente en añoschol: Colesterol sérico en mg/dltrestbps: Presión arterial en reposo (mm Hg)thalch: Frecuencia cardíaca máxima alcanzada (bpm)oldpeak: Depresión del segmento STVariables categóricas:
sex: Sexo del paciente (Male/Female)target:
Presencia de enfermedad cardíaca (Sano/Enfermedad)# 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)
Este gráfico muestra la relación entre la edad y el colesterol, separando por sexo del paciente. Se observa que:
# 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)
Este gráfico muestra boxplots de la distribución de colesterol, facetados por sexo. Se observa que:
# 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()
)
Este mapa de calor muestra las correlaciones de Pearson entre las variables numéricas del conjunto de datos. Se observa que:
Las tres visualizaciones permiten observar que: