Contexto

El conjunto de datos “Datos_practica” fue generado utilizando simulaciones de datos en el lenguaje de R Studio (ver código utilizado debajo), en ese sentido, estos datos solo deben ser usados con fines académicos, no pueden ser utilizados para hacer inferencias ni podrán ser extrapolados para otras poblaciones u otros contextos diferentes al objetivo de la sesión.

Este conjunto de datos fue generado con 100 registros y 17 variables, entre estas se incluyen tanto variables numéricas como categóricas, relevantes para un contexto biomédico. Estas variables son descritas a continuación:

  1. ID (Numérica)
  2. Edad (Numérica)
  3. Género (Categórica: 1=Masculino, 2=Femenino)
  4. Peso (Numérica)
  5. Altura (Numérica)
  6. IMC (Numérica)
  7. Fumador (Categórica: 1=Sí, 2=No)
  8. Presión Sistólica (Numérica)
  9. Presión Diastólica (Numérica)
  10. Colesterol (Numérica)
  11. Diabetes (Categórica: 1=Sí, 2=No)
  12. Actividad Física (Categórica: 1=Nunca, 2=Ocasionalmente, 3=Regularmente)
  13. Ingreso Mensual (Numérica)
  14. Nivel Educativo (Categórica: 1=Primaria, 2=Secundaria, 3=Universitaria)
  15. Satisfacción con la Salud (Categórica: 1=Muy Satisfecho, 2=Satisfecho, 3=Insatisfecho)
  16. Diagnóstico de la enfermedad por médico 1 (Categórica: Presente/Ausente)
  17. Diagnóstico de la enfermedad por médico 2 (Categórica: Presente/Ausente)


Instalación de las librerías requeridas


Solo si no han sido previamente instaladas, favor de instalar las siguientes librerías, las cuales serán necesarias para realizar este taller.


install.packages("dplyr")
install.packages("table1")
install.packages("ggplot2")

Cargando las librerías necesarias


# Cargar las librerías necesarias
library(dplyr)
library(table1)
library(ggplot2)

Simulando los datos


# Establecer la semilla para la reproducibilidad
set.seed(16)

# Definir número de registros
n <- 100

# Generando los vectores de datos
ID <- 1:n
Edad <- sample(20:69, n, replace = TRUE)
Género <- sample(c("Masculino", "Femenino"), n, replace = TRUE)
Peso <- round(runif(n, 50, 100), 1)
Altura <- round(runif(n, 1.5, 2.0), 2)
IMC <- round(runif(n, 18, 35), 1)
Fumador <- sample(c("Sí", "No"), n, replace = TRUE)
Presión_Sistólica <- sample(100:179, n, replace = TRUE)
Presión_Diastólica <- sample(60:119, n, replace = TRUE)
Colesterol <- round(runif(n, 150, 250), 1)
Diabetes <- sample(c("Sí", "No"), n, replace = TRUE)
Actividad_Física <- sample(c("Baja", "Moderada", "Alta"), n, replace = TRUE)
Ingreso_Mensual <- round(runif(n, 1000, 5000), 2)
Nivel_Educativo <- sample(c("Primaria", "Secundaria", "Universitaria"), n, replace = TRUE)
Satisfacción_con_la_Salud <- sample(c("Baja", "Media", "Alta"), n, replace = TRUE)
Medico_1 <- sample(c("Presente", "Ausente"), n, replace = TRUE)
Medico_2 <- sample(c("Presente", "Ausente"), n, replace = TRUE)


# Crear el data frame
datos <- data.frame(
 ID,
 Edad,
 Género,
 Peso,
 Altura,
 IMC,
 Fumador,
 Presión_Sistólica,
 Presión_Diastólica,
 Colesterol,
 Diabetes,
 Actividad_Física,
 Ingreso_Mensual,
 Nivel_Educativo,
 Satisfacción_con_la_Salud,
 Medico_1,
 Medico_2
 )

Categorizando las variables


# Recodificación de variables categóricas a factores
datos$Género <- factor(datos$Género, levels = c("Masculino", "Femenino"))

datos$Fumador <- factor(datos$Fumador, levels = c("Sí", "No"))

datos$Diabetes <- factor(datos$Diabetes, levels = c("Sí", "No"))

datos$Actividad_Física <- ordered(datos$Actividad_Física, levels = c("Baja", "Moderada", "Alta"))

datos$Nivel_Educativo <- ordered(datos$Nivel_Educativo, levels = c("Primaria", "Secundaria", "Universitaria"))

datos$Satisfacción_con_la_Salud <- ordered(datos$Satisfacción_con_la_Salud, levels = c("Baja", "Media", "Alta"))

datos$Medico_1 <- factor(datos$Medico_1, levels = c("Presente", "Ausente"))

datos$Medico_2 <- factor(datos$Medico_2, levels = c("Presente", "Ausente"))


Análisis exploratorio


Variables numéricas


# Estadísticas descriptivas para la variable edad
summary(datos$Edad)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   20.00   30.75   43.50   44.15   58.25   69.00
# Realizando un histograma para la variable edad
hist(datos$Edad)

# Histograma para la variable edad
boxplot(datos$Edad)


Variables categóricas

# Tabla para conocer el recuento de las variables categóricas
table(datos$Género)
## 
## Masculino  Femenino 
##        42        58
prop.table(table(datos$Género))
## 
## Masculino  Femenino 
##      0.42      0.58
# Gráfico para un análisis visual del recuento sobre las variables categóricas
plot(datos$Género)



Recodificando las variables


A continuación, haremos uso de la función cut de la librería base para recodificar la variable IMC en categorías basadas en los humbrales definidos del índice de masa corporal:

  1. Bajo peso: IMC < 18.5
  2. Peso normal: 18.5 <= IMC < 24.9
  3. Sobrepeso: 25 <= IMC < 29.9
  4. Obesidad: IMC >= 30

# Recodificación de la variable IMC en categorías
datos$IMC_Categoría <- cut(datos$IMC, 
                           breaks = c(-Inf, 18.5, 24.9, 29.9, Inf), 
                           labels = c("Bajo peso", "Peso normal", "Sobrepeso", "Obesidad"))

# Verificar la nueva variable
table(datos$IMC_Categoría)
## 
##   Bajo peso Peso normal   Sobrepeso    Obesidad 
##           3          41          29          27
prop.table(table(datos$IMC_Categoría))
## 
##   Bajo peso Peso normal   Sobrepeso    Obesidad 
##        0.03        0.41        0.29        0.27

Analisis descriptivo de los datos


Utilizando la función table1 de la librería que lleva su mismo nombre (table1), realizaremos un análisis descriptivo.


# Análisis descriptivo

table1(~ Edad + Género + Nivel_Educativo + Ingreso_Mensual + Peso + Altura + 
         IMC + IMC_Categoría + Fumador + Presión_Sistólica + Presión_Diastólica + 
         Colesterol + Diabetes + Actividad_Física + Satisfacción_con_la_Salud + 
         Medico_1 + Medico_2, 
       data = datos)
Overall
(N=100)
Edad
Mean (SD) 44.2 (15.1)
Median [Min, Max] 43.5 [20.0, 69.0]
Género
Masculino 42 (42.0%)
Femenino 58 (58.0%)
Nivel_Educativo
Primaria 30 (30.0%)
Secundaria 24 (24.0%)
Universitaria 46 (46.0%)
Ingreso_Mensual
Mean (SD) 3050 (1130)
Median [Min, Max] 3060 [1060, 4950]
Peso
Mean (SD) 73.4 (14.4)
Median [Min, Max] 71.2 [50.2, 99.3]
Altura
Mean (SD) 1.75 (0.148)
Median [Min, Max] 1.77 [1.51, 2.00]
IMC
Mean (SD) 26.2 (4.82)
Median [Min, Max] 26.0 [18.2, 34.8]
IMC_Categoría
Bajo peso 3 (3.0%)
Peso normal 41 (41.0%)
Sobrepeso 29 (29.0%)
Obesidad 27 (27.0%)
Fumador
47 (47.0%)
No 53 (53.0%)
Presión_Sistólica
Mean (SD) 140 (25.2)
Median [Min, Max] 137 [100, 179]
Presión_Diastólica
Mean (SD) 90.2 (17.6)
Median [Min, Max] 92.5 [61.0, 119]
Colesterol
Mean (SD) 199 (27.8)
Median [Min, Max] 198 [151, 250]
Diabetes
54 (54.0%)
No 46 (46.0%)
Actividad_Física
Baja 31 (31.0%)
Moderada 25 (25.0%)
Alta 44 (44.0%)
Satisfacción_con_la_Salud
Baja 37 (37.0%)
Media 32 (32.0%)
Alta 31 (31.0%)
Medico_1
Presente 56 (56.0%)
Ausente 44 (44.0%)
Medico_2
Presente 49 (49.0%)
Ausente 51 (51.0%)

Otra alternativa es obtener una tabla segmentada por sexo. A continuación se muestra como realizar esta segmentación:


# Análisis descriptivo

table1(~ Edad + Nivel_Educativo + Ingreso_Mensual + Peso + Altura + IMC + 
         IMC_Categoría + Fumador + Presión_Sistólica + Presión_Diastólica + 
         Colesterol + Diabetes + Actividad_Física + Satisfacción_con_la_Salud + 
         Medico_1 + Medico_2 | Género, 
       data = datos,
       render.continuous=c(.="Mean (SD)", .="Median [Q1, Q3]"))
Masculino
(N=42)
Femenino
(N=58)
Overall
(N=100)
Edad
Mean (SD) 45.3 (14.8) 43.3 (15.4) 44.2 (15.1)
Median [Q1, Q3] 47.0 [33.0, 58.5] 43.0 [29.3, 58.0] 43.5 [30.8, 58.3]
Nivel_Educativo
Primaria 12 (28.6%) 18 (31.0%) 30 (30.0%)
Secundaria 10 (23.8%) 14 (24.1%) 24 (24.0%)
Universitaria 20 (47.6%) 26 (44.8%) 46 (46.0%)
Ingreso_Mensual
Mean (SD) 2960 (1040) 3110 (1190) 3050 (1130)
Median [Q1, Q3] 3000 [2060, 3810] 3090 [2170, 3930] 3060 [2160, 3870]
Peso
Mean (SD) 69.4 (13.2) 76.4 (14.6) 73.4 (14.4)
Median [Q1, Q3] 67.1 [59.7, 78.6] 79.4 [63.9, 88.2] 71.2 [62.1, 85.8]
Altura
Mean (SD) 1.76 (0.132) 1.75 (0.160) 1.75 (0.148)
Median [Q1, Q3] 1.77 [1.65, 1.86] 1.76 [1.61, 1.89] 1.77 [1.64, 1.88]
IMC
Mean (SD) 26.3 (4.82) 26.1 (4.87) 26.2 (4.82)
Median [Q1, Q3] 25.3 [23.3, 30.6] 26.2 [21.7, 29.7] 26.0 [21.9, 30.2]
IMC_Categoría
Bajo peso 1 (2.4%) 2 (3.4%) 3 (3.0%)
Peso normal 19 (45.2%) 22 (37.9%) 41 (41.0%)
Sobrepeso 9 (21.4%) 20 (34.5%) 29 (29.0%)
Obesidad 13 (31.0%) 14 (24.1%) 27 (27.0%)
Fumador
24 (57.1%) 23 (39.7%) 47 (47.0%)
No 18 (42.9%) 35 (60.3%) 53 (53.0%)
Presión_Sistólica
Mean (SD) 141 (23.7) 140 (26.4) 140 (25.2)
Median [Q1, Q3] 135 [124, 164] 140 [115, 163] 137 [117, 163]
Presión_Diastólica
Mean (SD) 90.8 (16.2) 89.8 (18.6) 90.2 (17.6)
Median [Q1, Q3] 93.0 [81.0, 102] 91.0 [73.3, 106] 92.5 [74.0, 103]
Colesterol
Mean (SD) 196 (29.6) 201 (26.5) 199 (27.8)
Median [Q1, Q3] 196 [169, 221] 201 [178, 221] 198 [176, 221]
Diabetes
28 (66.7%) 26 (44.8%) 54 (54.0%)
No 14 (33.3%) 32 (55.2%) 46 (46.0%)
Actividad_Física
Baja 14 (33.3%) 17 (29.3%) 31 (31.0%)
Moderada 11 (26.2%) 14 (24.1%) 25 (25.0%)
Alta 17 (40.5%) 27 (46.6%) 44 (44.0%)
Satisfacción_con_la_Salud
Baja 17 (40.5%) 20 (34.5%) 37 (37.0%)
Media 10 (23.8%) 22 (37.9%) 32 (32.0%)
Alta 15 (35.7%) 16 (27.6%) 31 (31.0%)
Medico_1
Presente 21 (50.0%) 35 (60.3%) 56 (56.0%)
Ausente 21 (50.0%) 23 (39.7%) 44 (44.0%)
Medico_2
Presente 22 (52.4%) 27 (46.6%) 49 (49.0%)
Ausente 20 (47.6%) 31 (53.4%) 51 (51.0%)


Análisis de correlación


Ahora, suponemos que queremos saber si existe una correlación significativa entre el Índice de masa corporal y el nivel de colesterol de las personas en estos datos. Para esto tenemos que considerar ciertas condiciones para saber qué tipo de análisis utilizar y si es correcto llevarlo a cabo. Por favor responder a las siguientes preguntas:


1. ¿Cuál es la naturaleza de los datos?, es decir, ¿Qué tipo de variables son?

str(datos$IMC)
##  num [1:100] 30.9 29.3 18.6 21.7 25 32.4 30.1 31.5 30.5 28.3 ...
str(datos$Colesterol)
##  num [1:100] 218 179 151 174 169 ...

2. Con base a su respuesta anterior, ¿Qué prueba estadística considera es la adecuada realizar en este escenario?


R. ¿?

3. ¿Cuál es la hipótesis a plantear en este escenario?


R. ¿?

4. ¿Son requeridos algunos supuestos para realizar esta prueba?


R. ¿?

# Prueba de normalidad de Shapiro-Wilk
shapiro.test(datos$IMC)
## 
##  Shapiro-Wilk normality test
## 
## data:  datos$IMC
## W = 0.9525, p-value = 0.001216
shapiro.test(datos$Colesterol)
## 
##  Shapiro-Wilk normality test
## 
## data:  datos$Colesterol
## W = 0.96168, p-value = 0.005307

5. ¿Se cumplen los supuestos requeridos en estas variables? en caso negativo, ¿Qué alternativa tenemos en este escenario?


R. ¿?

Luego de responder y discutir cada una de estas preguntas, realizaremos un análisis visual de la posible correlación en los datos:


# Crear gráfico de dispersión usando la librería 'base'
plot(x = datos$IMC, y = datos$Colesterol)

# Crear gráfico de dispersión usando la librería 'ggplot2'
ggplot(datos, aes(x = IMC, y = Colesterol)) +
  geom_point() +
  geom_smooth(method = "lm", col = "blue") +
  labs(title = "Relación entre IMC y Nivel de Colesterol",
       x = "Índice de Masa Corporal (IMC)",
       y = "Nivel de Colesterol") +
  theme_classic()


5.¿Cuál es su opinión después de realizar el análisis visual?



cor.test(x = datos$IMC, y = datos$Colesterol, method = "spearman")
## 
##  Spearman's rank correlation rho
## 
## data:  datos$IMC and datos$Colesterol
## S = 154859, p-value = 0.4842
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##        rho 
## 0.07075257

6. ¿Cuál es la conclusión que ha llegado luego de realizar el test?



Análisis de asociación

Ahora, queremos evaluar si existe una asociación significativa entre el género de las personas y la presencia de diabetes. Para esto tenemos que considerar ciertas condiciones para saber qué tipo de análisis utilizar y si es correcto llevarlo a cabo. Favor responder a las siguientes preguntas:


1. ¿Cuál es la naturaleza de los datos?, es decir, ¿Qué tipo de variables son?

str(datos$Género)
##  Factor w/ 2 levels "Masculino","Femenino": 1 2 1 2 1 1 2 2 1 2 ...
str(datos$Diabetes)
##  Factor w/ 2 levels "Sí","No": 1 2 1 2 1 1 2 2 1 1 ...

2. Con base a su respuesta anterior, ¿Qué prueba estadística considera es la adecuada realizar en este escenario?


R. ¿?

3. ¿Cuál es la hipótesis a plantear en este escenario?


R. ¿?

4. ¿Son requeridos algunos supuestos para realizar esta prueba?


R. ¿?

Luego de responder y discutir cada una de estas preguntas, realizaremos una tabla de de contingencia o 2x2 entre las variables para conocer como es el recuento de los casos en cada categoría:


# Creando la tabla Utilizando la librería 'base'
table(datos$Género, datos$Diabetes)
##            
##             Sí No
##   Masculino 28 14
##   Femenino  26 32
# Creando la tabla Utilizando la librería 'table1'
table1(~ Género  | Diabetes, data = datos)

(N=54)
No
(N=46)
Overall
(N=100)
Género
Masculino 28 (51.9%) 14 (30.4%) 42 (42.0%)
Femenino 26 (48.1%) 32 (69.6%) 58 (58.0%)

5. ¿Cual es su opiión al análizar la tabla?¿Considera que hay correlación entre las variables?

chisq.test(datos$Género, datos$Diabetes)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  datos$Género and datos$Diabetes
## X-squared = 3.8394, df = 1, p-value = 0.05006


Preguntas y Discusión


Antes de concluir, tomemos unos minutos para responder cualquier pregunta que puedan tener y discutir cualquier duda o comentario sobre los temas tratados hoy.


Próximos Pasos


Aplicación de lo Aprendido


Es importante que puedan aplicar estos conceptos y técnicas en sus propios proyectos y estudios. Les animo a:

  • Aplicar el análisis descriptivo y exploratorio como primer paso en cualquier análisis de datos.
  • Considerar los supuestos necesarios antes de realizar cualquier prueba estadística y elegir la prueba adecuada en función de la naturaleza de sus datos.
  • Utilizar visualizaciones para comprender mejor las relaciones entre variables y para comunicar sus hallazgos de manera efectiva.
  • Utilizar las técnicas de simulación de datos para generar datasets personalizados para practicar.


¡Gracias a por su participación y entusiasmo!

Nos vemos en la próxima sesión.