mail:

Universidad de la Salle

MAESTRÍA EN INTELIGENCIA ARTIFICIAL

Ciencias de datos 2025-1

A cerca del dataset

El presente conjunto de datos, titulado Smokers Health Data, constituye una fuente valiosa para el análisis de los efectos del hábito de fumar sobre diversas variables fisiológicas y condiciones de salud en individuos adultos. Esta base de datos fue recolectada con el propósito de facilitar estudios exploratorios, descriptivos e inferenciales que contribuyan a comprender mejor la relación entre el tabaquismo y múltiples indicadores biomédicos.

La estructura del conjunto de datos contempla una variedad de variables quepermiten examinar diferencias entre personas fumadoras y no fumadoras. Entre estas variables se incluyen medidas cuantitativas como la frecuencia cardíaca, el nivel de oxígeno en sangre (SpO2), la presión arterial sistólica y diastólica, la temperatura corporal y la capacidad pulmonar. Además, se registran indicadores clínicos como el índice de masa corporal (IMC), el nivel de colesterol, el nivel de glucosa, y el valor de hemoglobina. De igual forma, se consideran aspectos diagnósticos como la presencia de enfermedades respiratorias o cardiovasculares.

El conjunto de datos Smokers Health Data contiene una amplia gama de variables tanto cuantitativas como cualitativas que permiten analizar los efectos del tabaquismo en la salud. Entre las variables cuantitativas se encuentran la edad, frecuencia cardíaca (heart_rate), nivel de SpO2 (oxígeno en sangre), temperatura corporal, colesterol, nivel de glucosa, IMC (índice de masa corporal), nivel de hemoglobina, y parámetros respiratorios como el flujo respiratorio (respiratory_rate) y capacidad pulmonar (lung_capacity). A su vez, se incluyen variables cualitativas como el sexo del paciente, el estado de fumador actual (current_smoker), la presión arterial categorizada en texto, y la presencia de enfermedades respiratorias y enfermedades cardíacas como variables binarias. Estas variables permiten realizar comparaciones entre individuos fumadores y no fumadores, identificar patrones clínicos asociados al tabaquismo, y desarrollar modelos predictivos para evaluar riesgos en la salud basados en hábitos y signos vitales. La diversidad de las variables recogidas facilita un enfoque integral para el estudio del impacto del tabaco desde perspectivas médicas, preventivas y de análisis de datos.

Objetivo del documento

El análisis que se presenta a continuación tiene como finalidad aplicar distintas pruebas de hipótesis utilizando el lenguaje de programación R en el entorno RStudio, tomando como base el conjunto de datos Smokers Health Data. Esta base contiene información clínica y fisiológica de personas fumadoras y no fumadoras, lo que permite comparar medias y proporciones asociadas a variables de salud como la frecuencia cardíaca y el nivel de colesterol. A través de estas pruebas se busca determinar, con fundamento estadístico, si existen diferencias significativas entre los grupos, apoyando así la toma de decisiones en contextos médicos y de salud pública.

Paquetes a Usar

ggplot2

📊 Visualización de datos

  • Sistema de gráficos basado en la “Gramática de Gráficos”
  • Permite crear visualizaciones elegantes y personalizables
  • Sintaxis consistente con capas (+) para construir gráficos complejos
dplyr

🔧 Manipulación de datos

  • Herramientas para transformar y manipular data frames
  • Funciones principales: filter(), select(), mutate(), summarise(), arrange()
  • Sintaxis intuitiva con el operador pipe (%>%)
tidyr

📋 Reestructuración de datos

  • Convierte datos entre formatos “wide” y “long”
  • Funciones clave: pivot_longer(), pivot_wider(), separate(), unite()
  • Ayuda a crear datos “tidy” (ordenados) para análisis
gridExtra

🖼️ Composición de gráficos

  • Permite combinar múltiples gráficos en una sola imagen
  • Función principal: grid.arrange()
  • Útil para crear paneles de gráficos y comparaciones visuales
BSDA

📈 Análisis estadístico básico

  • Basic Statistics and Data Analysis
  • Contiene funciones para pruebas estadísticas fundamentales
  • Incluye pruebas t, pruebas de normalidad, intervalos de confianza
  • Ideal para estadística descriptiva e inferencial básica
library(ggplot2)  # Para gráficos
library(dplyr)    # Para manipular datos
library(tidyr)    # Para reestructurar datos
library(gridExtra) # Para combinar gráficos
library(BSDA)     # Para análisis estadístico

Importar los datos

A continuación se usaran el comando para cargar los datos

data <- read.csv("smoking_health_data_final.csv")

Explorar los datos

Conocer la dimensión de los datos con la carga inicial.

dim(data)  # Dimensiones del dataset (filas y columnas)
## [1] 3900    7

Ver las estadisticas de los datos

summary(data)  # Resumen estadístico de todas las columnas
##       age            sex            current_smoker       heart_rate    
##  Min.   :32.00   Length:3900        Length:3900        Min.   : 44.00  
##  1st Qu.:42.00   Class :character   Class :character   1st Qu.: 68.00  
##  Median :49.00   Mode  :character   Mode  :character   Median : 75.00  
##  Mean   :49.54                                         Mean   : 75.69  
##  3rd Qu.:56.00                                         3rd Qu.: 82.00  
##  Max.   :70.00                                         Max.   :143.00  
##                                                                        
##  blood_pressure      cigs_per_day         chol      
##  Length:3900        Min.   : 0.000   Min.   :113.0  
##  Class :character   1st Qu.: 0.000   1st Qu.:206.0  
##  Mode  :character   Median : 0.000   Median :234.0  
##                     Mean   : 9.169   Mean   :236.6  
##                     3rd Qu.:20.000   3rd Qu.:263.0  
##                     Max.   :70.000   Max.   :696.0  
##                     NA's   :14       NA's   :7

head() Nos permite ver las primeras filas de la base de datos. Incluso podemos seleccionar la cantidad de filas que queremos ver por ejemplo head(base, n=20), lo cual nos muestra las primeras 20 filas. También podemos ver que nos muestra el tipo de variable.

head(data)  # Mostrar los primeros 10 registros
##   age  sex current_smoker heart_rate blood_pressure cigs_per_day chol
## 1  54 male            yes         95         110/72           NA  219
## 2  45 male            yes         64         121/72           NA  248
## 3  58 male            yes         81       127.5/76           NA  235
## 4  42 male            yes         90       122.5/80           NA  225
## 5  42 male            yes         62         119/80           NA  226
## 6  57 male            yes         62     107.5/72.5           NA  223

Para continuar con el correcto manejo de los valores del Dataframe, aplicamos la instrucción as.data.frame(unclass(…)).

La función as.data.frame(unclass(…)) en R se utiliza para convertir un objeto a un data frame, eliminando la información de clase del objeto antes de la conversión. Esto es útil cuando quieres tratar un objeto como un simple data frame, sin importar su clase original.

data = as.data.frame(unclass(data), 
                     stringsAsFactors = TRUE) # Aplicar el unclass para obtener mejor perspectiva de los datos

Una vez aplicada la conversión podemos ver que los valores categoricos se agrupan.

summary(data)  # Resumen estadístico de todas las columnas
##       age            sex       current_smoker   heart_rate     blood_pressure
##  Min.   :32.00   female:2081   no :1968       Min.   : 44.00   130/80 :  18  
##  1st Qu.:42.00   male  :1819   yes:1932       1st Qu.: 68.00   120/80 :  17  
##  Median :49.00                                Median : 75.00   110/70 :  15  
##  Mean   :49.54                                Mean   : 75.69   125/80 :  15  
##  3rd Qu.:56.00                                3rd Qu.: 82.00   105/70 :   9  
##  Max.   :70.00                                Max.   :143.00   107/73 :   9  
##                                                                (Other):3817  
##   cigs_per_day         chol      
##  Min.   : 0.000   Min.   :113.0  
##  1st Qu.: 0.000   1st Qu.:206.0  
##  Median : 0.000   Median :234.0  
##  Mean   : 9.169   Mean   :236.6  
##  3rd Qu.:20.000   3rd Qu.:263.0  
##  Max.   :70.000   Max.   :696.0  
##  NA's   :14       NA's   :7

Limpieza de los datos

A continuación ejecutaremos las instrucciones que nos permitiran limpiar el dataset

Eliminar los duplicados

data <- data %>% distinct()

Comprobar las columas vacias

colSums(is.na(data)) # Verificar la cantidad de nulos en las columnas
##            age            sex current_smoker     heart_rate blood_pressure 
##              0              0              0              0              0 
##   cigs_per_day           chol 
##             14              7

Se puede ver que las columnas cigs_per_day (14 registros) y chol (7 registros) contienen valores vacios. Para evitar esto y no borrar los registros se va a ejecutar los siguientes procesos:

  • Para el campo cigs_per_day, calcular la media de cigs_per_day para los fumadores (current_smoker == “yes”), ignorando valores NA
mean_cigs_smokers <- mean(data$cigs_per_day[data$current_smoker == "yes"], na.rm = TRUE)
  • Creamos una condición para asignar la media solo a los nulos que tengan marcado como yes, y los que estan marcados como no, se asigna un 0
# Asignar valores en cigs_per_day según las condiciones
data$cigs_per_day <- ifelse(
  is.na(data$cigs_per_day) & data$current_smoker == "yes", 
  mean_cigs_smokers, # Asignar la media para fumadores
  ifelse(
    is.na(data$cigs_per_day) & data$current_smoker == "no",
    0, # Asignar 0 para no fumadores
    data$cigs_per_day # Mantener el valor original si no es NA
  )
)
  • Calcular la media de chol, ignorando valores NA
mean_chol <- mean(data$chol, na.rm = TRUE)
# Asignar la media a los valores nulos en chol
data$chol[is.na(data$chol)] <- mean_chol

Comprobamos de nuevo las columas vacias

colSums(is.na(data)) # Verificar la cantidad de nulos en las columnas
##            age            sex current_smoker     heart_rate blood_pressure 
##              0              0              0              0              0 
##   cigs_per_day           chol 
##              0              0

Es posibe ver que ya todas las columnas estan con 0 en su valor.

Feature Engineer

La ingeniería de características (feature engineering) es el proceso de transformar datos crudos en características relevantes que pueden usarse en modelos de aprendizaje automático para mejorar la precisión y el rendimiento de las predicciones. Esencialmente, implica extraer, crear y transformar variables de los datos sin procesar para que sean más útiles para el modelo.

Separar la columna blood_pressure en pres_sistolica y pres_diastolica

Para este proceso, vamos a crear 2 nuevas columnas que nos permitan ver por separados los valores de la presion arterial. Sistlica y Diastolica.

data <- data %>%
  separate(blood_pressure, into = c("pres_sistolica", "pres_diastolica"), sep = "/") %>%
  mutate(pres_sistolica = as.numeric(pres_sistolica),
         pres_diastolica = as.numeric(pres_diastolica))
  • La función separate() de la librería tidyr en R se utiliza para dividir una columna en varias columnas, basándose en un delimitador especificado.

  • La función mutate del paquete dplyr se utiliza para crear nuevas columnas o modificar columnas existentes en un data frame, manteniendo la estructura original. Permite aplicar funciones u operaciones a los datos de un data frame y almacenar los resultados como nuevas variables.

Crear la nueva columna rango_edad basada en los rangos de edad

Se crea una columna de rango de edad para almacenar el rango al que pertenece el registro. Esta columna nos permitira realizar una agrupación rápida de los registros

data$rango_edad <- cut(
  data$age,
  breaks = seq(20, 80, by = 10), # Crear los intervalos de 10 en 10 desde 20 hasta 80
  include.lowest = TRUE,         # Incluir el límite inferior en el primer intervalo
  right = FALSE,                 # Intervalos cerrados por la izquierda, abiertos por la derecha
  labels = c("20-29", "30-39", "40-49", "50-59", "60-69", "70-79") # Etiquetas para los rangos
)

Valoración final.

Como parte final, volvemos a ejecutar as.data.frame(unclass(…)) para el correcto tipo de manejo de datos.

data = as.data.frame(unclass(data), 
                     stringsAsFactors = TRUE) # Aplicar el unclass para obtener mejor perspectiva de los datos

Imprimimos la información con las nuevas columnas

Ver los 10 registros

head(data)
##   age  sex current_smoker heart_rate pres_sistolica pres_diastolica
## 1  54 male            yes         95          110.0            72.0
## 2  45 male            yes         64          121.0            72.0
## 3  58 male            yes         81          127.5            76.0
## 4  42 male            yes         90          122.5            80.0
## 5  42 male            yes         62          119.0            80.0
## 6  57 male            yes         62          107.5            72.5
##   cigs_per_day chol rango_edad
## 1     18.57612  219      50-59
## 2     18.57612  248      40-49
## 3     18.57612  235      50-59
## 4     18.57612  225      40-49
## 5     18.57612  226      40-49
## 6     18.57612  223      50-59

Summary

summary(data)
##       age            sex       current_smoker   heart_rate     pres_sistolica 
##  Min.   :32.00   female:2081   no :1968       Min.   : 44.00   Min.   : 83.5  
##  1st Qu.:42.00   male  :1819   yes:1932       1st Qu.: 68.00   1st Qu.:117.0  
##  Median :49.00                                Median : 75.00   Median :128.0  
##  Mean   :49.54                                Mean   : 75.69   Mean   :132.4  
##  3rd Qu.:56.00                                3rd Qu.: 82.00   3rd Qu.:144.0  
##  Max.   :70.00                                Max.   :143.00   Max.   :295.0  
##  pres_diastolica   cigs_per_day         chol       rango_edad  
##  Min.   : 48.00   Min.   : 0.000   Min.   :113.0   20-29:   0  
##  1st Qu.: 75.00   1st Qu.: 0.000   1st Qu.:206.0   30-39: 516  
##  Median : 82.00   Median : 0.000   Median :234.0   40-49:1531  
##  Mean   : 82.99   Mean   : 9.202   Mean   :236.6   50-59:1218  
##  3rd Qu.: 90.00   3rd Qu.:20.000   3rd Qu.:263.0   60-69: 634  
##  Max.   :142.50   Max.   :70.000   Max.   :696.0   70-79:   1

Exploratory Data Analysis (Visualización)

El Análisis Exploratorio de Datos (EDA) es un proceso que ayuda a comprender la estructura de un conjunto de datos, identificar patrones, relaciones y outliers. Se basa en técnicas estadísticas y visualización para examinar datos sin hacer suposiciones previas y antes de realizar análisis más avanzados. En esencia, es una forma de explorar y resumir la información de los datos para obtener una visión general y detallada.

Creación de función para las graficas

A continuación se crea una función que permite graficar cada variable - Para variables numéricas: histogramas y boxplots. - Para variables categóricas: gráficos de torta.

variables <- names(data)

for (var in variables) {
  if (is.numeric(data[[var]])) {
    # Histograma
    hist_plot <- ggplot(data, aes_string(x = var)) +
      geom_histogram(fill = "blue", color = "black", bins = 30, alpha = 0.7) +
      ggtitle(paste("Histograma de", var)) +
      theme_minimal()
    
    # Boxplot
    box_plot <- ggplot(data, aes_string(y = var)) +
      geom_boxplot(fill = "orange", color = "black", alpha = 0.7) +
      ggtitle(paste("Boxplot de", var)) +
      theme_minimal()
    
    # Mostrar los gráficos
    grid.arrange(hist_plot, box_plot, ncol = 2)
  } else if (is.character(data[[var]]) || is.factor(data[[var]])) {
    # Gráfico de torta (pie chart)
    pie_data <- data %>%
      group_by_at(var) %>%
      summarise(count = n()) %>%
      mutate(prop = count / sum(count) * 100)
    
    pie_plot <- ggplot(pie_data, aes(x = "", y = prop, fill = !!sym(var))) +
      geom_bar(stat = "identity", width = 1) +
      coord_polar("y", start = 0) +
      ggtitle(paste("Gráfico de torta de", var)) +
      theme_minimal()
    
    print(pie_plot)
  }
}

Interpretación de las Graficas

Campo Age

1. Histograma

El histograma ilustra la distribución de frecuencias de la variable “age”. En el eje horizontal (x) se encuentran los valores de edad, mientras que en el eje vertical (y) se representa la > > cantidad de observaciones (frecuencia) en cada rango de edad.

Observaciones clave: - La mayor concentración de edades está entre 40 y 60 años, con picos en los intervalos cercanos a los 45-50 años.

  • Hay menos personas con edades menores de 40 años o mayores de 65 años.

  • La distribución es asimétrica leve hacia la derecha, ya que hay más valores concentrados en el rango medio y un descenso gradual en los valores más altos.

2. Plot

El boxplot (diagrama de caja) resume gráficamente la distribución de la variable “age” mediante cinco estadísticas clave: mínimo, primer cuartil (Q1), mediana, tercer cuartil (Q3) y máximo.

Observaciones clave:

  • Mediana: La línea negra dentro de la caja indica que la mediana está aproximadamente en los 50 años.

  • Rango intercuartílico (IQR): La caja representa el rango intercuartílico, que abarca desde el primer cuartil (Q1) hasta el tercer cuartil (Q3). Esto indica que el 50% de los datos están entre 45 y 55 años (aproximadamente).

  • Extremos (bigotes): Los bigotes muestran los valores mínimos y máximos, sin observaciones atípicas visibles. No se observan valores atípicos (outliers), ya que no hay puntos fuera de los bigotes.


Campo sex

1. Pie

Este gráfico representa la distribución de la variable “sex” (sexo) en forma de proporciones. A continuación, se detalla la interpretación:

Observaciones clave

  • Distribución equilibrada: Los segmentos de “female” y “male” son aproximadamente iguales, lo que indica que las proporciones de hombres y mujeres en el conjunto de datos son similares. Cada categoría parece representar cerca del 50% del total.

  • Proporciones exactas: Aunque el gráfico no incluye números específicos, visualmente, ambos segmentos abarcan una proporción cercana al 50%. Esto sugiere una distribución equitativa entre hombres y mujeres.

  • Esto puede ser relevante para análisis posteriores, ya que implica que no hay un sesgo importante en la representación de géneros en el conjunto de datos.


Campo current_smoker

1. Pie

Este gráfico representa la distribución de la variable “current_smoker” (fumador actual) en forma de proporciones. > A continuación, se detalla la interpretación:

Observaciones clave

  • El gráfico muestra que las dos categorías son prácticamente iguales en tamaño, lo que indica una distribución equilibrada entre fumadores actuales y no fumadores actuales.

  • Distribución equilibrada: Visualmente, ambas categorías abarcan aproximadamente el 50% del círculo, lo que sugiere que la cantidad de fumadores actuales y no fumadores actuales es similar en el conjunto de datos.

  • No hay un predominio significativo de una categoría sobre la otra en este conjunto de datos.


Campo heart_rate

Estas gráficas muestran la distribución y las características estadísticas de la variable “heart_rate” (frecuencia cardíaca). A continuación, se analiza cada gráfico:

1. Histograma

  • El histograma muestra la frecuencia de los valores de la variable “heart_rate”.
  • El eje horizontal representa los valores de la frecuencia cardíaca, mientras que el eje vertical indica la cantidad de observaciones en cada intervalo.
  • La mayoría de las frecuencias cardíacas están entre 60 y 90 latidos por minuto, con una mediana cercana a 75.

Observaciones:

  • La mayoría de las observaciones se concentran entre 60 y 90 latidos por minuto.
  • La distribución parece tener una forma asimétrica hacia la derecha (leve sesgo positivo), con algunos valores más altos que llegan hasta aproximadamente 120-150.
  • Los valores más comunes están cerca de los 75 latidos por minuto, lo que podría representar el promedio o la mediana.

2. Boxplot

  • El boxplot ilustra la dispersión, los valores atípicos y la distribución de los datos.
  • Existen algunos valores atípicos hacia el extremo superior (más de 120 latidos por minuto), lo que podría indicar casos particulares, como estrés, ejercicio físico o condiciones médicas.
  • La caja (de color amarillo) representa el rango intercuartil (IQR), que abarca del 25% al 75% de los datos.
  • La línea dentro de la caja representa la mediana.
  • Los puntos fuera de las “líneas de los bigotes” son valores atípicos.

Observaciones:

  • La mediana parece estar alrededor de los 75 latidos por minuto, lo que coincide con la concentración observada en el histograma.
  • Hay valores atípicos superiores que superan los 120 latidos por minuto, indicando la presencia de personas con frecuencias cardíacas más elevadas.
  • No se observan valores atípicos significativos en la parte inferior, ya que los valores más bajos están cerca de 50 latidos por minuto.

Campo cigs_per_day

La imagen presenta dos gráficos que analizan la variable cigs_per_day, que representa el número de cigarrillos consumidos por día. A continuación, se explican cada uno de los gráficos:

1. Histograma

  • El histograma muestra la distribución de la cantidad de cigarrillos consumidos por día en la población estudiada.
  • El eje horizontal representa los valores de cigarrillos consumidos por día, y el eje vertical indica la cantidad de observaciones.
  • La mayoría de las personas no consumen cigarrillos (valor 0), lo que se refleja en la mediana y el pico del histograma.
  • Entre los fumadores, el consumo típico está entre 10 y 20 cigarrillos por día.

Observaciones

  • La mayoría de las personas no consumen cigarrillos (valor 0), lo que se refleja en el pico más alto del histograma.
  • Hay un grupo considerable de personas que consumen entre 10 y 20 cigarrillos por día, con una frecuencia menor en valores superiores.
  • Algunos individuos consumen más de 60 cigarrillos por día, lo que podría indicar casos extremos o atípicos.

2. Boxplot

  • El boxplot muestra la dispersión, los valores atípicos y la distribución de los datos de cigarrillos consumidos por día.
  • La caja (de color amarillo) representa el rango intercuartil (IQR), que abarca del 25% al 75% de los datos, con una línea que indica la mediana.
  • Existen valores atípicos de consumo excesivo de cigarrillos (más de 60 cigarrillos por día), que podrían representar un riesgo significativo para la salud.

Observaciones

  • La mediana está cerca de 0 cigarrillos por día, lo que confirma que la mayoría de las personas no fuman.
  • El rango intercuartil muestra que el consumo típico de cigarrillos entre los fumadores está entre 0 y 20 cigarrillos por día.
  • Existen valores atípicos superiores, donde algunos individuos consumen más de 60 cigarrillos por día, lo que podría ser preocupante desde el punto de vista de la salud.
  • La distribución muestra que una gran parte de la población no fuma, pero los valores extremos de consumo podrían ser indicativos de dependencia severa al tabaco y requieren atención médica.

Campo chol

La imagen presenta dos gráficos que analizan la variable chol, que representa los niveles de colesterol en la población estudiada. A continuación, se describen y analizan cada uno de los gráficos:

1. Histograma

  • El histograma muestra la distribución de los niveles de colesterol en la población.
  • El eje horizontal representa los valores de colesterol (en mg/dL), y el eje vertical indica la cantidad de observaciones.
  • La mayoría de los individuos tienen niveles de colesterol alrededor de 200 mg/dL, lo que es típico para muchas poblaciones.

Observaciones

  • La distribución es aproximadamente normal, con un pico alrededor de 200 mg/dL.
  • La mayoría de los valores de colesterol se encuentran entre 150 y 250 mg/dL.
  • Existen algunos valores más altos, que superan los 400 mg/dL, indicando posibles casos extremos o atípicos.

2. Boxplot

  • El boxplot muestra la dispersión, los valores atípicos y la distribución de los datos de colesterol.
  • La caja (de color amarilla) representa el rango intercuartil (IQR), que abarca del 25% al 75% de los datos, con una línea que indica la mediana.
  • Existen valores atípicos de colesterol elevados (más de 400 mg/dL), que podrían indicar hiperlipidemia o riesgo cardiovascular elevado.

Observaciones

  • La mediana está cerca de 200 mg/dL, lo que coincide con el pico del histograma.
  • El rango intercuartil muestra que los niveles típicos de colesterol están entre 180 y 220 mg/dL.
  • Existen varios valores atípicos superiores, donde algunos individuos tienen niveles de colesterol superiores a 400 mg/dL, lo que podría ser preocupante desde el punto de vista de la salud.
  • Los niveles de colesterol alrededor de 200 mg/dL son comunes, pero los valores extremos requieren atención médica para prevenir complicaciones de salud.

Campo pres_sistolica y pres_diastolica

Para graficar esos campos, se crea una función que las pueda agrupar.

# Histograma para pres_sistolica
hist_pres_sistolica <- ggplot(data, aes(x = pres_sistolica)) +
  geom_histogram(fill = "skyblue", color = "black", bins = 30, alpha = 0.7) +
  ggtitle("Histograma de Presión Sistólica") +
  theme_minimal()

# Histograma para pres_diastolica
hist_pres_diastolica <- ggplot(data, aes(x = pres_diastolica)) +
  geom_histogram(fill = "lightgreen", color = "black", bins = 30, alpha = 0.7) +
  ggtitle("Histograma de Presión Diastólica") +
  theme_minimal()

# Boxplot para comparar pres_sistolica y pres_diastolica
boxplot_pres <- ggplot(data) +
  geom_boxplot(aes(y = pres_sistolica, x = "Presión Sistólica", fill = "Presión Sistólica"), alpha = 0.7) +
  geom_boxplot(aes(y = pres_diastolica, x = "Presión Diastólica", fill = "Presión Diastólica"), alpha = 0.7) +
  ggtitle("Boxplot de Presión Sistólica y Diastólica") +
  theme_minimal() +
  scale_fill_manual(values = c("Presión Sistólica" = "blue", "Presión Diastólica" = "green"))

Esta imagen presenta tres gráficos que muestran la distribución y características estadísticas de las variables presión sistólica y presión diastólica. A continuación, se analizan cada uno de los gráficos:

1. Histograma de Presión Sistólica

  • Este histograma muestra la distribución de la presión sistólica en la población estudiada.
  • El eje horizontal representa los valores de la presión sistólica (en mmHg), y el eje vertical indica la cantidad de observaciones.

Observaciones

  • La mayoría de los valores de presión sistólica se encuentran entre 120 y 150 mmHg.
  • La distribución tiene un sesgo positivo (asimetría hacia la derecha), con algunos valores más altos que superan los 200 mmHg.
  • Existen pocos casos con presión sistólica superior a 250 mmHg, lo que podría representar valores extremos o atípicos.

2. Histograma de Presión Diastólica

  • Este histograma muestra la distribución de la presión diastólica en la población estudiada.
  • El eje horizontal representa los valores de la presión diastólica (en mmHg), y el eje vertical indica la cantidad de observaciones.

Observaciones

  • La mayoría de los valores de presión diastólica están entre 70 y 90 mmHg.
  • La distribución es aproximadamente simétrica, con un ligero sesgo hacia la derecha.
  • Hay pocos valores extremos superiores a 120 mmHg, que podrían ser casos atípicos.

Boxplot de Presión Sistólica y Diastólica

  • Este gráfico compara las distribuciones de la presión sistólica y diastólica mediante un boxplot.
  • Cada caja muestra el rango intercuartil (IQR), que abarca del 25% al 75% de los datos, con una línea que indica la mediana.

Observaciones

  • Presión sistólica:
    • La mediana está cerca de 130 mmHg.
    • Existen valores atípicos superiores (más de 200 mmHg).
  • Presión diastólica
    • La mediana está cerca de 80 mmHg.
    • También hay valores atípicos superiores (más de 120 mmHg), pero en menor cantidad comparada con la presión sistólica.
  • La presión sistólica tiene una mediana más alta (~130 mmHg) en comparación con la presión diastólica (~80 mmHg).
  • Ambas variables muestran distribuciones esperadas para valores típicos de presión arterial.
  • Existen valores atípicos en ambas variables, más pronunciados en la presión sistólica.
  • Los valores típicos de presión arterial están dentro de rangos normales, pero los valores extremos podrían indicar hipertensión severa o errores en la medición.

Heatmaps por Promedios

Un mapa de calor es una representación gráfica de datos donde los valores se codifican mediante colores. Los colores indican la magnitud de los valores en una matriz o tabla, facilitando la identificación de patrones, tendencias o diferencias entre las categorías.

A continuación se mostraran mapas de calor categórico, utilizado para representar el promedio de ciertas variables en función de dos variables categóricas: - Rango de edad (rango_edad). - Estado de fumador (current_smoker).

Promedio de edad por rango y fumador

# Heatmap promedio de edad por rango de edad y fumador
resumen_heatmap_edad <- data %>%
  group_by(rango_edad, current_smoker) %>%
  summarise(promedio_edad = mean(age)) %>%
  ungroup()

ggplot(resumen_heatmap_edad, aes(x = rango_edad, y = current_smoker, fill = promedio_edad)) +
  geom_tile(color = "white") +
  geom_text(aes(label = round(promedio_edad, 0)), size = 4) +
  scale_fill_gradient(low = "lightblue", high = "darkred") +
  labs(title = "Promedio de edad por rango y fumador", fill = "Promedio") +
  theme_minimal()

La imagen muestra un mapa de calor categórico, donde se representa el promedio de edad en función de dos variables:

  • Rango de edad (rango_edad): Categorías de edad divididas en intervalos de 10 años (30-39, 40-49, etc.).
  • Estado de fumador (current_smoker): Personas clasificadas como fumadores actuales (yes) y no fumadores (no).

Observaciones

  1. Fumadores actuales (“yes”):
    • En el rango de edad más bajo (30-39 años), el promedio de edad es 37 años.
    • El promedio de edad aumenta progresivamente con el rango de edad, alcanzando 63 años en el grupo de 60-69 años.
    • En el grupo de mayor edad (70-79 años), no hay datos, lo cual podría indicar una menor cantidad de fumadores actuales en este rango o ausencia de datos.
  2. No fumadores (“no”):
    • Similar a los fumadores actuales, el promedio de edad comienza en 37 años en el rango de 30-39 años.
    • El promedio de edad también aumenta con el rango de edad, alcanzando 70 años en el grupo de mayor edad (70-79 años).
  3. Comparación entre fumadores y no fumadores:
    • En general, no hay diferencias significativas en el promedio de edad entre fumadores y no fumadores dentro de cada rango de edad.
    • Sin embargo, en el rango de 70-79 años, los no fumadores tienen un promedio de edad más alto (70 años), mientras que no hay datos para fumadores.
    • El promedio de edad aumenta con el rango de edad, como era esperado.
    • Los fumadores actuales y los no fumadores tienen promedios similares en la mayoría de los rangos de edad.
    • En el rango más alto (70-79 años), parece haber una mayor representación de no fumadores, lo que podría reflejar un impacto del tabaquismo en la longevidad.

Promedio de Cigarrillos por día por rango y fumador

# Heatmap promedio cigs_per_day
resumen_heatmap_cpd <- data %>%
  group_by(rango_edad, current_smoker) %>%
  summarise(promedio_cpd = mean(cigs_per_day)) %>%
  ungroup()

ggplot(resumen_heatmap_cpd, aes(x = rango_edad, y = current_smoker, fill = promedio_cpd)) +
  geom_tile(color = "white") +
  geom_text(aes(label = round(promedio_cpd, 0)), size = 4) +
  scale_fill_gradient(low = "lightblue", high = "darkred") +
  labs(title = "Promedio de Cigarrillos por dia por rango y fumador", fill = "Promedio") +
  theme_minimal()

La imagen presenta un mapa de calor que muestra el promedio de cigarrillos fumados por día en función de dos variables:

  • Rango de edad (rango_edad): Categorías de edad divididas en intervalos de 10 años (30-39, 40-49, etc.).
  • Estado de fumador (current_smoker): Personas clasificadas como fumadores actuales (yes) y no fumadores (no).

Observaciones del Gráfico

  1. Fumadores actuales (“yes”):
    • Los fumadores actuales tienen un consumo promedio de cigarrillos que varía ligeramente según el rango de edad:
      • 30-39 años: Promedio de 18 cigarrillos/día.
      • 40-49 años: Promedio de 19 cigarrillos/día.
      • 50-59 años: Promedio de 19 cigarrillos/día.
      • 60-69 años: Promedio de 16 cigarrillos/día.
    • No hay datos para el grupo de 70-79 años, lo que podría indicar una menor representación de fumadores actuales en este rango o ausencia de datos.
    • Los fumadores consumen en promedio entre 16 y 19 cigarrillos por día, siendo el pico más alto en los grupos de 40-49 años y 50-59 años.
  2. No fumadores (“no”):
    • En todos los rangos de edad, el promedio de cigarrillos fumados es 0, como era de esperarse, ya que se trata de personas no fumadoras.
  3. Tendencias observadas:
    • El consumo promedio de cigarrillos parece mantenerse estable entre los 30 y los 59 años, con un leve descenso a partir de los 60 años (de 19 a 16 cigarrillos por día).
    • Los no fumadores no presentan variación en ningún rango de edad.
    • Hay una ligera disminución en el consumo promedio de cigarrillos entre los fumadores actuales a partir de los 60 años, lo que podría estar relacionado con factores de salud o decisiones de estilo de vida.

Promedio de Chol por rango y fumador

# Heatmap promedio
resumen_heatmap_chol <- data %>%
  group_by(rango_edad, current_smoker) %>%
  summarise(promedio_chol = mean(chol)) %>%
  ungroup()

ggplot(resumen_heatmap_chol, aes(x = rango_edad, y = current_smoker, fill = promedio_chol)) +
  geom_tile(color = "white") +
  geom_text(aes(label = round(promedio_chol, 0)), size = 4) +
  scale_fill_gradient(low = "lightblue", high = "darkred") +
  labs(title = "Promedio de Chol por rango y fumador", fill = "Promedio") +
  theme_minimal()

La imagen muestra un mapa de calor que representa el promedio de colesterol (Chol) en función de dos variables:

  • Rango de edad (rango_edad): Grupos de edad divididos en intervalos de 10 años (30-39, 40-49, etc.).
  • Estado de fumador (current_smoker): Personas clasificadas como fumadores actuales (yes) y no fumadores (no).

Observaciones del Gráfico

  1. Fumadores actuales (“yes”):
    • El promedio de colesterol aumenta con la edad hasta los 50-59 años y luego se estabiliza:
      • 30-39 años: Promedio de 219.
      • 40-49 años: Promedio de 232.
      • 50-59 años: Promedio de 244.
      • 60-69 años: Promedio de 243.
      • En el rango de 70-79 años, no hay datos disponibles.
  2. No fumadores (“no”):
    • El promedio de colesterol es generalmente más alto que el de los fumadores actuales, especialmente en los grupos de mayor edad:
      • 30-39 años: Promedio de 210.
      • 40-49 años: Promedio de 228.
      • 50-59 años: Promedio de 248.
      • 60-69 años: Promedio de 251 (el más alto).
      • 70-79 años: Promedio de 231.
  3. Comparación entre fumadores y no fumadores:
    • En los rangos de edad más jóvenes (30-39 y 40-49 años), los fumadores tienen un promedio de colesterol ligeramente más alto que los no fumadores.
    • En los rangos de edad más altos (50-59 y 60-69 años), los no fumadores muestran un promedio de colesterol más alto que los fumadores.
    • En el grupo de 70-79 años, solo hay datos para no fumadores, con un promedio de 231.
  4. Tendencias y Conclusiones
    • Relación entre el colesterol y la edad
      • El promedio de colesterol tiende a aumentar con la edad en ambos grupos (fumadores y no fumadores), alcanzando su punto máximo en los rangos de 50-59 y 60-69 años.
    • Diferencias entre fumadores y no fumadores
      • En los rangos de edad más jóvenes, los fumadores tienen un colesterol promedio más alto.
      • En los rangos de edad más avanzados, los no fumadores tienen un promedio más alto, lo que podría estar relacionado con factores de salud o supervivencia diferencial entre los grupos.
    • Datos faltantes
      • No hay datos para fumadores actuales en el rango de edad de 70-79 años, lo que podría reflejar una menor representación o un impacto en la longevidad.

Pruebas de Hipótesis

Prueba hipótesis para una muestra media

Enunciado 1

  1. Se desea comprobar si la frecuencia cardíaca promedio de los individuos en la muestra es igual a 75 latidos por minuto, valor que podría considerarse una referencia general para adultos sanos en reposo.

Hipótesis:

  • Hipótesis nula (H₀): La media poblacional de la frecuencia cardíaca es igual a 75.
  • Hipótesis alternativa (H₁): La media poblacional de la frecuencia cardíaca es diferente de 75.

¿Explique el resultado de la prueba hipótesis?, ¿qué podemos decir del p-valor?.

A continuación se presenta el codigo para realizar el proceso:

resultado <- z.test(
  x = data$heart_rate, # Muestra de datos (frecuencia cardíaca)
  mu = 75,            # Valor de referencia (media poblacional bajo H₀)
  sigma.x = sd(data$heart_rate, na.rm = TRUE), # Desviación estándar de la muestra
  alternative = "two.sided", # Prueba bilateral
  conf.level = 0.95          # Nivel de confianza
)
print(resultado)
## 
##  One-sample z-Test
## 
## data:  data$heart_rate
## z = 3.5809, p-value = 0.0003423
## alternative hypothesis: true mean is not equal to 75
## 95 percent confidence interval:
##  75.31188 76.06607
## sample estimates:
## mean of x 
##  75.68897

Interpretación 1

  1. Resultado de la prueba de hipótesis:
    • El valor del estadístico z es 3.5809, lo que indica que la media muestral (75.68897) está a 3.58 desviaciones estándar de la media poblacional esperada bajo la hipótesis nula (75).
    • El intervalo de confianza al 95% para la media poblacional está entre 75.31188, 76.06607, lo que significa que la media poblacional verdadera se encuentra dentro de este rango con un 95% de confianza.
    • Dado que el valor 75 (propuesto por H0) no está fuera del intervalo de confianza, pero el estadístico z es alto, debemos analizar el p-valor para tomar una decisión.
    • La hipótesis nula (H₀:μ=75) se rechaza porque el p-valor es muy bajo (0.0003423). Esto indica que hay evidencia estadísticamente significativa para concluir que la frecuencia cardíaca promedio de la muestra no es igual a 75 latidos por minuto.
    • La media muestral observada es 75.68897, ligeramente superior a 75, y el intervalo de confianza al 95% (75.31188, 76.06607) confirma que la media poblacional verdadera probablemente se encuentra en este rango, lo que también respalda que no es exactamente igual a 75.
  2. Decisión basada en el p-valor:
    • El p-valor obtenido es 0.0003423, que es mucho menor que el nivel de significancia típico (α=0.05).
    • Esto significa que existe suficiente evidencia estadística para rechazar la hipótesis nula (H₀).
    • En otras palabras, la frecuencia cardíaca promedio de los individuos en la muestra es significativamente diferente de 75 latidos por minuto.
    • El p-valor (0.0003423) es mucho menor que el nivel de significancia típico (α=0.05), lo que indica que la probabilidad de observar una media muestral tan diferente de 75, bajo la suposición de que H0 es verdadera, es extremadamente baja.
    • Por lo tanto, rechazamos H₀ y concluimos que la frecuencia cardíaca promedio de la muestra es significativamente diferente de 75 latidos por minuto.

Enunciado 2

  1. Se quiere evaluar si los niveles medios de colesterol en la muestra superan el valor umbral de 200 mg/dL, punto a partir del cual se considera que existe hipercolesterolemia.

Hipótesis:

  • Hipótesis nula (H₀): El nivel medio de colesterol en la población es menor o igual a 200. μ ≤ 200
  • Hipótesis alternativa (H₁): El nivel medio de colesterol en la población es mayor a 200. μ > 200

¿Explique el resultado de la prueba hipótesis?, ¿qué podemos decir del p-valor?

A continuación se presenta el codigo para realizar el proceso:

# Realizar la prueba z para una muestra
resultado <- z.test(
  x = data$chol,       # Muestra de datos (colesterol)
  mu = 200,             # Valor de referencia (media poblacional bajo H₀)
  sigma.x = sd(data$chol, na.rm = TRUE),    # Desviación estándar de la muestra
  alternative = "greater", # Prueba unilateral (mayor a 200)
  conf.level = 0.95        # Nivel de confianza
)
# Mostrar los resultados de la prueba
print(resultado)
## 
##  One-sample z-Test
## 
## data:  data$chol
## z = 51.548, p-value < 2.2e-16
## alternative hypothesis: true mean is greater than 200
## 95 percent confidence interval:
##  235.4282       NA
## sample estimates:
## mean of x 
##  236.5959

Interpretación 2

Resultado de la prueba hipótesis - El estadístico z obtenido es 51.548, lo que indica que la media muestral (236.5959) está a 51.548 desviaciones estándar por encima del valor umbral de 200 mg/dL bajo la hipótesis nula (H₀). - El intervalo de confianza al 95% para la media poblacional comienza en 235.4282 y no tiene límite superior definido (NA), lo que confirma que la media verdadera es significativamente mayor a 200. - Dado que el p-valor es extremadamente bajo (p−value<2.2e−16), existe evidencia estadística muy fuerte para rechazar la hipótesis nula (H₀). - En conclusión, los niveles medios de colesterol en la población son significativamente mayores a 200 mg/dL, lo que implica que, en promedio, las personas de esta muestra tienen hipercolesterolemia.

Resultado del p-valor - El p-valor es extremadamente bajo (<2.2e−16), mucho menor que cualquier nivel de significancia comúnmente utilizado (α=0.05, α=0.01, etc.). - Esto significa que la probabilidad de observar una media muestral tan alta como 236.5959 (o más alta) si la verdadera media poblacional fuera 200mg/dL es prácticamente cero. - Por lo tanto, existe evidencia estadística muy fuerte para rechazar la hipótesis nula (H₀:μ≤200) y concluir que el nivel medio de colesterol en la población es significativamente mayor a 200 mg/dL. - La prueba estadística demuestra que el nivel medio de colesterol en la población supera el umbral de 200 mg/dL con un alto grado de confianza. Esto sugiere que, en promedio, la población estudiada tiene niveles de colesterol asociados con hipercolesterolemia.

La prueba estadística demuestra que el nivel medio de colesterol en la población supera el umbral de 200 mg/dL con un alto grado de confianza. Esto sugiere que, en promedio, la población estudiada tiene niveles de colesterol asociados con hipercolesterolemia.


Prueba hipótesis de una muestra proporcional

Enunciado 3

Se considera que una persona tiene colesterol alto si su nivel es mayor a 240 mg/dL (según criterios médicos comunes).

Nueva variable binaria:

\[Z = \begin{cases} 1 & \text{si chol} > 240 \\ 0 & \text{si chol} \leq 240 \end{cases}\]

Hipótesis:

  • H₀: p = 0.20 (La proporción de personas con colesterol alto es igual al 20%)
  • H₁: p > 0.20 (La proporción de personas con colesterol alto es mayor al 20%)

A continuación se presenta el codigo para realizar el proceso:

Crear la nueva variable:

# Crear una nueva variable binaria: 1 si chol > 240, 0 si chol <= 240
data$high_chol <- ifelse(data$chol > 240, 1, 0)

Verificar la proporción de personas con colesterol alto

# Verificar la proporción de personas con colesterol alto
prop_high_chol <- mean(data$high_chol, na.rm = TRUE)
print(paste("Proporción de personas con colesterol alto:", round(prop_high_chol, 4)))
## [1] "Proporción de personas con colesterol alto: 0.4279"

Número de éxitos (personas con colesterol alto) y Tamaño de la muestra (número total de observaciones válidas)

# Número de éxitos (personas con colesterol alto)
x <- sum(data$high_chol, na.rm = TRUE)

# Tamaño de la muestra (número total de observaciones válidas)
n <- sum(!is.na(data$high_chol))

Ejecutar el test de proporcionalidad

# Realizar la prueba z para proporciones
resultado <- prop.test(
  x = x,                # Número de éxitos
  n = n,                # Tamaño de la muestra
  p = 0.20,             # Proporción bajo H₀
  alternative = "greater", # Prueba unilateral (proporción mayor a 0.20)
  correct = FALSE        # Sin corrección de continuidad
)
# Mostrar los resultados
print(resultado)
## 
##  1-sample proportions test without continuity correction
## 
## data:  x out of n, null probability 0.2
## X-squared = 1266.5, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is greater than 0.2
## 95 percent confidence interval:
##  0.4149712 1.0000000
## sample estimates:
##         p 
## 0.4279487

Interpretación 3

  • El valor del estadístico de prueba es X2 =1266.5, lo que indica una gran diferencia entre la proporción observada y la proporción bajo la hipótesis nula (p=0.20).
  • El p-valor es extremadamente pequeño (<2.2e−16), mucho menor que el nivel de significancia comúnmente utilizado (α=0.05). Esto significa que hay evidencia estadísticamente significativa para rechazar la hipótesis nula.
  • Estimación de la proporción muestral (p):
    • La proporción observada de personas con colesterol alto en la muestra es p=0.4279 (42.79%).
  • El intervalo de confianza al 95% para la proporción verdadera está entre 0.4149, 1.0000. Esto indica que, con un 95% de confianza, la proporción verdadera de personas con colesterol alto en la población es al menos 41.49% y podría llegar hasta el 100%.
  • Dado que el p-valor es extremadamente pequeño (<2.2e−16), rechazamos la hipótesis nula (H₀) en favor de la hipótesis alternativa (H₁). Esto significa que la proporción de personas con colesterol alto en la población es significativamente mayor al 20%.

Con base en los datos de la muestra, hay suficiente evidencia estadística para concluir que la proporción de personas con colesterol alto en la población es mayor al 20%.

La proporción observada en la muestra es aproximadamente 42.79%, lo que respalda que el problema del colesterol alto afecta a una parte considerable de la población.


Enunciado 4

Se considera que una persona tiene taquicardia si su frecuencia cardíaca es mayor a 100 lpm (según criterios clínicos).

Nueva variable binaria:

\[Z = \begin{cases} 1 & \text{si heart_rate} > 100 \\ 0 & \text{si heart_rate} \leq 100 \end{cases}\]

Hipótesis:

  • H₀: p = 0.05 (La proporción de personas con taquicardia es igual al 5%)
  • H₁: p ≠ 0.05 (La proporción de personas con taquicardia es diferente al 5%)

A continuación se presenta el codigo para realizar el proceso:

Crear la nueva variable:

# Crear una nueva variable binaria: 1 si heart_rate > 100, 0 si heart_rate <= 100
data$taquicardia <- ifelse(data$heart_rate > 100, 1, 0)

Verificar la proporción de personas con taquicardia

# Verificar la proporción de personas con taquicardia
prop_taquicardia <- mean(data$taquicardia, na.rm = TRUE)
print(paste("Proporción de personas con taquicardia:", round(prop_taquicardia, 4)))
## [1] "Proporción de personas con taquicardia: 0.0238"

Número de éxitos (personas con taquicardia) y Tamaño de la muestra (número total de observaciones válidas)

# Número de éxitos (personas con taquicardia)
x <- sum(data$taquicardia, na.rm = TRUE)

# Tamaño de la muestra (número total de observaciones válidas)
n <- sum(!is.na(data$taquicardia))

Ejecutar test

# Realizar la prueba z para proporciones
resultado <- prop.test(
  x = x,                # Número de éxitos
  n = n,                # Tamaño de la muestra
  p = 0.05,             # Proporción bajo H₀
  alternative = "two.sided", # Prueba bilateral (proporción diferente a 0.05)
  correct = FALSE        # Sin corrección de continuidad
)
# Mostrar los resultados
print(resultado)
## 
##  1-sample proportions test without continuity correction
## 
## data:  x out of n, null probability 0.05
## X-squared = 56.162, df = 1, p-value = 6.674e-14
## alternative hypothesis: true p is not equal to 0.05
## 95 percent confidence interval:
##  0.01950584 0.02912355
## sample estimates:
##          p 
## 0.02384615

Interpretación 4

  • El valor del estadístico de prueba es X2=56.162, lo que indica una diferencia significativa entre la proporción observada en la muestra y la proporción bajo la hipótesis nula (p=0.05).
  • El p-valor obtenido es p=6.674e−14, que es extremadamente pequeño (mucho menor que el nivel de significancia comúnmente utilizado, α=0.05). Esto significa que hay suficiente evidencia estadística para rechazar la hipótesis nula (H₀).
  • La proporción observada de personas con taquicardia en la muestra es p=0.0238 (2.38%).
  • El intervalo de confianza al 95% para la proporción verdadera está entre 0.0195, 0.0291, lo que significa que, con un 95% de confianza, la proporción verdadera de personas con taquicardia en la población está entre 1.95% y 2.91%.
  • Dado que el p-valor es extremadamente pequeño (p=6.674e−14), rechazamos la hipótesis nula (H₀) en favor de la hipótesis alternativa (H₁).
  • Esto significa que la proporción de personas con taquicardia en la población es significativamente diferente al 5%.

Según los datos de la muestra, la proporción de personas con taquicardia es aproximadamente 2.38%, lo cual es significativamente menor al 5%.

El intervalo de confianza también respalda esta conclusión, ya que los valores posibles para la proporción verdadera están muy por debajo del 5%.

La prueba de hipótesis confirma que la proporción de personas con taquicardia en la población es significativamente diferente al 5%. En particular, los datos sugieren que la proporción verdadera es mucho menor, con una estimación de 2.38% y un intervalo de confianza que no incluye el 5%.


Prueba hipótesis para la diferencia de medias

En el estudio sobre la salud cardiovascular de adultos, se recopilaron datos fisiológicos de un grupo de individuos clasificados como fumadores y no fumadores.

Entre las variables medidas se encuentra el nivel de colesterol en sangre (mg/dL), un indicador importante de riesgo cardiovascular. Con el objetivo de evaluar si existe una diferencia significativa en los niveles promedio de colesterol entre fumadores y no fumadores, se solicita realizar una prueba de hipótesis para comparar las medias de colesterol entre ambos grupos. Asuma independencia entre las muestras y considere una significancia del 5%.

Enunciado 5

Se desea evaluar si existen diferencias significativas en los niveles promedio de colesterol entre personas fumadoras y no fumadoras.

Hipótesis:

  • H₀: No hay diferencia en los niveles medios de colesterol entre fumadores y no fumadores.
  • H₁: Existe una diferencia significativa entre los niveles medios de colesterol.

Separar los datos en dos grupos: fumadores y no fumadores

# Separar los datos en dos grupos: fumadores y no fumadores
chol_smokers <- data$chol[data$current_smoker == "yes"]
chol_nonsmokers <- data$chol[data$current_smoker == "no"]

Calcular las estadísticas descriptivas necesarias

# Calcular las estadísticas descriptivas necesarias
mean_smokers <- mean(chol_smokers)
mean_nonsmokers <- mean(chol_nonsmokers)

sd_smokers <- sd(chol_smokers)
sd_nonsmokers <- sd(chol_nonsmokers)

n_smokers <- length(chol_smokers)
n_nonsmokers <- length(chol_nonsmokers)

Verificar las estadísticas

cat("Media - Fumadores:", mean_smokers, "\n")
## Media - Fumadores: 234.5111
cat("Media - No Fumadores:", mean_nonsmokers, "\n")
## Media - No Fumadores: 238.6427
cat("Desviación estándar - Fumadores:", sd_smokers, "\n")
## Desviación estándar - Fumadores: 44.75407
cat("Desviación estándar - No Fumadores:", sd_nonsmokers, "\n")
## Desviación estándar - No Fumadores: 43.83572
cat("Tamaño de la muestra - Fumadores:", n_smokers, "\n")
## Tamaño de la muestra - Fumadores: 1932
cat("Tamaño de la muestra - No Fumadores:", n_nonsmokers, "\n")
## Tamaño de la muestra - No Fumadores: 1968

Hipótesis:

  • H₀: La diferencia de medias es igual a 0 (no hay diferencia)
  • H₁: La diferencia de medias es diferente de 0 (hay diferencia significativa)

Ejecutar el test

resultado <- z.test(
  x = chol_smokers, 
  y = chol_nonsmokers, 
  mu = 0,                  # Diferencia hipotética entre medias
  sigma.x = sd_smokers,    # Desviación estándar de los fumadores
  sigma.y = sd_nonsmokers, # Desviación estándar de los no fumadores
  alternative = "two.sided" # Prueba bilateral
)
# Mostrar los resultados
print(resultado)
## 
##  Two-sample z-Test
## 
## data:  chol_smokers and chol_nonsmokers
## z = -2.912, p-value = 0.003592
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -6.912492 -1.350725
## sample estimates:
## mean of x mean of y 
##  234.5111  238.6427

Interpretación 5

El valor del estadístico z es −2.912. Esto indica cuántas desviaciones estándar se encuentra la diferencia observada entre las medias de los grupos (fumadores y no fumadores) con respecto a la diferencia hipotética (en este caso, 0).

  • El p-valor es 0.003592, que es menor al nivel de significancia (α=0.05). Esto significa que existe evidencia estadísticamente significativa para rechazar la hipótesis nula (H0).
  • El intervalo de confianza del 95% para la diferencia de medias es [−6.912,−1.351]. Como este intervalo no incluye el valor 0, también respalda la conclusión de que hay una diferencia significativa entre las medias de colesterol de fumadores y no fumadores.
  • Medias de los grupos:
    • La media del colesterol para fumadores (x) es 234.51.
    • La media del colesterol para no fumadores (y) es 238.64.
    • Esto implica que, en promedio, los no fumadores tienen un nivel de colesterol ligeramente mayor que los fumadores.
  • Hipótesis nula (H₀): No hay diferencia significativa en los niveles promedio de colesterol entre fumadores y no fumadores (μ fumadores − μ no_fumadores=0).
  • Hipótesis alternativa (H₁): Existe una diferencia significativa en los niveles promedio de colesterol entre fumadores y no fumadores ( (μ fumadores − μ no_fumadores ≠ 0)
  • Dado que el p-valor (0.003592) es menor que el nivel de significancia (α=0.05), rechazamos la hipótesis nula (H₀).
  • Esto significa que hay suficiente evidencia estadística para concluir que existe una diferencia significativa en los niveles promedio de colesterol entre fumadores y no fumadores.
  • Aunque los niveles promedio de colesterol son ligeramente mayores en los no fumadores (238.64) en comparación con los fumadores (234.51), la diferencia es estadísticamente significativa.
  • El intervalo de confianza del 95% ([−6.912,−1.351]) indica que, en promedio, los niveles de colesterol de los fumadores son entre 1.35 y 6.91 mg/dL más bajos que los de los no fumadores.
  • Aunque la diferencia es estadísticamente significativa, es importante considerar si esta diferencia tiene relevancia clínica. En este caso, la magnitud de la diferencia (4.13 mg/dL en promedio) puede no ser clínicamente relevante, pero dependerá del contexto médico y de los umbrales de riesgo cardiovascular.

En resumen, los resultados muestran que los niveles promedio de colesterol difieren significativamente entre fumadores y no fumadores, siendo ligeramente mayores en los no fumadores. Sin embargo, se debe evaluar si esta diferencia tiene un impacto clínico significativo.


Enunciado 6

Se analiza si la frecuencia cardíaca promedio difiere entre quienes fuman y quienes no

Hipótesis:

  • H₀: No hay diferencia en la frecuencia cardíaca promedio entre fumadores y no fumadores.
  • H₁: La frecuencia cardíaca promedio de los fumadores es mayor que la de los no fumadores.

Separar los datos en dos grupos: fumadores y no fumadores

# Separar los datos en dos grupos: fumadores y no fumadores
heart_rate_smokers <- data$heart_rate[data$current_smoker == "yes"]
heart_rate_nonsmokers <- data$heart_rate[data$current_smoker == "no"]

Calcular las estadísticas descriptivas necesarias

# Calcular las estadísticas descriptivas necesarias
mean_smokers <- mean(heart_rate_smokers)
mean_nonsmokers <- mean(heart_rate_nonsmokers)

sd_smokers <- sd(heart_rate_smokers)
sd_nonsmokers <- sd(heart_rate_nonsmokers)

n_smokers <- length(heart_rate_smokers)
n_nonsmokers <- length(heart_rate_nonsmokers)
# Verificar las estadísticas
cat("Media - Fumadores:", mean_smokers, "\n")
## Media - Fumadores: 76.38302
cat("Media - No Fumadores:", mean_nonsmokers, "\n")
## Media - No Fumadores: 75.00762
cat("Desviación estándar - Fumadores:", sd_smokers, "\n")
## Desviación estándar - Fumadores: 11.76136
cat("Desviación estándar - No Fumadores:", sd_nonsmokers, "\n")
## Desviación estándar - No Fumadores: 12.22432
cat("Tamaño de la muestra - Fumadores:", n_smokers, "\n")
## Tamaño de la muestra - Fumadores: 1932
cat("Tamaño de la muestra - No Fumadores:", n_nonsmokers, "\n")
## Tamaño de la muestra - No Fumadores: 1968

Hipótesis:

  • H₀: La diferencia de medias es igual a 0 (no hay diferencia)
  • H₁: La frecuencia cardíaca promedio de los fumadores es mayor que la de los no fumadores
resultado <- z.test(
  x = heart_rate_smokers, 
  y = heart_rate_nonsmokers, 
  mu = 0,                  # Diferencia hipotética entre medias
  sigma.x = sd_smokers,    # Desviación estándar de los fumadores
  sigma.y = sd_nonsmokers, # Desviación estándar de los no fumadores
  alternative = "greater"  # Prueba unilateral (fumadores > no fumadores)
)

Mostrar los resultados

# Mostrar los resultados
print(resultado)
## 
##  Two-sample z-Test
## 
## data:  heart_rate_smokers and heart_rate_nonsmokers
## z = 3.5809, p-value = 0.0001712
## alternative hypothesis: true difference in means is greater than 0
## 95 percent confidence interval:
##  0.7436161        NA
## sample estimates:
## mean of x mean of y 
##  76.38302  75.00762

Interpretación 6

  • El valor del estadístico z es 3.5809. Esto indica que la diferencia observada entre las medias de las frecuencias cardíacas de fumadores y no fumadores está a 3.58 desviaciones estándar por encima de la diferencia hipotética (que es 0 según la hipótesis nula).
  • El p-valor es 0.0001712, que es mucho menor que el nivel de significancia (α=0.05). Esto significa que hay evidencia estadísticamente significativa para rechazar la hipótesis nula (H0).
  • El intervalo de confianza del 95% para la diferencia de medias es [0.7436,∞). Esto significa que podemos estar 95% seguros de que la diferencia verdadera entre las medias de las frecuencias cardíacas es al menos 0.7436, y que la frecuencia cardíaca promedio de los fumadores es mayor que la de los no fumadores.
  • Medias de los grupos:
    • La media de la frecuencia cardíaca para fumadores (x) es 76.38.
    • La media de la frecuencia cardíaca para no fumadores (y) es 75.01.
    • Esto implica que, en promedio, los fumadores tienen una frecuencia cardíaca aproximadamente 1.37 latidos por minuto más alta que los no fumadores.

Hipótesis planteadas:

  • Hipótesis nula (H₀): No hay diferencia en la frecuencia cardíaca promedio entre fumadores y no fumadores (μ fumadores − μ no_fumadores=0).
  • Hipótesis alternativa (H₁): La frecuencia cardíaca promedio de los fumadores es mayor que la de los no fumadores (μ fumadores − μ no_fumadores > 0).
  • Dado que el p-valor (0.0001712) es menor que el nivel de significancia (0.05), rechazamos la hipótesis nula (H₀).
  • Esto significa que hay suficiente evidencia estadística para afirmar que la frecuencia cardíaca promedio de los fumadores es significativamente mayor que la de los no fumadores.
  • Los resultados muestran que la frecuencia cardíaca promedio de los fumadores (76.38) es significativamente mayor que la de los no fumadores (75.01).
  • La diferencia promedio es de 1.37 latidos por minuto, y esta diferencia es estadísticamente significativa.
  • Aunque la diferencia en las frecuencias cardíacas entre fumadores y no fumadores es estadísticamente significativa, es importante evaluar si esta diferencia de 1.37 latidos por minuto tiene relevancia clínica.
  • En un contexto médico, incluso una pequeña diferencia podría ser importante si se considera junto con otros factores de riesgo cardiovascular.

Conclusión estadística: Existe suficiente evidencia para afirmar que los fumadores tienen una frecuencia cardíaca promedio significativamente mayor que los no fumadores.

Magnitud de la diferencia: La diferencia promedio es pequeña (1.37 latidos por minuto), pero su relevancia clínica dependerá del contexto médico.


Enunciado 7

En el estudio se analiza si existe una diferencia significativa en la proporción de personas con colesterol alto (definido como un nivel superior a 240 mg/dL) entre fumadores y no fumadores. Para ello, se utilizaron los datos recolectados en una base que incluye variables clínicas y hábitos personales. Con base en esta información, formule y realice una prueba de hipótesis que permita determinar si la proporción de individuos con colesterol elevado difiere entre quienes fuman y quienes no lo hacen. Utilice un nivel de significancia del 5%.

Se define colesterol alto como un valor de colesterol > 240 mg/dL.

Se crea una variable binaria:

\[Z = \begin{cases} 1 & \text{si chol} > 240 \\ 0 & \text{si chol} \leq 240 \end{cases}\]

Hipótesis

  • H₀: La proporción de personas con colesterol alto es la misma en fumadores y no fumadores.
  • H₁: La proporción de personas con colesterol alto es diferente entre fumadores y no fumadores.

Separar los datos por grupos (fumadores y no fumadores)

# Separar los datos por grupos (fumadores y no fumadores)
smokers <- data[data$current_smoker == "yes", ]
nonsmokers <- data[data$current_smoker == "no", ]

Calcular las proporciones y estadísticas para cada grupo

# Fumadores
n_smokers <- nrow(smokers)
high_chol_smokers <- sum(smokers$high_chol)
prop_smokers <- high_chol_smokers / n_smokers
# No fumadores
n_nonsmokers <- nrow(nonsmokers)
high_chol_nonsmokers <- sum(nonsmokers$high_chol)
prop_nonsmokers <- high_chol_nonsmokers / n_nonsmokers

Mostrar estadísticas descriptivas

# Mostrar estadísticas descriptivas
cat("\n=== ESTADÍSTICAS DESCRIPTIVAS ===\n")
## 
## === ESTADÍSTICAS DESCRIPTIVAS ===
cat("FUMADORES:\n")
## FUMADORES:
cat("  Tamaño de muestra:", n_smokers, "\n")
##   Tamaño de muestra: 1932
cat("  Personas con colesterol alto:", high_chol_smokers, "\n")
##   Personas con colesterol alto: 790
cat("  Proporción con colesterol alto:", round(prop_smokers, 4), "\n")
##   Proporción con colesterol alto: 0.4089
cat("\nNO FUMADORES:\n")
## 
## NO FUMADORES:
cat("  Tamaño de muestra:", n_nonsmokers, "\n")
##   Tamaño de muestra: 1968
cat("  Personas con colesterol alto:", high_chol_nonsmokers, "\n")
##   Personas con colesterol alto: 879
cat("  Proporción con colesterol alto:", round(prop_nonsmokers, 4), "\n")
##   Proporción con colesterol alto: 0.4466

Crear tabla de contingencia

# Crear tabla de contingencia
tabla_contingencia <- table(data$current_smoker, data$high_chol)
cat("\n=== TABLA DE CONTINGENCIA ===\n")
## 
## === TABLA DE CONTINGENCIA ===
print(tabla_contingencia)
##      
##          0    1
##   no  1089  879
##   yes 1142  790

Calcular la proporción pooled (combinada) para el cálculo del error estándar

# Calcular la proporción pooled (combinada) para el cálculo del error estándar
prop_pooled <- (high_chol_smokers + high_chol_nonsmokers) / (n_smokers + n_nonsmokers)
se_pooled <- sqrt(prop_pooled * (1 - prop_pooled) * (1/n_smokers + 1/n_nonsmokers))
cat("\nProporción pooled:", round(prop_pooled, 4), "\n")
## 
## Proporción pooled: 0.4279
cat("Error estándar pooled:", round(se_pooled, 4), "\n")
## Error estándar pooled: 0.0158

Crear vectores para la prueba z

# Para proporciones, necesitamos crear vectores binarios
smokers_vector <- rep(c(1, 0), c(high_chol_smokers, n_smokers - high_chol_smokers))
nonsmokers_vector <- rep(c(1, 0), c(high_chol_nonsmokers, n_nonsmokers - high_chol_nonsmokers))

Ejecutar el test

# Realizar la prueba z para dos proporciones
resultado <- z.test(
  x = smokers_vector,
  y = nonsmokers_vector,
  alternative = "two.sided",  # Prueba bilateral
  mu = 0,                    # Diferencia hipotética entre proporciones
  sigma.x = sqrt(prop_smokers * (1 - prop_smokers)),
  sigma.y = sqrt(prop_nonsmokers * (1 - prop_nonsmokers))
)

Mostrar resultados

print(resultado)
## 
##  Two-sample z-Test
## 
## data:  smokers_vector and nonsmokers_vector
## z = -2.3838, p-value = 0.01713
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -0.068776154 -0.006711146
## sample estimates:
## mean of x mean of y 
## 0.4089027 0.4466463

Interpretación 7

  • El valor del estadístico z es -2.3838. Esto indica que la diferencia observada entre las proporciones de personas con colesterol alto entre fumadores y no fumadores está a 2.38 desviaciones estándar por debajo de la diferencia hipotética (que es 0 según la hipótesis nula).
  • El p-valor es 0.01713, lo que es menor que el nivel de significancia (α=0.05). Esto significa que hay evidencia estadísticamente significativa para rechazar la hipótesis nula (H0).
  • El intervalo de confianza del 95% para la diferencia de proporciones es [−0.0688,−0.0067]. Esto significa que podemos estar 95% seguros de que la diferencia verdadera entre las proporciones de colesterol alto entre fumadores y no fumadores está entre −6.88% y −0.67%.
  • Este intervalo no incluye el valor 0, lo cual refuerza que existe una diferencia estadísticamente significativa entre las proporciones.
  • La proporción de fumadores con colesterol alto (p fumadores) es 40.89% (0.4089).
  • La proporción de no fumadores con colesterol alto (p no_fumadores) es 44.66% (0.4466).
  • Esto implica que, en promedio, los no fumadores tienen una proporción ligeramente mayor de colesterol alto en comparación con los fumadores.
  • Explicación de la prueba de hipótesis
    • Dado que el p-valor (0.01713) es menor que el nivel de significancia (0.05), rechazamos la hipótesis nula (H0).
    • Esto significa que hay suficiente evidencia estadística para concluir que las proporciones de personas con colesterol alto difieren significativamente entre fumadores y no fumadores.
    • Aunque las proporciones son diferentes, los no fumadores tienen una proporción mayor de colesterol alto (44.66%) en comparación con los fumadores (40.89%).
    • La diferencia observada es pequeña pero estadísticamente significativa, con una diferencia estimada entre las proporciones de aproximadamente −3.78% (diferencia negativa porque la proporción de no fumadores es mayor).

Conclusión estadística: Existe evidencia estadísticamente significativa de que las proporciones de colesterol alto difieren entre fumadores y no fumadores (p fumadores ≠ p no_fumadores).

Dirección de la diferencia: La proporción de no fumadores con colesterol alto es mayor que la de fumadores.

Magnitud de la diferencia: La diferencia es pequeña (−3.78%) y podría no ser clínicamente relevante.