Informe de Análisis Estadístico

Autor/a

Juan Creide, Lucrecia Gasco

Introducción y contextualización del problema

El propósito de este informe es realizar un estudio acerca de los factores determinantes de los ingresos totales de un determinado conjunto de la población: Buenos Aires. Con los datos de la encuesta, identificamos las variables que podrían ser de interés para comprender las dinámicas de ingreso. Que están relacionadas de alguna manera con los ingresos, por ejemplo: la edad, la mujer, la educación. Este tipo de estudios sería relevante y útil para mejorar el entendimiento de la distribución del ingreso, lo cual afecta nuestra equidad de recursos y riqueza, y permitiría la elaboración de mejores propuestas políticas para mejorar la equidad y el desarrollo social.

Una parte clave del trabajo fue el procesamiento y la importación de los datos. A pesar de trabajar con un conjunto de datos, realizamos algunos pasos de preprocesamiento y limpieza de los datos. Por ejemplo, sólo tuvimos en cuenta a las personas mayores de 18 años, ya que los menores de edad no informarán ingresos y podrían distorsionar nuestro análisis.

Importar datos y data wrangling

Importamos el conjunto de datos, agregando la línea fileEncoding="latin1" para evitar errores de codificación de los datos.

datos <- read.csv2(file = "encuesta-anual-hogares-2019.csv",
                   header = TRUE, sep = ",", fileEncoding="latin1")

Identificación de variables de interés

Variable respuesta: Ingresos totales (cuantitativa discreta)

Variables predictoras:

  • Edad (cuantitativa discreta)

  • Sexo (categórica nominal dicotómica)

  • Nivel máximo educativo (categórica nominal) [^1]

  • Años de escolaridad (cuantitativa discreta)

  • Afiliación salud (categórica nominal)

  • Hijos nacidos vivos (categórica nominal dicotómica)

  • Dominio (cualitativa nominal dicotómica)

Creamos un dataframe que contenga sólo estas variables y lo guardamos en la variable datos_seleccionados. Usamos la función select perteneciente a la librería dplyr:

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
datos_seleccionados = select(datos,
                             ingresos_totales,
                             dominio,
                             edad,
                             sexo,
                             nivel_max_educativo,
                             años_escolaridad,
                             afiliacion_salud,
                             hijos_nacidos_vivos)

Sin embargo, para evitar distorsiones en el conjunto de datos. Vamos a considerar a las personas mayores o iguales a 18 años. La razón es que los menores no reportan ingresos totales:

datos_seleccionados <- datos_seleccionados %>% filter(edad >= 18)

La base resultante tiene la siguiente forma:

head(datos_seleccionados)
  ingresos_totales            dominio edad  sexo       nivel_max_educativo
1             6000 Resto de la Ciudad   18 Mujer Otras escuelas especiales
2            12000 Resto de la Ciudad   18 Mujer Otras escuelas especiales
3                0 Resto de la Ciudad   18 Varon Otras escuelas especiales
4           100000 Resto de la Ciudad   50 Mujer    Secundario/medio comun
5             2500 Resto de la Ciudad   18 Mujer         EGB (1° a 9° año)
6            44000 Resto de la Ciudad   21 Varon         Primario especial
  años_escolaridad                                          afiliacion_salud
1               12                                          Solo obra social
2               12 Solo plan de medicina prepaga por contratación voluntaria
3               12 Solo plan de medicina prepaga por contratación voluntaria
4               17                              Solo prepaga o mutual via OS
5                8                                          Solo obra social
6               12                                          Solo obra social
  hijos_nacidos_vivos
1                  No
2                  No
3                    
4                  Si
5                  Si
6                    

Resumen variables de interés

A partir del dataset creado, calculamos los estadísticos principales de las variables cuantitativas:

summary(datos_seleccionados)
 ingresos_totales    dominio               edad            sexo          
 Min.   :      0   Length:11261       Min.   : 18.00   Length:11261      
 1st Qu.:  12000   Class :character   1st Qu.: 31.00   Class :character  
 Median :  25000   Mode  :character   Median : 44.00   Mode  :character  
 Mean   :  33128                      Mean   : 46.98                     
 3rd Qu.:  44000                      3rd Qu.: 62.00                     
 Max.   :1000000                      Max.   :100.00                     
 nivel_max_educativo años_escolaridad   afiliacion_salud   hijos_nacidos_vivos
 Length:11261        Length:11261       Length:11261       Length:11261       
 Class :character    Class :character   Class :character   Class :character   
 Mode  :character    Mode  :character   Mode  :character   Mode  :character   
                                                                              
                                                                              
                                                                              

No obstante, la variable años_escolaridad figura como cualitativa (character) porque aparece el valor Ningún año de escolaridad aprobado en lugar de usar un valor numérico nulo (0). Solucionamos esto seleccionando dichos valores y reemplazándolos por 0:

datos_seleccionados$años_escolaridad[datos_seleccionados$años_escolaridad ==
                                       "Ningun año de escolaridad aprobado"] = 0
datos_seleccionados$años_escolaridad = as.numeric(datos_seleccionados$años_escolaridad)

Resumen de las variables dicotómicas

table(datos$dominio)

  Resto de la Ciudad Villas de emergencia 
               12580                 1739 
table(datos$sexo)

Mujer Varon 
 7723  6596 
table(datos$hijos_nacidos_vivos)

       No   Si 
7784 2502 4033 
Nota

La variable hijos nacidos vivos no corresponde en 7784 observaciones.

Análisis descriptivo

Media, mediana y moda de los ingresos totales

Un buen punto de partida para nuestro análisis es calcular los estadísticos de la variable de respuesta, es decir, de la variable ingresos totales. En definitiva, es la variable que nos interesa explicar, por lo que será una primera aproximación útil:

mean(datos_seleccionados$ingresos_totales, na.rm = TRUE)
[1] 33128.48
median(datos_seleccionados$ingresos_totales, na.rm = TRUE)
[1] 25000
sd(datos_seleccionados$ingresos_totales, na.rm = TRUE)
[1] 39027.35

Se observa que la base de datos presenta un desvío estándar relativamente grande (37152,5 comparado a la media de 26094,86). Esto es de esperar ya que la distribución del ingreso suele ser asimétrica.

library(ggplot2)
ggplot(datos_seleccionados %>% filter(edad > 17), aes(x = ingresos_totales)) + 
  geom_histogram(binwidth = 5000, fill = "cyan", color = "black") + 
  theme_minimal() + 
  labs(title = "Distribución de Ingresos Totales",
       x = "Ingresos Totales",
       y = "Frecuencia")

Como era de esperar, la variable ingresos totales presenta una fuerte asimetría a la izquierda (o una cola a la derecha). Esto significa que la mayoría de los individuos encuestado tiene un ingreso relativamente bajo.

Resumen descriptivo de las variables cuantitativas

summary(datos_seleccionados[, c("ingresos_totales", "edad", "años_escolaridad")])
 ingresos_totales       edad        años_escolaridad
 Min.   :      0   Min.   : 18.00   Min.   : 0.00   
 1st Qu.:  12000   1st Qu.: 31.00   1st Qu.:12.00   
 Median :  25000   Median : 44.00   Median :13.00   
 Mean   :  33128   Mean   : 46.98   Mean   :12.94   
 3rd Qu.:  44000   3rd Qu.: 62.00   3rd Qu.:16.00   
 Max.   :1000000   Max.   :100.00   Max.   :19.00   
                                    NA's   :51      

Distribución de las variables dicotómicas

Resto de la Ciudad Villas de emergencia Total
12.580 1.739 14.319
Mujer Varón Total
7.723 6.596 14.319
No Total
2.502 4.033 6.535

Sexo

ggplot(datos_seleccionados, aes(x = sexo, y = ingresos_totales)) + 
  geom_boxplot() + 
  theme_minimal() + 
  labs(title = "Ingresos Totales por Sexo",
       x = "Sexo",
       y = "Ingresos Totales")

El boxplot muestra diferencias notables en la distribución de ingresos entre hombres y mujeres. La mediana de ingresos para los hombres se ubica visiblemente por encima de la mediana de las mujeres, sugiriendo que, en promedio, los hombres perciben ingresos mayores. Además, se ven valores atípicos (extremos), tanto para hombres como para mujeres, lo que indica la presencia de personas con ingresos excepcionalmente altos. Sin embargo, la cantidad de valores atípicos parece ser mayor en el grupo de los hombres, lo cual podría influir en el análisis de la varianza.

Hijos nacidos vivos

ggplot(data = datos_seleccionados %>% filter(hijos_nacidos_vivos != ""),
       aes(x = hijos_nacidos_vivos,
           y = ingresos_totales)) + 
  geom_boxplot() + 
  theme_minimal() + 
  labs(title = "Ingresos Totales por Hijos Nacidos Vivos",
       x = "Hijos Nacidos Vivos",
       y = "Ingresos Totales")

Este boxplot indica una posible relación entre tener hijos y los ingresos. La mediana de ingresos para quienes sí tienen hijos es ligeramente superior a la mediana de ingresos para quienes no tienen hijos. Si bien esta diferencia no parece tan relevante como la observada en la variable sexo, aún así sugiere una tendencia a que las personas con hijos perciban mayores ingresos. Es importante tener en cuenta que el grupo de quienes no tienen hijos tiene una mayor dispersión (bigotes de la caja más largos), lo que indica mayor variabilidad en sus ingresos.

Dominio (lugar de residencia)

ggplot(datos_seleccionados, aes(x = dominio, y = ingresos_totales)) + 
  geom_boxplot() + 
  theme_minimal() + 
  labs(title = "Ingresos Totales por Dominio (lugar de residencia)",
       x = "Dominio",
       y = "Ingresos Totales")

Finalmente, el boxplot de ingresos totales por dominio muestra una marcada diferencia en los ingresos entre las personas que residen en el “Resto de la Ciudad” y aquellas que viven en “Villas de Emergencia”. La mediana de ingresos de las personas en “Villas de Emergencia” es notablemente inferior a la del otro grupo, lo que apunta a que la zona de residencia juega un papel importante en el nivel de ingresos. Además, la caja del grupo “Villas de Emergencia” es más pequeña y sus bigotes son más cortos, mostrando que este grupo tiene menor dispersión en sus ingresos y una mayor concentración de individuos con ingresos más bajos.

Gráfico de Dispersión de Ingresos Totales vs. Edad

ggplot(datos_seleccionados, aes(x = edad, y = ingresos_totales)) + 
  geom_point() + 
  theme_minimal() + 
  labs(title = "Ingresos Totales vs Edad",
       x = "Edad",
       y = "Ingresos Totales")

El gráfico muestra una dispersión bastante ámplia de los ingresos totales a lo largo de las distintas edades. Si bien se ve una ligera concentración de puntos (personas) con ingresos más altos en torno a las edades medias (entre 40 y 60 años aproximadamente), no existe un patrón lineal claro que indique una relación directamente proporcional entre la edad y los ingresos totales.

Sin embargo, se ve que hay muchos individuos con ingresos bajos en todas las edades; que en edades más jóvenes la variabilidad de ingresos es algo menor; y que hay notable presencia de valores atípicos, es decir, puntos aislados con ingresos muy altos.

Gráfico de Barras del Nivel Máximo Educativo

ggplot(datos_seleccionados, aes(x = nivel_max_educativo)) + 
  geom_bar(fill = "lightblue", color = "black") + 
  theme_minimal() + 
  labs(title = "Distribución del Nivel Máximo Educativo",
       x = "Nivel Educativo",
       y = "Frecuencia") + 
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Se ve que la categoría más frecuente es “secundario/medio común”, seguido de “primario común” y primario especial”. En definitiva, el gráfico muestra que una parte significativa alcanzó la educación Secundaria/media común, y la mayoría por lo menos fue a la primaria. En cambio, las restantes categorías tienen pocos representantes.

Pruebas de Hipótesis

Prueba t de Ingresos Totales por Sexo

Para realizar la prueba debemos verificar previamente que la variable se distribuya de forma normal, y en caso afirmativo, hacer una prueba de varianza para verificar si las varianzas poblacionales se pueden suponer iguales o diferentes:

Prueba de normalidad

library("ggpubr")
library("nortest")
attach(datos_seleccionados)
ad.test(ingresos_totales)

    Anderson-Darling normality test

data:  ingresos_totales
A = 660.06, p-value < 2.2e-16

Si bien según el test de normalidad de Anderson-Darling, la variable no presenta un comportamiento normal, al hacer un QQ-Plot podemos apreciar que en ciertas áreas parece hacerlo:

ggqqplot(ingresos_totales, main="QQ-Plot de Ingresos Totales")

Por lo que a pesar de tener evidencia suficiente para rechazar la normalidad de los datos, vamos a suponer que se mantiene.

Prueba de varianza

Realizamos una prueba F para verificar la homogeneidad de varianzas poblacionales:

\[ \begin{array}{r} H_0: \frac{\sigma^2_H}{\sigma^2_M} = 1 \\ H_1: \frac{\sigma^2_H}{\sigma^2_M} \neq 1 \end{array} \]

var.test(ingresos_totales ~ sexo)

    F test to compare two variances

data:  ingresos_totales by sexo
F = 0.46851, num df = 6193, denom df = 5066, p-value < 2.2e-16
alternative hypothesis: true ratio of variances is not equal to 1
95 percent confidence interval:
 0.4445102 0.4937359
sample estimates:
ratio of variances 
         0.4685097 

Como el valor \(p\) es menor que el error admisible \(\alpha=0,05\) , rechazamos la hipótesis nula y podemos concluir que las varianzas poblacionales de los ingresos totales de los hombres y de las mujeres son distintos con un nivel de significancia 95%.

Prueba T

\[ \begin{array}{l} H_0: \mu_m - \mu_h \geq 0 \\ H_1: \mu_m - \mu_h < 0 \end{array} \]

t.test(ingresos_totales ~ sexo, var.equal= FALSE, alternative = c("less"))

    Welch Two Sample t-test

data:  ingresos_totales by sexo
t = -14.373, df = 8653.6, p-value < 2.2e-16
alternative hypothesis: true difference in means between group Mujer and group Varon is less than 0
95 percent confidence interval:
      -Inf -9662.146
sample estimates:
mean in group Mujer mean in group Varon 
           28218.99            39129.92 

Como el valor \(p\) es menor que el error admisible \(\alpha=0,05\), rechazamos la hipótesis nula y concluimos que existe suficiente evidencia para afirmar que los ingresos totales de los hombres son mayores que los ingresos totales de las mujeres.

En particular, la prueba genera el siguiente intervalo de confianza: \((-\infty, -9662,146)\), por lo que existe suficiente evidencia para esperar que la verdadera diferencia entre los ingresos totales de mujeres y hombres sea menos a 9662, con un 95% de confianza. Es decir, se espera que la media de ingresos de mujeres sea al menos $9662 menor que los ingresos de los hombres.

Análisis de Varianza para Ingresos Totales según Nivel Educativo

Primero verificamos la normalidad y heterocedasticidad:

Normalidad

anova_educacion <- aov(ingresos_totales ~ nivel_max_educativo,
                       data = datos_seleccionados %>% filter(!is.na(nivel_max_educativo)
                                                             & nivel_max_educativo != ""))
resultados_anova_educacion <- summary(anova_educacion)
plot(anova_educacion, 2)

Homocedasticidad

plot(anova_educacion,1)

library(car)
Cargando paquete requerido: carData

Adjuntando el paquete: 'car'
The following object is masked from 'package:dplyr':

    recode
leveneTest(ingresos_totales ~ nivel_max_educativo)
Warning in leveneTest.default(y = y, group = group, ...): group coerced to
factor.
Levene's Test for Homogeneity of Variance (center = median)
         Df F value    Pr(>F)    
group     7  117.74 < 2.2e-16 ***
      11253                      
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Grupos

library(agricolae)
fisher_educacion <- LSD.test(anova_educacion, "nivel_max_educativo", alpha=0.01)
fisher_educacion$means
                          ingresos_totales       std    r        se       LCL
EGB (1° a 9° año)                17101.443 17888.976 1516  924.9841 14718.436
No corresponde                    6611.765  6828.229   34 6176.5279 -9300.627
Otras escuelas especiales        28384.871 31100.498 2570  710.4235 26554.630
Primario comun                   18991.962 14231.719  939 1175.3063 15964.058
Primario especial                23738.251 21604.846 2194  768.8924 21757.378
Sala de 5                        15401.697 11747.814  290 2114.8758  9953.210
Secundario/medio comun           54176.359 53002.999 3672  594.3367 52645.189
                               UCL Min     Max   Q25   Q50   Q75
EGB (1° a 9° año)         19484.45   0  194000  3000 13000 25000
No corresponde            22524.16   0   30000   200  7000  8400
Otras escuelas especiales 30215.11   0  558000  6000 23000 40000
Primario comun            22019.87   0  100000 11000 15000 25250
Primario especial         25719.12   0  235000 11000 20000 31000
Sala de 5                 20850.18   0   70000  8000 12550 20950
Secundario/medio comun    55707.53   0 1000000 25000 43000 70000
plot(fisher_educacion, las=2)

Análisis de Varianza para Ingresos Totales según Sexo

Normalidad

anova_sexo <- aov(ingresos_totales ~ sexo, data = datos_seleccionados)
resultados_anova_sexo <- summary(anova_sexo)
plot(anova_sexo, 2)

Homocedasticidad

plot(anova_sexo,1)

library(car)
leveneTest(ingresos_totales ~ sexo)
Warning in leveneTest.default(y = y, group = group, ...): group coerced to
factor.
Levene's Test for Homogeneity of Variance (center = median)
         Df F value    Pr(>F)    
group     1  96.198 < 2.2e-16 ***
      11259                      
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Grupos

library(agricolae)
fisher_sexo <- LSD.test(anova_sexo, "sexo", alpha=0.01)
fisher_sexo$means
      ingresos_totales      std    r       se      LCL      UCL Min   Max   Q25
Mujer         28218.99 31448.14 6194 491.0895 26953.82 29484.17   0 5e+05 10000
Varon         39129.92 45944.73 5067 542.9637 37731.10 40528.74   0 1e+06 14000
        Q50   Q75
Mujer 20000 39000
Varon 30000 50000
plot(fisher_sexo, las=2)

Análisis de Varianza para Ingresos Totales según Hijos Nacidos Vivos}

Normalidad

anova_hijos <- aov(ingresos_totales ~ hijos_nacidos_vivos, data = datos_seleccionados
                   %>% filter(!is.na(hijos_nacidos_vivos) & hijos_nacidos_vivos != ""))

resultados_anova_hijos <- summary(anova_hijos)
plot(anova_hijos, 2)

Homocedasticidad

plot(anova_hijos,1)

library(car)
leveneTest(ingresos_totales ~ hijos_nacidos_vivos)
Warning in leveneTest.default(y = y, group = group, ...): group coerced to
factor.
Levene's Test for Homogeneity of Variance (center = median)
         Df F value    Pr(>F)    
group     2  49.455 < 2.2e-16 ***
      11258                      
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Grupos

library(agricolae)
fisher_hijos <- LSD.test(anova_hijos, "hijos_nacidos_vivos", alpha=0.01)
fisher_hijos$means
   ingresos_totales      std    r       se      LCL      UCL Min    Max   Q25
No         28193.70 29909.99 2165 675.9289 26452.09 29935.32   0 367000  6000
Si         28232.59 32248.01 4029 495.4859 26955.91 29509.27   0 500000 11000
     Q50   Q75
No 22000 40000
Si 20000 37000
plot(fisher_hijos, las=2)

Análisis de correlación

#tenemos cargada para analizar
attach(datos)
The following objects are masked from datos_seleccionados:

    afiliacion_salud, años_escolaridad, dominio, edad,
    hijos_nacidos_vivos, ingresos_totales, nivel_max_educativo, sexo
#Análisis de correlación para interpretar la relación entre las variables y
#desde allí modelizar 
library(dplyr)
datos_num <- datos %>% select_if(is.numeric)

# Calcular la matriz de correlación
correlacion <- cor(datos_num, use = "complete.obs")

# Mostrar la matriz de correlación
print(correlacion)
                                     id       nhogar      miembro       comuna
id                           1.00000000 -0.023683637 -0.108506085  0.059472553
nhogar                      -0.02368364  1.000000000 -0.009384151 -0.028654342
miembro                     -0.10850609 -0.009384151  1.000000000 -0.028282443
comuna                       0.05947255 -0.028654342 -0.028282443  1.000000000
edad                         0.64349352 -0.038299069 -0.592716203  0.041394486
ingreso_total_lab           -0.07596996 -0.013979255 -0.286904184  0.065878903
ingreso_total_no_lab         0.37140687 -0.011260653 -0.225490302  0.001714697
ingresos_totales             0.08965109 -0.017925062 -0.365456712  0.062268342
ingresos_familiares          0.07078149 -0.042590603  0.063825506  0.098401679
ingreso_per_capita_familiar  0.12625343 -0.024518364 -0.207754890  0.080766431
                                    edad ingreso_total_lab ingreso_total_no_lab
id                           0.643493517       -0.07596996          0.371406870
nhogar                      -0.038299069       -0.01397925         -0.011260653
miembro                     -0.592716203       -0.28690418         -0.225490302
comuna                       0.041394486        0.06587890          0.001714697
edad                         1.000000000        0.15059214          0.458024666
ingreso_total_lab            0.150592135        1.00000000         -0.073326678
ingreso_total_no_lab         0.458024666       -0.07332668          1.000000000
ingresos_totales             0.338701231        0.90223138          0.363933709
ingresos_familiares          0.008657181        0.51845915          0.144186661
ingreso_per_capita_familiar  0.204149227        0.62361711          0.341636235
                            ingresos_totales ingresos_familiares
id                                0.08965109         0.070781488
nhogar                           -0.01792506        -0.042590603
miembro                          -0.36545671         0.063825506
comuna                            0.06226834         0.098401679
edad                              0.33870123         0.008657181
ingreso_total_lab                 0.90223138         0.518459153
ingreso_total_no_lab              0.36393371         0.144186661
ingresos_totales                  1.00000000         0.546557914
ingresos_familiares               0.54655791         1.000000000
ingreso_per_capita_familiar       0.73014946         0.748418748
                            ingreso_per_capita_familiar
id                                           0.12625343
nhogar                                      -0.02451836
miembro                                     -0.20775489
comuna                                       0.08076643
edad                                         0.20414923
ingreso_total_lab                            0.62361711
ingreso_total_no_lab                         0.34163624
ingresos_totales                             0.73014946
ingresos_familiares                          0.74841875
ingreso_per_capita_familiar                  1.00000000
# Visualización de la matriz de correlación con ggplot2
library(ggcorrplot)
ggcorrplot(correlacion, method = "square", lab = TRUE,
           lab_size = 3, colors = c("pink", "white", "lightblue"))

El análisis de correlación mide la fuerza o el grado de asociación lineal entre dos variables y el coeficiente de correlación mide dicha fuerza. En este caso, vamos a relacionar la variable ingresos totales con la edad, la comuna (zona de la ciudad donde vive) y el número de miembros de la familia.

Hay que tener en cuenta que la correlación puede tomar valores entre -1 y 1, es decir, que se encuentra en un rango de correlación.

  • Correlación positiva (cercana a 1): indica una relación lineal directa entre las variables, es decir, cuando una variable aumenta, la otra tiende a aumentar también.

  • Correlación negativa (cercana a -1): indica una relación inversa lineal entre las variables. Cuando una variable aumenta, la otra tiende a disminuir.

  • Correlación cercana a 0: indica que no hay una relación lineal significativa entre las variables.

En este caso, vemos que nuestros parámetros de interés, el ingreso total en relación con la edad, la comuna y los miembros del hogar, muestran que la comuna tiene una relación muy poco significativa, cercana a cero, mientras que la edad tiene una correlación positiva de 0,34. Es decir, que ambas variables se mueven en la misma dirección, pero hay una relación débil; es decir, de cada peso del ingreso total, solo el 34 % se puede relacionar con la edad. El caso más significativo de observar son las correlaciones entre los ingresos totales y los ingresos laborales; esta relación es alta, es decir, hay una relación fuerte.

Modelos Estadísticos

Modelo de Regresión con Ingreso total laboral

Nuestra variable respuesta es ingresos totales. En primer lugar, los vamos a analizar con respecto a los ingresos laborales porque es el valor con mayor correlación entre las variables. Después, les agregaremos la cantidad de miembros de la familia, en el siguiente paso, la edad y los ingresos no laborales.

attach(datos)
The following objects are masked from datos (pos = 4):

    afiliacion_salud, años_escolaridad, calidad_ingresos_familiares,
    calidad_ingresos_lab, calidad_ingresos_no_lab,
    calidad_ingresos_totales, cantidad_hijos_nac_vivos,
    cat_ocupacional, comuna, dominio, edad, estado_educativo,
    estado_ocupacional, hijos_nacidos_vivos, id,
    ingreso_per_capita_familiar, ingreso_total_lab,
    ingreso_total_no_lab, ingresos_familiares, ingresos_totales,
    lugar_nacimiento, miembro, nhogar, nivel_actual,
    nivel_max_educativo, num_miembro_madre, num_miembro_padre,
    parentesco_jefe, sector_educativo, sexo, situacion_conyugal
The following objects are masked from datos_seleccionados:

    afiliacion_salud, años_escolaridad, dominio, edad,
    hijos_nacidos_vivos, ingresos_totales, nivel_max_educativo, sexo
reg_simple_1 <-lm(ingresos_totales ~ ingreso_total_lab)
summary(reg_simple_1)

Call:
lm(formula = ingresos_totales ~ ingreso_total_lab)

Residuals:
   Min     1Q Median     3Q    Max 
 -6698  -6698  -5679  -1605 493302 

Coefficients:
                   Estimate Std. Error t value Pr(>|t|)    
(Intercept)       6.698e+03  1.547e+02    43.3   <2e-16 ***
ingreso_total_lab 9.660e-01  3.859e-03   250.3   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 16020 on 14317 degrees of freedom
Multiple R-squared:  0.814, Adjusted R-squared:  0.814 
F-statistic: 6.267e+04 on 1 and 14317 DF,  p-value: < 2.2e-16

Interpretación: el intercepto nos indica que los ingresos que no pertenezcan al grupo de los ingresos laborables deben ser inferiores a 6698 pesos.

El coeficiente de ingresos totales laborables indica la pendiente y puede interpretarse como un aumento de 0,966 unidades por cada unidad que aumenta el ingreso total.

Por su parte, el valor \(R^2\) nos indica que este modelo predice al menos el 81,4% de la variabilidad de los ingresos totales, es decir, que es un buen predictor del ingreso total.

Regresión lineal con Edad

attach(datos)
The following objects are masked from datos (pos = 3):

    afiliacion_salud, años_escolaridad, calidad_ingresos_familiares,
    calidad_ingresos_lab, calidad_ingresos_no_lab,
    calidad_ingresos_totales, cantidad_hijos_nac_vivos,
    cat_ocupacional, comuna, dominio, edad, estado_educativo,
    estado_ocupacional, hijos_nacidos_vivos, id,
    ingreso_per_capita_familiar, ingreso_total_lab,
    ingreso_total_no_lab, ingresos_familiares, ingresos_totales,
    lugar_nacimiento, miembro, nhogar, nivel_actual,
    nivel_max_educativo, num_miembro_madre, num_miembro_padre,
    parentesco_jefe, sector_educativo, sexo, situacion_conyugal
The following objects are masked from datos (pos = 5):

    afiliacion_salud, años_escolaridad, calidad_ingresos_familiares,
    calidad_ingresos_lab, calidad_ingresos_no_lab,
    calidad_ingresos_totales, cantidad_hijos_nac_vivos,
    cat_ocupacional, comuna, dominio, edad, estado_educativo,
    estado_ocupacional, hijos_nacidos_vivos, id,
    ingreso_per_capita_familiar, ingreso_total_lab,
    ingreso_total_no_lab, ingresos_familiares, ingresos_totales,
    lugar_nacimiento, miembro, nhogar, nivel_actual,
    nivel_max_educativo, num_miembro_madre, num_miembro_padre,
    parentesco_jefe, sector_educativo, sexo, situacion_conyugal
The following objects are masked from datos_seleccionados:

    afiliacion_salud, años_escolaridad, dominio, edad,
    hijos_nacidos_vivos, ingresos_totales, nivel_max_educativo, sexo
reg_simple_2 <- lm(ingresos_totales~ingreso_total_lab + edad)

Prueba F Incremental para incorporar Edad

Para verificar si debemos incluir la variable “edad” vamos a realizar la siguiente prueba F incremental:

\[ \begin{array}{r} H_0: \beta_{E} =0\\ H_1: \beta_{E} \neq 0 \end{array} \]

anova(reg_simple_1, reg_simple_2)
Analysis of Variance Table

Model 1: ingresos_totales ~ ingreso_total_lab
Model 2: ingresos_totales ~ ingreso_total_lab + edad
  Res.Df        RSS Df  Sum of Sq      F    Pr(>F)    
1  14317 3.6755e+12                                   
2  14316 2.8436e+12  1 8.3195e+11 4188.4 < 2.2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Con un valor \(p\) prácticamente nulo, podemos rechazar la hipótesis nula e incorporar la nueva variable. En particular, la adición de “ingresos totales laborales” genera un valor F significativamente mayor que 1 (4188,4).

summary(reg_simple_2)

Call:
lm(formula = ingresos_totales ~ ingreso_total_lab + edad)

Residuals:
   Min     1Q Median     3Q    Max 
-24114  -6259  -1604   2244 480891 

Coefficients:
                    Estimate Std. Error t value Pr(>|t|)    
(Intercept)       -5.581e+03  2.335e+02  -23.90   <2e-16 ***
ingreso_total_lab  9.326e-01  3.434e-03  271.60   <2e-16 ***
edad               3.336e+02  5.155e+00   64.72   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 14090 on 14316 degrees of freedom
Multiple R-squared:  0.8561,    Adjusted R-squared:  0.8561 
F-statistic: 4.259e+04 on 2 and 14316 DF,  p-value: < 2.2e-16

El valor \(R^2\) es ligeramente mayor, 85,61 %, y nos dice que este modelo predice al menos un 4,21 % más de variabilidad de los ingresos totales.

Modelo de Regresión con Ingreso Total No Laboral

attach(datos)
The following objects are masked from datos (pos = 3):

    afiliacion_salud, años_escolaridad, calidad_ingresos_familiares,
    calidad_ingresos_lab, calidad_ingresos_no_lab,
    calidad_ingresos_totales, cantidad_hijos_nac_vivos,
    cat_ocupacional, comuna, dominio, edad, estado_educativo,
    estado_ocupacional, hijos_nacidos_vivos, id,
    ingreso_per_capita_familiar, ingreso_total_lab,
    ingreso_total_no_lab, ingresos_familiares, ingresos_totales,
    lugar_nacimiento, miembro, nhogar, nivel_actual,
    nivel_max_educativo, num_miembro_madre, num_miembro_padre,
    parentesco_jefe, sector_educativo, sexo, situacion_conyugal
The following objects are masked from datos (pos = 4):

    afiliacion_salud, años_escolaridad, calidad_ingresos_familiares,
    calidad_ingresos_lab, calidad_ingresos_no_lab,
    calidad_ingresos_totales, cantidad_hijos_nac_vivos,
    cat_ocupacional, comuna, dominio, edad, estado_educativo,
    estado_ocupacional, hijos_nacidos_vivos, id,
    ingreso_per_capita_familiar, ingreso_total_lab,
    ingreso_total_no_lab, ingresos_familiares, ingresos_totales,
    lugar_nacimiento, miembro, nhogar, nivel_actual,
    nivel_max_educativo, num_miembro_madre, num_miembro_padre,
    parentesco_jefe, sector_educativo, sexo, situacion_conyugal
The following objects are masked from datos (pos = 6):

    afiliacion_salud, años_escolaridad, calidad_ingresos_familiares,
    calidad_ingresos_lab, calidad_ingresos_no_lab,
    calidad_ingresos_totales, cantidad_hijos_nac_vivos,
    cat_ocupacional, comuna, dominio, edad, estado_educativo,
    estado_ocupacional, hijos_nacidos_vivos, id,
    ingreso_per_capita_familiar, ingreso_total_lab,
    ingreso_total_no_lab, ingresos_familiares, ingresos_totales,
    lugar_nacimiento, miembro, nhogar, nivel_actual,
    nivel_max_educativo, num_miembro_madre, num_miembro_padre,
    parentesco_jefe, sector_educativo, sexo, situacion_conyugal
The following objects are masked from datos_seleccionados:

    afiliacion_salud, años_escolaridad, dominio, edad,
    hijos_nacidos_vivos, ingresos_totales, nivel_max_educativo, sexo
reg_simple_3 <-lm(ingresos_totales~ingreso_total_lab + edad +
                    ingreso_total_no_lab)

Prueba F para incorporar Ingreso Total No Laboral

\[ \begin{array}{r} H_0: \beta_{ITnL} =0 \\ H_1: \beta_{ITnL} \neq 0 \end{array} \]

anova(reg_simple_2, reg_simple_3)
Analysis of Variance Table

Model 1: ingresos_totales ~ ingreso_total_lab + edad
Model 2: ingresos_totales ~ ingreso_total_lab + edad + ingreso_total_no_lab
  Res.Df        RSS Df  Sum of Sq         F    Pr(>F)    
1  14316 2.8436e+12                                      
2  14315 0.0000e+00  1 2.8436e+12 1.983e+29 < 2.2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

De forma similar, al caso anterior, el valor \(p\) es aproximadamente 0, por lo que incorporamos la variable “ingresos totales no laborales”. Sin embargo, el valor F tiende a infinito, lo que implicaría un ajuste perfecto y espurio.

summary(reg_simple_3)

Call:
lm(formula = ingresos_totales ~ ingreso_total_lab + edad + ingreso_total_no_lab)

Residuals:
       Min         1Q     Median         3Q        Max 
-4.526e-07  0.000e+00  3.000e-11  7.000e-11  5.760e-09 

Coefficients:
                       Estimate Std. Error    t value Pr(>|t|)    
(Intercept)          -2.483e-09  6.397e-11 -3.881e+01  < 2e-16 ***
ingreso_total_lab     1.000e+00  9.349e-16  1.070e+15  < 2e-16 ***
edad                  8.602e-12  1.575e-12  5.462e+00 4.78e-08 ***
ingreso_total_no_lab  1.000e+00  2.246e-15  4.453e+14  < 2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 3.787e-09 on 14315 degrees of freedom
Multiple R-squared:      1, Adjusted R-squared:      1 
F-statistic: 4.594e+29 on 3 and 14315 DF,  p-value: < 2.2e-16

El valor de \(R^2\) es 1, lo que significa que este modelo predice la totalidad de la variabilidad.

Importante

Este valor \(R^2\) puede significar un problema de especificación del modelo más que un buen ajuste a la variabilidad de los datos. Una posible causa puede ser la multicolinealidad, pero queda descartada al verificar que las variables “ingresos totales laborales” e “ingresos totales no laborales” están prácticamente incorreladas:

cor(ingreso_total_lab, ingreso_total_no_lab)
[1] -0.07332668

Otra posible causa puede ser que el modelo no esté bien especificado, lo que excedería los alcances del presente trabajo.

Regresión con variables dicotómicas

El primer paso consiste en generar un factor sexo para poder analizarlo:

datos$sexo<- as.factor(datos$sexo)

(Mujer igual a 1, hombre igual a 0)

reg_simple_4 <-lm(ingresos_familiares~edad+ingreso_total_lab+ingreso_total_no_lab+ sexo,data=datos)
summary(reg_simple_4)

Call:
lm(formula = ingresos_familiares ~ edad + ingreso_total_lab + 
    ingreso_total_no_lab + sexo, data = datos)

Residuals:
   Min     1Q Median     3Q    Max 
-71853 -31081 -12233  15289 673350 

Coefficients:
                       Estimate Std. Error t value Pr(>|t|)    
(Intercept)           6.741e+04  9.655e+02  69.816  < 2e-16 ***
edad                 -5.690e+02  2.132e+01 -26.686  < 2e-16 ***
ingreso_total_lab     1.041e+00  1.274e-02  81.728  < 2e-16 ***
ingreso_total_no_lab  1.093e+00  3.029e-02  36.083  < 2e-16 ***
sexoVaron            -5.635e+03  8.679e+02  -6.493 8.69e-11 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 51090 on 14314 degrees of freedom
Multiple R-squared:  0.336, Adjusted R-squared:  0.3359 
F-statistic:  1811 on 4 and 14314 DF,  p-value: < 2.2e-16

El coeficiente de la variable dicotómica nos indica que, en promedio, las mujeres tienen un ingreso menor en 5635 unidades que los varones.

library(ggplot2)
# Realiza la regresión lineal
ASieg_simple_4 <- lm(ingresos_familiares ~ edad + ingreso_total_lab + ingreso_total_no_lab + sexo, data = datos)

# Resumen del modelo (opcional, para verificar los resultados)
summary(ASieg_simple_4)

Call:
lm(formula = ingresos_familiares ~ edad + ingreso_total_lab + 
    ingreso_total_no_lab + sexo, data = datos)

Residuals:
   Min     1Q Median     3Q    Max 
-71853 -31081 -12233  15289 673350 

Coefficients:
                       Estimate Std. Error t value Pr(>|t|)    
(Intercept)           6.741e+04  9.655e+02  69.816  < 2e-16 ***
edad                 -5.690e+02  2.132e+01 -26.686  < 2e-16 ***
ingreso_total_lab     1.041e+00  1.274e-02  81.728  < 2e-16 ***
ingreso_total_no_lab  1.093e+00  3.029e-02  36.083  < 2e-16 ***
sexoVaron            -5.635e+03  8.679e+02  -6.493 8.69e-11 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 51090 on 14314 degrees of freedom
Multiple R-squared:  0.336, Adjusted R-squared:  0.3359 
F-statistic:  1811 on 4 and 14314 DF,  p-value: < 2.2e-16
# Crea la predicción
datos$predicted_ingresos <- predict(ASieg_simple_4)

# Graficar la regresión
ggplot(datos, aes(x = edad, y = ingresos_familiares, color = factor(sexo))) +
  geom_point(alpha = 0.6) +  # Puntos de datos
  geom_line(aes(y = predicted_ingresos), linetype = "dashed", size = 1) +
  labs(title = "Regresión: Ingresos Familiares vs Edad, Ingresos Laborales, No Laborales y Sexo",
       x = "Edad",
       y = "Ingresos Familiares") +
  scale_color_manual(values = c("blue", "red"), labels = c("Varón", "Mujer")) +
  theme_minimal() +
  theme(legend.title = element_blank())
Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
ℹ Please use `linewidth` instead.

Conclusión

Después de los diversos análisis y pruebas a lo largo de este informe, podemos concluir que el sexo y el nivel educativo son factores que influyen significativamente en los ingresos totales de la población analizada. Este hallazgo puede ser un punto de partida para continuar investigando con el fin de encontrar muchos más determinantes de ingresos. La razón por la que es esencial seguir realizando estas investigaciones es que resultarían en políticas impulsadas por la importancia de promover la igualdad de oportunidades en muchos sectores de la sociedad. En general, este informe es solo un punto de partida para futuros estudios que pueden tener un análisis más en profundidad y otras variables de estudio y factores.

Limitaciones del Análisis

Las limitaciones más importantes a tener en cuenta del informe fueron los supuestos de normalidad y homocedasticidad. Si bien se realizaron las pruebas de normalidad y homogeneidad de varianza, las distribuciones de ingresos son extremadamente asimétricas con una concentración en ingresos bajos y algunos valores demasiado altos, lo que puede sesgar los resultados de las pruebas paramétricas, incluyendo las pruebas t y ANOVA.


Otro punto a tener en cuenta es el número y la calidad de las variables; el análisis se basa en un número limitado de variables predictivas (edad, sexo, nivel educativo, afiliación de seguro de salud, etc.). Algunas de estas variables, como la ubicación de residencia (dominio), pueden no ser condiciones adecuadas representativas de, por ejemplo, la experiencia de trabajo o la situación civil, que también está relacionada con los ingresos.

La base presenta numerosos problemas, como una pobre documentación, por lo que resulta imposible conocer la metodología específica con la llevaron a cabo la recolección de los datos, la vigencia de sus valores, etc. Peor aún, tampoco tiene metadatos útiles que permitan arrojar luces sobre la naturaleza de las variables en cuestión.