datos_hipertension <- read.csv("~/Desktop/MC2/MachineLearning_I/Proyecto_001_MachineLearning_health/Data/pacientes_hipertension_dataset.csv")
datos_hipertension$FechaNacimiento <- as.Date(datos_hipertension$FechaNacimiento, format = "%Y-%m-%d")
# generamos una columna "Edad"
hoy <- Sys.Date()
edad_vector <- floor(as.numeric(difftime(hoy, datos_hipertension$FechaNacimiento, units = "days")) / 365.25)
datos_hipertension[["Edad"]] <- edad_vector
# Eliminamos aquellos que tienen edades erroneas
datos_hipertension <- datos_hipertension[datos_hipertension$Edad >= 0 & datos_hipertension$Edad <= 100, ]
datos_hipertension$Edad <- as.integer(datos_hipertension$Edad)
# Cambiamos algunas variables a binario para facilitarnos luego el análisis
datos_hipertension$Hipertenso[datos_hipertension$Hipertenso == "Dí"] <- "Sí"
datos_hipertension$Hipertenso <- ifelse(datos_hipertension$Hipertenso == "Sí", 1, 0)
datos_hipertension$Medicacion <- ifelse(datos_hipertension$Medicacion == "Sí", 1, 0)
datos_hipertension$Diabetes <- ifelse(datos_hipertension$Diabetes == "Sí", 1, 0)
datos_hipertension$Fumador <- ifelse(datos_hipertension$Fumador == "Sí", 1, 0)
datos_hipertension$RetencionLiquidos <- ifelse(datos_hipertension$RetencionLiquidos == "Sí", 1, 0)
# Eliminamos los espacios dentro de las variables que nos pueden dar problemas
datos_hipertension <- data.frame(lapply(datos_hipertension, function(x) {
if (is.character(x)) {
gsub(" ", "", x)
} else {
x
}
}), stringsAsFactors = FALSE)
# Eliminamos las 2 primeras columnas (ID y FechaNacimiento)
datos_hipertension <- datos_hipertension[, -c(1,2)]
summary(datos_hipertension)
## Genero PaisOrigen Peso_kg Altura_cm
## Length:996 Length:996 Min. : 50.00 Min. :150.0
## Class :character Class :character 1st Qu.: 65.00 1st Qu.:162.0
## Mode :character Mode :character Median : 83.00 Median :174.0
## Mean : 84.34 Mean :174.7
## 3rd Qu.:104.00 3rd Qu.:187.0
## Max. :120.00 Max. :200.0
##
## HabitoDeDeporte Fumador PaquetesSemanales Alimentacion
## Length:996 Min. :0.0 Min. :0.000 Length:996
## Class :character 1st Qu.:0.0 1st Qu.:0.000 Class :character
## Mode :character Median :0.5 Median :0.500 Mode :character
## Mean :0.5 Mean :1.522
## 3rd Qu.:1.0 3rd Qu.:3.000
## Max. :1.0 Max. :5.000
##
## ActividadFisica AntecedentesFamiliares NivelEstres
## Length:996 Length:996 Length:996
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
##
##
##
##
## Colesterol FrecuenciaControlMedico Medicacion Diabetes
## Length:996 Length:996 Min. :0.0000 Min. :0.0000
## Class :character Class :character 1st Qu.:0.0000 1st Qu.:0.0000
## Mode :character Mode :character Median :0.0000 Median :0.0000
## Mean :0.4503 Mean :0.1827
## 3rd Qu.:1.0000 3rd Qu.:0.0000
## Max. :1.0000 Max. :1.0000
## NA's :1
## HorasSueno RitmoCardiacoReposo EscalaDolorArticular
## Min. :4.000 Min. : 50.00 Min. : 0.000
## 1st Qu.:5.000 1st Qu.: 62.00 1st Qu.: 2.000
## Median :7.000 Median : 75.00 Median : 5.000
## Mean :6.617 Mean : 74.84 Mean : 4.842
## 3rd Qu.:8.000 3rd Qu.: 87.00 3rd Qu.: 8.000
## Max. :9.000 Max. :100.00 Max. :10.000
## NA's :1
## FrecuenciaConsumoAlcohol Hipertenso GradoHipertension
## Length:996 Min. :0.0000 Length:996
## Class :character 1st Qu.:0.0000 Class :character
## Mode :character Median :0.0000 Mode :character
## Mean :0.3012
## 3rd Qu.:1.0000
## Max. :1.0000
##
## DanoOrganosDiana RetencionLiquidos AjusteDieta PresionSistolica
## Length:996 Min. :0.0000 Length:996 Min. :100.0
## Class :character 1st Qu.:0.0000 Class :character 1st Qu.:111.0
## Mode :character Median :0.0000 Mode :character Median :122.0
## Mean :0.1295 Mean :128.8
## 3rd Qu.:0.0000 3rd Qu.:147.0
## Max. :1.0000 Max. :180.0
##
## PresionDiastolica Edad
## Min. : 70.00 Min. :20.00
## 1st Qu.: 75.00 1st Qu.:37.00
## Median : 81.00 Median :54.00
## Mean : 84.15 Mean :52.96
## 3rd Qu.: 93.00 3rd Qu.:70.00
## Max. :110.00 Max. :86.00
##
analizar_columnas_numericas <- function(dataset) {
for (columna in names(dataset)) {
# Verificamos si la columna es numérica
if (is.numeric(dataset[[columna]])) {
# Comprobamos si es una columna binaria (0/1)
valores_unicos <- unique(na.omit(dataset[[columna]]))
if (length(valores_unicos) == 2 && all(sort(valores_unicos) == c(0, 1))) {
cat("La columna", columna, "es binaria (0/1). Se omite el escalado y análisis numérico.\n\n")
next # Pasamos a la siguiente columna sin procesar ésta
}
# --- Aquí va el análisis normal para columnas numéricas (no binarias) ---
cat("Procesando la columna numérica:", columna, "\n")
columna_datos <- dataset[[columna]]
datos_sinNA <- na.omit(columna_datos)
cat("Mín:", min(datos_sinNA),
", Máx:", max(datos_sinNA),
", Rango:", max(datos_sinNA) - min(datos_sinNA), "\n")
cat("Media:", mean(datos_sinNA),
"y Mediana:", median(datos_sinNA), "\n")
# Gráficos: Boxplot e Histograma
boxplot(datos_sinNA, main = paste("Boxplot de", columna), ylab = columna)
hist(datos_sinNA, main = paste("Histograma de", columna),
xlab = columna, col = "lightblue")
# Test de normalidad Shapiro-Wilk
test_shapiro <- shapiro.test(datos_sinNA)
cat("Resultado del test Shapiro-Wilk:\n")
print(test_shapiro)
# Escalar la variable (se crea la versión escalada)
datos_escalados <- (columna_datos - mean(columna_datos, na.rm = TRUE)) /
sd(columna_datos, na.rm = TRUE)
nombre_escalado <- paste0(columna, "_escalados")
dataset[[nombre_escalado]] <- datos_escalados
cat("Datos escalados: media =", round(mean(datos_escalados, na.rm = TRUE), 2),
"y sd =", round(sd(datos_escalados, na.rm = TRUE), 2), "\n")
# Mostrar cantidad de NA's
na_count <- sum(is.na(columna_datos))
cat("Cantidad de NAs en", columna, ":", na_count, "\n")
# Detectar outliers usando IQR
Q1 <- quantile(datos_sinNA, 0.25)
Q3 <- quantile(datos_sinNA, 0.75)
IQR_val <- IQR(datos_sinNA)
lower_bound <- Q1 - 1.5 * IQR_val
upper_bound <- Q3 + 1.5 * IQR_val
outliers <- datos_sinNA[datos_sinNA < lower_bound | datos_sinNA > upper_bound]
if (length(outliers) > 0) {
cat("Se encontraron", length(outliers), "outliers en", columna, "\n")
} else {
cat("No se encontraron outliers en", columna, "\n")
}
cat("\n")
}
}
return(dataset)
}
datos_hipertension <- analizar_columnas_numericas(datos_hipertension)
## Procesando la columna numérica: Peso_kg
## Mín: 50 , Máx: 120 , Rango: 70
## Media: 84.34237 y Mediana: 83
## Resultado del test Shapiro-Wilk:
##
## Shapiro-Wilk normality test
##
## data: datos_sinNA
## W = 0.94409, p-value < 2.2e-16
##
## Datos escalados: media = 0 y sd = 1
## Cantidad de NAs en Peso_kg : 0
## No se encontraron outliers en Peso_kg
##
## Procesando la columna numérica: Altura_cm
## Mín: 150 , Máx: 200 , Rango: 50
## Media: 174.6526 y Mediana: 174
## Resultado del test Shapiro-Wilk:
##
## Shapiro-Wilk normality test
##
## data: datos_sinNA
## W = 0.95736, p-value < 2.2e-16
##
## Datos escalados: media = 0 y sd = 1
## Cantidad de NAs en Altura_cm : 0
## No se encontraron outliers en Altura_cm
##
## La columna Fumador es binaria (0/1). Se omite el escalado y análisis numérico.
##
## Procesando la columna numérica: PaquetesSemanales
## Mín: 0 , Máx: 5 , Rango: 5
## Media: 1.522088 y Mediana: 0.5
## Resultado del test Shapiro-Wilk:
##
## Shapiro-Wilk normality test
##
## data: datos_sinNA
## W = 0.77396, p-value < 2.2e-16
##
## Datos escalados: media = 0 y sd = 1
## Cantidad de NAs en PaquetesSemanales : 0
## No se encontraron outliers en PaquetesSemanales
##
## La columna Medicacion es binaria (0/1). Se omite el escalado y análisis numérico.
##
## La columna Diabetes es binaria (0/1). Se omite el escalado y análisis numérico.
##
## Procesando la columna numérica: HorasSueno
## Mín: 4 , Máx: 9 , Rango: 5
## Media: 6.61747 y Mediana: 7
## Resultado del test Shapiro-Wilk:
##
## Shapiro-Wilk normality test
##
## data: datos_sinNA
## W = 0.91223, p-value < 2.2e-16
##
## Datos escalados: media = 0 y sd = 1
## Cantidad de NAs en HorasSueno : 0
## No se encontraron outliers en HorasSueno
##
## Procesando la columna numérica: RitmoCardiacoReposo
## Mín: 50 , Máx: 100 , Rango: 50
## Media: 74.84121 y Mediana: 75
## Resultado del test Shapiro-Wilk:
##
## Shapiro-Wilk normality test
##
## data: datos_sinNA
## W = 0.95383, p-value < 2.2e-16
##
## Datos escalados: media = 0 y sd = 1
## Cantidad de NAs en RitmoCardiacoReposo : 1
## No se encontraron outliers en RitmoCardiacoReposo
##
## Procesando la columna numérica: EscalaDolorArticular
## Mín: 0 , Máx: 10 , Rango: 10
## Media: 4.842369 y Mediana: 5
## Resultado del test Shapiro-Wilk:
##
## Shapiro-Wilk normality test
##
## data: datos_sinNA
## W = 0.9332, p-value < 2.2e-16
##
## Datos escalados: media = 0 y sd = 1
## Cantidad de NAs en EscalaDolorArticular : 0
## No se encontraron outliers en EscalaDolorArticular
##
## La columna Hipertenso es binaria (0/1). Se omite el escalado y análisis numérico.
##
## La columna RetencionLiquidos es binaria (0/1). Se omite el escalado y análisis numérico.
##
## Procesando la columna numérica: PresionSistolica
## Mín: 100 , Máx: 180 , Rango: 80
## Media: 128.8233 y Mediana: 122
## Resultado del test Shapiro-Wilk:
##
## Shapiro-Wilk normality test
##
## data: datos_sinNA
## W = 0.88381, p-value < 2.2e-16
##
## Datos escalados: media = 0 y sd = 1
## Cantidad de NAs en PresionSistolica : 0
## No se encontraron outliers en PresionSistolica
##
## Procesando la columna numérica: PresionDiastolica
## Mín: 70 , Máx: 110 , Rango: 40
## Media: 84.14759 y Mediana: 81
## Resultado del test Shapiro-Wilk:
##
## Shapiro-Wilk normality test
##
## data: datos_sinNA
## W = 0.89205, p-value < 2.2e-16
##
## Datos escalados: media = 0 y sd = 1
## Cantidad de NAs en PresionDiastolica : 0
## No se encontraron outliers en PresionDiastolica
##
## Procesando la columna numérica: Edad
## Mín: 20 , Máx: 86 , Rango: 66
## Media: 52.95783 y Mediana: 54
## Resultado del test Shapiro-Wilk:
##
## Shapiro-Wilk normality test
##
## data: datos_sinNA
## W = 0.95288, p-value < 2.2e-16
##
## Datos escalados: media = 0 y sd = 1
## Cantidad de NAs en Edad : 0
## No se encontraron outliers en Edad
analizar_columnas_categoricas <- function(dataset) {
# Inicializamos la lista de dummies
dummies_list <- list()
# Seleccionamos las columnas categóricas (character o factor)
columnas_categoricas <- names(dataset)[sapply(dataset, function(x) is.character(x) || is.factor(x))]
# Recorremos cada columna categórica
for (columna in columnas_categoricas) {
cat("Valores únicos en", columna, "son:\n",
paste(unique(dataset[[columna]]), collapse = ", "), "\n")
cat("Frecuencia de cada categoría:\n")
tabla_frecuencia <- table(dataset[[columna]], useNA = "ifany")
print(tabla_frecuencia)
cat("Porcentajes de cada categoría:\n")
print(round(prop.table(tabla_frecuencia) * 100, 2))
# Barplot de frecuencias
barplot(tabla_frecuencia, main = paste("Distribución de", columna),
xlab = columna, col = "lightgreen", las = 2, horiz = TRUE)
# Reemplazar NA por "NA" para que los detecte
columna_datos2 <- ifelse(is.na(dataset[[columna]]), "NA", dataset[[columna]])
# Crear un data frame temporal para la columna convertida a factor
temp_df <- data.frame(columna_datos = as.factor(columna_datos2),
stringsAsFactors = FALSE)
rownames(temp_df) <- seq_len(nrow(dataset))
# Crear variables dummy usando model.matrix sin eliminar filas
dummies <- model.matrix(~ columna_datos - 1, data = temp_df, na.action = na.pass)
colnames(dummies) <- gsub("columna_datos", columna, colnames(dummies))
cat("Variables dummy creadas (primeras filas):\n")
print(head(dummies))
# Agregar cada variable dummy al dataset
for (dummy_name in colnames(dummies)) {
if(nrow(dummies) == nrow(dataset)) {
dataset[[dummy_name]] <- dummies[, dummy_name]
} else {
vector_dummy <- dummies[, dummy_name]
length(vector_dummy) <- nrow(dataset)
dataset[[dummy_name]] <- vector_dummy
}
}
# Guardamos la matriz dummy en la lista
dummies_list[[columna]] <- dummies
cat("\n")
}
# Devolvemos una lista con el dataset actualizado y la lista de dummies
return(list(dataset = dataset, dummies_list = dummies_list))
}
resultado <- analizar_columnas_categoricas(datos_hipertension)
## Valores únicos en Genero son:
## M, F
## Frecuencia de cada categoría:
##
## F M
## 512 484
## Porcentajes de cada categoría:
##
## F M
## 51.41 48.59
## Variables dummy creadas (primeras filas):
## GeneroF GeneroM
## 1 0 1
## 2 0 1
## 3 0 1
## 4 0 1
## 5 1 0
## 6 1 0
##
## Valores únicos en PaisOrigen son:
## Chile, Argentina, México, CostaRica, Ecuador, Perú, Uruguay, Colombia, España, Venezuela
## Frecuencia de cada categoría:
##
## Argentina Chile Colombia CostaRica Ecuador España México Perú
## 104 114 89 104 91 88 109 106
## Uruguay Venezuela
## 92 99
## Porcentajes de cada categoría:
##
## Argentina Chile Colombia CostaRica Ecuador España México Perú
## 10.44 11.45 8.94 10.44 9.14 8.84 10.94 10.64
## Uruguay Venezuela
## 9.24 9.94
## Variables dummy creadas (primeras filas):
## PaisOrigenArgentina PaisOrigenChile PaisOrigenColombia PaisOrigenCostaRica
## 1 0 1 0 0
## 2 1 0 0 0
## 3 0 0 0 0
## 4 0 0 0 1
## 5 0 0 0 0
## 6 0 0 0 0
## PaisOrigenEcuador PaisOrigenEspaña PaisOrigenMéxico PaisOrigenPerú
## 1 0 0 0 0
## 2 0 0 0 0
## 3 0 0 1 0
## 4 0 0 0 0
## 5 1 0 0 0
## 6 0 0 0 1
## PaisOrigenUruguay PaisOrigenVenezuela
## 1 0 0
## 2 0 0
## 3 0 0
## 4 0 0
## 5 0 0
## 6 0 0
##
## Valores únicos en HabitoDeDeporte son:
## Poco, Moderado, Mucho, Nada
## Frecuencia de cada categoría:
##
## Moderado Mucho Nada Poco
## 217 246 258 275
## Porcentajes de cada categoría:
##
## Moderado Mucho Nada Poco
## 21.79 24.70 25.90 27.61
## Variables dummy creadas (primeras filas):
## HabitoDeDeporteModerado HabitoDeDeporteMucho HabitoDeDeporteNada
## 1 0 0 0
## 2 1 0 0
## 3 0 0 0
## 4 0 0 0
## 5 0 1 0
## 6 0 1 0
## HabitoDeDeportePoco
## 1 1
## 2 0
## 3 1
## 4 1
## 5 0
## 6 0
##
## Valores únicos en Alimentacion son:
## PocoSana, Sana, Regular, NA
## Frecuencia de cada categoría:
##
## PocoSana Regular Sana <NA>
## 338 333 324 1
## Porcentajes de cada categoría:
##
## PocoSana Regular Sana <NA>
## 33.94 33.43 32.53 0.10
## Variables dummy creadas (primeras filas):
## AlimentacionNA AlimentacionPocoSana AlimentacionRegular AlimentacionSana
## 1 0 1 0 0
## 2 0 0 0 1
## 3 0 0 0 1
## 4 0 0 0 1
## 5 0 1 0 0
## 6 0 1 0 0
##
## Valores únicos en ActividadFisica son:
## Nada, Poca, Intensa, Moderada, NA
## Frecuencia de cada categoría:
##
## Intensa Moderada Nada Poca <NA>
## 211 258 258 267 2
## Porcentajes de cada categoría:
##
## Intensa Moderada Nada Poca <NA>
## 21.18 25.90 25.90 26.81 0.20
## Variables dummy creadas (primeras filas):
## ActividadFisicaIntensa ActividadFisicaModerada ActividadFisicaNA
## 1 0 0 0
## 2 0 0 0
## 3 0 0 0
## 4 0 0 0
## 5 1 0 0
## 6 0 1 0
## ActividadFisicaNada ActividadFisicaPoca
## 1 1 0
## 2 1 0
## 3 0 1
## 4 0 1
## 5 0 0
## 6 0 0
##
## Valores únicos en AntecedentesFamiliares son:
## Abueloshipertensos, Ambospadreshipertensos, Ninguno, Padrehipertenso, Madrehipertensa, MadreNA
## Frecuencia de cada categoría:
##
## Abueloshipertensos Ambospadreshipertensos Madrehipertensa
## 178 203 202
## MadreNA Ninguno Padrehipertenso
## 1 224 188
## Porcentajes de cada categoría:
##
## Abueloshipertensos Ambospadreshipertensos Madrehipertensa
## 17.87 20.38 20.28
## MadreNA Ninguno Padrehipertenso
## 0.10 22.49 18.88
## Variables dummy creadas (primeras filas):
## AntecedentesFamiliaresAbueloshipertensos
## 1 1
## 2 0
## 3 0
## 4 0
## 5 0
## 6 1
## AntecedentesFamiliaresAmbospadreshipertensos
## 1 0
## 2 1
## 3 0
## 4 0
## 5 0
## 6 0
## AntecedentesFamiliaresMadrehipertensa AntecedentesFamiliaresMadreNA
## 1 0 0
## 2 0 0
## 3 0 0
## 4 0 0
## 5 0 0
## 6 0 0
## AntecedentesFamiliaresNinguno AntecedentesFamiliaresPadrehipertenso
## 1 0 0
## 2 0 0
## 3 1 0
## 4 1 0
## 5 1 0
## 6 0 0
##
## Valores únicos en NivelEstres son:
## Medio, Bajo, Alto
## Frecuencia de cada categoría:
##
## Alto Bajo Medio
## 342 320 334
## Porcentajes de cada categoría:
##
## Alto Bajo Medio
## 34.34 32.13 33.53
## Variables dummy creadas (primeras filas):
## NivelEstresAlto NivelEstresBajo NivelEstresMedio
## 1 0 0 1
## 2 0 1 0
## 3 0 0 1
## 4 0 0 1
## 5 0 1 0
## 6 0 1 0
##
## Valores únicos en Colesterol son:
## Normal, Alto, NA
## Frecuencia de cada categoría:
##
## Alto Normal <NA>
## 500 494 2
## Porcentajes de cada categoría:
##
## Alto Normal <NA>
## 50.2 49.6 0.2
## Variables dummy creadas (primeras filas):
## ColesterolAlto ColesterolNA ColesterolNormal
## 1 0 0 1
## 2 1 0 0
## 3 1 0 0
## 4 1 0 0
## 5 0 0 1
## 6 0 0 1
##
## Valores únicos en FrecuenciaControlMedico son:
## Trimestral, Semestral, Anual, NA
## Frecuencia de cada categoría:
##
## Anual Semestral Trimestral <NA>
## 328 348 319 1
## Porcentajes de cada categoría:
##
## Anual Semestral Trimestral <NA>
## 32.93 34.94 32.03 0.10
## Variables dummy creadas (primeras filas):
## FrecuenciaControlMedicoAnual FrecuenciaControlMedicoNA
## 1 0 0
## 2 0 0
## 3 0 0
## 4 0 0
## 5 0 0
## 6 1 0
## FrecuenciaControlMedicoSemestral FrecuenciaControlMedicoTrimestral
## 1 0 1
## 2 1 0
## 3 1 0
## 4 1 0
## 5 0 1
## 6 0 0
##
## Valores únicos en FrecuenciaConsumoAlcohol son:
## Baja, Ninguno, Moderada, Alta
## Frecuencia de cada categoría:
##
## Alta Baja Moderada Ninguno
## 242 263 249 242
## Porcentajes de cada categoría:
##
## Alta Baja Moderada Ninguno
## 24.30 26.41 25.00 24.30
## Variables dummy creadas (primeras filas):
## FrecuenciaConsumoAlcoholAlta FrecuenciaConsumoAlcoholBaja
## 1 0 1
## 2 0 0
## 3 0 0
## 4 0 1
## 5 1 0
## 6 0 0
## FrecuenciaConsumoAlcoholModerada FrecuenciaConsumoAlcoholNinguno
## 1 0 0
## 2 0 1
## 3 1 0
## 4 0 0
## 5 0 0
## 6 1 0
##
## Valores únicos en GradoHipertension son:
## NoHTA, Etapa1, Etapa2, Etapa3, Etapa7
## Frecuencia de cada categoría:
##
## Etapa1 Etapa2 Etapa3 Etapa7 NoHTA
## 166 98 32 1 699
## Porcentajes de cada categoría:
##
## Etapa1 Etapa2 Etapa3 Etapa7 NoHTA
## 16.67 9.84 3.21 0.10 70.18
## Variables dummy creadas (primeras filas):
## GradoHipertensionEtapa1 GradoHipertensionEtapa2 GradoHipertensionEtapa3
## 1 0 0 0
## 2 0 0 0
## 3 0 0 0
## 4 0 0 0
## 5 0 0 0
## 6 0 0 0
## GradoHipertensionEtapa7 GradoHipertensionNoHTA
## 1 0 1
## 2 0 1
## 3 0 1
## 4 0 1
## 5 0 1
## 6 0 1
##
## Valores únicos en DanoOrganosDiana son:
## Ninguno, Severo, Leve, Moderado
## Frecuencia de cada categoría:
##
## Leve Moderado Ninguno Severo
## 131 94 752 19
## Porcentajes de cada categoría:
##
## Leve Moderado Ninguno Severo
## 13.15 9.44 75.50 1.91
## Variables dummy creadas (primeras filas):
## DanoOrganosDianaLeve DanoOrganosDianaModerado DanoOrganosDianaNinguno
## 1 0 0 1
## 2 0 0 1
## 3 0 0 1
## 4 0 0 1
## 5 0 0 1
## 6 0 0 1
## DanoOrganosDianaSevero
## 1 0
## 2 0
## 3 0
## 4 0
## 5 0
## 6 0
##
## Valores únicos en AjusteDieta son:
## Cumple, Parcial, NoCumple
## Frecuencia de cada categoría:
##
## Cumple NoCumple Parcial
## 406 309 281
## Porcentajes de cada categoría:
##
## Cumple NoCumple Parcial
## 40.76 31.02 28.21
## Variables dummy creadas (primeras filas):
## AjusteDietaCumple AjusteDietaNoCumple AjusteDietaParcial
## 1 1 0 0
## 2 0 0 1
## 3 0 0 1
## 4 1 0 0
## 5 0 1 0
## 6 0 0 1
datos_hipertension <- resultado$dataset
dummies <- resultado$dummies_list
univar_num_escaladas <- function(dataset) {
variables_escaladas <- dplyr::select(dataset, dplyr::contains("_escalados"))
tabla_resultados <- data.frame(Variable = character(),
p_value = numeric(),
coeficiente = numeric(),
stringsAsFactors = FALSE)
cat("\n--- Modelos Logísticos para Variables Numéricas Escaladas ---\n")
for (var in names(variables_escaladas)) {
formula_modelo <- as.formula(paste("Hipertenso ~", var))
modelo <- glm(formula_modelo, data = dataset, family = binomial(link = "logit"))
resumen <- summary(modelo)
if (nrow(resumen$coefficients) > 1) {
p_value <- resumen$coefficients[2, "Pr(>|z|)"]
coeficiente <- resumen$coefficients[2, "Estimate"]
} else {
p_value <- NA
coeficiente <- NA
}
tabla_resultados <- rbind(tabla_resultados,
data.frame(Variable = var,
p_value = p_value,
coeficiente = coeficiente,
stringsAsFactors = FALSE))
cat("Variable:", var, "\n")
cat("Fórmula:", deparse(formula_modelo), "\n")
cat("P-value:", p_value, "\n")
cat("Coeficiente:", coeficiente, "\n")
cat("--------------------------------\n")
}
cat("Tabla de resultados para variables escaladas:\n")
print(tabla_resultados)
return(tabla_resultados)
}
tabla_var_num <- univar_num_escaladas(datos_hipertension)
##
## --- Modelos Logísticos para Variables Numéricas Escaladas ---
## Variable: Peso_kg_escalados
## Fórmula: Hipertenso ~ Peso_kg_escalados
## P-value: 0.1582788
## Coeficiente: 0.09761392
## --------------------------------
## Variable: Altura_cm_escalados
## Fórmula: Hipertenso ~ Altura_cm_escalados
## P-value: 0.1777837
## Coeficiente: -0.09337129
## --------------------------------
## Variable: PaquetesSemanales_escalados
## Fórmula: Hipertenso ~ PaquetesSemanales_escalados
## P-value: 5.906823e-11
## Coeficiente: 0.4462362
## --------------------------------
## Variable: HorasSueno_escalados
## Fórmula: Hipertenso ~ HorasSueno_escalados
## P-value: 0.9589318
## Coeficiente: -0.003558046
## --------------------------------
## Variable: RitmoCardiacoReposo_escalados
## Fórmula: Hipertenso ~ RitmoCardiacoReposo_escalados
## P-value: 0.4116221
## Coeficiente: 0.056767
## --------------------------------
## Variable: EscalaDolorArticular_escalados
## Fórmula: Hipertenso ~ EscalaDolorArticular_escalados
## P-value: 0.03122463
## Coeficiente: 0.1495481
## --------------------------------
## Variable: PresionSistolica_escalados
## Fórmula: Hipertenso ~ PresionSistolica_escalados
## P-value: 2.810984e-22
## Coeficiente: 8.17527
## --------------------------------
## Variable: PresionDiastolica_escalados
## Fórmula: Hipertenso ~ PresionDiastolica_escalados
## P-value: 7.81021e-19
## Coeficiente: 9.516386
## --------------------------------
## Variable: Edad_escalados
## Fórmula: Hipertenso ~ Edad_escalados
## P-value: 4.107729e-33
## Coeficiente: 1.049349
## --------------------------------
## Tabla de resultados para variables escaladas:
## Variable p_value coeficiente
## 1 Peso_kg_escalados 1.582788e-01 0.097613920
## 2 Altura_cm_escalados 1.777837e-01 -0.093371290
## 3 PaquetesSemanales_escalados 5.906823e-11 0.446236231
## 4 HorasSueno_escalados 9.589318e-01 -0.003558046
## 5 RitmoCardiacoReposo_escalados 4.116221e-01 0.056767004
## 6 EscalaDolorArticular_escalados 3.122463e-02 0.149548075
## 7 PresionSistolica_escalados 2.810984e-22 8.175269984
## 8 PresionDiastolica_escalados 7.810210e-19 9.516385582
## 9 Edad_escalados 4.107729e-33 1.049348637
univar_dummies <- function(dataset, dummies_list) {
tabla_resultados_dummies <- data.frame(Variable = character(),
p_value = numeric(),
coeficiente = numeric(),
stringsAsFactors = FALSE)
cat("\n--- Modelos Logísticos para Variables Dummy ---\n")
for (var in names(dummies_list)) {
dummy_matrix <- dummies_list[[var]]
dummy_df <- as.data.frame(dummy_matrix)
for (dummy_var in colnames(dummy_df)) {
temp_data <- cbind(dataset, dummy = dummy_df[[dummy_var]])
formula_modelo <- as.formula("Hipertenso ~ dummy")
modelo_dummy <- glm(formula_modelo, data = temp_data, family = binomial(link = "logit"))
resumen_dummy <- summary(modelo_dummy)
if (nrow(resumen_dummy$coefficients) > 1) {
p_value_dummy <- resumen_dummy$coefficients[2, "Pr(>|z|)"]
coef_dummy <- resumen_dummy$coefficients[2, "Estimate"]
} else {
p_value_dummy <- NA
coef_dummy <- NA
}
tabla_resultados_dummies <- rbind(tabla_resultados_dummies,
data.frame(Variable = dummy_var,
p_value = p_value_dummy,
coeficiente = coef_dummy,
stringsAsFactors = FALSE))
cat("Variable dummy:", dummy_var, "\n")
cat("Fórmula:", deparse(formula_modelo), "\n")
cat("P-value:", p_value_dummy, "\n")
cat("Coeficiente:", coef_dummy, "\n")
cat("--------------------------------\n")
}
}
cat("Tabla de resultados para variables dummy:\n")
print(tabla_resultados_dummies)
return(tabla_resultados_dummies)
}
tabla_var_dummies <- univar_dummies(datos_hipertension, dummies)
##
## --- Modelos Logísticos para Variables Dummy ---
## Variable dummy: GeneroF
## Fórmula: Hipertenso ~ dummy
## P-value: 0.8664625
## Coeficiente: -0.02323412
## --------------------------------
## Variable dummy: GeneroM
## Fórmula: Hipertenso ~ dummy
## P-value: 0.8664625
## Coeficiente: 0.02323412
## --------------------------------
## Variable dummy: PaisOrigenArgentina
## Fórmula: Hipertenso ~ dummy
## P-value: 0.5460112
## Coeficiente: 0.1337193
## --------------------------------
## Variable dummy: PaisOrigenChile
## Fórmula: Hipertenso ~ dummy
## P-value: 0.4694293
## Coeficiente: -0.1611998
## --------------------------------
## Variable dummy: PaisOrigenColombia
## Fórmula: Hipertenso ~ dummy
## P-value: 0.7727768
## Coeficiente: 0.06915358
## --------------------------------
## Variable dummy: PaisOrigenCostaRica
## Fórmula: Hipertenso ~ dummy
## P-value: 0.5996334
## Coeficiente: -0.12098
## --------------------------------
## Variable dummy: PaisOrigenEcuador
## Fórmula: Hipertenso ~ dummy
## P-value: 0.8874687
## Coeficiente: 0.03373814
## --------------------------------
## Variable dummy: PaisOrigenEspaña
## Fórmula: Hipertenso ~ dummy
## P-value: 0.7140684
## Coeficiente: -0.09055958
## --------------------------------
## Variable dummy: PaisOrigenMéxico
## Fórmula: Hipertenso ~ dummy
## P-value: 0.08489755
## Coeficiente: -0.4119798
## --------------------------------
## Variable dummy: PaisOrigenPerú
## Fórmula: Hipertenso ~ dummy
## P-value: 0.6660303
## Coeficiente: -0.09823844
## --------------------------------
## Variable dummy: PaisOrigenUruguay
## Fórmula: Hipertenso ~ dummy
## P-value: 0.003807195
## Coeficiente: 0.6446528
## --------------------------------
## Variable dummy: PaisOrigenVenezuela
## Fórmula: Hipertenso ~ dummy
## P-value: 0.9667236
## Coeficiente: 0.009615459
## --------------------------------
## Variable dummy: HabitoDeDeporteModerado
## Fórmula: Hipertenso ~ dummy
## P-value: 0.1179534
## Coeficiente: -0.2709542
## --------------------------------
## Variable dummy: HabitoDeDeporteMucho
## Fórmula: Hipertenso ~ dummy
## P-value: 0.002380149
## Coeficiente: -0.52164
## --------------------------------
## Variable dummy: HabitoDeDeporteNada
## Fórmula: Hipertenso ~ dummy
## P-value: 0.006603356
## Coeficiente: 0.4156381
## --------------------------------
## Variable dummy: HabitoDeDeportePoco
## Fórmula: Hipertenso ~ dummy
## P-value: 0.08487169
## Coeficiente: 0.2610885
## --------------------------------
## Variable dummy: AlimentacionNA
## Fórmula: Hipertenso ~ dummy
## P-value: 0.9670591
## Coeficiente: 13.41097
## --------------------------------
## Variable dummy: AlimentacionPocoSana
## Fórmula: Hipertenso ~ dummy
## P-value: 0.04437355
## Coeficiente: -0.3003914
## --------------------------------
## Variable dummy: AlimentacionRegular
## Fórmula: Hipertenso ~ dummy
## P-value: 0.1176043
## Coeficiente: 0.2263131
## --------------------------------
## Variable dummy: AlimentacionSana
## Fórmula: Hipertenso ~ dummy
## P-value: 0.7224251
## Coeficiente: 0.05218575
## --------------------------------
## Variable dummy: ActividadFisicaIntensa
## Fórmula: Hipertenso ~ dummy
## P-value: 0.9399381
## Coeficiente: 0.01271713
## --------------------------------
## Variable dummy: ActividadFisicaModerada
## Fórmula: Hipertenso ~ dummy
## P-value: 0.9636413
## Coeficiente: 0.007181359
## --------------------------------
## Variable dummy: ActividadFisicaNA
## Fórmula: Hipertenso ~ dummy
## P-value: 0.9731821
## Coeficiente: -12.72738
## --------------------------------
## Variable dummy: ActividadFisicaNada
## Fórmula: Hipertenso ~ dummy
## P-value: 0.8389573
## Coeficiente: 0.03194222
## --------------------------------
## Variable dummy: ActividadFisicaPoca
## Fórmula: Hipertenso ~ dummy
## P-value: 0.8245745
## Coeficiente: -0.03467536
## --------------------------------
## Variable dummy: AntecedentesFamiliaresAbueloshipertensos
## Fórmula: Hipertenso ~ dummy
## P-value: 0.9445888
## Coeficiente: 0.01250994
## --------------------------------
## Variable dummy: AntecedentesFamiliaresAmbospadreshipertensos
## Fórmula: Hipertenso ~ dummy
## P-value: 0.2402833
## Coeficiente: 0.1972165
## --------------------------------
## Variable dummy: AntecedentesFamiliaresMadrehipertensa
## Fórmula: Hipertenso ~ dummy
## P-value: 0.2906495
## Coeficiente: 0.1781003
## --------------------------------
## Variable dummy: AntecedentesFamiliaresMadreNA
## Fórmula: Hipertenso ~ dummy
## P-value: 0.9670591
## Coeficiente: 13.41097
## --------------------------------
## Variable dummy: AntecedentesFamiliaresNinguno
## Fórmula: Hipertenso ~ dummy
## P-value: 0.002426301
## Coeficiente: -0.5426686
## --------------------------------
## Variable dummy: AntecedentesFamiliaresPadrehipertenso
## Fórmula: Hipertenso ~ dummy
## P-value: 0.4403723
## Coeficiente: 0.1341037
## --------------------------------
## Variable dummy: NivelEstresAlto
## Fórmula: Hipertenso ~ dummy
## P-value: 0.04219117
## Coeficiente: 0.2914455
## --------------------------------
## Variable dummy: NivelEstresBajo
## Fórmula: Hipertenso ~ dummy
## P-value: 0.4258459
## Coeficiente: -0.1188675
## --------------------------------
## Variable dummy: NivelEstresMedio
## Fórmula: Hipertenso ~ dummy
## P-value: 0.2085206
## Coeficiente: -0.18659
## --------------------------------
## Variable dummy: ColesterolAlto
## Fórmula: Hipertenso ~ dummy
## P-value: 0.06448933
## Coeficiente: 0.2562044
## --------------------------------
## Variable dummy: ColesterolNA
## Fórmula: Hipertenso ~ dummy
## P-value: 0.9696291
## Coeficiente: 14.41432
## --------------------------------
## Variable dummy: ColesterolNormal
## Fórmula: Hipertenso ~ dummy
## P-value: 0.04122806
## Coeficiente: -0.2831409
## --------------------------------
## Variable dummy: FrecuenciaControlMedicoAnual
## Fórmula: Hipertenso ~ dummy
## P-value: 0.3619954
## Coeficiente: 0.1328844
## --------------------------------
## Variable dummy: FrecuenciaControlMedicoNA
## Fórmula: Hipertenso ~ dummy
## P-value: 0.971196
## Coeficiente: -11.72593
## --------------------------------
## Variable dummy: FrecuenciaControlMedicoSemestral
## Fórmula: Hipertenso ~ dummy
## P-value: 0.6829997
## Coeficiente: -0.05937817
## --------------------------------
## Variable dummy: FrecuenciaControlMedicoTrimestral
## Fórmula: Hipertenso ~ dummy
## P-value: 0.6480173
## Coeficiente: -0.0679216
## --------------------------------
## Variable dummy: FrecuenciaConsumoAlcoholAlta
## Fórmula: Hipertenso ~ dummy
## P-value: 0.1428846
## Coeficiente: 0.2311845
## --------------------------------
## Variable dummy: FrecuenciaConsumoAlcoholBaja
## Fórmula: Hipertenso ~ dummy
## P-value: 0.2230252
## Coeficiente: 0.1879608
## --------------------------------
## Variable dummy: FrecuenciaConsumoAlcoholModerada
## Fórmula: Hipertenso ~ dummy
## P-value: 0.202397
## Coeficiente: -0.2081293
## --------------------------------
## Variable dummy: FrecuenciaConsumoAlcoholNinguno
## Fórmula: Hipertenso ~ dummy
## P-value: 0.1527108
## Coeficiente: -0.236757
## --------------------------------
## Variable dummy: GradoHipertensionEtapa1
## Fórmula: Hipertenso ~ dummy
## P-value: 2.131246e-11
## Coeficiente: 6.744582
## --------------------------------
## Variable dummy: GradoHipertensionEtapa2
## Fórmula: Hipertenso ~ dummy
## P-value: 0.9624727
## Coeficiente: 18.80315
## --------------------------------
## Variable dummy: GradoHipertensionEtapa3
## Fórmula: Hipertenso ~ dummy
## P-value: 0.9670536
## Coeficiente: 17.52043
## --------------------------------
## Variable dummy: GradoHipertensionEtapa7
## Fórmula: Hipertenso ~ dummy
## P-value: 0.9670591
## Coeficiente: 13.41097
## --------------------------------
## Variable dummy: GradoHipertensionNoHTA
## Fórmula: Hipertenso ~ dummy
## P-value: 3.518392e-22
## Coeficiente: -10.84798
## --------------------------------
## Variable dummy: DanoOrganosDianaLeve
## Fórmula: Hipertenso ~ dummy
## P-value: 4.680672e-10
## Coeficiente: 6.275648
## --------------------------------
## Variable dummy: DanoOrganosDianaModerado
## Fórmula: Hipertenso ~ dummy
## P-value: 0.9632843
## Coeficiente: 18.78354
## --------------------------------
## Variable dummy: DanoOrganosDianaNinguno
## Fórmula: Hipertenso ~ dummy
## P-value: 2.718336e-15
## Coeficiente: -7.993922
## --------------------------------
## Variable dummy: DanoOrganosDianaSevero
## Fórmula: Hipertenso ~ dummy
## P-value: 0.960651
## Coeficiente: 16.47306
## --------------------------------
## Variable dummy: AjusteDietaCumple
## Fórmula: Hipertenso ~ dummy
## P-value: 5.944438e-20
## Coeficiente: -1.539337
## --------------------------------
## Variable dummy: AjusteDietaNoCumple
## Fórmula: Hipertenso ~ dummy
## P-value: 1.529233e-24
## Coeficiente: 1.522213
## --------------------------------
## Variable dummy: AjusteDietaParcial
## Fórmula: Hipertenso ~ dummy
## P-value: 0.6855502
## Coeficiente: -0.06249061
## --------------------------------
## Tabla de resultados para variables dummy:
## Variable p_value coeficiente
## 1 GeneroF 8.664625e-01 -0.023234124
## 2 GeneroM 8.664625e-01 0.023234124
## 3 PaisOrigenArgentina 5.460112e-01 0.133719345
## 4 PaisOrigenChile 4.694293e-01 -0.161199847
## 5 PaisOrigenColombia 7.727768e-01 0.069153579
## 6 PaisOrigenCostaRica 5.996334e-01 -0.120980022
## 7 PaisOrigenEcuador 8.874687e-01 0.033738140
## 8 PaisOrigenEspaña 7.140684e-01 -0.090559577
## 9 PaisOrigenMéxico 8.489755e-02 -0.411979789
## 10 PaisOrigenPerú 6.660303e-01 -0.098238440
## 11 PaisOrigenUruguay 3.807195e-03 0.644652831
## 12 PaisOrigenVenezuela 9.667236e-01 0.009615459
## 13 HabitoDeDeporteModerado 1.179534e-01 -0.270954153
## 14 HabitoDeDeporteMucho 2.380149e-03 -0.521640024
## 15 HabitoDeDeporteNada 6.603356e-03 0.415638136
## 16 HabitoDeDeportePoco 8.487169e-02 0.261088483
## 17 AlimentacionNA 9.670591e-01 13.410969092
## 18 AlimentacionPocoSana 4.437355e-02 -0.300391426
## 19 AlimentacionRegular 1.176043e-01 0.226313126
## 20 AlimentacionSana 7.224251e-01 0.052185753
## 21 ActividadFisicaIntensa 9.399381e-01 0.012717133
## 22 ActividadFisicaModerada 9.636413e-01 0.007181359
## 23 ActividadFisicaNA 9.731821e-01 -12.727377008
## 24 ActividadFisicaNada 8.389573e-01 0.031942220
## 25 ActividadFisicaPoca 8.245745e-01 -0.034675364
## 26 AntecedentesFamiliaresAbueloshipertensos 9.445888e-01 0.012509936
## 27 AntecedentesFamiliaresAmbospadreshipertensos 2.402833e-01 0.197216461
## 28 AntecedentesFamiliaresMadrehipertensa 2.906495e-01 0.178100293
## 29 AntecedentesFamiliaresMadreNA 9.670591e-01 13.410969092
## 30 AntecedentesFamiliaresNinguno 2.426301e-03 -0.542668573
## 31 AntecedentesFamiliaresPadrehipertenso 4.403723e-01 0.134103660
## 32 NivelEstresAlto 4.219117e-02 0.291445474
## 33 NivelEstresBajo 4.258459e-01 -0.118867491
## 34 NivelEstresMedio 2.085206e-01 -0.186590031
## 35 ColesterolAlto 6.448933e-02 0.256204414
## 36 ColesterolNA 9.696291e-01 14.414322667
## 37 ColesterolNormal 4.122806e-02 -0.283140860
## 38 FrecuenciaControlMedicoAnual 3.619954e-01 0.132884409
## 39 FrecuenciaControlMedicoNA 9.711960e-01 -11.725933634
## 40 FrecuenciaControlMedicoSemestral 6.829997e-01 -0.059378171
## 41 FrecuenciaControlMedicoTrimestral 6.480173e-01 -0.067921605
## 42 FrecuenciaConsumoAlcoholAlta 1.428846e-01 0.231184530
## 43 FrecuenciaConsumoAlcoholBaja 2.230252e-01 0.187960769
## 44 FrecuenciaConsumoAlcoholModerada 2.023970e-01 -0.208129256
## 45 FrecuenciaConsumoAlcoholNinguno 1.527108e-01 -0.236757030
## 46 GradoHipertensionEtapa1 2.131246e-11 6.744582380
## 47 GradoHipertensionEtapa2 9.624727e-01 18.803150450
## 48 GradoHipertensionEtapa3 9.670536e-01 17.520431102
## 49 GradoHipertensionEtapa7 9.670591e-01 13.410969092
## 50 GradoHipertensionNoHTA 3.518392e-22 -10.847976938
## 51 DanoOrganosDianaLeve 4.680672e-10 6.275647851
## 52 DanoOrganosDianaModerado 9.632843e-01 18.783541978
## 53 DanoOrganosDianaNinguno 2.718336e-15 -7.993922021
## 54 DanoOrganosDianaSevero 9.606510e-01 16.473063240
## 55 AjusteDietaCumple 5.944438e-20 -1.539337008
## 56 AjusteDietaNoCumple 1.529233e-24 1.522212609
## 57 AjusteDietaParcial 6.855502e-01 -0.062490614
univar_binarias <- function(dataset) {
es_binaria <- function(x) {
valores <- unique(na.omit(x))
length(valores) == 2 && all(sort(valores) == c(0, 1))
}
variables_binarias <- names(dataset)[sapply(dataset, es_binaria)]
variables_binarias <- setdiff(variables_binarias, "Hipertenso")
tabla_resultados_binarias <- data.frame(Variable = character(),
p_value = numeric(),
coeficiente = numeric(),
stringsAsFactors = FALSE)
cat("\n--- Modelos Logísticos para Variables Binarias (0/1) ---\n")
for (var in variables_binarias) {
formula_modelo <- as.formula(paste("Hipertenso ~", var))
modelo_bin <- glm(formula_modelo, data = dataset, family = binomial(link = "logit"))
resumen_bin <- summary(modelo_bin)
if (nrow(resumen_bin$coefficients) > 1) {
p_value_bin <- resumen_bin$coefficients[2, "Pr(>|z|)"]
coef_bin <- resumen_bin$coefficients[2, "Estimate"]
} else {
p_value_bin <- NA
coef_bin <- NA
}
tabla_resultados_binarias <- rbind(tabla_resultados_binarias,
data.frame(Variable = var,
p_value = p_value_bin,
coeficiente = coef_bin,
stringsAsFactors = FALSE))
cat("Variable:", var, "\n")
cat("Fórmula:", deparse(formula_modelo), "\n")
cat("P-value:", p_value_bin, "\n")
cat("Coeficiente:", coef_bin, "\n")
cat("--------------------------------\n")
}
cat("Tabla de resultados para variables binarias:\n")
print(tabla_resultados_binarias)
return(tabla_resultados_binarias)
}
tabla_var_binar <- univar_binarias(datos_hipertension)
##
## --- Modelos Logísticos para Variables Binarias (0/1) ---
## Variable: Fumador
## Fórmula: Hipertenso ~ Fumador
## P-value: 9.425136e-09
## Coeficiente: 0.8179258
## --------------------------------
## Variable: Medicacion
## Fórmula: Hipertenso ~ Medicacion
## P-value: 4.877626e-44
## Coeficiente: 2.379198
## --------------------------------
## Variable: Diabetes
## Fórmula: Hipertenso ~ Diabetes
## P-value: 0.0116392
## Coeficiente: 0.4324882
## --------------------------------
## Variable: RetencionLiquidos
## Fórmula: Hipertenso ~ RetencionLiquidos
## P-value: 5.565969e-10
## Coeficiente: 6.248448
## --------------------------------
## Variable: GeneroF
## Fórmula: Hipertenso ~ GeneroF
## P-value: 0.8664625
## Coeficiente: -0.02323412
## --------------------------------
## Variable: GeneroM
## Fórmula: Hipertenso ~ GeneroM
## P-value: 0.8664625
## Coeficiente: 0.02323412
## --------------------------------
## Variable: PaisOrigenArgentina
## Fórmula: Hipertenso ~ PaisOrigenArgentina
## P-value: 0.5460112
## Coeficiente: 0.1337193
## --------------------------------
## Variable: PaisOrigenChile
## Fórmula: Hipertenso ~ PaisOrigenChile
## P-value: 0.4694293
## Coeficiente: -0.1611998
## --------------------------------
## Variable: PaisOrigenColombia
## Fórmula: Hipertenso ~ PaisOrigenColombia
## P-value: 0.7727768
## Coeficiente: 0.06915358
## --------------------------------
## Variable: PaisOrigenCostaRica
## Fórmula: Hipertenso ~ PaisOrigenCostaRica
## P-value: 0.5996334
## Coeficiente: -0.12098
## --------------------------------
## Variable: PaisOrigenEcuador
## Fórmula: Hipertenso ~ PaisOrigenEcuador
## P-value: 0.8874687
## Coeficiente: 0.03373814
## --------------------------------
## Variable: PaisOrigenEspaña
## Fórmula: Hipertenso ~ PaisOrigenEspaña
## P-value: 0.7140684
## Coeficiente: -0.09055958
## --------------------------------
## Variable: PaisOrigenMéxico
## Fórmula: Hipertenso ~ PaisOrigenMéxico
## P-value: 0.08489755
## Coeficiente: -0.4119798
## --------------------------------
## Variable: PaisOrigenPerú
## Fórmula: Hipertenso ~ PaisOrigenPerú
## P-value: 0.6660303
## Coeficiente: -0.09823844
## --------------------------------
## Variable: PaisOrigenUruguay
## Fórmula: Hipertenso ~ PaisOrigenUruguay
## P-value: 0.003807195
## Coeficiente: 0.6446528
## --------------------------------
## Variable: PaisOrigenVenezuela
## Fórmula: Hipertenso ~ PaisOrigenVenezuela
## P-value: 0.9667236
## Coeficiente: 0.009615459
## --------------------------------
## Variable: HabitoDeDeporteModerado
## Fórmula: Hipertenso ~ HabitoDeDeporteModerado
## P-value: 0.1179534
## Coeficiente: -0.2709542
## --------------------------------
## Variable: HabitoDeDeporteMucho
## Fórmula: Hipertenso ~ HabitoDeDeporteMucho
## P-value: 0.002380149
## Coeficiente: -0.52164
## --------------------------------
## Variable: HabitoDeDeporteNada
## Fórmula: Hipertenso ~ HabitoDeDeporteNada
## P-value: 0.006603356
## Coeficiente: 0.4156381
## --------------------------------
## Variable: HabitoDeDeportePoco
## Fórmula: Hipertenso ~ HabitoDeDeportePoco
## P-value: 0.08487169
## Coeficiente: 0.2610885
## --------------------------------
## Variable: AlimentacionNA
## Fórmula: Hipertenso ~ AlimentacionNA
## P-value: 0.9670591
## Coeficiente: 13.41097
## --------------------------------
## Variable: AlimentacionPocoSana
## Fórmula: Hipertenso ~ AlimentacionPocoSana
## P-value: 0.04437355
## Coeficiente: -0.3003914
## --------------------------------
## Variable: AlimentacionRegular
## Fórmula: Hipertenso ~ AlimentacionRegular
## P-value: 0.1176043
## Coeficiente: 0.2263131
## --------------------------------
## Variable: AlimentacionSana
## Fórmula: Hipertenso ~ AlimentacionSana
## P-value: 0.7224251
## Coeficiente: 0.05218575
## --------------------------------
## Variable: ActividadFisicaIntensa
## Fórmula: Hipertenso ~ ActividadFisicaIntensa
## P-value: 0.9399381
## Coeficiente: 0.01271713
## --------------------------------
## Variable: ActividadFisicaModerada
## Fórmula: Hipertenso ~ ActividadFisicaModerada
## P-value: 0.9636413
## Coeficiente: 0.007181359
## --------------------------------
## Variable: ActividadFisicaNA
## Fórmula: Hipertenso ~ ActividadFisicaNA
## P-value: 0.9731821
## Coeficiente: -12.72738
## --------------------------------
## Variable: ActividadFisicaNada
## Fórmula: Hipertenso ~ ActividadFisicaNada
## P-value: 0.8389573
## Coeficiente: 0.03194222
## --------------------------------
## Variable: ActividadFisicaPoca
## Fórmula: Hipertenso ~ ActividadFisicaPoca
## P-value: 0.8245745
## Coeficiente: -0.03467536
## --------------------------------
## Variable: AntecedentesFamiliaresAbueloshipertensos
## Fórmula: Hipertenso ~ AntecedentesFamiliaresAbueloshipertensos
## P-value: 0.9445888
## Coeficiente: 0.01250994
## --------------------------------
## Variable: AntecedentesFamiliaresAmbospadreshipertensos
## Fórmula: Hipertenso ~ AntecedentesFamiliaresAmbospadreshipertensos
## P-value: 0.2402833
## Coeficiente: 0.1972165
## --------------------------------
## Variable: AntecedentesFamiliaresMadrehipertensa
## Fórmula: Hipertenso ~ AntecedentesFamiliaresMadrehipertensa
## P-value: 0.2906495
## Coeficiente: 0.1781003
## --------------------------------
## Variable: AntecedentesFamiliaresMadreNA
## Fórmula: Hipertenso ~ AntecedentesFamiliaresMadreNA
## P-value: 0.9670591
## Coeficiente: 13.41097
## --------------------------------
## Variable: AntecedentesFamiliaresNinguno
## Fórmula: Hipertenso ~ AntecedentesFamiliaresNinguno
## P-value: 0.002426301
## Coeficiente: -0.5426686
## --------------------------------
## Variable: AntecedentesFamiliaresPadrehipertenso
## Fórmula: Hipertenso ~ AntecedentesFamiliaresPadrehipertenso
## P-value: 0.4403723
## Coeficiente: 0.1341037
## --------------------------------
## Variable: NivelEstresAlto
## Fórmula: Hipertenso ~ NivelEstresAlto
## P-value: 0.04219117
## Coeficiente: 0.2914455
## --------------------------------
## Variable: NivelEstresBajo
## Fórmula: Hipertenso ~ NivelEstresBajo
## P-value: 0.4258459
## Coeficiente: -0.1188675
## --------------------------------
## Variable: NivelEstresMedio
## Fórmula: Hipertenso ~ NivelEstresMedio
## P-value: 0.2085206
## Coeficiente: -0.18659
## --------------------------------
## Variable: ColesterolAlto
## Fórmula: Hipertenso ~ ColesterolAlto
## P-value: 0.06448933
## Coeficiente: 0.2562044
## --------------------------------
## Variable: ColesterolNA
## Fórmula: Hipertenso ~ ColesterolNA
## P-value: 0.9696291
## Coeficiente: 14.41432
## --------------------------------
## Variable: ColesterolNormal
## Fórmula: Hipertenso ~ ColesterolNormal
## P-value: 0.04122806
## Coeficiente: -0.2831409
## --------------------------------
## Variable: FrecuenciaControlMedicoAnual
## Fórmula: Hipertenso ~ FrecuenciaControlMedicoAnual
## P-value: 0.3619954
## Coeficiente: 0.1328844
## --------------------------------
## Variable: FrecuenciaControlMedicoNA
## Fórmula: Hipertenso ~ FrecuenciaControlMedicoNA
## P-value: 0.971196
## Coeficiente: -11.72593
## --------------------------------
## Variable: FrecuenciaControlMedicoSemestral
## Fórmula: Hipertenso ~ FrecuenciaControlMedicoSemestral
## P-value: 0.6829997
## Coeficiente: -0.05937817
## --------------------------------
## Variable: FrecuenciaControlMedicoTrimestral
## Fórmula: Hipertenso ~ FrecuenciaControlMedicoTrimestral
## P-value: 0.6480173
## Coeficiente: -0.0679216
## --------------------------------
## Variable: FrecuenciaConsumoAlcoholAlta
## Fórmula: Hipertenso ~ FrecuenciaConsumoAlcoholAlta
## P-value: 0.1428846
## Coeficiente: 0.2311845
## --------------------------------
## Variable: FrecuenciaConsumoAlcoholBaja
## Fórmula: Hipertenso ~ FrecuenciaConsumoAlcoholBaja
## P-value: 0.2230252
## Coeficiente: 0.1879608
## --------------------------------
## Variable: FrecuenciaConsumoAlcoholModerada
## Fórmula: Hipertenso ~ FrecuenciaConsumoAlcoholModerada
## P-value: 0.202397
## Coeficiente: -0.2081293
## --------------------------------
## Variable: FrecuenciaConsumoAlcoholNinguno
## Fórmula: Hipertenso ~ FrecuenciaConsumoAlcoholNinguno
## P-value: 0.1527108
## Coeficiente: -0.236757
## --------------------------------
## Variable: GradoHipertensionEtapa1
## Fórmula: Hipertenso ~ GradoHipertensionEtapa1
## P-value: 2.131246e-11
## Coeficiente: 6.744582
## --------------------------------
## Variable: GradoHipertensionEtapa2
## Fórmula: Hipertenso ~ GradoHipertensionEtapa2
## P-value: 0.9624727
## Coeficiente: 18.80315
## --------------------------------
## Variable: GradoHipertensionEtapa3
## Fórmula: Hipertenso ~ GradoHipertensionEtapa3
## P-value: 0.9670536
## Coeficiente: 17.52043
## --------------------------------
## Variable: GradoHipertensionEtapa7
## Fórmula: Hipertenso ~ GradoHipertensionEtapa7
## P-value: 0.9670591
## Coeficiente: 13.41097
## --------------------------------
## Variable: GradoHipertensionNoHTA
## Fórmula: Hipertenso ~ GradoHipertensionNoHTA
## P-value: 3.518392e-22
## Coeficiente: -10.84798
## --------------------------------
## Variable: DanoOrganosDianaLeve
## Fórmula: Hipertenso ~ DanoOrganosDianaLeve
## P-value: 4.680672e-10
## Coeficiente: 6.275648
## --------------------------------
## Variable: DanoOrganosDianaModerado
## Fórmula: Hipertenso ~ DanoOrganosDianaModerado
## P-value: 0.9632843
## Coeficiente: 18.78354
## --------------------------------
## Variable: DanoOrganosDianaNinguno
## Fórmula: Hipertenso ~ DanoOrganosDianaNinguno
## P-value: 2.718336e-15
## Coeficiente: -7.993922
## --------------------------------
## Variable: DanoOrganosDianaSevero
## Fórmula: Hipertenso ~ DanoOrganosDianaSevero
## P-value: 0.960651
## Coeficiente: 16.47306
## --------------------------------
## Variable: AjusteDietaCumple
## Fórmula: Hipertenso ~ AjusteDietaCumple
## P-value: 5.944438e-20
## Coeficiente: -1.539337
## --------------------------------
## Variable: AjusteDietaNoCumple
## Fórmula: Hipertenso ~ AjusteDietaNoCumple
## P-value: 1.529233e-24
## Coeficiente: 1.522213
## --------------------------------
## Variable: AjusteDietaParcial
## Fórmula: Hipertenso ~ AjusteDietaParcial
## P-value: 0.6855502
## Coeficiente: -0.06249061
## --------------------------------
## Tabla de resultados para variables binarias:
## Variable p_value coeficiente
## 1 Fumador 9.425136e-09 0.817925782
## 2 Medicacion 4.877626e-44 2.379197748
## 3 Diabetes 1.163920e-02 0.432488162
## 4 RetencionLiquidos 5.565969e-10 6.248447626
## 5 GeneroF 8.664625e-01 -0.023234124
## 6 GeneroM 8.664625e-01 0.023234124
## 7 PaisOrigenArgentina 5.460112e-01 0.133719345
## 8 PaisOrigenChile 4.694293e-01 -0.161199847
## 9 PaisOrigenColombia 7.727768e-01 0.069153579
## 10 PaisOrigenCostaRica 5.996334e-01 -0.120980022
## 11 PaisOrigenEcuador 8.874687e-01 0.033738140
## 12 PaisOrigenEspaña 7.140684e-01 -0.090559577
## 13 PaisOrigenMéxico 8.489755e-02 -0.411979789
## 14 PaisOrigenPerú 6.660303e-01 -0.098238440
## 15 PaisOrigenUruguay 3.807195e-03 0.644652831
## 16 PaisOrigenVenezuela 9.667236e-01 0.009615459
## 17 HabitoDeDeporteModerado 1.179534e-01 -0.270954153
## 18 HabitoDeDeporteMucho 2.380149e-03 -0.521640024
## 19 HabitoDeDeporteNada 6.603356e-03 0.415638136
## 20 HabitoDeDeportePoco 8.487169e-02 0.261088483
## 21 AlimentacionNA 9.670591e-01 13.410969092
## 22 AlimentacionPocoSana 4.437355e-02 -0.300391426
## 23 AlimentacionRegular 1.176043e-01 0.226313126
## 24 AlimentacionSana 7.224251e-01 0.052185753
## 25 ActividadFisicaIntensa 9.399381e-01 0.012717133
## 26 ActividadFisicaModerada 9.636413e-01 0.007181359
## 27 ActividadFisicaNA 9.731821e-01 -12.727377008
## 28 ActividadFisicaNada 8.389573e-01 0.031942220
## 29 ActividadFisicaPoca 8.245745e-01 -0.034675364
## 30 AntecedentesFamiliaresAbueloshipertensos 9.445888e-01 0.012509936
## 31 AntecedentesFamiliaresAmbospadreshipertensos 2.402833e-01 0.197216461
## 32 AntecedentesFamiliaresMadrehipertensa 2.906495e-01 0.178100293
## 33 AntecedentesFamiliaresMadreNA 9.670591e-01 13.410969092
## 34 AntecedentesFamiliaresNinguno 2.426301e-03 -0.542668573
## 35 AntecedentesFamiliaresPadrehipertenso 4.403723e-01 0.134103660
## 36 NivelEstresAlto 4.219117e-02 0.291445474
## 37 NivelEstresBajo 4.258459e-01 -0.118867491
## 38 NivelEstresMedio 2.085206e-01 -0.186590031
## 39 ColesterolAlto 6.448933e-02 0.256204414
## 40 ColesterolNA 9.696291e-01 14.414322667
## 41 ColesterolNormal 4.122806e-02 -0.283140860
## 42 FrecuenciaControlMedicoAnual 3.619954e-01 0.132884409
## 43 FrecuenciaControlMedicoNA 9.711960e-01 -11.725933634
## 44 FrecuenciaControlMedicoSemestral 6.829997e-01 -0.059378171
## 45 FrecuenciaControlMedicoTrimestral 6.480173e-01 -0.067921605
## 46 FrecuenciaConsumoAlcoholAlta 1.428846e-01 0.231184530
## 47 FrecuenciaConsumoAlcoholBaja 2.230252e-01 0.187960769
## 48 FrecuenciaConsumoAlcoholModerada 2.023970e-01 -0.208129256
## 49 FrecuenciaConsumoAlcoholNinguno 1.527108e-01 -0.236757030
## 50 GradoHipertensionEtapa1 2.131246e-11 6.744582380
## 51 GradoHipertensionEtapa2 9.624727e-01 18.803150450
## 52 GradoHipertensionEtapa3 9.670536e-01 17.520431102
## 53 GradoHipertensionEtapa7 9.670591e-01 13.410969092
## 54 GradoHipertensionNoHTA 3.518392e-22 -10.847976938
## 55 DanoOrganosDianaLeve 4.680672e-10 6.275647851
## 56 DanoOrganosDianaModerado 9.632843e-01 18.783541978
## 57 DanoOrganosDianaNinguno 2.718336e-15 -7.993922021
## 58 DanoOrganosDianaSevero 9.606510e-01 16.473063240
## 59 AjusteDietaCumple 5.944438e-20 -1.539337008
## 60 AjusteDietaNoCumple 1.529233e-24 1.522212609
## 61 AjusteDietaParcial 6.855502e-01 -0.062490614
filtrar_significativas <- function(tabla_num, tabla_dum, tabla_bin) {
tabla_combinada <- rbind(tabla_num, tabla_dum, tabla_bin)
tabla_significativas <- tabla_combinada[!is.na(tabla_combinada$p_value) &
tabla_combinada$p_value <= 0.05, ]
cat("\n--- Tabla de Variables Significativas (p-value <= 0.05) ---\n")
print(tabla_significativas)
return(tabla_significativas)
}
tabla_var_significativas <- filtrar_significativas(tabla_var_num, tabla_var_dummies, tabla_var_binar)
##
## --- Tabla de Variables Significativas (p-value <= 0.05) ---
## Variable p_value coeficiente
## 3 PaquetesSemanales_escalados 5.906823e-11 0.4462362
## 6 EscalaDolorArticular_escalados 3.122463e-02 0.1495481
## 7 PresionSistolica_escalados 2.810984e-22 8.1752700
## 8 PresionDiastolica_escalados 7.810210e-19 9.5163856
## 9 Edad_escalados 4.107729e-33 1.0493486
## 20 PaisOrigenUruguay 3.807195e-03 0.6446528
## 23 HabitoDeDeporteMucho 2.380149e-03 -0.5216400
## 24 HabitoDeDeporteNada 6.603356e-03 0.4156381
## 27 AlimentacionPocoSana 4.437355e-02 -0.3003914
## 39 AntecedentesFamiliaresNinguno 2.426301e-03 -0.5426686
## 41 NivelEstresAlto 4.219117e-02 0.2914455
## 46 ColesterolNormal 4.122806e-02 -0.2831409
## 55 GradoHipertensionEtapa1 2.131246e-11 6.7445824
## 59 GradoHipertensionNoHTA 3.518392e-22 -10.8479769
## 60 DanoOrganosDianaLeve 4.680672e-10 6.2756479
## 62 DanoOrganosDianaNinguno 2.718336e-15 -7.9939220
## 64 AjusteDietaCumple 5.944438e-20 -1.5393370
## 65 AjusteDietaNoCumple 1.529233e-24 1.5222126
## 67 Fumador 9.425136e-09 0.8179258
## 68 Medicacion 4.877626e-44 2.3791977
## 69 Diabetes 1.163920e-02 0.4324882
## 70 RetencionLiquidos 5.565969e-10 6.2484476
## 81 PaisOrigenUruguay 3.807195e-03 0.6446528
## 84 HabitoDeDeporteMucho 2.380149e-03 -0.5216400
## 85 HabitoDeDeporteNada 6.603356e-03 0.4156381
## 88 AlimentacionPocoSana 4.437355e-02 -0.3003914
## 100 AntecedentesFamiliaresNinguno 2.426301e-03 -0.5426686
## 102 NivelEstresAlto 4.219117e-02 0.2914455
## 107 ColesterolNormal 4.122806e-02 -0.2831409
## 116 GradoHipertensionEtapa1 2.131246e-11 6.7445824
## 120 GradoHipertensionNoHTA 3.518392e-22 -10.8479769
## 121 DanoOrganosDianaLeve 4.680672e-10 6.2756479
## 123 DanoOrganosDianaNinguno 2.718336e-15 -7.9939220
## 125 AjusteDietaCumple 5.944438e-20 -1.5393370
## 126 AjusteDietaNoCumple 1.529233e-24 1.5222126
ajustar_modelos_multivariantes <- function(dataset, tabla_significativas) {
if(nrow(tabla_significativas) == 0) {
cat("\nNo hay variables significativas (p-value <= 0.05) para construir el modelo hipervariante.\n")
return(list(modelo_significativo = NULL, modelo_significativo2 = NULL, modelo_significativo3 = NULL))
}
var_signif <- tabla_significativas$Variable
# 1) Modelo Logístico Multivariante Inicial con variables significativas
formula_signif <- as.formula(paste("Hipertenso ~", paste(var_signif, collapse = " + ")))
modelo_significativo <- glm(formula_signif, data = dataset, family = binomial(link = "logit"))
cat("\n--- Modelo Logístico Multivariante Inicial (sólo variables significativas) ---\n")
print(summary(modelo_significativo))
# 2) Segundo Modelo quitando variables con p-valor > 0.9
var_signif2 <- var_signif[!var_signif %in% c("PaisOrigenUruguay", "AntecedentesFamiliaresNinguno",
"GradoHipertensionEtapa1", "GradoHipertensionNoHTA",
"DanoOrganosDianaLeve", "DanoOrganosDianaNinguno",
"AjusteDietaNoCumple", "RetencionLiquidos")]
modelo_significativo2 <- NULL
if(length(var_signif2) > 0) {
formula_signif2 <- as.formula(paste("Hipertenso ~", paste(var_signif2, collapse = " + ")))
modelo_significativo2 <- glm(formula_signif2, data = dataset, family = binomial(link = "logit"))
cat("\n---Segundo Modelo Logístico Multivariante (quitando variables con p-valor > 0.9) ---\n")
print(summary(modelo_significativo2))
}
# 3) Tercer modelo quitando variables con p-valor demasiado bajo (explicarian ellas toda la variabilidad)
var_signif3 <- var_signif2[!var_signif2 %in% c("PresionDiastolica_escalados", "PresionSistolica_escalados")]
modelo_significativo3 <- NULL
if(length(var_signif3) > 0) {
formula_signif3 <- as.formula(paste("Hipertenso ~", paste(var_signif3, collapse = " + ")))
modelo_significativo3 <- glm(formula_signif3, data = dataset, family = binomial(link = "logit"))
cat("\n--- Tercer Modelo Logístico Multivariante (quitando variables con p-valor demasiado bajo) ---\n")
print(summary(modelo_significativo3))
}
return(list(modelo_significativo = modelo_significativo,
modelo_significativo2 = modelo_significativo2,
modelo_significativo3 = modelo_significativo3))
}
modelos_multivariantes <- ajustar_modelos_multivariantes(datos_hipertension, tabla_var_significativas)
##
## --- Modelo Logístico Multivariante Inicial (sólo variables significativas) ---
##
## Call:
## glm(formula = formula_signif, family = binomial(link = "logit"),
## data = dataset)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 117.9623 13216.0107 0.009 0.9929
## PaquetesSemanales_escalados -1.5534 1.1840 -1.312 0.1895
## EscalaDolorArticular_escalados 0.2282 0.5966 0.382 0.7021
## PresionSistolica_escalados -0.4289 1.4366 -0.299 0.7653
## PresionDiastolica_escalados 3.4433 1.9166 1.797 0.0724 .
## Edad_escalados 0.5577 0.5795 0.962 0.3359
## PaisOrigenUruguay -17.3989 5231.6690 -0.003 0.9973
## HabitoDeDeporteMucho 2.5788 1.6108 1.601 0.1094
## HabitoDeDeporteNada 2.1847 1.8222 1.199 0.2306
## AlimentacionPocoSana 1.6915 1.3940 1.213 0.2250
## AntecedentesFamiliaresNinguno -22.5284 4038.4766 -0.006 0.9955
## NivelEstresAlto 0.4300 1.1540 0.373 0.7094
## ColesterolNormal 0.4711 1.1642 0.405 0.6857
## GradoHipertensionEtapa1 -23.4165 6258.2137 -0.004 0.9970
## GradoHipertensionNoHTA -106.8997 14591.5406 -0.007 0.9942
## DanoOrganosDianaLeve -17.5854 6519.6559 -0.003 0.9978
## DanoOrganosDianaNinguno -18.6993 12518.5337 -0.001 0.9988
## AjusteDietaCumple -0.8356 1.2934 -0.646 0.5182
## AjusteDietaNoCumple -22.0489 4721.7078 -0.005 0.9963
## Fumador 2.2995 1.7932 1.282 0.1997
## Medicacion -0.6055 1.3750 -0.440 0.6596
## Diabetes 2.0554 1.3428 1.531 0.1258
## RetencionLiquidos -38.2308 7217.6876 -0.005 0.9958
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1218.151 on 994 degrees of freedom
## Residual deviance: 36.461 on 972 degrees of freedom
## (1 observation deleted due to missingness)
## AIC: 82.461
##
## Number of Fisher Scoring iterations: 23
##
##
## ---Segundo Modelo Logístico Multivariante (quitando variables con p-valor > 0.9) ---
##
## Call:
## glm(formula = formula_signif2, family = binomial(link = "logit"),
## data = dataset)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -3.35484 1.27869 -2.624 0.008699 **
## PaquetesSemanales_escalados -0.06405 0.76205 -0.084 0.933017
## EscalaDolorArticular_escalados 0.26149 0.42644 0.613 0.539753
## PresionSistolica_escalados 2.87976 0.98608 2.920 0.003496 **
## PresionDiastolica_escalados 4.57256 1.32635 3.447 0.000566 ***
## Edad_escalados 0.66958 0.41955 1.596 0.110505
## HabitoDeDeporteMucho 1.33155 1.06940 1.245 0.213081
## HabitoDeDeporteNada 1.28592 1.06263 1.210 0.226228
## AlimentacionPocoSana 0.78025 0.90380 0.863 0.387972
## NivelEstresAlto 0.03747 0.84325 0.044 0.964560
## ColesterolNormal -0.10815 0.83670 -0.129 0.897151
## AjusteDietaCumple -0.58221 0.84823 -0.686 0.492473
## Fumador 0.07456 1.37534 0.054 0.956764
## Medicacion -0.08606 0.88829 -0.097 0.922823
## Diabetes 0.92412 0.93229 0.991 0.321569
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1218.151 on 994 degrees of freedom
## Residual deviance: 61.949 on 980 degrees of freedom
## (1 observation deleted due to missingness)
## AIC: 91.949
##
## Number of Fisher Scoring iterations: 9
##
##
## --- Tercer Modelo Logístico Multivariante (quitando variables con p-valor demasiado bajo) ---
##
## Call:
## glm(formula = formula_signif3, family = binomial(link = "logit"),
## data = dataset)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.23723 0.31680 -7.062 1.64e-12 ***
## PaquetesSemanales_escalados 0.52632 0.16564 3.177 0.00149 **
## EscalaDolorArticular_escalados 0.11224 0.09834 1.141 0.25376
## Edad_escalados 1.19732 0.11320 10.577 < 2e-16 ***
## HabitoDeDeporteMucho -0.73909 0.25470 -2.902 0.00371 **
## HabitoDeDeporteNada 0.32287 0.22884 1.411 0.15828
## AlimentacionPocoSana -0.37643 0.20690 -1.819 0.06885 .
## NivelEstresAlto 0.51609 0.20316 2.540 0.01107 *
## ColesterolNormal -0.17433 0.19326 -0.902 0.36705
## AjusteDietaCumple -1.47531 0.21420 -6.888 5.67e-12 ***
## Fumador 0.31405 0.34206 0.918 0.35857
## Medicacion 2.41477 0.21003 11.497 < 2e-16 ***
## Diabetes 0.71373 0.24549 2.907 0.00364 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1218.15 on 994 degrees of freedom
## Residual deviance: 693.88 on 982 degrees of freedom
## (1 observation deleted due to missingness)
## AIC: 719.88
##
## Number of Fisher Scoring iterations: 6
split_train_test <- function(dataset, prop_train = 0.8, seed = 123) {
# Fijamos semilla para reproducibilidad
set.seed(seed)
# createDataPartition hace split estratificado en la variable Hipertenso
indice_train <- createDataPartition(dataset$Hipertenso, p = prop_train, list = FALSE)
# Creamos los dos subconjuntos
train_data <- dataset[indice_train, ]
test_data <- dataset[-indice_train, ]
cat("Train rows:", nrow(train_data), "\n")
cat("Test rows:", nrow(test_data), "\n")
# Devolvemos como lista para que se pueda acceder
return(list(train = train_data, test = test_data))
}
splits <- split_train_test(datos_hipertension, prop_train = 0.8, seed = 123)
## Train rows: 797
## Test rows: 199
train_data <- splits$train
test_data <- splits$test
# Omitimos los NA
train_data <- na.omit(train_data)
test_data <- na.omit(test_data)
# Convertir la variable Hipertenso a factor en train_data y test_data
train_data$Hipertenso <- factor(train_data$Hipertenso, levels = c(0, 1), labels = c("No", "Si"))
test_data$Hipertenso <- factor(test_data$Hipertenso, levels = c(0, 1), labels = c("No", "Si"))
cross_validation_model <- function(train_data,
formula = as.formula("Hipertenso ~ ."),
method = "glm",
family = "binomial",
metric = "ROC",
folds = 5,
seed = 123) {
# Fijamos semilla para reproducibilidad
set.seed(seed)
# Definimos la estrategia de validación cruzada
control_cv <- trainControl(
method = "cv", # "cv" para K-fold cross validation
number = folds, # número de folds
classProbs = TRUE, # para calcular probabilidades
summaryFunction = twoClassSummary, # para métricas ROC, Sens, Spec
savePredictions = "final" # guarda las predicciones de cada fold
)
# Entrenamos el modelo con caret::train
modelo_cv <- train(
formula,
data = train_data,
method = method,
family = family,
metric = metric,
trControl = control_cv
)
cat("\n--- Resultados del modelo con Cross Validation (entrenamiento) ---\n")
print(modelo_cv)
return(modelo_cv)
}
modelo_cv <- cross_validation_model(
train_data,
formula = as.formula(
paste("Hipertenso ~",
paste(c("Edad_escalados",
"AjusteDietaCumple",
"Medicacion",
"Diabetes",
"PaquetesSemanales_escalados",
"HabitoDeDeporteMucho"),
collapse = " + "))
),
method = "glm",
family = "binomial",
metric = "ROC",
folds = 5,
seed = 123
)
##
## --- Resultados del modelo con Cross Validation (entrenamiento) ---
## Generalized Linear Model
##
## 790 samples
## 6 predictor
## 2 classes: 'No', 'Si'
##
## No pre-processing
## Resampling: Cross-Validated (5 fold)
## Summary of sample sizes: 632, 632, 632, 632, 632
## Resampling results:
##
## ROC Sens Spec
## 0.9067663 0.9135135 0.7191489
pred_test <- predict(modelo_cv, newdata = test_data)
confusionMatrix(pred_test, as.factor(test_data$Hipertenso))
## Confusion Matrix and Statistics
##
## Reference
## Prediction No Si
## No 118 20
## Si 18 42
##
## Accuracy : 0.8081
## 95% CI : (0.7462, 0.8605)
## No Information Rate : 0.6869
## P-Value [Acc > NIR] : 8.814e-05
##
## Kappa : 0.5499
##
## Mcnemar's Test P-Value : 0.8711
##
## Sensitivity : 0.8676
## Specificity : 0.6774
## Pos Pred Value : 0.8551
## Neg Pred Value : 0.7000
## Prevalence : 0.6869
## Detection Rate : 0.5960
## Detection Prevalence : 0.6970
## Balanced Accuracy : 0.7725
##
## 'Positive' Class : No
##
dir()
## [1] "Ejercicio1_RodriguezSCovadonga_files"
## [2] "Ejercicio1_RodriguezSCovadonga.html"
## [3] "Ejercicio1_RodriguezSCovadonga.Rmd"
## [4] "Ejercicio1.html"
## [5] "Ejercicio1.Rmd"
## [6] "funcion_dataset.R"
## [7] "IntroMarkDown.Rmd"
## [8] "pipeline_machinelearning.R"
sessionInfo()
## R version 4.4.1 (2024-06-14)
## Platform: x86_64-apple-darwin20
## Running under: macOS Monterey 12.7.6
##
## Matrix products: default
## BLAS: /Library/Frameworks/R.framework/Versions/4.4-x86_64/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/4.4-x86_64/Resources/lib/libRlapack.dylib; LAPACK version 3.12.0
##
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
##
## time zone: Europe/Madrid
## tzcode source: internal
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] e1071_1.7-16 caret_7.0-1 lattice_0.22-6 lubridate_1.9.4
## [5] forcats_1.0.0 stringr_1.5.1 dplyr_1.1.4 purrr_1.0.4
## [9] readr_2.1.5 tidyr_1.3.1 tibble_3.2.1 ggplot2_3.5.1
## [13] tidyverse_2.0.0
##
## loaded via a namespace (and not attached):
## [1] gtable_0.3.6 xfun_0.50 bslib_0.9.0
## [4] recipes_1.1.0 tzdb_0.4.0 vctrs_0.6.5
## [7] tools_4.4.1 generics_0.1.3 stats4_4.4.1
## [10] parallel_4.4.1 proxy_0.4-27 ModelMetrics_1.2.2.2
## [13] pkgconfig_2.0.3 Matrix_1.7-2 data.table_1.16.4
## [16] lifecycle_1.0.4 compiler_4.4.1 munsell_0.5.1
## [19] codetools_0.2-20 htmltools_0.5.8.1 class_7.3-23
## [22] sass_0.4.9 yaml_2.3.10 prodlim_2024.06.25
## [25] pillar_1.10.1 jquerylib_0.1.4 MASS_7.3-64
## [28] cachem_1.1.0 gower_1.0.2 iterators_1.0.14
## [31] rpart_4.1.24 foreach_1.5.2 nlme_3.1-167
## [34] parallelly_1.42.0 lava_1.8.1 tidyselect_1.2.1
## [37] digest_0.6.37 stringi_1.8.4 future_1.34.0
## [40] reshape2_1.4.4 listenv_0.9.1 splines_4.4.1
## [43] fastmap_1.2.0 grid_4.4.1 colorspace_2.1-1
## [46] cli_3.6.3 magrittr_2.0.3 survival_3.8-3
## [49] future.apply_1.11.3 withr_3.0.2 scales_1.3.0
## [52] timechange_0.3.0 rmarkdown_2.29 globals_0.16.3
## [55] nnet_7.3-20 timeDate_4041.110 hms_1.1.3
## [58] evaluate_1.0.3 knitr_1.49 hardhat_1.4.1
## [61] rlang_1.1.5 Rcpp_1.0.14 glue_1.8.0
## [64] pROC_1.18.5 ipred_0.9-15 rstudioapi_0.17.1
## [67] jsonlite_1.8.9 R6_2.5.1 plyr_1.8.9