mail: jdiaz50@unisalle.edu.co
Universidad de la Salle
MAESTRÍA EN INTELIGENCIA ARTIFICIAL
Ciencias de datos 2025-1
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.
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.
📊 Visualización de datos
+) para construir
gráficos complejos🔧 Manipulación de datos
filter(), select(),
mutate(), summarise(),
arrange()%>%)📋 Reestructuración de datos
pivot_longer(),
pivot_wider(), separate(),
unite()🖼️ Composición de gráficos
grid.arrange()📈 Análisis estadístico básico
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
A continuación se usaran el comando para cargar los datos
data <- read.csv("smoking_health_data_final.csv")
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
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:
mean_cigs_smokers <- mean(data$cigs_per_day[data$current_smoker == "yes"], na.rm = TRUE)
# 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
)
)
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.
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.
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.
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
)
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
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.
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)
}
}
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.
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.
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.
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.
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.
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.
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.
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).
# 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:
Observaciones
- 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.
- 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).
- 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.
# 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:
Observaciones del Gráfico
- 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.
- 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.
- 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.
# 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:
Observaciones del Gráfico
- 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.
- 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.
- 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.
- 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.
Hipótesis:
¿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
Hipótesis:
¿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
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.
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:
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
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.
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:
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
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%.
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%.
Se desea evaluar si existen diferencias significativas en los niveles promedio de colesterol entre personas fumadoras y no fumadoras.
Hipótesis:
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:
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
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).
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.
Se analiza si la frecuencia cardíaca promedio difiere entre quienes fuman y quienes no
Hipótesis:
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:
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
Hipótesis planteadas:
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.
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
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
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.