Libro de Tareas de Juan D. Gaviria S.

Diplomado en Bioestadística

Universidad Manuela Beltrán

Módulo 2: Profesor Fredy Medina

Cargar librerías

library(grid)
library(gridExtra)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::combine() masks gridExtra::combine()
## ✖ dplyr::filter()  masks stats::filter()
## ✖ dplyr::lag()     masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(plotly)
## 
## Attaching package: 'plotly'
## 
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## 
## The following object is masked from 'package:stats':
## 
##     filter
## 
## The following object is masked from 'package:graphics':
## 
##     layout
library(DT)
library(utf8)
library(readr)
library(ggplot2)
library(DiagrammeR)
library(modeest)
## Registered S3 method overwritten by 'rmutil':
##   method         from
##   print.response httr
rm(list = ls())

url_base= 'https://archive.ics.uci.edu/ml/machine-learning-databases/heart-disease/processed.cleveland.data'

dat.df <- read.table(url_base, header = TRUE, sep = ",", quote = "", fill = TRUE)

names(dat.df) <- c( "age", "sex", "cp", "trestbps", "chol","fbs", "restecg","thalach","exang", "oldpeak","slope", "ca", "thal", "num")

datatable(dat.df)

CodeBook

“age”, “sex”, “cp”, “trestbps”, “chol”,“fbs”, “restecg”,“thalach”,“exang”, “oldpeak”,“slope”, “ca”, “thal”, “num”
age: edad del paciente
sex: Sexo del paciente
cp: Tipo de dolor en el pecho
Tipo 1: Angina típica
Tipo 2: Angina Atípica
Tipo 3: Dolor no anginal
Tipo 4: Asintomático
trestbps: Presión arterial en reposo en mm Hg al ingreso al hospital
chol: Colesterol sérico en mg /dl
fbs: azúcar en sangre en ayunas > 120 mg/dl
restecg: Resultados electrocardiográficos en reposo
Nivel 0: Normal
Nivel 1: Tener anormalidad de onda ST-T (inversiones de onda T y / o elevación o Depresión de ST de > 005 mV)
Nivel 2: Muestra hipertrofía ventricular izquierda probable o definitiva según los criterios de Estes.
thalach: Frecuencia cardiaca máxima alcanzada
exang: Angina inducida por el ejercicio
oldpeak: Depresión del ST inducida por el ejercicio en relación con el descanso
slope: La pendiente del segmento ST de ejercicio pico
Valor 1: ascenso
Valor 2: plano
Valor 3: descenso
ca: Numero de vasos principales (0-3) coloreados por fluoroscopia
thal: El estado del corazón según la prueba de Thallium
N = normal;
DF = defecto fijo
DR = defecto reversible
num : Presencia de enfermedad cardíaca (estado de enfermedad angiográfica)
0: Saludable
1: Diagnosticado como etapa 1
2: Diagnosticado como etapa 2
3: Diagnosticado como etapa 3
4: Diagnosticado como etapa 4

Ejercicio 1.

Clasifique cada una de estas variables y transforme todas las que sean necesarias con los métodos descritos en el documento.

str(dat.df)
## 'data.frame':    302 obs. of  14 variables:
##  $ age     : num  67 67 37 41 56 62 57 63 53 57 ...
##  $ sex     : num  1 1 1 0 1 0 0 1 1 1 ...
##  $ cp      : num  4 4 3 2 2 4 4 4 4 4 ...
##  $ trestbps: num  160 120 130 130 120 140 120 130 140 140 ...
##  $ chol    : num  286 229 250 204 236 268 354 254 203 192 ...
##  $ fbs     : num  0 0 0 0 0 0 0 0 1 0 ...
##  $ restecg : num  2 2 0 2 0 2 0 2 2 0 ...
##  $ thalach : num  108 129 187 172 178 160 163 147 155 148 ...
##  $ exang   : num  1 1 0 0 0 0 1 0 1 0 ...
##  $ oldpeak : num  1.5 2.6 3.5 1.4 0.8 3.6 0.6 1.4 3.1 0.4 ...
##  $ slope   : num  2 2 3 1 1 3 1 2 3 2 ...
##  $ ca      : chr  "3.0" "2.0" "0.0" "0.0" ...
##  $ thal    : chr  "3.0" "7.0" "3.0" "3.0" ...
##  $ num     : int  2 1 0 0 0 3 0 2 1 0 ...
glimpse(dat.df)
## Rows: 302
## Columns: 14
## $ age      <dbl> 67, 67, 37, 41, 56, 62, 57, 63, 53, 57, 56, 56, 44, 52, 57, 4…
## $ sex      <dbl> 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0…
## $ cp       <dbl> 4, 4, 3, 2, 2, 4, 4, 4, 4, 4, 2, 3, 2, 3, 3, 2, 4, 3, 2, 1, 1…
## $ trestbps <dbl> 160, 120, 130, 130, 120, 140, 120, 130, 140, 140, 140, 130, 1…
## $ chol     <dbl> 286, 229, 250, 204, 236, 268, 354, 254, 203, 192, 294, 256, 2…
## $ fbs      <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1…
## $ restecg  <dbl> 2, 2, 0, 2, 0, 2, 0, 2, 2, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2…
## $ thalach  <dbl> 108, 129, 187, 172, 178, 160, 163, 147, 155, 148, 153, 142, 1…
## $ exang    <dbl> 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0…
## $ oldpeak  <dbl> 1.5, 2.6, 3.5, 1.4, 0.8, 3.6, 0.6, 1.4, 3.1, 0.4, 1.3, 0.6, 0…
## $ slope    <dbl> 2, 2, 3, 1, 1, 3, 1, 2, 3, 2, 2, 2, 1, 1, 1, 3, 1, 1, 1, 2, 1…
## $ ca       <chr> "3.0", "2.0", "0.0", "0.0", "0.0", "2.0", "0.0", "1.0", "0.0"…
## $ thal     <chr> "3.0", "7.0", "3.0", "3.0", "3.0", "3.0", "3.0", "7.0", "7.0"…
## $ num      <int> 2, 1, 0, 0, 0, 3, 0, 2, 1, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0…
# Variable Sex
dat.df$sex[dat.df$sex==1]<- "Masculino" # asigna Masculino a el valor 1 en la columna sex
dat.df$sex[dat.df$sex==0]<- "Femenino"  # asigna femenino a el valor 0 en la columna sex

# Variable cp
dat.df$cp[dat.df$cp==1]<- "Angina Típica"
dat.df$cp[dat.df$cp==2]<- "Angina Atípica"
dat.df$cp[dat.df$cp==3]<- "Dolor no Anginal"
dat.df$cp[dat.df$cp==4]<- "Asintomático"

# Variable fbs (azúcar en sangre en ayunas > 120 mg/dl)
dat.df$fbs[dat.df$fbs==0]<- "azúcar en sangre en ayunas ≤ 120 mg/dl"
dat.df$fbs[dat.df$fbs==1]<- "azúcar en sangre en ayunas > 120 mg/dl"

# Variable restecg (Resultados electrocardiográficos en reposo)
dat.df$restecg[dat.df$restecg==0]<- "Normal"
dat.df$restecg[dat.df$restecg==1]<- "Tener anormalidad de onda ST-T (inversiones de onda T y / o elevación o Depresión de ST de > 005 mV)"
dat.df$restecg[dat.df$restecg==2]<- "Muestra hipertrofía ventricular izquierda probable o definitiva según los criterios de Estes."

# Variable exang (Angina inducida por el ejercicio)
dat.df$exang[dat.df$exang==0]<- "No"
dat.df$exang[dat.df$exang==1]<- "Si"

# Variable slope (La pendiente del segmento ST de ejercicio pico)
dat.df$slope[dat.df$slope==1]<- "Ascenso"
dat.df$slope[dat.df$slope==2]<- "Plano"
dat.df$slope[dat.df$slope==3]<- "Descenso"

# Variable thal (El estado del corazón según la prueba de Thallium)
dat.df$thal[dat.df$thal=="3.0"]<- "Normal"
dat.df$thal[dat.df$thal=="6.0"]<- "Defecto Fijo"
dat.df$thal[dat.df$thal=="7.0"]<- "Defecto Reversible"
dat.df$thal[dat.df$thal=="?"]<- "NA"

# Variable num (Presencia de enfermedad cardíaca (estado de enfermedad angiográfica)
dat.df$num[dat.df$num==0]<- "Saludable"
dat.df$num[dat.df$num==1]<- "Etapa 1"
dat.df$num[dat.df$num==2]<- "Etapa 2"
dat.df$num[dat.df$num==3]<- "Etapa 3"
dat.df$num[dat.df$num==4]<- "Etapa 4"


# Cambiando variables de character a factos y numeric a integer.

dat.df$sex <- as.factor(dat.df$sex)
dat.df$cp <- as.factor(dat.df$cp)
dat.df$fbs <- as.factor(dat.df$fbs)
dat.df$restecg <- as.factor(dat.df$restecg)
dat.df$exang <- as.factor(dat.df$exang)
dat.df$slope <- as.factor(dat.df$slope)
dat.df$thal <- as.factor(dat.df$thal)
dat.df$num <- as.factor(dat.df$num)

dat.df$age <- as.integer(dat.df$age)
dat.df$trestbps <- as.integer(dat.df$trestbps)
dat.df$chol <- as.integer(dat.df$chol)
dat.df$thalach <- as.integer(dat.df$thalach)
dat.df$ca <- as.integer(dat.df$ca)

str(dat.df)
## 'data.frame':    302 obs. of  14 variables:
##  $ age     : int  67 67 37 41 56 62 57 63 53 57 ...
##  $ sex     : Factor w/ 2 levels "Femenino","Masculino": 2 2 2 1 2 1 1 2 2 2 ...
##  $ cp      : Factor w/ 4 levels "Angina Atípica",..: 3 3 4 1 1 3 3 3 3 3 ...
##  $ trestbps: int  160 120 130 130 120 140 120 130 140 140 ...
##  $ chol    : int  286 229 250 204 236 268 354 254 203 192 ...
##  $ fbs     : Factor w/ 2 levels "azúcar en sangre en ayunas > 120 mg/dl",..: 2 2 2 2 2 2 2 2 1 2 ...
##  $ restecg : Factor w/ 3 levels "Muestra hipertrofía ventricular izquierda probable o definitiva según los criterios de Estes.",..: 1 1 2 1 2 1 2 1 1 2 ...
##  $ thalach : int  108 129 187 172 178 160 163 147 155 148 ...
##  $ exang   : Factor w/ 2 levels "No","Si": 2 2 1 1 1 1 2 1 2 1 ...
##  $ oldpeak : num  1.5 2.6 3.5 1.4 0.8 3.6 0.6 1.4 3.1 0.4 ...
##  $ slope   : Factor w/ 3 levels "Ascenso","Descenso",..: 3 3 2 1 1 2 1 3 2 3 ...
##  $ ca      : int  3 2 0 0 0 2 0 1 0 0 ...
##  $ thal    : Factor w/ 4 levels "Defecto Fijo",..: 4 2 4 4 4 4 4 2 2 1 ...
##  $ num     : Factor w/ 5 levels "Etapa 1","Etapa 2",..: 2 1 5 5 5 3 5 2 1 5 ...
glimpse(dat.df)
## Rows: 302
## Columns: 14
## $ age      <int> 67, 67, 37, 41, 56, 62, 57, 63, 53, 57, 56, 56, 44, 52, 57, 4…
## $ sex      <fct> Masculino, Masculino, Masculino, Femenino, Masculino, Femenin…
## $ cp       <fct> Asintomático, Asintomático, Dolor no Anginal, Angina Atípica,…
## $ trestbps <int> 160, 120, 130, 130, 120, 140, 120, 130, 140, 140, 140, 130, 1…
## $ chol     <int> 286, 229, 250, 204, 236, 268, 354, 254, 203, 192, 294, 256, 2…
## $ fbs      <fct> azúcar en sangre en ayunas ≤ 120 mg/dl, azúcar en sangre en a…
## $ restecg  <fct> Muestra hipertrofía ventricular izquierda probable o definiti…
## $ thalach  <int> 108, 129, 187, 172, 178, 160, 163, 147, 155, 148, 153, 142, 1…
## $ exang    <fct> Si, Si, No, No, No, No, Si, No, Si, No, No, Si, No, No, No, N…
## $ oldpeak  <dbl> 1.5, 2.6, 3.5, 1.4, 0.8, 3.6, 0.6, 1.4, 3.1, 0.4, 1.3, 0.6, 0…
## $ slope    <fct> Plano, Plano, Descenso, Ascenso, Ascenso, Descenso, Ascenso, …
## $ ca       <int> 3, 2, 0, 0, 0, 2, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ thal     <fct> Normal, Defecto Reversible, Normal, Normal, Normal, Normal, N…
## $ num      <fct> Etapa 2, Etapa 1, Saludable, Saludable, Saludable, Etapa 3, S…

Ejercicio 2.

Con este resumen de los datos, describe cada una de las variables en cuanto a su comportamiento y el sentido de estos valores.

Con respecto a los valores faltantes o no existentes, la función summary() también proporciona un resumen que incluye la cantidad de valores NA por columna. Además, lo podemos hacer de la siguiente manera:

apply(is.na(dat.df), 2, sum)
##      age      sex       cp trestbps     chol      fbs  restecg  thalach 
##        0        0        0        0        0        0        0        0 
##    exang  oldpeak    slope       ca     thal      num 
##        0        0        0        4        0        0
summary(dat.df)
##       age               sex                     cp         trestbps    
##  Min.   :29.00   Femenino : 97   Angina Atípica  : 50   Min.   : 94.0  
##  1st Qu.:48.00   Masculino:205   Angina Típica   : 22   1st Qu.:120.0  
##  Median :55.50                   Asintomático    :144   Median :130.0  
##  Mean   :54.41                   Dolor no Anginal: 86   Mean   :131.6  
##  3rd Qu.:61.00                                          3rd Qu.:140.0  
##  Max.   :77.00                                          Max.   :200.0  
##                                                                        
##       chol                                           fbs     
##  Min.   :126.0   azúcar en sangre en ayunas > 120 mg/dl: 44  
##  1st Qu.:211.0   azúcar en sangre en ayunas ≤ 120 mg/dl:258  
##  Median :241.5                                               
##  Mean   :246.7                                               
##  3rd Qu.:275.0                                               
##  Max.   :564.0                                               
##                                                              
##                                                                                                  restecg   
##  Muestra hipertrofía ventricular izquierda probable o definitiva según los criterios de Estes.       :147  
##  Normal                                                                                              :151  
##  Tener anormalidad de onda ST-T (inversiones de onda T y / o elevación o Depresión de ST de > 005 mV):  4  
##                                                                                                            
##                                                                                                            
##                                                                                                            
##                                                                                                            
##     thalach      exang       oldpeak           slope           ca        
##  Min.   : 71.0   No:203   Min.   :0.000   Ascenso :142   Min.   :0.0000  
##  1st Qu.:133.2   Si: 99   1st Qu.:0.000   Descenso: 20   1st Qu.:0.0000  
##  Median :153.0            Median :0.800   Plano   :140   Median :0.0000  
##  Mean   :149.6            Mean   :1.035                  Mean   :0.6745  
##  3rd Qu.:166.0            3rd Qu.:1.600                  3rd Qu.:1.0000  
##  Max.   :202.0            Max.   :6.200                  Max.   :3.0000  
##                                                          NA's   :4       
##                  thal            num     
##  Defecto Fijo      : 17   Etapa 1  : 55  
##  Defecto Reversible:117   Etapa 2  : 36  
##  NA                :  2   Etapa 3  : 35  
##  Normal            :166   Etapa 4  : 13  
##                           Saludable:163  
##                                          
## 

age: La edad de los pacientes se encuentran entre los 29 y los 77 años con media de 54 años y mediana de 55 años (una leve desviación hacia la derecha de los dato.)
sex: El sexo de los pacientes es de 97 participantes mujeres y 205 hombres.
cp: El tipo de dolor en el pecho de esta población es predominántemente no anginoso (n = 86)
trestbps: La presión arterial ¿sistólica? en reposo en mm Hg al ingreso al hospital de los pacientes estuvo entre 94 mmHg y 200 mmHg, con una media de 131 mmHg y mediana de 130 mmHg (Una leve desviación de los datos hacia la izquierda)
chol: El Colesterol sérico en mg/dl de los participantes se encontre entre 126 mg/dl y 256 mg/dl con una media de 246 mg/dl y mediana de 241 mg/dl (desviación de los datos hacia la izquierda)
fbs: El azúcar en sangre en ayunas > 120 mg/dl se encontró en 44 de de los pacientes.
restecg: Los resultados electrocardiográficos en reposo de los pacientes de acuerdo con los criterios de Estes, fueron normales en 151 de los pacientes y s encontró hipertrofia ventricular izquierda probable o definitiva en 147 de ellos.
thalach: La frecuencia cardiaca máxima alcanzada en los participantes estuvo entre 71 lpm y 202 lpm, con una media de 149 lpm y mediana de 153 lmp (con una desviación de los datos hacia la derecha)
exang: La Angina inducida por el ejercicio se presentó en 99 de los participantes
oldpeak: La depresión del ST inducida por el ejercicio en relación con el descanso estuvo entre 0 y 6.2 con media de 1 y mediana de 0.8
slope: La pendiente del segmento ST de ejercicio pico fue plana en 140 participantes en descenso en 20 y en ascenso en 142 de ellos
ca: Los participantes tuvieron entre 1 y 4 3 vasos principales coloreados por fluoroscopia, con una mediana de 1 vaso coloredo por fluoroscopia. Adicionalmente no se encontraron datos para 4 de los pacientes
thal: El estado del corazón según la prueba de Thallium, 166 pacientetuvieron un examen normal, 117 mostraron un defecto reversible, 17 un defecto fijo y no hubo información en 2 casos.
num: La mayoría de los participantes (n=163) no presentaron enfermedad cardíaca, los mayormente afectados (n=55) se encontraban en Etapa 1. En la Etapa 4 de la enfermedad sólo se encontraron a 13 pacientes.

Ejercicio 3.

Transforme la variable “num” en sus categóricas y describa como puede interpretar el siguiente gráfico.

dat.df$age_group <- cut(dat.df$age, breaks=seq(20, 80, by=5), include.lowest=TRUE)
ggplot(dat.df, aes(x=factor(age_group), fill=factor(num))) +
  geom_bar(color="black") +
  labs(title="Presencia de enfermedad cardiaca (Estado de Enfermedad Angiográfica)", x="Sexo", y="Número de Personas") +
  scale_fill_brewer(palette="Set1") +  # Aplicar una paleta de colores de RColorBrewer
  theme_bw()

#num : Presencia de enfermedad cardíaca (estado de enfermedad angiográfica)   
#  0: Saludable 
#  1: Diagnosticado como etapa 1
#  2: Diagnosticado como etapa 2
#  3: Diagnosticado como etapa 3
#  4: Diagnosticado como etapa 4

La gráfica anterior muestra barras agrupadas por rangos de edades, y en cada barra se representa el estado de la enfermedad angiográfica.

Allí podemos observar que la mayoría de la población es cardiacamente saludable (naranja), y aquella que no lo es se encuentra sobre todo en la Etapa 1 de la enfermedad, seguido de la Etapa 2. Podemos ver que la población más frecuente se encuentra entre los 55 y 60 años. Asi mismo vemos que las edades de la población no se encuentran tan normalmente distribuida, ya que si bien esta se encuentra, principalmente, entre los 50 y 65 años, hay un grupo importante que se encuentra entre los 40 y 45 años.

boxplot(dat.df$age, xlab = "Edades",col = "lightblue",bg = 'transparent',horizontal = T)

¿Qué interpretación le puede dar a la anterior gráfica con respecto a los datos?

El gráfico muestra que la edad mínima de los pacientes es de 27 años, mientras que la edad máxima es de 77 años. El promedio de edad es de 54 años, con una mediana de 56 años, lo que indica una ligera asimetría negativa en la distribución de la edad, ya que la mediana es mayor que la media. Esta asimetría se puede apreciar en el histograma, donde la línea roja marca la media y la línea negra la mediana. La desviación estándar de las edades es de 9.03 años, lo que sugiere una variación moderada respecto a la media. Además, se observa una mayor concentración de pacientes entre los 50 y 60 años. En el diagrama de cajas, se puede ver que el 25% de los pacientes tienen menos de 48 años, el 50% menos de 56 años, y el 75% menos de 61 años.

La siguiente gráfica permite evidenciar la dispersión de los datos en cuanto a la edad y la presión en reposo, junto con una asignación por colores de las categorías para la variable thal (el estado del corazón según la prueba de Thallium).

¿Tiene algún sentido el valor “NA” en la gráfica?

responda: No, ya que hace referencia a los missing values, de manera que no tiene sentido que aparezcan en el gráfico de dispersión. En este caso, lo que habría que hacer es convertir esos NAs en valores de moda para que puedan ingresar dentro del gráfico de dispersión y tenga relevancia.

# Suponiendo que las variables a graficar son thal, age y trestbps (presión sanguínea en reposo)
ggplot(dat.df, aes(x=age, y=trestbps, color=factor(thal))) +
  geom_point(size=3) +
  labs(title="Relación entre Edad, Presión en Reposo y Thal",
       x="Edad", y="Presión Sanguínea en Reposo", color="Thal") +
  theme_minimal()

Ejercicio 4.

Complete todo el análisis descriptivo de cada una de las variables junto con la interpretación de las gráficas correspondientes. Para esto, utilice diferentes gráficos y las medidas de variabilidad.

sexh <- ggplot(dat.df, aes(x=age)) +
  geom_histogram(color="black") +
  labs(title="Histogram", x="Edad", y="Número de Personas") +
  scale_fill_brewer(palette="Set1") +  # Aplicar una paleta de colores de RColorBrewer
  theme_bw()

sexd <- ggplot(dat.df, aes(x=age)) +
  geom_density(color="black") +
  labs(title="Density Plot", x="Sexo", y="Número de Personas") +
  scale_fill_brewer(palette="Set1") +  # Aplicar una paleta de colores de RColorBrewer
  theme_bw()

sexb <- ggplot(dat.df, aes(x=age)) +
  geom_boxplot(color="black") +
  labs(title="BoxPlot", x="Sexo", y="Número de Personas") +
  scale_fill_brewer(palette="Set1") +  # Aplicar una paleta de colores de RColorBrewer
  theme_bw()

gridExtra::grid.arrange(
  sexh,
  sexd,
  sexb,
  ncol=2, nrow=2,
  top = textGrob("Edad (Años)",
                 gp=gpar(fontsize=15,
                         font=1)))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

summary(dat.df$age)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   29.00   48.00   55.50   54.41   61.00   77.00

Como podemos ver, la variable edad en esta población tiene una distribución asimétrica con una desviación hacia la izquierda (negativa) donde la mediana es mayor que la media.

ggplot(dat.df, aes(x=sex)) +
  geom_bar(color="black") +
  labs(title="BarPlot: Sexo", x="Sexo", y="Número de Personas") +
  scale_fill_brewer(palette="Set1") +  # Aplicar una paleta de colores de RColorBrewer
  theme_bw()

summary(dat.df$sex)
##  Femenino Masculino 
##        97       205

Como podemos ver, en la variable sexo, es másculino es quien presenta una mayor proporción con respecto al femenino.

ggplot(dat.df, aes(x=cp)) +
  geom_bar(color="black") +
  labs(title="BarPlot: Tipo de dolor torácico", x="Tipo de dolor", y="Número de Personas") +
  scale_fill_brewer(palette="Set1") +  # Aplicar una paleta de colores de RColorBrewer
  theme_bw()

summary(dat.df$cp)
##   Angina Atípica    Angina Típica     Asintomático Dolor no Anginal 
##               50               22              144               86

Como podemos ver, la gran mayoría de pacientes es asintomático (n=144), seguido del dolor no anginoso (n=86)

tresh <- ggplot(dat.df, aes(x=trestbps)) +
  geom_histogram(color="black") +
  labs(title="Histogram", x="Presión Arterial Sistólica", y="Número de Personas") +
  scale_fill_brewer(palette="Set1") +  # Aplicar una paleta de colores de RColorBrewer
  theme_bw()

tresd <- ggplot(dat.df, aes(x=trestbps)) +
  geom_density(color="black") +
  labs(title="Density Plot", x="Presión Arterial Sistólica", y="Número de Personas") +
  scale_fill_brewer(palette="Set1") +  # Aplicar una paleta de colores de RColorBrewer
  theme_bw()

tresb <- ggplot(dat.df, aes(x=trestbps)) +
  geom_boxplot(color="black") +
  labs(title="BoxPlot", x="Presión Arterial Sistólica", y="Número de Personas") +
  scale_fill_brewer(palette="Set1") +  # Aplicar una paleta de colores de RColorBrewer
  theme_bw()

gridExtra::grid.arrange(
  tresh,
  tresd,
  tresb,
  ncol=2, nrow=2,
  top = textGrob("Presión Artreial Sistólica (mmHg)",
                 gp=gpar(fontsize=15,
                         font=1)))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

summary(dat.df$trestbps)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    94.0   120.0   130.0   131.6   140.0   200.0

Como podemos ver, la presión arterial en esta población se encuentra asimétrica con desviación hacia la derecha (positiva) donde la media es mayor que la mediana, y esto se debe a que como se ve en el boxplot hay presencia de outlieres hacia los valores más altos de presión arterial.

cholh <- ggplot(dat.df, aes(x=chol)) +
  geom_histogram(color="black") +
  labs(title="Histogram", x="Colesterol", y="Número de Personas") +
  scale_fill_brewer(palette="Set1") +  # Aplicar una paleta de colores de RColorBrewer
  theme_bw()

chold <- ggplot(dat.df, aes(x=chol)) +
  geom_density(color="black") +
  labs(title="Density Plot", x="Colesterol", y="Número de Personas") +
  scale_fill_brewer(palette="Set1") +  # Aplicar una paleta de colores de RColorBrewer
  theme_bw()

cholb <- ggplot(dat.df, aes(x=chol)) +
  geom_boxplot(color="black") +
  labs(title="BoxPlot", x="Colesterol (mg/dL)", y="Número de Personas") +
  scale_fill_brewer(palette="Set1") +  # Aplicar una paleta de colores de RColorBrewer
  theme_bw()

gridExtra::grid.arrange(
  cholh,
  chold,
  cholb,
  ncol=2, nrow=2,
  top = textGrob("Colesterol (mg/dl)",
                 gp=gpar(fontsize=15,
                         font=1)))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

summary(dat.df$chol)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   126.0   211.0   241.5   246.7   275.0   564.0

Como podemos ver, también las cifras de colesterol en estaesta población se encuentra asimétrica con desviación hacia la derecha (positiva) donde la media es mayor que la mediana, y esto se debe a que como se ve en el boxplot hay presencia de outlieres hacia los valores más altos de colesterol.

Ejercicio 5.

Redacte al menos 5 conclusiones. 1. Esta es una población en general libre de enfermedad cardiaca. 2. La población tiene en su mayoría distribuciones no normales. 3. La mayor parte de la población afectada está en los primeros estadios de la enfermedad cardiaca. 4. La población más anciana es quien más tiene enfermedad cardiaca avanzada. 5. Las gráficas permiten visualizar patrones de la distribución de las variables en la población de estudio, apoyados por los valores de las medidas de localización y variabilida.