Proyecto Final - Certificación Profesional en Ciencia de Datos

Autor/a

Federico Antonacci

Código

#| message: false
#| warning: false

# Listado de Librerías utilizadas

library(readr)
library(dplyr)

Adjuntando el paquete: 'dplyr'
The following objects are masked from 'package:stats':

    filter, lag
The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union
library(ggplot2)
library(scales)

Adjuntando el paquete: 'scales'
The following object is masked from 'package:readr':

    col_factor
library(here)
Warning: package 'here' was built under R version 4.4.1
here() starts at C:/FEDE/FACULTAD/CURSOS EP - Ex UPAE/CURSO CERTIFICACIÓN PROFESIONAL EN CIENCIA DE DATOS/Proyecto Final/Proyecto Final_F.Antonacci
library(glue)
library(tidyr)
library(ggthemes)
Warning: package 'ggthemes' was built under R version 4.4.1
library(gghighlight)
Warning: package 'gghighlight' was built under R version 4.4.1
library(gt)
Warning: package 'gt' was built under R version 4.4.1
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ lubridate 1.9.3     ✔ tibble    3.2.1
✔ purrr     1.0.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ scales::col_factor() masks readr::col_factor()
✖ purrr::discard()     masks scales::discard()
✖ dplyr::filter()      masks stats::filter()
✖ dplyr::lag()         masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(rpart)
library(rpart.plot)
Warning: package 'rpart.plot' was built under R version 4.4.1
library(caret)
Warning: package 'caret' was built under R version 4.4.1
Cargando paquete requerido: lattice

Adjuntando el paquete: 'caret'

The following object is masked from 'package:purrr':

    lift
library(randomForest)
Warning: package 'randomForest' was built under R version 4.4.1
randomForest 4.7-1.1
Type rfNews() to see new features/changes/bug fixes.

Adjuntando el paquete: 'randomForest'

The following object is masked from 'package:ggplot2':

    margin

The following object is masked from 'package:dplyr':

    combine

# Base de datos original INE - 55.378 observaciones (Filas)
#                                 517 variables (Columnas)

data_ECH_2023 <- read.csv(here("Datos/ECH_implantacion_2023.csv"),
                          sep = ",",
                          dec = ".", 
                          fileEncoding = "latin1")   

dim_data_ECH_2023 <- dim(data_ECH_2023)  

Código

#| message: false
#| warning: false

# Transformaciones a la Base de Datos inicial dataset: data_previa

# De la Base de datos original que cuenta con 517 Variables, vamos a seleccionar Class variables que según los antecedentes vistos pueden llegar a tener influencia en la toma de decisión de cada individuo sobre su cobertura de salud MSP/ASSE o IAMC

vars_ECH <- c("e45_cv","dpto","nom_dpto","d25","e26","e27","e45_1_1_cv","e45_2_1_cv",   
              "e46_cv","e48","e51_2","e51_4_a","e51_4_b","e51_5","e51_6","e51_8","e51_9","e51_10",
              "e51_11","e559","f269","f85","f99","g126_1","g126_2","g126_3","g126_4",
              "g134_1","g134_2","g134_3","g134_4","g_it_1","g148_1_1","g148_1_2",
              "g148_1_3","g148_1_5","g148_1_6","g148_1_7","g148_1_8","g148_1_9","g148_1_10",
              "g148_1_11","g148_1_12","g_it_2","g148_2_1","g148_2_2","g148_2_3","g148_2_5","g148_2_6",
              "g148_2_7","g148_2_8","g148_2_9","g148_2_10","g148_2_11","g148_2_12","g154","g154_1",
              "eg_ps3","eg_ps7","eg_ps1","PT1","PT2","PT4","pobre06","indig06")


data_previa <- data_ECH_2023 %>% 
  select(all_of(vars_ECH)) %>% 
  mutate(años_educ = e51_2 + e51_4_a + e51_4_b + e51_5 + e51_6 + e51_8 + e51_9 + e51_10 + e51_11,
         Ing_Act_Pri = g126_1 + g126_2 + g126_3 + g126_4,
         Ing_Act_Sec = g134_1 + g134_2 + g134_3 + g134_4,
         Jub_Ing = g148_1_1 + g148_1_2 + g148_1_3 + g148_1_5 + g148_1_6 + 
           g148_1_7 + g148_1_8 + g148_1_9 + g148_1_10 + g148_1_11 + g148_1_12,
         Pen_Ing = g148_2_1 + g148_2_2 + g148_2_3 + g148_2_5 + g148_2_6 +
           g148_2_7 + g148_2_8 + g148_2_9 + g148_2_10 + g148_2_11 + g148_2_12) %>% 
  mutate(y = e45_cv,
         X1 = dpto,
         X2 = nom_dpto,
         X3 = d25,
         X4 = e26,
         X5 = e27,
         X6 = e45_1_1_cv,
         X7 = e45_2_1_cv,  
         X8 = e46_cv,
         X9 = e48,
         X10 = años_educ,
         X11 = e559,
         X12 = f269,
         X13 = f85,
         X14 = f99,
         X15 = Ing_Act_Pri,
         X16 = Ing_Act_Sec,
         X17 = g_it_1,
         X18 = Jub_Ing,
         X19 = g_it_2,
         X20 = Pen_Ing,
         X21 = g154,
         X22 = g154_1,
         X23 = eg_ps3,
         X24 = eg_ps7,
         X25 = eg_ps1,
         X26 = PT1,
         X27 = PT2,
         X28 = PT4,
         X29 = pobre06,
         X30 = indig06) %>% 
  select(y,X1,X2,X3,X4,X5,X6,X7,X8,X9,X10,X11,X12,X13,X14,X15,X16,
         X17,X18,X19,X20,X21,X22,X23,X24,X25,X26,X27,X28,X29,X30)

data_previa <- data_previa %>% 
  select(-X6, -X7, -X26, -X27, -X28)    # Descartamos X6,X7,X26,X27,X28

dim_data_previa <- dim(data_previa) 
Código

#| message: false
#| warning: false


# Tabla con las coberturas de la Base original

tabla_data_previa1 <- data_previa %>% 
  select(y, X1, X2, X8, X15, X25, X29) %>% 
  group_by(y) %>% 
  summarise(
    Cantidad = n()) %>% 
  mutate( Coberturas = c("MSP/ASSE",
                         "IAMC",
                         "SEGURO MEDICO PRIVADO",
                         "HOSPITAL POLICIAL O INTERIOR",
                         "AREA SALUD BPS",
                         "POLICLINICA MUNICIPAL",
                         "SIN COBERTURA")) %>% 
  select(Coberturas, Cantidad) %>% 
  mutate( Porcentaje = round((Cantidad / sum(Cantidad)*100),2))
Código

#| label: tbl-dataprevia1
#| tbl-cap: "Datos con Coberturas de Base original"
#| tbl-cap-location: margin
  
tabla_data_previa1 %>% 
  gt() %>% 
  tab_header(title = md("*Individuos por Cobertura de Salud*"),
             subtitle = "Datos Base de datos original" ) %>% 
  tab_source_note(
    source_note = md("**ECH_implementacion_2023 (Completa)**")) %>% 
  tab_footnote(
    footnote = "MSP/ASSE - Cobertura considerara en nuestro análisis",
    locations = cells_body(columns= Coberturas, rows = 1)) %>% 
  tab_footnote(
    footnote = "IAMC - Cobertura considerara en nuestro análisis",
    locations = cells_body(columns=Coberturas, rows = 2)) %>% 
  tab_style(
    list(
      cell_fill(color = "#ffb554"),
      cell_text(color = "white")),
    locations = cells_body(rows = Coberturas == "MSP/ASSE")) %>% 
  tab_style(
    list(
      cell_fill(color = "#6cc0a1"),
      cell_text(color = "white")),
    locations = cells_body(rows = Coberturas == "IAMC")) %>% 
  cols_label(
    Coberturas = "COBERTURAS",
    Cantidad = "CANTIDAD",
    Porcentaje = "%")

Individuos por Cobertura de Salud

Datos Base de datos original
COBERTURAS CANTIDAD %
MSP/ASSE1 17825 32.19
IAMC2 33268 60.07
SEGURO MEDICO PRIVADO 1517 2.74
HOSPITAL POLICIAL O INTERIOR 2242 4.05
AREA SALUD BPS 4 0.01
POLICLINICA MUNICIPAL 10 0.02
SIN COBERTURA 512 0.92

ECH_implementacion_2023 (Completa)

1 MSP/ASSE - Cobertura considerara en nuestro análisis
2 IAMC - Cobertura considerara en nuestro análisis
Código

#| message: false
#| warning: false

# Para nuestro análisis solo consideramos en la Variable Objetivo y, las coberturas de salud 1 = MSP/ASSE y 2 = IAMC

data_previa2 <- data_previa %>% 
  filter(y == 1 | y == 2)      # Filtramos solo MSP/ASSE O IAMC

dim_data_previa2 <- dim(data_previa2) 

# Factorizamos la variable y - Variable a predecir - MSP/ASSE = 0 , IAMC = 1
data_previa2$y <- as.factor(ifelse(data_previa2$y == 1,0,1))

# Cambiamos los nombres de los departamento con problemas de escritura

aux_X2 <- data_previa2 %>% select(X2) %>% 
  transmute(X2 = case_match(X2,
                         "Paysandú" ~ "Paysandu",
                         "Río Negro" ~ "Rio Negro",
                         "San José" ~ "San Jose",
                         "Tacuarembó" ~ "Tacuarembo",
                         "Artigas" ~ "Artigas",
                         "Canelones" ~ "Canelones",
                         "Cerro Largo" ~ "Cerro Largo",   
                         "Colonia" ~ "Colonia",
                         "Durazno" ~ "Durazno", 
                         "Flores" ~ "Flores",
                         "Florida" ~ "Florida",
                         "Lavalleja" ~ "Lavalleja",
                         "Maldonado" ~ "Maldonado",
                         "Montevideo" ~ "Montevideo",            
                         "Rivera" ~ "Rivera",          
                         "Rocha" ~ "Rocha",          
                         "Salto" ~ "Salto",                 
                         "Soriano" ~ "Soriano",    
                         "Treinta y Tres" ~ "Treinta y Tres")) 

# La variable X2 nombre de los departamentos la convertimos en  clase factor

data_previa2$X2 <- as.factor(aux_X2$X2)

# La variable X1 número asignado a los departamentos la convertimos en clase factor

data_previa2$X1 <- as.factor(data_previa2$X1)

# La variable X8 indica Afiliación a Emergencia Móvil (1=Si, 2 = No)

data_previa2$X8 <- as.factor(data_previa2$X8)

# La variable X29 indica Pobreza según Metodología 2006 (0 = No Pobreza, 1 = Si Pobreza)

data_previa2$X29 <- as.factor(data_previa2$X29)

# La Variable X10 tiene 19 NA´s -> Serán eliminadas estas observaciones, corresponden a 19 observaciones en la Variable e51_2 que figruan con NA (LOS DESCARTAMOS)

# Calculamos el número de NAs por cada Variable
na_counts <- sapply(data_previa2, function(x) sum(is.na(x)))

# Converimos el Resultado en una Tabla
na_table <- data.frame(Variable = names(na_counts), NAs = na_counts)

#     Variable NAs
# X10      X10  19

data_previa2 <- na.omit(data_previa2)         # Eliminamos los NA´s 


#### Debemos Ajustar nuestra Base con las Variables a considerar

data <- data_previa2 %>% 
  select(-X2)             # No consideramos X2 es análoga a X1


dim_data <- dim(data) 
Código

#| message: false
#| warning: false

# Tabla con las coberturas de nuestra Base (data)

tabla_data <- data %>% 
  group_by(y) %>% 
  summarise(
    Cantidad = n()) %>% 
  mutate( Coberturas = c("MSP/ASSE",
                         "IAMC")) %>% 
  select(Coberturas, Cantidad) %>% 
  mutate( Porcentaje = round((Cantidad / sum(Cantidad)*100),2))
Código

#| label: tbl-dataprevia2
#| tbl-cap: "Datos con Coberturas MSP/ASSE e IAMC - Variables a Clasificar, previo al algoritmo delÁrbol de decisiones"
#| tbl-cap-location: margin

tabla_data %>% 
  gt() %>% 
  tab_header(title = md("*Individuos por Cobertura de Salud*"),
             subtitle = "Datos con nuestra Base de trabajo") %>% 
  tab_source_note(
    source_note = md("**ECH_implementacion_2023 (Modificada)**")) %>% 
  tab_footnote(
    footnote = "MSP/ASSE - Casos de la base original",
    locations = cells_body(columns= Coberturas, rows = 1)) %>% 
  tab_footnote(
    footnote = "IAMC - Casos de la base original",
    locations = cells_body(columns=Coberturas, rows = 2)) %>% 
  tab_style(
    list(
      cell_fill(color = "#ffb554"),
      cell_text(color = "white")),
    locations = cells_body(rows = Coberturas == "MSP/ASSE")) %>% 
  tab_style(
    list(
      cell_fill(color = "#6cc0a1"),
      cell_text(color = "white")),
    locations = cells_body(rows = Coberturas == "IAMC")) %>% 
  cols_label(
    Coberturas = "COBERTURAS",
    Cantidad = "CANTIDAD",
    Porcentaje = "%")

Individuos por Cobertura de Salud

Datos con nuestra Base de trabajo
COBERTURAS CANTIDAD %
MSP/ASSE1 17815 34.88
IAMC2 33259 65.12

ECH_implementacion_2023 (Modificada)

1 MSP/ASSE - Casos de la base original
2 IAMC - Casos de la base original
Código

cant_asse <- tabla_data %>% filter( Coberturas == "MSP/ASSE") %>% select(Cantidad)
cant_iamc <- tabla_data %>% filter( Coberturas == "IAMC") %>% select(Cantidad)
cant_total <- cant_asse + cant_iamc
Código

#| message: false
#| warning: false

set.seed(2024)                 # Seteamos la semilla para permitir la Reproducibilidad del trabajo

sample <- sample(seq_len(nrow(data)), size = 0.80 * nrow(data))

train <- data[sample, ]
test <- data[-sample, ]

dim_train <- dim(train)
dim_test <- dim(test)
t1 <- dim_train[1] + dim_test[1]
Código

#| message: false
#| warning: false

# Definimos los Parámetros de control, incluyendo la profundidad máxima

control_params <- rpart.control(maxdepth = 4)    # Profundiad Máxima 4

cobertura_tree <- rpart( formula = y ~ .,
                         data = train, 
                         method = "class",
                         control = control_params)

cobertura_tree
n= 40859 

node), split, n, loss, yval, (yprob)
      * denotes terminal node

 1) root 40859 14199 1 (0.3475122 0.6524878)  
   2) X8=2 29390 13476 1 (0.4585233 0.5414767)  
     4) X25< 1.5 11980  4291 0 (0.6418197 0.3581803) *
     5) X25>=1.5 17410  5787 1 (0.3323952 0.6676048)  
      10) X1=2,6,7,8,11,12,15,16,17,18,19 6105  3016 1 (0.4940213 0.5059787)  
        20) X15< 30050 5252  2439 0 (0.5356055 0.4643945) *
        21) X15>=30050 853   203 1 (0.2379836 0.7620164) *
      11) X1=1,3,4,5,9,10,13,14 11305  2771 1 (0.2451128 0.7548872)  
        22) X29=1 530   145 0 (0.7264151 0.2735849) *
        23) X29=0 10775  2386 1 (0.2214385 0.7785615) *
   3) X8=1 11469   723 1 (0.0630395 0.9369605) *
Código

#| message: false
#| warning: false

data <- data_previa2 %>% 
  select(y, X1, X2, X8, X15, X25, X29)

dim_data <- dim(data)  

# Definimos los Parámetros de control, incluyendo la profundidad máxima

control_params <- rpart.control(maxdepth = 4)    # Profundiad Máxima 4

cobertura_tree <- rpart( formula = y ~ .,
                         data = train, 
                         method = "class",
                         control = control_params)

cobertura_tree
n= 40859 

node), split, n, loss, yval, (yprob)
      * denotes terminal node

 1) root 40859 14199 1 (0.3475122 0.6524878)  
   2) X8=2 29390 13476 1 (0.4585233 0.5414767)  
     4) X25< 1.5 11980  4291 0 (0.6418197 0.3581803) *
     5) X25>=1.5 17410  5787 1 (0.3323952 0.6676048)  
      10) X1=2,6,7,8,11,12,15,16,17,18,19 6105  3016 1 (0.4940213 0.5059787)  
        20) X15< 30050 5252  2439 0 (0.5356055 0.4643945) *
        21) X15>=30050 853   203 1 (0.2379836 0.7620164) *
      11) X1=1,3,4,5,9,10,13,14 11305  2771 1 (0.2451128 0.7548872)  
        22) X29=1 530   145 0 (0.7264151 0.2735849) *
        23) X29=0 10775  2386 1 (0.2214385 0.7785615) *
   3) X8=1 11469   723 1 (0.0630395 0.9369605) *
Código
# Hacer Predicciones en el Conjunto de prueba - test
predictions <- predict(cobertura_tree, test, type = "class")
table(predictions)              # Indica las Predicciones
predictions
   0    1 
4570 5645 


# Matriz de Confusion
confusion_matrix <- table(predictions, test$y)


tabla_confusion <- data.frame(
  Predicciones = c("Predecir y = 0 ASSE",
                   "Predecir y = 1 IAMC"),
  Real_0_ASSE = c(confusion_matrix[1,1],
                  confusion_matrix[2,1]),
  Real_1_IAMC = c(confusion_matrix[1,2],
                  confusion_matrix[2,2])
) %>% 
  gt() %>% 
tab_header(title = md("*Predicciones con Árbol de Decisiones*"),
           subtitle = "Modelos basado en nuestra base: data") %>% 
  tab_source_note(
    source_note = md("**Predicciones de elección de coberturas de salud**")) %>% 
  tab_footnote(
    footnote = "Verdadero Negativo - Predicciones Veradaderas de ASSE",
    locations = cells_body(columns = Real_0_ASSE, rows = 1)) %>% 
  tab_footnote(
    footnote = "Verdadero Positivo - Predicciones Veradaderas de IAMC",
    locations = cells_body(columns = Real_1_IAMC, rows = 2)) %>% 
  tab_footnote(
    footnote = "Falso Negativo - Predicciones Incorrectas de ASSE",
    locations = cells_body(columns = Real_0_ASSE, rows = 2)) %>% 
  tab_footnote(
    footnote = "Falso Positivo - Predicciones Veradaderas de IAMC",
    locations = cells_body(columns = Real_1_IAMC, rows = 1)) %>% 
  tab_style(
    list(
      cell_fill(color = "#ffb554"),
      cell_text(color = "white")),
    locations = cells_body(rows = Predicciones == "Predecir y = 0 ASSE")) %>% 
  tab_style(
    list(
      cell_fill(color = "#6cc0a1"),
      cell_text(color = "white")),
    locations = cells_body(rows = Predicciones == "Predecir y = 1 IAMC")) %>% 
  cols_label(
    Predicciones = "PREDICCIONES DEL MODELO",
    Real_0_ASSE = "VALORES REALES 0 ASSE",
    Real_1_IAMC = "VALORES REALES 1 IAMC")

tabla_confusion


# Métricas de Clasificación - Modelo  de Decisión Tree

# Calculamos la precisión - accuracy
# accuracy = (TP + TN) / (TP + FP + TN + FN)

accuracy <- (confusion_matrix[1, 1] + confusion_matrix[2, 2]) / 
  (confusion_matrix[1, 1] + confusion_matrix[1, 2] + 
     confusion_matrix[2, 1] + confusion_matrix[2, 2])


#                         Real
#                    0            1
#   
#   P       0       TN           FP
#   r
#   e
#   d       1       FN           TP
#   


# Calculamos la Precisión, Recall y F1 Score - Para 1 (IAMC) y 0 (MSP/ASSE)
# Precision = TP / (TP + FN)
# Recall = TP / (TP + FP)
# F1 Score = 2*Precision*Recall / (Precision + Recall)

# Para 1 (IAMC)

precision_1 <- confusion_matrix[2, 2] / 
  (confusion_matrix[2, 1] + confusion_matrix[2, 2]) 

recall_1 <- confusion_matrix[2, 2] /
  (confusion_matrix[2, 2] + confusion_matrix[1, 2])

f1_score_1 <- 2 * precision_1 * recall_1 / (precision_1 + recall_1)

# Para 0 (MSP/ASSE)

precision_0 <- confusion_matrix[1, 1] / 
  (confusion_matrix[1, 1] + confusion_matrix[1, 2]) 

recall_0 <- confusion_matrix[1, 1] /
  (confusion_matrix[1, 1] + confusion_matrix[2, 1])

f1_score_0 <- 2 * precision_0 * recall_0 / (precision_0 + recall_0)



confusionMatrix(predictions, test[["y"]])
Confusion Matrix and Statistics

          Reference
Prediction    0    1
         0 2807 1763
         1  809 4836
                                          
               Accuracy : 0.7482          
                 95% CI : (0.7397, 0.7566)
    No Information Rate : 0.646           
    P-Value [Acc > NIR] : < 2.2e-16       
                                          
                  Kappa : 0.4805          
                                          
 Mcnemar's Test P-Value : < 2.2e-16       
                                          
            Sensitivity : 0.7763          
            Specificity : 0.7328          
         Pos Pred Value : 0.6142          
         Neg Pred Value : 0.8567          
             Prevalence : 0.3540          
         Detection Rate : 0.2748          
   Detection Prevalence : 0.4474          
      Balanced Accuracy : 0.7546          
                                          
       'Positive' Class : 0               
                                          

Predicciones con Árbol de Decisiones

Modelos basado en nuestra base: data
PREDICCIONES DEL MODELO VALORES REALES 0 ASSE VALORES REALES 1 IAMC
Predecir y = 0 ASSE 1 2807 2 1763
Predecir y = 1 IAMC 3 809 4 4836

Predicciones de elección de coberturas de salud

1 Verdadero Negativo - Predicciones Veradaderas de ASSE
2 Falso Positivo - Predicciones Veradaderas de IAMC
3 Falso Negativo - Predicciones Incorrectas de ASSE
4 Verdadero Positivo - Predicciones Veradaderas de IAMC
Tabla 1: Matriz de Confusión con las predicciones del Árbol de decisiones, con nuestro modelo

En la tabla Tabla 1 se observan las predicciones de nuestro modelo, realizadas con el algoritmo Árbol de decisiones, con el dataset de prueba.

Métricas de Clasificación - Modelo de Decisión Tree

Precisión global del modelo:

Accuracy - Precisión Global del modelo: 74.82 %

Precisión Para y = 0 - Cobertura MSP/ASSE - Precisión, Recall y F1 Score

Precisión_0: 61.42 %

Recall_0: 77.63 %

F1 Score_0: 68.58 %

Precisión Para y = 1 - Cobertura IAMC - Precisión, Recall y F1 Score

Precisión_1: 85.67 %

Recall_1: 73.28 %

F1 Score_1: 78.99 %

Visualización de nuestro modelo

Código

#| label: fig-Grafico_arbol
#| fig-cap: "Gráfico de árbol de decisión - con nuestro modelo "
#| fig-cap-location: margin

# Plot del árbol de decisión

rpart.plot(cobertura_tree, 
                  type = 4)

En la ?@fig-Grafico_arbol cada uno de los rectángulos representa un nodo de nuestro árbol de decisión, con su regla de clasificación. Cada nodo está coloreado de acuerdo a la categoría mayoritaria entre los datos que agrupa. Esta es la categoría que ha predicho el modelo para ese grupo.

Dentro del rectángulo de cada nodo nos muestra qué proporción de casos pertenecen a cada categoría y la proporción del total de datos que han sido agrupados allí.

¿Cómo elegimos un modelo?

La elección del modelo depende de nuestros objetivos y de qué tanta precisión nos interesa en nuestras predicciones. Podríamos elegir un modelo a partir de la creación de múltiples modelos y compararlos entre sí. Es muy probable que si repetimos este ejercicio, el de repetir múltiples modelos suficientes veces, encontraremos más regularidades, en el siguiente punto mediante funciones de R (“Árboles de decisión con R – Clasificación”. Juan Bosco Mendoza Vega. Abril 2018) intentaremos sistematizar el análisis de modelos.

Sistematizar el análisis

Código

#| message: false
#| warning: false

# Sistematizando el análisis  

# Se puede crear un grupo de funciones que generen árboles de manera repetida

crear_sets <- function(data, proporcion = 0.8) {
  sets <- list()
  
  sets[["train"]] <- sample_frac(data, proporcion)
  sets[["test"]] <- setdiff(data, sets[["train"]])
  
  sets
}

entrenar_arbol <- function(sets, objetivo, predictores = ".", mi_cp = 0.1) {
  if(length(predictores > 1)) {
    predictores <- paste0(predictores, collapse = "+")
  }
  mi_formula <- paste0(objetivo, "~", predictores) %>% as.formula()
  
  arbol <- list()
  arbol[["modelo"]] <-
    rpart(data = sets[["train"]], formula = mi_formula,
          control = rpart.control(cp = mi_cp, xval = 35, minsplit = 5))
  arbol[["prediccion"]] <- predict(arbol[["modelo"]], sets[["test"]], type = "class")
  arbol[["referencia"]] <- sets[["test"]][[objetivo]]
  
  arbol
}

obtener_diagnostico <- function(arbol, objetivo, mi_cp = 0.01) {
  diagnostico <- list()
  diagnostico[["matriz"]] <- confusionMatrix(data = arbol[["prediccion"]],
                                             reference = arbol[["referencia"]])
  
  cp <- with(arbol[["modelo"]], cptable[which.min(cptable[, "xerror"]), "CP"])
  cp_original <- mi_cp
  podar <- if(cp < mi_cp) "SI" else "NO"
  diagnostico[["mincp"]] <- data.frame("CP minimo" = cp, "CP original" = cp_original,
                                       "Podar" = podar)
  
  diagnostico
  
}


crear_arbol <- function(datos, objetivo, predictores = ".", mi_cp = 0.01) {
  resultado <- list()
  resultado[["sets"]] <- crear_sets(data)
  resultado[["arbol"]] <- entrenar_arbol(resultado[["sets"]], objetivo, predictores,
                                         mi_cp)
  resultado[["diagnostico"]] <- obtener_diagnostico(resultado[["arbol"]], objetivo,
                                                    mi_cp)
  resultado
}

set.seed(2024)

unarbol <- crear_arbol(data, "y", mi_cp = 0.005)

unarbol[["diagnostico"]]
$matriz
Confusion Matrix and Statistics

          Reference
Prediction   0   1
         0 133  82
         1 109 364
                                          
               Accuracy : 0.7224          
                 95% CI : (0.6873, 0.7556)
    No Information Rate : 0.6483          
    P-Value [Acc > NIR] : 2.038e-05       
                                          
                  Kappa : 0.3753          
                                          
 Mcnemar's Test P-Value : 0.05993         
                                          
            Sensitivity : 0.5496          
            Specificity : 0.8161          
         Pos Pred Value : 0.6186          
         Neg Pred Value : 0.7696          
             Prevalence : 0.3517          
         Detection Rate : 0.1933          
   Detection Prevalence : 0.3125          
      Balanced Accuracy : 0.6829          
                                          
       'Positive' Class : 0               
                                          

$mincp
  CP.minimo CP.original Podar
1     0.005       0.005    NO

CONCLUSIÓN

Con el objetivo de contestar nuestras preguntas de investigación:

¿Qué variables son determinantes para la elección de la cobertura de salud principal entre MSP/ASSE y una IAMC?

¿Podemos predecir la elección de los usuarios sobre su cobertura de salud principal entre MSP/ASSE y una IAMC?

El dataset data, cuenta con 7 Variables (Columnas), las que son determinadas por el algoritmo árbol de decisiones:

y = Derechos Vigentes en Instituciones de Salud Principal

X1 = dpto = Número asignado al Departamento

X8 = Afiliación a Emergencia Móvil (1 = Si, 2 = No)

X15 = Ingreso de Actividad Principal = Sumatoria de  Ingresos i

X25 = Considera que su Hogar es Pobre. Percepción del informante en relación al ingreso para satisfacer las necesidades del Hogar (1 = Si, 2 = No)

X29 = Pobreza según Metodología 2006 (0 = No Pobreza, 1 = Si Pobreza)

Estas son las variables que determinan le elección de la cobertura de salud principal de los usuarios entre MSP/ASSE y una IAMC, según el algoritmo utilizado en este trabajo.

El dataset data, cuenta con 51074 Observaciones (Filas):

Código

#| message: false
#| warning: false

# Relación entre la cantidad de usuarios IAMC / ASSE

cant_0 <- data_previa2 %>% 
  filter(y == 0) %>% 
  dim()

cant_1 <- data_previa2 %>% 
  filter(y == 1) %>% 
  dim()

Se observa en el gráfico de la ?@fig-gr_1 la cantidad de usuarios, según su cobertura de salud a nivel de todo el país, la relación entre IAMC/ASSE es de 1.87 veces, lo que indica la mayor cantidad de usuarios de las IAMC con relación al MSP/ASSE.

Código

#| label: fig-gr_1
#| fig-cap: "Cantidad de usuarios por obertura médica, entre MSP/ASSE o una IAMC"
#| fig-cap-location: margin 

gr_1 <- ggplot( data = data_previa2, aes( x = y, fill = y)) +
  geom_bar() + 
  scale_fill_manual( values = c("#ffb554", "#6cc0a1")) +
  labs( title = "Cantidad de usuarios por cobertura médica, entre MSP/ASSE o una IAMC a nivel del total de país",
        x = "Cobertura: 0 = ASSE - 1 = IAMC",
        y = "Cantidad",
        fill = "Cobertura")+
  theme_bw(base_size = 12) +
  geom_text(aes(label=..count..), stat='count',     
            position=position_dodge(1),
            vjust= 4, 
            size=5.0)
  
gr_1
Warning: The dot-dot notation (`..count..`) was deprecated in ggplot2 3.4.0.
ℹ Please use `after_stat(count)` instead.

Lo observado en el punto anterior, lo desglosaremos en el gráfico de la ?@fig-gr_2 para cada departamento, del total de 19 a nivel país, solo en 7 de ellos la cantidad de usuarios con cobertura de MSP/ASSE es mayor a los de alguna IAMC, esto ocurre en:

  • Artigas

  • Cerro Largo

  • Paysandu

  • Rio Negro

  • Salto

  • Tacuarembo

  • Treinta y Tres

Código

#| label: fig-gr_2
#| fig-cap: "Cantidad de usuarios por cobertura médica, entre MSP/ASSE o una IAMC para cada departamento"
#| fig-cap-location: margin 

# Gráfico de Barras por Departamento según cobertura

gr_2 <- data_previa2 %>%
  ggplot() +
  geom_bar(aes( x = fct_infreq(X2), fill = y)) +
  scale_fill_manual( values = c("#ffb554", "#6cc0a1")) + 
  labs(title = "Cantidad ordenada de usuarios por Departamento",
       subtitle = "Comparativo Usuarios en ASSE o en una IAMC",
       y="Frecuencia de Cobertura", 
       x= NULL, 
       fill = "Cobertura: 0 = ASSE o 1 = IAMC") +
  theme_bw() +
  theme( axis.text.x = element_text( angle = 90, hjust = 1, size = 7),
         axis.text.y = element_text( size = 8),
         legend.position = "bottom")

gr_2

Otra de las variables determinantes para la toma de decisión de los usuarios es su Ingreso de actividad principal, por este motivo, en el gráfico de caja de la ?@fig-gr_3 notamos como el ingreso promedio de los usuarios con cobertura IAMC es mayor al de MSP/ASSE, pero lo relevante es que esto se cumple para todos los departamentos del país, esta información la consideramos muy importante. En las tablas ?@tbl-tbl_ASSE y ?@tbl-tbl_IAMC resulta que el ingreso promedio por la actividad principal es superior en todos los departamentos para los usuarios con cobertura en alguna IAMC.

Código

#| label: fig-gr_3
#| fig-cap: "Gráfico de Caja para observar el Ingreso de Actividad Principal según la cobertura de salud"
#| fig-cap-location: margin 

# Gráfico de Caja del Ingreso según su cobertura

gr_3 <- ggplot(data_previa2) +
  geom_boxplot(aes(x=y, y=log(X15)), color = c("#ffb554", "#6cc0a1")) +
  labs( title = "Gráfico de Caja - Ingreso por actividad principal",
        subtitle = "Usuarios en ASSE o en una IAMC",
        x = "Cobertura: 0 = ASSE - 1 = IAMC",
        y = "Transformación log(Ingreso)") +
  theme_bw(base_size = 12)

gr_3
Warning: Removed 34577 rows containing non-finite outside the scale range
(`stat_boxplot()`).

Para fundamentar nuestras comentarios y conclusiones resumimos datos con el fin de obtener información , (según las coberturas analizadas, en función de la variables determinantes en la toma de decisión de los usuarios sobre su cobertura de salud), que sistematizamos en las tablas: @tb-tbl_ASSE y ?@tbl-tbl_IAMC.

Tabla resumen de los usuarios con cobertura de salud MSP/ASSE:
Código

#| label: tbl-tbl_ASSE
#| tbl-cap: "Tabla resumen de varaibles relevantes en nuestro modelo para los ususarios con cobertura MSP/ASSE"
#| tbl-cap-location: margin 

# Tabla con las relaciones de variables de nuestro modelo

# Tabla ASSE

tabla_ASSE <- data %>%
  filter( y == 0) %>% 
  mutate( X2 = as.character(X2),
          Pobres = as.numeric(X29),
          Emerg = as.numeric(X8)) %>% 
  mutate( Pobres = ifelse(Pobres == 1,0,1),
          Emerg = ifelse(Emerg == 1,1,0)) %>% 
  group_by(X2) %>% 
  summarise(
    Cantidad = n(),
    Pobres = sum(Pobres),
    Emerg = sum(Emerg),
    Ingreso_medio = round(mean(X15),0)) %>% 
  mutate( Por_Pob = round(Pobres / sum(Pobres)*100,2),
          Por_Eme = round(Emerg / sum(Emerg)*100,2)) %>% 
  select(X2, Cantidad, Ingreso_medio, Pobres, Por_Pob, Emerg, Por_Eme)


tbl_ASSE <- tabla_ASSE %>% 
  gt() %>% 
  tab_header(title = md("*Individuos con Cobertura MSP/ASSE*"),
             subtitle = "Datos solo con Cobertura ASSE") %>% 
  tab_source_note(
    source_note = md("**ECH_implementacion_2023 (Modificada)**")) %>% 
   tab_style(
    list(
      cell_fill(color = "#ffb554"),
      cell_text(color = "white")),
    locations = cells_body(rows = X2 == X2)) %>% 
    cols_label(
    X2 = "DEPARTAMENTOS",
    Cantidad = "CANTIDAD",
    Ingreso_medio = "ING. MEDIO",
    Pobres = "CANT. POBRES",
    Por_Pob = "%_pob",
    Emerg = "CANT. EMERG",
    Por_Eme = "%_EME") %>% 
  tab_spanner(label = "POBRES",
              columns = Pobres:Por_Pob) %>%  
  tab_spanner(label = "EMERG. MOVIL",
              columns = Emerg:Por_Eme) %>% 
  tab_footnote(
  footnote = "Ingreso Medio de Actividad Principal",
  locations = cells_column_labels(columns = Ingreso_medio)) %>% 
  tab_footnote(
    footnote = "Cantidad de Pobres - según Metodología Año 2006",
    locations = cells_column_labels(columns = Pobres)) %>% 
  tab_footnote(
    footnote = "Porcentaje de Pobres - según Metodología Año 2006 sobre total de Cobertura",
    locations = cells_column_labels(columns = Por_Pob)) %>% 
  tab_footnote(
    footnote = "Cantidad con Afiliación a Emergencia Movil",
    locations = cells_column_labels(columns = Emerg)) %>% 
  tab_footnote(
    footnote = "Porcentaje con Afilación a Emergencia Móvil sobre total de Cobertura",
    locations = cells_column_labels(columns = Por_Eme))

tbl_ASSE

Individuos con Cobertura MSP/ASSE

Datos solo con Cobertura ASSE
DEPARTAMENTOS CANTIDAD ING. MEDIO1 POBRES EMERG. MOVIL
CANT. POBRES2 %_pob3 CANT. EMERG4 %_EME5
Artigas 865 4362 175 4.62 8 0.90
Canelones 2276 4430 395 10.44 178 20.05
Cerro Largo 880 2882 242 6.39 4 0.45
Colonia 526 6744 21 0.55 17 1.91
Durazno 513 5929 74 1.96 4 0.45
Flores 268 5896 12 0.32 0 0.00
Florida 461 6807 60 1.59 10 1.13
Lavalleja 450 5986 56 1.48 8 0.90
Maldonado 990 5606 104 2.75 37 4.17
Montevideo 3877 4271 1508 39.84 406 45.72
Paysandu 1028 4948 159 4.20 36 4.05
Rio Negro 796 6918 101 2.67 4 0.45
Rivera 742 2966 235 6.21 22 2.48
Rocha 554 4608 101 2.67 6 0.68
Salto 1090 4498 253 6.68 72 8.11
San Jose 517 6613 34 0.90 6 0.68
Soriano 632 6055 59 1.56 19 2.14
Tacuarembo 835 5648 97 2.56 42 4.73
Treinta y Tres 515 5169 99 2.62 9 1.01

ECH_implementacion_2023 (Modificada)

1 Ingreso Medio de Actividad Principal
2 Cantidad de Pobres - según Metodología Año 2006
3 Porcentaje de Pobres - según Metodología Año 2006 sobre total de Cobertura
4 Cantidad con Afiliación a Emergencia Movil
5 Porcentaje con Afilación a Emergencia Móvil sobre total de Cobertura
Tabla resumen de los usuarios con cobertura de salud IAMC:
Código

#| label: tbl-tbl_IAMC
#| tbl-cap: "Tabla resumen de variables relevantes en nuestro modelo para los ususarios con cobertura IAMC"
#| tbl-cap-location: margin 


# Tabla IAMC
tabla_IAMC <- data %>%
  filter( y == 1) %>% 
  mutate( X2 = as.character(X2),
          Pobres = as.numeric(X29),
          Emerg = as.numeric(X8)) %>% 
  mutate( Pobres = ifelse(Pobres == 1,0,1),
          Emerg = ifelse(Emerg == 1,1,0)) %>% 
  group_by(X2) %>% 
  summarise(
    Cantidad = n(),
    Pobres = sum(Pobres),
    Emerg = sum(Emerg),
    Ingreso_medio = round(mean(X15),0)) %>% 
  mutate( Por_Pob = round(Pobres / sum(Pobres)*100,2),
          Por_Eme = round(Emerg / sum(Emerg)*100,2)) %>% 
  select(X2, Cantidad, Ingreso_medio, Pobres, Por_Pob, Emerg, Por_Eme)



tbl_IAMC <- tabla_IAMC %>% 
  gt() %>% 
  tab_header(title = md("*Individuos con Cobertura IAMC*"),
             subtitle = "Datos solo con Cobertura IAMC") %>% 
  tab_source_note(
    source_note = md("**ECH_implementacion_2023 (Modificada)**")) %>% 
  tab_style(
    list(
      cell_fill(color = "#6cc0a1"),
      cell_text(color = "white")),
    locations = cells_body(rows = X2 == X2)) %>% 
  cols_label(
    X2 = "DEPARTAMENTOS",
    Cantidad = "CANTIDAD",
    Ingreso_medio = "ING. MEDIO",
    Pobres = "CANT. POBRES",
    Por_Pob = "%_pob",
    Emerg = "CANT. EMERG",
    Por_Eme = "%_EME") %>% 
  tab_spanner(label = "POBRES",
              columns = Pobres:Por_Pob) %>%  
  tab_spanner(label = "EMERG. MOVIL",
              columns = Emerg:Por_Eme) %>% 
  tab_footnote(
    footnote = "Ingreso Medio de Actividad Principal",
    locations = cells_column_labels(columns = Ingreso_medio)) %>% 
  tab_footnote(
    footnote = "Cantidad de Pobres - según Metodología Año 2006",
    locations = cells_column_labels(columns = Pobres)) %>% 
  tab_footnote(
    footnote = "Porcentaje de Pobres - según Metodología Año 2006 sobre total de Cobertura",
    locations = cells_column_labels(columns = Por_Pob)) %>% 
  tab_footnote(
    footnote = "Cantidad con Afiliación a Emergencia Movil",
    locations = cells_column_labels(columns = Emerg)) %>% 
  tab_footnote(
    footnote = "Porcentaje con Afilación a Emergencia Móvil sobre total de Cobertura",
    locations = cells_column_labels(columns = Por_Eme))

tbl_IAMC

Individuos con Cobertura IAMC

Datos solo con Cobertura IAMC
DEPARTAMENTOS CANTIDAD ING. MEDIO1 POBRES EMERG. MOVIL
CANT. POBRES2 %_pob3 CANT. EMERG4 %_EME5
Artigas 294 11862 5 0.64 12 0.09
Canelones 5234 14840 66 8.40 1964 14.73
Cerro Largo 689 11175 14 1.78 16 0.12
Colonia 1273 13668 8 1.02 399 2.99
Durazno 692 13836 13 1.65 409 3.07
Flores 365 14188 0 0.00 5 0.04
Florida 758 12617 5 0.64 612 4.59
Lavalleja 589 12780 8 1.02 84 0.63
Maldonado 2305 15058 5 0.64 430 3.23
Montevideo 14393 19460 584 74.30 8036 60.29
Paysandu 974 13389 11 1.40 188 1.41
Rio Negro 482 16785 0 0.00 32 0.24
Rivera 756 11218 12 1.53 42 0.32
Rocha 906 12525 8 1.02 14 0.11
Salto 908 12881 21 2.67 187 1.40
San Jose 1094 15266 10 1.27 657 4.93
Soriano 694 12755 5 0.64 93 0.70
Tacuarembo 489 14051 5 0.64 102 0.77
Treinta y Tres 364 14277 6 0.76 48 0.36

ECH_implementacion_2023 (Modificada)

1 Ingreso Medio de Actividad Principal
2 Cantidad de Pobres - según Metodología Año 2006
3 Porcentaje de Pobres - según Metodología Año 2006 sobre total de Cobertura
4 Cantidad con Afiliación a Emergencia Movil
5 Porcentaje con Afilación a Emergencia Móvil sobre total de Cobertura
  • El promedio del ingreso de la actividad principal para los usuarios con cobertura en alguna IAMC es de 1.3823^{4}, mientras que el promedio para los usuarios del MSP/ASSE es de 5281, lo que implica una relación de 2.62 (IAMC/ASSE) mayor para los usuarios con cobertura en alguna IAMC. Es claro el mayor ingreso promedio del que disponen los usuarios con cobertura IAMC, esta situación se observa de forma gráfica en la ?@fig-gr_3.

  • El promedio de pobres, según la Metodología 2006, para los usuarios con cobertura en MSP/ASSE es de 199 mientras que el promedio para los usuarios de alguna IAMC es de 41, lo que implica una relación de 4.85 (ASSE/IMAC) mayor para los usuarios con cobertura en MSP/ASSE. Es claro la mayor cantidad promedio de pobres, según la Metodología 2006, en los usuarios con cobertura MSP/ASSE.

  • El promedio afiliaciones a emergencia móvil en los usuarios con cobertura en alguna IAMC es de 702 mientras que el promedio para los usuarios del MSP/ASSE es de 47, lo que implica una relación de 14.94 (IAMC/ASSE) mayor para los usuarios con cobertura en alguna IAMC. Es clara la mayor cantidad promedio de usuarios con afiliación a emergencia móvil de usuarios con cobertura IAMC. Esto se puede asociar con el mayor ingreso promedio de esta categoría, disponen de más posibilidades para ampliar su cobertura de salud, (emergencia móvil, pago de copagos), se observa con esta información la importancia de la variable X8 = Afiliación a Emergencia Móvil (1 = Si, 2 = No), es el primer nodo seleccionado por el algoritmo en nuestro modelo, se aprecia claramente en la ?@fig-Grafico_arbol

Observamos, en base a los datos resumidos en las tablas ?@tbl-tbl_ASSE y ?@tbl-tbl_IAMC, que las IAMC cuentan con mayor cantidad de usuarios en 11 de los 19 departamentos, tienen en promedio un ingreso de actividad principal mayor en todos los departamentos y también cuentan con mayor cantidad de usuarios con afiliación a emergencia móvil también en todo el país con relación a los usuarios de MSP/ASSE. Por su parte el MSP/ASSE cuenta con mayor cantidad de usuarios clasificados como pobres, según la Metodología 2006, en todos los departamentos con relación a los usuarios de las IMAC.

Podemos concluir, en base a la información analizada, sobre las prestadoras de cobertura de salud analizadas:

  • que las IAMC tienen mayor cantidad de usuarios en relación al MSP/ASSE,

  • que las IAMC cuentan con usuarios de mayor nivel de ingreso promedio de actividad principal en relación al MSP/ASSE,

  • que las IAMC cuentan con mayor cantidad de usuarios con afiliación a emergencia móvil en relación al MSP/ASSE y

  • que el MSP/ASSE cuenta con mayor cantidad de usuarios clasificados pobres, según Metodología 2006, en relación a las IAMC.

Es evidente que para cada individuo es sustantivo su nivel de ingresos al momento de tomar la decisión sobre su prestadora de salud, algo que es totalmente intuitivo, y se materializa en los datos analizados.

Como resultado de este trabajo y respuesta a nuestra segunda pregunta, concluimos que podemos predecir la elección de los usuarios sobre su cobertura de salud principal entre MSP/ASSE y una IAMC, con el algoritmo Árbol de decisiones, con una Accuracy - Precisión Global del modelo del 74.82 %. A partir de sistematizar el modelo planteado, la Acurracy - Precisión global obtenida es del 72.24 %. El nivel de precisión obtenido con nuestro modelo con un solo árbol es similar a la obtenida luego de combinar múltiples árboles (con un solo árbol se obtiene 2.6 % mayor precisión global, con respecto al obtenido con múltiples árboles), con esto podemos validar nuestro modelo inicial y salvar la primer desventaja planteada con el algoritmo Árbol de decisiones, para los niveles de precisión indicados anteriormente. Se intenta demostrar que nuestro modelo con un solo árbol no tiene tendencia a sobre ajustar, es comparable a los resultados obtenidos con múltiples árboles.

La elección del modelo planteado en este trabajo dependerá de la tolerancia a los niveles de precisión necesarios al realizar las predicciones, nuestro modelo a partir de un algoritmo de Árbol de decisiones puede ofrecer una Accuracy - Precisión Global del modelo del 74.82 %

Consideramos que, más allá del nivel de precisión obtenido en el modelo, es relevante descubrir que:

  • la ubicación del usuario en el país (X1),

  • su afiliación o no a una Emergencia móvil (X8),

  • su nivel de ingreso de actividad principal (X15),

  • considerar que su hogar es pobre o no en relación al ingreso para satisfacer las necesidades de su hogar (X25) y

  • ser pobre o no (según Metodología 2006) (X29).

Son las variables determinantes en la elección de los usuarios sobre su cobertura de salud.

Planteamos como hipótesis que la situación descrita en este trabajo se debe a los mayores costos asociados la cobertura de salud en las IAMC, por ejemplo, debido a los copagos asociados a las instituciones privadas y las características de nuestro Estado con relación la cobertura de salud brindada. A mayor nivel de ingresos de los usuarios estos optaran por alguna IAMC, ya que podrán cubrir los mayores costos asociadas a las mismas. Para validar esta respuesta tentativa se deberán realizar estudios más profundos.

BIBLIOGRAFÍA

-       “Árboles de decisión con R – Clasificación”. Juan Bosco Mendoza Vega. Abril 2018. https://pubs.com/jboscomendoza/arboles_decision_clasificacion

-       “Árboles de decisión”. Jairo A. Ayala Godoy. https://rpubs/JairoAyala/AD

-       “Catalogo central de datos”. https://www4.ine.gub.uy/Anda5/index.php/catalog  -“Fuente: INE-ECH 2022”. Instituto Nacional  de Estadística – República Oriental del Uruguay.

-       “El Proceso de reforma de la salud en el Uruguay: Pasado, presente y futuro”. Luis Enrique Gallo. Enero – Junio 2015 – Monitor Estratégico, Número 7. Superintendencia Nacional de Salud.

-       “Informe Múltiple Cobertura en el SNIS a diciembre 2023”. Área Economía de la Salud – Ministerio de Salud Pública. Agosto 2024.

ANEXOS

Anexo 1: Variables – Problema de Clasificación

Encuesta Continua de Hogares 2023 – ECH_implantacion_2023

Variable Dependiente – Explicada:

y = e45_cv = Derechos Vigentes en Instituciones de Salud Principal

·  Dummy: Tipo de cobertura de Salud =

0        MSP/ASSE

1         IAMC – Instituciones de Asistencia Médica Colectiva

·  Descripción del código - Base Original:

1 MSP/ASSE

2 IAMC

3 Seguro Médico Privado

4 Hospital Policial o Militar

5 Área Salud BPS

6 Policlínica Municipal

7 Sin Cobertura

Variables Independientes – Explicativas:

X1 = dpto = Número asignado al Departamento

X2 = nom_dpto = Nombre del Departamento

Correspondencia entre Número (X1) y Nombre (X2) del Departamento

1         Montevideo

2         Artigas

3         Canelones

4         Cerro Largo

5         Colonia

6         Durazno

7         Flores

8         Florida

9         Lavalleja

10       Maldonado

11       Paysandu

12       Rio Negro

13       Rivera

14       Rocha

15       Salto

16       San Jose

17       Soriano

18       Tacuarembo

19       Treinta y Tres

X3 = d25 = Total de personas que residen en el Hogar

X4 = e26 = Sexo al nacer ( 1 = Hombre, 2 = Mujer)

X5 = e27 = Años de edad (0 = Menor de un año, 98 = Desde los 98 años en adelante)

Variables X6 y X7 determinan el mecanismo de acceso a ASSE o a una IAMC, no podrán ser considerados en nuestro modelo inicial, ya que es la respuesta directa a nuestra pregunta.

X6 = e45_1_1_cv = Mecanismo de acceso a ASSE (0 = No tiene ASSE, 1 = A través de FONASA, miembro de este Hogar, 2 = Por Bajos Recursos, 3 = Pagando Arancel, 4 = A través de FONASA, miembro de otro Hogar, 5= A través de un miembro de este hogar, 6 = A través de otro que no es miembro de este Hogar)

X7 = e45_2_1_cv = Mecanismo de acceso a IAMC (0 = No tiene IAMC, 1 = A través de FONASA, miembro de este Hogar, 2 = Paga un miembro de este Hogar, 3 = A través de otro que no es miembro de este Hogar, 5 = Paga el empleador de un miembro del Hogar, 6 = A través de FONASA, miembro de otro Hogar)

X8 = e46_cv = Afiliación a Emergencia Móvil (1 = Si, 2 = No)

X9 = e48 = Sabe leer y escribir (1 = Sabe leer y escribir, 2 = No sabe leer o escribir)

X10 = años_educ = Años de Educación = Sumatoria Años aprobados de educación i

     e51_2 = Años aprobados en Primaria común

     e51_4_a = Años aprobados en Educación Media – Liceo

     e51_4_b = Años aprobados en Educación Media Básica – CETP

     e51_5 = Años aprobados en Bachillerato

     e51_6 = Años aprobados en Bachillerato Tecnológico

     e51_8 = Años aprobados en Magisterio o Profesorado

     e51_9 = Años aprobados en Universidad o similar

     e51_10 = Años aprobados en Terciario no Universitario

     e51_11 = Años aprobados en Estudios de Posgrado

X11 = e559 = Concurrencia a Comedor (1 = Si, 2 = No)

X12 = f269 = Trabajó la semana pasada (0 = Menor a 14 años, 1 = Si, 2 = No)

X13 = f85 = Horas trabajadas por Semana

X14 = f99 = Busca otro trabajo (0 = No trabaja, 1 = Si, 2 = No)

X15 = Ing_Act_Pri  = Ingreso de Actividad Principal = Sumatoria de  Ingresos i

     g126_1 = Sueldos o Jornales líquidos recibidos, mes anterior, por Actividad Principal

     g126_2 = Comisiones, Incentivos, Horas Extras, mes anterior, por Actividad Principal

     g126_3 = Viáticos en Actividad Principal

     g126_4 = Propinas en Actividad Principal

X16 = Ing_Act_Sec = Ingreso de Actividad Secundaria = Sumatoria de Ingresos i

     g134_1 = Sueldos o Jornales líquidos recibidos, mes anterior, por Actividad Secundaria

     g134_2 = Comisiones, Incentivos, Horas Extras, mes anterior, por Actividad Secundaria

     g134_3 = Viáticos en Actividad Secundaria

     g134_4 = Propinas en Actividad Secundaria

X17 = g_it_1 = Percibió ingresos por concepto de Jubilaciones (0 = No corresponde, 1 = Si, 2 = No)

X18 = Jub_Ing  = Jubilaciones recibidas = Sumatoria Ingresos Jubilaciones i

     g148_1_1 = Jubilaciones BPS – Caja Industria y Comercio

     g148_1_2 = Jubilaciones BPS – Caja Civil y Escolar

     g148_1_3 = Jubilaciones BPS – Caja Rural y Servicio Doméstico

     g148_1_5 = Jubilaciones Policial

     g148_1_6 = Jubilaciones Militar

     g148_1_7 = Jubilaciones Profesional

     g148_1_8 = Jubilaciones Notarial

     g148_1_9 = Jubilaciones Bancarías

     g148_1_10 = Jubilaciones Otra

     g148_1_11 = Jubilaciones Otro País

     g148_1_12 = Jubilaciones AFAP

X19 = g_it_2 = Percibe ingresos por concepto de Pensiones (0 = No corresponde, 1 = Si, 2 = No)

X20 = Pen_Ing  = Pensiones recibidas = Sumatoria Ingresos Pensiones i

     g148_2_1 = Pensiones BPS – Caja Industria y Comercio

     g148_2_2 = Pensiones BPS – Caja Civil y Escolar

     g148_2_3 = Pensiones BPS – Caja Rural y Servicio Doméstico

     g148_2_5 = Pensiones Policiales

     g148_2_6 = Pensiones Militares

     g148_2_7 = Pensiones Profesional

     g148_2_8 = Pensiones Notarial

     g148_2_9 = Pensiones Bancarias

     g148_2_10 = Pensiones Otra

     g148_2_11 = Pensiones Otro País

     g148_2_12 = Pensiones AFAP

X21 = g154 = Recibe otros Ingresos Corrientes (0 = No corresponde, 1 = Si, 2 = No)

X22 = g154_1 = Monto de Otros Ingresos Corrientes o en especie percibidos en forma habitual

X23 = eg_ps3 = Gasto Mensual en Alimentos. Percepción del Ingreso en relación a los Gastos (1 = Insuficiente para las Necesidades de su Hogar, 2 = Suficientes para las Necesidades de su Hogar, 3 = Más que suficiente para las Necesidades de su Hogar, 4 = No corresponde)

X24 = eg_ps7 = Gasto Mensual en Salud. Percepción del Ingreso en relación a los Gastos  (1 = Insuficiente para las Necesidades de su Hogar, 2 = Suficientes para las Necesidades de su Hogar, 3 = Más que suficiente para las Necesidades de su Hogar, 4 = No corresponde)

X25 = eg_ps1 = Considera que su Hogar es Pobre. Percepción del informante en relacion al ingreso para satisfacer las necesidades del Hogar (1 = Si, 2 = No)

Variables X26, X27, X28, no podrán ser consideradas fueron encontradas observaciones con formatos numéricos con problemas, imposibilita su utilización.

X26 = PT1 = Total de Ingresos Personales. Ingreso por todo concepto, trabajo, transferencias, otros ingresos, tanto del país como del exterior declarado por el entrevistado

X27 = PT2 = Ingresos por la Ocupación Principal. Ingresos por Ocupación Principal (trabajo asalariado público, trabajo asalariado privado o trabajo en la ocupación no dependiente)

X28 = PT4 = Total de Ingresos por trabajo. Todos los ingresos de la persona por concepto de trabajo

X29 = pobre06 = Pobreza según Metodología 2006 (0 = No Pobreza, 1 = Si Pobreza)

X30 = indig06 = Indigencia según Metodología 2006 (0 = No Indigencia, 1 = Si Indigencia)