library(tidyverse)
## Warning: package 'ggplot2' was built under R version 4.5.2
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 4.0.0 ✔ tibble 3.3.0
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.1.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggplot2)
library(dplyr)
library(car)
## Warning: package 'car' was built under R version 4.5.2
## Cargando paquete requerido: carData
## Warning: package 'carData' was built under R version 4.5.2
##
## Adjuntando el paquete: 'car'
##
## The following object is masked from 'package:dplyr':
##
## recode
##
## The following object is masked from 'package:purrr':
##
## some
library(lmtest)
## Warning: package 'lmtest' was built under R version 4.5.2
## Cargando paquete requerido: zoo
##
## Adjuntando el paquete: 'zoo'
##
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(readxl)
library(corrplot)
## Warning: package 'corrplot' was built under R version 4.5.2
## corrplot 0.95 loaded
cardio_data <- read_excel("cardiovascular_data.xls")
#1. Preparación y exploración de datos.
head(cardio_data)
## # A tibble: 6 × 15
## id age sex bmi systolic_bp diastolic_bp total_cholesterol hdl ldl
## <dbl> <dbl> <chr> <chr> <dbl> <dbl> <dbl> <chr> <chr>
## 1 1 74 Fema… 21.7 133 84 208 48 135
## 2 2 47 Male 26.2 125 72 185 61 107
## 3 3 48 Male 27.6 120 81 212 45 143
## 4 4 71 Male 25.2 141 86 191 62 105
## 5 5 41 Male 26.3 122 74 183 53 112
## 6 6 54 Male 34.7 142 89 191 48 137
## # ℹ 6 more variables: triglycerides <chr>, glucose <chr>, smoking <dbl>,
## # physical_activity <chr>, family_history <dbl>, diabetes <dbl>
str(cardio_data)
## tibble [300 × 15] (S3: tbl_df/tbl/data.frame)
## $ id : num [1:300] 1 2 3 4 5 6 7 8 9 10 ...
## $ age : num [1:300] 74 47 48 71 41 54 90 20 46 69 ...
## $ sex : chr [1:300] "Female" "Male" "Male" "Male" ...
## $ bmi : chr [1:300] "21.7" "26.2" "27.6" "25.2" ...
## $ systolic_bp : num [1:300] 133 125 120 141 122 142 134 132 137 137 ...
## $ diastolic_bp : num [1:300] 84 72 81 86 74 89 88 82 80 88 ...
## $ total_cholesterol: num [1:300] 208 185 212 191 183 191 240 195 193 187 ...
## $ hdl : chr [1:300] "48" "61" "45" "62" ...
## $ ldl : chr [1:300] "135" "107" "143" "105" ...
## $ triglycerides : chr [1:300] "121" "85" "87" "63" ...
## $ glucose : chr [1:300] "101" "99" "97" "78" ...
## $ smoking : num [1:300] 0 1 0 0 1 0 0 1 0 1 ...
## $ physical_activity: chr [1:300] "Moderate" "Active" "Very Active" "Moderate" ...
## $ family_history : num [1:300] 0 0 0 0 0 0 1 0 0 0 ...
## $ diabetes : num [1:300] 1 0 0 0 0 0 0 0 0 1 ...
summary(cardio_data)
## id age sex bmi
## Min. : 1.00 Min. :20.00 Length:300 Length:300
## 1st Qu.: 75.75 1st Qu.:48.00 Class :character Class :character
## Median :150.50 Median :56.00 Mode :character Mode :character
## Mean :150.50 Mean :56.55
## 3rd Qu.:225.25 3rd Qu.:66.00
## Max. :300.00 Max. :90.00
## systolic_bp diastolic_bp total_cholesterol hdl
## Min. :103.0 Min. : 63.00 Min. :150.0 Length:300
## 1st Qu.:124.0 1st Qu.: 77.00 1st Qu.:192.0 Class :character
## Median :130.0 Median : 83.00 Median :206.0 Mode :character
## Mean :130.6 Mean : 83.05 Mean :207.1
## 3rd Qu.:137.0 3rd Qu.: 88.00 3rd Qu.:219.0
## Max. :164.0 Max. :106.00 Max. :273.0
## ldl triglycerides glucose smoking
## Length:300 Length:300 Length:300 Min. :0.0000
## Class :character Class :character Class :character 1st Qu.:0.0000
## Mode :character Mode :character Mode :character Median :0.0000
## Mean :0.4033
## 3rd Qu.:1.0000
## Max. :1.0000
## physical_activity family_history diabetes
## Length:300 Min. :0.0000 Min. :0.0000
## Class :character 1st Qu.:0.0000 1st Qu.:0.0000
## Mode :character Median :0.0000 Median :0.0000
## Mean :0.3233 Mean :0.2133
## 3rd Qu.:1.0000 3rd Qu.:0.0000
## Max. :1.0000 Max. :1.0000
colSums(is.na(cardio_data))
## id age sex bmi
## 0 0 0 0
## systolic_bp diastolic_bp total_cholesterol hdl
## 0 0 0 0
## ldl triglycerides glucose smoking
## 0 0 0 0
## physical_activity family_history diabetes
## 0 0 0
cardio_data %>% select(age, systolic_bp, diastolic_bp, bmi, total_cholesterol, hdl, ldl) %>% summary()
## age systolic_bp diastolic_bp bmi
## Min. :20.00 Min. :103.0 Min. : 63.00 Length:300
## 1st Qu.:48.00 1st Qu.:124.0 1st Qu.: 77.00 Class :character
## Median :56.00 Median :130.0 Median : 83.00 Mode :character
## Mean :56.55 Mean :130.6 Mean : 83.05
## 3rd Qu.:66.00 3rd Qu.:137.0 3rd Qu.: 88.00
## Max. :90.00 Max. :164.0 Max. :106.00
## total_cholesterol hdl ldl
## Min. :150.0 Length:300 Length:300
## 1st Qu.:192.0 Class :character Class :character
## Median :206.0 Mode :character Mode :character
## Mean :207.1
## 3rd Qu.:219.0
## Max. :273.0
Descripción de forma resumida la base de datos: Esta base de datos se basó en el análisis del riesgo cardiovascular de 300 personas, de las cuales se obtuvo información clinica, de su estilo de vida (actividad física y si fuma o no) y sobre sus antecedentes familiares.
#Creación de nuevas variables: hypertension y bmi_category.
cardio_data <- cardio_data %>% mutate(hypertension = ifelse(systolic_bp >= 140 | diastolic_bp >= 90, 1, 0), bmi_category = case_when(bmi < 18.5 ~ "Bajo peso", bmi >= 18.5 & bmi < 25 ~ "Normal", bmi >= 25 & bmi < 30 ~ "Sobrepeso", bmi >= 30 ~ "Obesidad"))
Interpretación de las nuevas variables: hypertension y bmi_category. Las nuevas variables creadas permiten clasifícar respecto a los datos si el paciente cumple con los criterios de presión arterial elevada (hipertensión) mientras que la otra variable clasifíca al paciente en una de las cuatro categorías de peso basadas en el IMC (bmi_category).
#2. Estimación puntual de parametros poblacionales. a) Estimación de la presión arterial media y desviación estándar:
#Estimación de la presión arterial sistólica
systolic_mean <- mean(cardio_data$systolic_bp)
systolic_sd <- sd(cardio_data$systolic_bp)
systolic_median <- median(cardio_data$systolic_bp)
Resultados. El promedio de la presión sistólica es de 130.56mmHg, la mediana es de 130mmHg, la desviación estándar es de 10.68mmHg.
#Estimación de la presión arterial diastólica
diastolic_mean <- mean(cardio_data$diastolic_bp)
diastolic_sd <- sd(cardio_data$diastolic_bp)
diastolic_median <- median(cardio_data$diastolic_bp)
Resultados. El promedio de la presión diastólica es de 83.053mmHg, la mediana es de 83mmHg y la desviación estándar es de 8.56mmHg.
# Resultados
bp_estimates <- data.frame(Parameter = c("Sistólica - Media", "Sistólica - DE", "Sistólica - Mediana", "Diastólica - Media", "Diastólica - DE", "Diastólica - Mediana"), Value = c(systolic_mean, systolic_sd, systolic_median, diastolic_mean, diastolic_sd, diastolic_median))
print(bp_estimates)
## Parameter Value
## 1 Sistólica - Media 130.563333
## 2 Sistólica - DE 10.688004
## 3 Sistólica - Mediana 130.000000
## 4 Diastólica - Media 83.053333
## 5 Diastólica - DE 8.565144
## 6 Diastólica - Mediana 83.000000
¿Los datos se encuentran en valores normales? Los valores no se encuentran normales ya que una presión arterial sistólica normal es igual o menor a 120mmHg y la presión arterial diastólica normal es igual a 80mmHg y en esta muestra se ve que la media de la presión arterial sistólica es de 130,56 y de la diastólica es de 83,05 lo cual nos indíca una Hipertensión Arterial Etapa 1. Lo que sugiere que la población estudiada tiene un riesgo cardiovascular.
# Prevalencia de hipertensión
hypertension_prev <- mean(cardio_data$hypertension)
# Por sexo
hypertension_by_sex <- cardio_data %>% group_by(sex) %>% summarise(prevalence = mean(hypertension), count = n())
# Por grupo de edad
cardio_data <- cardio_data %>% mutate(age_group = cut(age, breaks = c(20, 40, 60, 80, 100), labels = c("20-39", "40-59", "60-79", "80+")))
hypertension_by_age <- cardio_data %>% group_by(age_group) %>% summarise(prevalence = mean(hypertension), count = n())
print(hypertension_prev)
## [1] 0.28
print(hypertension_by_sex)
## # A tibble: 2 × 3
## sex prevalence count
## <chr> <dbl> <int>
## 1 Female 0.246 175
## 2 Male 0.328 125
print(hypertension_by_age)
## # A tibble: 5 × 3
## age_group prevalence count
## <fct> <dbl> <int>
## 1 20-39 0.105 38
## 2 40-59 0.119 143
## 3 60-79 0.495 95
## 4 80+ 0.789 19
## 5 <NA> 0.2 5
Descripción de la prevalencia. La prevalencia de hipertensión de esta muestra es de un 28%, los hombres tienen un porcentaje de 32,8% y las mujeres de 24,6%. El grupo etario con mayor prevalencia son las personas con 80 o más años con un 78,9% de prevalencia.
¿Estos resultados son comparables a nuestra realidad nacional? Estos resultados si son comparables con la realidad chilena, ya que se observa una mayor frecuencia en hombres que mujeres y una prevalencia general del 28% que coincide con el reportado para la población nacional. Los datos de la Encuesta Nacional de Salud de Chile se ven reflejados en esta muestra. #3. Cálculo de intervalos de confianza a) Intervalos de confianza para medias:
# Función para calcular IC 95% para la media
calculate_ci <- function(x) {n <- length(x)
error <- qt(0.975, df = n-1) * sd(x) / sqrt(n)
ci_lower <- mean(x) - error
ci_upper <- mean(x) + error
return(c(mean = mean(x), ci_lower = ci_lower, ci_upper = ci_upper))}
# IC para presión sistólica
systolic_ci <- calculate_ci(cardio_data$systolic_bp)
# IC para presión diastólica
diastolic_ci <- calculate_ci(cardio_data$diastolic_bp)
# IC para IMC
bmi_ci <- calculate_ci(cardio_data$bmi)
## Warning in mean.default(x): argument is not numeric or logical: returning NA
## Warning in mean.default(x): argument is not numeric or logical: returning NA
## Warning in mean.default(x): argument is not numeric or logical: returning NA
bmi_ci <- calculate_ci(cardio_data$bmi)
## Warning in mean.default(x): argument is not numeric or logical: returning NA
## Warning in mean.default(x): argument is not numeric or logical: returning NA
## Warning in mean.default(x): argument is not numeric or logical: returning NA
# Resultados
ci_results <- data.frame(
Parameter = c("Presión Sistólica", "Presión Diastólica", "IMC"),
Mean = c(systolic_ci[1], diastolic_ci[1], bmi_ci[1]),
Lower_CI = c(systolic_ci[2], diastolic_ci[2], bmi_ci[2]),
Upper_CI = c(systolic_ci[3], diastolic_ci[3], bmi_ci[3]))
print(ci_results)
## Parameter Mean Lower_CI Upper_CI
## 1 Presión Sistólica 130.56333 129.34898 131.77769
## 2 Presión Diastólica 83.05333 82.08017 84.02649
## 3 IMC NA NA NA
#Convertir variable de character a numérica
cardio_data$bmi2 <- as.numeric(cardio_data$bmi)
# IC para presión sistólica
systolic_ci <- calculate_ci(cardio_data$systolic_bp)
# IC para presión diastólica
diastolic_ci <- calculate_ci(cardio_data$diastolic_bp)
# IC para IMC
bmi_ci <- calculate_ci(cardio_data$bmi)
## Warning in mean.default(x): argument is not numeric or logical: returning NA
## Warning in mean.default(x): argument is not numeric or logical: returning NA
## Warning in mean.default(x): argument is not numeric or logical: returning NA
bmi_ci <- calculate_ci(cardio_data$bmi)
## Warning in mean.default(x): argument is not numeric or logical: returning NA
## Warning in mean.default(x): argument is not numeric or logical: returning NA
## Warning in mean.default(x): argument is not numeric or logical: returning NA
# Resultados
ci_results <- data.frame(Parameter = c("Presión Sistólica", "Presión Diastólica", "IMC"), Mean = c(systolic_ci[1], diastolic_ci[1], bmi_ci[1]), Lower_CI = c(systolic_ci[2], diastolic_ci[2], bmi_ci[2]), Upper_CI = c(systolic_ci[3], diastolic_ci[3], bmi_ci[3]))
print(ci_results)
## Parameter Mean Lower_CI Upper_CI
## 1 Presión Sistólica 130.56333 129.34898 131.77769
## 2 Presión Diastólica 83.05333 82.08017 84.02649
## 3 IMC NA NA NA
# Función para calcular IC 95% para proporciones
prop_ci <- function(successes, n) {prop <- successes/n
error <- qnorm(0.975) * sqrt(prop*(1-prop)/n)
ci_lower <- prop - error
ci_upper <- prop + error
return(c(proportion = prop, ci_lower = ci_lower, ci_upper = ci_upper))}
# IC para prevalencia de hipertensión
ht_count <- sum(cardio_data$hypertension)
total_count <- nrow(cardio_data)
hypertension_ci <- prop_ci(ht_count, total_count)
# Mostrar resultados
hypertension_ci_result <- data.frame(Parameter = "Prevalencia Hipertensión", Proportion = hypertension_ci[1], Lower_CI = hypertension_ci[2], Upper_CI = hypertension_ci[3])
print(hypertension_ci_result)
## Parameter Proportion Lower_CI Upper_CI
## proportion Prevalencia Hipertensión 0.28 0.2291919 0.3308081
#BONUS: desarrollen e interpreten el siguiente gráfico
# Visualizar IC para medias
ggplot(ci_results, aes(x = Parameter, y = Mean)) + geom_point(size = 3) + geom_errorbar(aes(ymin = Lower_CI, ymax = Upper_CI), width = 0.2) + theme_minimal() + labs(title = "Intervalos de confianza 95% para parámetros cardiovasculares", y = "Valor", x = "") + theme(axis.text.x = element_text(angle = 45, hjust = 1))
## Warning: Removed 1 row containing missing values or values outside the scale range
## (`geom_point()`).
Describan e interpreten la prevalencia de hipertensión. Comparen con
datos en Chile. #4. Regresión lineal simple a) Análisis de correlacion
entre IMC y presión arterial:
# Coeficiente de correlación
cor_bmi_sys <- cor(cardio_data$bmi2, cardio_data$systolic_bp)
# Gráfico de dispersión
ggplot(cardio_data, aes(x = bmi2, y = systolic_bp)) + geom_point(alpha = 0.5) + geom_smooth(method = "lm", color = "blue") + theme_minimal() + labs(title = paste("Correlación entre IMC y Presión Sistólica (r =", round(cor_bmi_sys, 3), ")"), x = "Índice de Masa Corporal (kg/m²)", y = "Presión Arterial Sistólica (mmHg)")
## `geom_smooth()` using formula = 'y ~ x'
Interpreten el gráfico. b) Ajuste del modelo de regresión lineal
simple;
# Modelo de regresión IMC vs. Presión Sistólica
model_bmi_sys <- lm(systolic_bp ~ bmi2, data = cardio_data)
# Resumen del modelo
summary_model <- summary(model_bmi_sys)
print(summary_model)
##
## Call:
## lm(formula = systolic_bp ~ bmi2, data = cardio_data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -25.1602 -5.6540 -0.6566 6.7064 28.7830
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 102.7089 3.1098 33.028 <2e-16 ***
## bmi2 1.0320 0.1134 9.099 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 9.471 on 298 degrees of freedom
## Multiple R-squared: 0.2174, Adjusted R-squared: 0.2148
## F-statistic: 82.79 on 1 and 298 DF, p-value: < 2.2e-16
# Extraer coeficientes
intercept <- coef(model_bmi_sys)[1]
slope <- coef(model_bmi_sys)[2]
# Ecuación de regresión
equation <- paste("Presión Sistólica =", round(intercept, 2), "+", round(slope, 2), "× IMC")
print(equation)
## [1] "Presión Sistólica = 102.71 + 1.03 × IMC"
Interpreten la ecuación lineal. c) Interpretación del modelo:
# R² y significancia
r_squared <- summary_model$r.squared
p_value <- summary_model$coefficients[2,4]
# Interpretación clínica
bmi_effect <- paste("Por cada unidad de aumento en el IMC, la presión sistólica cambia en promedio", round(slope, 2), "mmHg (p =", round(p_value, 4), ")")
variance_explained <- paste("El modelo explica el", round(r_squared*100, 1), "% de la variabilidad en la presión sistólica")
print(bmi_effect)
## [1] "Por cada unidad de aumento en el IMC, la presión sistólica cambia en promedio 1.03 mmHg (p = 0 )"
print(variance_explained)
## [1] "El modelo explica el 21.7 % de la variabilidad en la presión sistólica"
Interpreten el valor de R^2 y la variabilidad explicada por el modelo. Reflexionen sibre otras variabnles que podrían incorporar en el modelo, para mejorar el ajuste. Justifiquen con referencias. #5. Regresión lineal múltiple a) Exploración de predictores adicionales:
# Matriz de correlación
cardio_data$hdl2 <- as.numeric(cardio_data$hdl)
## Warning: NAs introducidos por coerción
cardio_data$ldl2 <- as.numeric(cardio_data$ldl)
## Warning: NAs introducidos por coerción
cor_matrix <- cor(cardio_data %>% select(systolic_bp, age, bmi2, total_cholesterol, hdl2, ldl2))
print(round(cor_matrix, 3))
## systolic_bp age bmi2 total_cholesterol hdl2 ldl2
## systolic_bp 1.000 0.530 0.466 0.367 NA NA
## age 0.530 1.000 0.149 0.301 NA NA
## bmi2 0.466 0.149 1.000 0.299 NA NA
## total_cholesterol 0.367 0.301 0.299 1.000 NA NA
## hdl2 NA NA NA NA 1 NA
## ldl2 NA NA NA NA NA 1
# Visualización de correlaciones
corrplot(cor_matrix, method = "circle", type = "upper", tl.col = "black", tl.srt = 45)
Interpreten el gráfico de correlación. b) Ajuste del modelo
multivariado:
# Modelo de regresión múltiple
model_multi <- lm(systolic_bp ~ age + bmi2 + total_cholesterol + sex, data = cardio_data)
# Resumen del modelo
summary_multi <- summary(model_multi)
print(summary_multi)
##
## Call:
## lm(formula = systolic_bp ~ age + bmi2 + total_cholesterol + sex,
## data = cardio_data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -23.2020 -4.8150 0.5455 5.2892 22.4699
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 74.91779 4.56177 16.423 < 2e-16 ***
## age 0.32096 0.03215 9.984 < 2e-16 ***
## bmi2 0.76382 0.09813 7.784 1.20e-13 ***
## total_cholesterol 0.07371 0.02264 3.256 0.00126 **
## sexMale 3.86748 0.91884 4.209 3.41e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 7.766 on 295 degrees of freedom
## Multiple R-squared: 0.4791, Adjusted R-squared: 0.472
## F-statistic: 67.83 on 4 and 295 DF, p-value: < 2.2e-16
# Comparación con modelo simple
anova(model_bmi_sys, model_multi)
## Analysis of Variance Table
##
## Model 1: systolic_bp ~ bmi2
## Model 2: systolic_bp ~ age + bmi2 + total_cholesterol + sex
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 298 26730
## 2 295 17793 3 8937.4 49.394 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Intenten interpretar la salida anterior. ¿Qué modelos estamos utilizando? ¿Se modificó el R^2? ¿Es mejor este ajuste que el modelo simple? c) Verificación de supuestos:
# Normalidad de residuos
shapiro.test(residuals(model_multi))
##
## Shapiro-Wilk normality test
##
## data: residuals(model_multi)
## W = 0.99557, p-value = 0.5541
# Homogeneidad de varianzas
ncvTest(model_multi)
## Non-constant Variance Score Test
## Variance formula: ~ fitted.values
## Chisquare = 0.1349669, Df = 1, p = 0.71334
# Independencia de residuos
dwtest(model_multi)
##
## Durbin-Watson test
##
## data: model_multi
## DW = 2.1239, p-value = 0.858
## alternative hypothesis: true autocorrelation is greater than 0
# Gráficos diagnóstico
par(mfrow = c(2, 2))
plot(model_multi)
par(mfrow = c(1, 1))
¿Se confirman algunos de los supuestos para realizar modelo de regresión lineal? d) Interpretación del moedleo ajustado:
# Coeficientes y significancia
coef_table <- round(summary_multi$coefficients, 3)
# R² ajustado
adj_r_squared <- summary_multi$adj.r.squared
# Interpretación clínica de cada coeficiente
age_effect <- paste("Efecto de la edad: Por cada año adicional, la presión sistólica cambia en promedio", coef_table[2,1], "mmHg (p =", coef_table[2,4], ")")
bmi_effect_adj <- paste("Efecto del IMC (ajustado): Por cada unidad de aumento en el IMC, la presión sistólica cambia en promedio", coef_table[3,1], "mmHg (p =", coef_table[3,4], ")")
chol_effect <- paste("Efecto del colesterol total: Por cada mg/dL adicional, la presión sistólica cambia en promedio", coef_table[4,1], "mmHg (p =", coef_table[4,4], ")")
sex_effect <- paste("Efecto del sexo: La diferencia promedio en presión sistólica entre hombres y mujeres es de", coef_table[5,1], "mmHg (p =", coef_table[5,4], ")")
model_quality <- paste("El modelo ajustado explica el", round(adj_r_squared*100, 1), "% de la variabilidad en la presión sistólica")
# Imprimir interpretaciones
cat(age_effect, "\n")
## Efecto de la edad: Por cada año adicional, la presión sistólica cambia en promedio 0.321 mmHg (p = 0 )
cat(bmi_effect_adj, "\n")
## Efecto del IMC (ajustado): Por cada unidad de aumento en el IMC, la presión sistólica cambia en promedio 0.764 mmHg (p = 0 )
cat(chol_effect, "\n")
## Efecto del colesterol total: Por cada mg/dL adicional, la presión sistólica cambia en promedio 0.074 mmHg (p = 0.001 )
cat(sex_effect, "\n")
## Efecto del sexo: La diferencia promedio en presión sistólica entre hombres y mujeres es de 3.867 mmHg (p = 0 )
cat(model_quality, "\n")
## El modelo ajustado explica el 47.2 % de la variabilidad en la presión sistólica
Expliquen las interpretaciones anterioress en el contexto clínico. ¿Son coherentes los resultados con la clínica? Pueden usar referencias para justificar.