1) Cargo el dataset y lo modifico

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)]

2) Estadistica descriptiva del dataset

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  
## 

3) FUNCIONES

3.1. Funciones para análisis de columnas

Analizar columna numérica

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 columna categórica (creación de dummies)

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

3.2. Funciones para modelos logísticos

Función para modelos logísticos univariantes de variables numéricas escaladas

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

Función para modelos logísticos univariantes de dummies categóricas

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

Función para modelos logísticos univariantes (variables binarias)

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

Función para combinar resultados univariantes y filtrar

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

Función para ajustar los modelos multivariantes

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

3.3. Funciones para machine learning (train and test y cross-validation)

Dividimos el dataset para: entrenamiento (80%) y prueba (20%)

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 sobre el 80% de entrenamiento (para medir rendimiento medio y entrenar un modelo final) y evaluación en el 20% reservado para prueba

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)
}

Entrenamos en train_data (80%) y usamos las variables que nos salieron significativas en el tercer modelo multivariante

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

Probamos en test_data (20%) para obtener precisión final (métrica) en el set de prueba

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              
## 

Información

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