<- read.csv2(file = "encuesta-anual-hogares-2019.csv",
datos header = TRUE, sep = ",", fileEncoding="latin1")
Informe de Análisis Estadístico
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.
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
= select(datos,
datos_seleccionados
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 %>% filter(edad >= 18) datos_seleccionados
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:
$años_escolaridad[datos_seleccionados$años_escolaridad ==
datos_seleccionados"Ningun año de escolaridad aprobado"] = 0
$años_escolaridad = as.numeric(datos_seleccionados$años_escolaridad) datos_seleccionados
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
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 | Sí | 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
<- aov(ingresos_totales ~ nivel_max_educativo,
anova_educacion data = datos_seleccionados %>% filter(!is.na(nivel_max_educativo)
& nivel_max_educativo != ""))
<- summary(anova_educacion)
resultados_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)
<- LSD.test(anova_educacion, "nivel_max_educativo", alpha=0.01)
fisher_educacion $means fisher_educacion
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
<- aov(ingresos_totales ~ sexo, data = datos_seleccionados)
anova_sexo <- summary(anova_sexo)
resultados_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)
<- LSD.test(anova_sexo, "sexo", alpha=0.01)
fisher_sexo $means fisher_sexo
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
<- aov(ingresos_totales ~ hijos_nacidos_vivos, data = datos_seleccionados
anova_hijos %>% filter(!is.na(hijos_nacidos_vivos) & hijos_nacidos_vivos != ""))
<- summary(anova_hijos)
resultados_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)
<- LSD.test(anova_hijos, "hijos_nacidos_vivos", alpha=0.01)
fisher_hijos $means fisher_hijos
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 %>% select_if(is.numeric)
datos_num
# Calcular la matriz de correlación
<- cor(datos_num, use = "complete.obs")
correlacion
# 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
<-lm(ingresos_totales ~ ingreso_total_lab)
reg_simple_1 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
<- lm(ingresos_totales~ingreso_total_lab + edad) reg_simple_2
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
<-lm(ingresos_totales~ingreso_total_lab + edad +
reg_simple_3 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.
Regresión con variables dicotómicas
El primer paso consiste en generar un factor sexo para poder analizarlo:
$sexo<- as.factor(datos$sexo) datos
(Mujer igual a 1, hombre igual a 0)
<-lm(ingresos_familiares~edad+ingreso_total_lab+ingreso_total_no_lab+ sexo,data=datos)
reg_simple_4 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
<- lm(ingresos_familiares ~ edad + ingreso_total_lab + ingreso_total_no_lab + sexo, data = datos)
ASieg_simple_4
# 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
$predicted_ingresos <- predict(ASieg_simple_4)
datos
# 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.