Análisis de regresión lineal múltiple III

0. Objetivo del práctico

En este práctico aprenderemos a aplicar la regresión lineal múltiple en R, utilizando variables continuas para entender cómo influencian una variable dependiente. Además, aprenderemos a calcular manualmente los estadísticos de significancia y el y R² ajustado, para profundizar en la comprensión del modelo y la interpretación de los coeficientes.

1. Cargar los datos de la encuesta CASEN

Primero, cargamos los datos de la CASEN y seleccionamos las variables que nos interesan: los ingresos del trabajo, los años de escolaridad y la edad.

if (!require(pacman)) {
  install.packages("pacman")
}
## Loading required package: pacman
pacman::p_load(haven, dplyr, texreg, corrplot)

temp <- tempfile() #Creamos un archivo temporal
download.file("https://observatorio.ministeriodesarrollosocial.gob.cl/storage/docs/casen/2022/Base%20de%20datos%20Casen%202022%20SPSS.sav.zip",temp) #descargamos los datos
casen <- haven::read_sav(unz(temp, "Base de datos Casen 2022 SPSS.sav")) #cargamos los datos
unlink(temp); remove(temp) #eliminamos el archivo temporal

casen2 <- casen %>% 
  select(esc, ytrabajocor, edad) 

2. Cálculo manual de R2 y R2 ajustado

Primero realizamos una regresión lineal múltiple para estimar el efecto de la escolaridad y la edad sobre los ingresos del trabajo.

# Realizamos la regresión
modelo3 <- lm(ytrabajocor ~ esc + edad, data = casen2)
summary(modelo3)
## 
## Call:
## lm(formula = ytrabajocor ~ esc + edad, data = casen2)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1742504  -328602  -111787   151201 49974286 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -742740.5    14304.0  -51.92   <2e-16 ***
## esc           88022.2      704.3  124.98   <2e-16 ***
## edad           7681.3      189.9   40.45   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 753000 on 88388 degrees of freedom
##   (113840 observations deleted due to missingness)
## Multiple R-squared:  0.1507,	Adjusted R-squared:  0.1507 
## F-statistic:  7842 on 2 and 88388 DF,  p-value: < 2.2e-16

A continuación, calculamos manualmente el R2 y el R2 ajustado. Recordemos que el R2 mide la proporción de la variabilidad explicada por el modelo, mientras que el R2 ajustado penaliza por el número de predictores para evitar el sobreajuste.

# Calculo manual de R^2 y R^2 ajustado
SSR <- sum((fitted(modelo3) - mean(casen2$ytrabajocor, na.rm = TRUE))^2)  # Suma de cuadrados explicada
SST <- sum((casen2$ytrabajocor - mean(casen2$ytrabajocor, na.rm = TRUE))^2, na.rm = TRUE) # Suma total de cuadrados
R2 <- SSR / SST

n <- nrow(casen2 %>% filter(!is.na(ytrabajocor)))  # Número de observaciones
k <- length(coef(modelo3)) - 1  # Número de predictores
R2_ajustado <- 1 - ((1 - R2) * (n - 1) / (n - k - 1))

cat("R^2: ", R2, "\n")
## R^2:  0.1500966
cat("R^2 Ajustado: ", R2_ajustado, "\n")
## R^2 Ajustado:  0.1500775

Interpretación de R2 no ajustado

El valor de R2 obtenido fue 0.150, lo que indica que el 15% de la variabilidad en los ingresos del trabajo es explicada por las variables independientes del modelo: escolaridad y edad. Este valor nos da una idea de la capacidad del modelo para explicar la variabilidad de los ingresos, aunque no tiene en cuenta el número de predictores, lo que puede llevar a una sobreestimación si se añaden muchas variables sin una contribución sustancial.

3. Cálculo manual de los estadísticos de significancia

Para evaluar la significancia de los coeficientes de la regresión, calculamos manualmente el valor t y el valor p asociado para cada coeficiente.

# Extraemos los coeficientes y errores estándar
betas <- coef(modelo3)
SE <- summary(modelo3)$coefficients[, "Std. Error"]

# Calculamos los valores t y p
valores_t <- betas / SE
valores_p <- 2 * pt(-abs(valores_t), df = n - k - 1)

# Imprimimos los resultados
coeficientes <- data.frame(Coefficient = betas, Std_Error = SE, t_value = valores_t, p_value = valores_p)
print(coeficientes)
##             Coefficient  Std_Error   t_value p_value
## (Intercept) -742740.492 14303.9664 -51.92549       0
## esc           88022.195   704.2920 124.97969       0
## edad           7681.283   189.8821  40.45291       0

4. Presentación de la tabla del modelo

Utilizamos texreg para presentar la tabla del modelo de manera más amigable.

htmlreg(list(modelo3))
Statistical models
  Model 1
(Intercept) -742740.49***
  (14303.97)
esc 88022.20***
  (704.29)
edad 7681.28***
  (189.88)
R2 0.15
Adj. R2 0.15
Num. obs. 88391
***p < 0.001; **p < 0.01; *p < 0.05

5. Interpretación de los coeficientes

Interpretación del Modelo de Regresión

Este modelo examina cómo la escolaridad y la edad afectan los ingresos del trabajo. A continuación se presentan las interpretaciones de los coeficientes principales:

Coeficientes del Modelo

Intercepto (b0):
El intercepto de -742,740.49 indica el valor esperado de los ingresos cuando tanto la escolaridad como la edad son cero, lo cual no tiene una interpretación práctica debido a la falta de sentido de esta situación en el contexto real. Este valor es estadísticamente significativo (p<0.001).

Escolaridad (b1):
El coeficiente para escolaridad es 88,022.20, indicando que, por cada año adicional de escolaridad, los ingresos del trabajo aumentan en promedio 88,022.20 unidades monetarias, manteniendo constante la edad. Este coeficiente es altamente significativo (p<0.001).

Edad (b2):
El coeficiente para la edad es 7,681.28, lo que implica que cada año adicional de edad se asocia con un aumento promedio de 7,681.28 unidades en los ingresos, manteniendo constante la escolaridad. Este coeficiente también es significativo (p<0.001), pero su tamaño del efecto es menor que el de la escolaridad.

R2 y R2 Ajustado:
El valor de R2 de 0.15 indica que el 15% de la variabilidad en los ingresos del trabajo es explicada por la edad y la escolaridad.

Consideraciones sobre Significancia y Tamaño del Efecto

  • Significancia Estadística: Ambos coeficientes son significativos (p<0.001), lo cual sugiere que sus efectos sobre los ingresos no son atribuibles al azar.
  • Tamaño del Efecto: Aunque ambos coeficientes son significativos, el tamaño del efecto de la escolaridad es considerablemente mayor que el de la edad, lo que implica que la educación tiene un mayor impacto en los ingresos.

6. Ejercicio de simulación: Variabilidad de los coeficientes

Para ilustrar la variabilidad de los coeficientes debido al muestreo aleatorio, realizaremos un ejercicio de simulación donde generaremos una población con un valor conocido de β=2, y luego extraeremos múltiples muestras para observar cómo varían los coeficientes estimados.

set.seed(123)  # Fijamos la semilla para reproducibilidad

# Generamos una población de 100,000 observaciones
n_poblacion <- 100000
x_poblacion <- rnorm(n_poblacion, mean = 50, sd = 10)
error_poblacion <- rnorm(n_poblacion, mean = 0, sd = 5)

y_poblacion <- 5 + 2 * x_poblacion + error_poblacion

# Tomamos una muestra de la población y realizamos la regresión
n_muestra <- 100
muestra <- sample(1:n_poblacion, n_muestra)
x_muestra <- x_poblacion[muestra]
y_muestra <- y_poblacion[muestra]

modelo_muestra <- lm(y_muestra ~ x_muestra)
summary(modelo_muestra)
## 
## Call:
## lm(formula = y_muestra ~ x_muestra)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -12.4124  -2.9333   0.4454   3.4283   9.2603 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  7.84860    2.09127   3.753 0.000296 ***
## x_muestra    1.95414    0.03992  48.956  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4.524 on 98 degrees of freedom
## Multiple R-squared:  0.9607,	Adjusted R-squared:  0.9603 
## F-statistic:  2397 on 1 and 98 DF,  p-value: < 2.2e-16
# Repetimos el proceso para 1000 muestras y almacenamos los coeficientes
n_replicas <- 1000
betas_muestras <- numeric(n_replicas)

for (i in 1:n_replicas) {
  muestra <- sample(1:n_poblacion, n_muestra)
  x_muestra <- x_poblacion[muestra]
  y_muestra <- y_poblacion[muestra]
  modelo <- lm(y_muestra ~ x_muestra)
  betas_muestras[i] <- coef(modelo)[2]
}

# Graficamos el histograma de los coeficientes beta obtenidos
hist(betas_muestras, breaks = 30, col = "skyblue", main = "Distribución de los coeficientes beta",
     xlab = "Valores de beta", ylab = "Frecuencia")
abline(v = 2, col = "red", lwd = 2, lty = 2)  # Línea indicando el valor verdadero de beta

En este ejercicio, hemos generado una población donde el valor verdadero de β es 2. Luego, tomamos muestras aleatorias y estimamos el coeficiente beta para cada muestra. El histograma muestra cómo varían los valores estimados de beta, ilustrando la variabilidad muestral. La línea roja indica el valor verdadero de β, y podemos observar cómo los valores de las muestras se distribuyen alrededor de este valor, reflejando la variabilidad inherente al proceso de muestreo.

Previous
Next