Pregunta 1

Cargue los paquetes “data.table”, “ggplot2” y “caret”, junto con la base de datos. (1 punto) Importante:Borre todas las observaciones que tienen datos ´NA´ en alguna de las variables.

rm(list=ls())
library(knitr)
library(data.table)
library(moderndive)
library(ggplot2)
library(caret)
library(readr)
ESI <- fread("C:/Users/Esteban/Desktop/UAI/1 Sem 2021/Data Science/Tareas/Tarea 5/datos_tarea_5.csv" )
ESI <- as.data.table(ESI)

Pregunta 2

Muestre un histograma de ingreso por region. Limite el histograma a las observaciones con ingresos (ss_t) mayores a 0 y menores a 2 millones de pesos. Recuerde ver la clase de las variables (4 puntos)

class(ESI$region)
## [1] "integer"
class(ESI$ss_t )
## [1] "character"
ESI <- ESI[,ingreso:=as.integer(ESI$ss_t),]
ESI <- ESI[,region:=as.character(ESI$region),]

remove_na <- function(x){
  dm <- data.matrix(x)
  dm[is.na(dm)] <- 0
  data.table(dm)
}
ESI$ingreso <- remove_na (ESI$ingreso)
grafico1 <- ESI[ingreso<2000000 & ingreso>0,ingreso,by="region"]
grafico1 <- na.omit(grafico1)
ggplot(grafico1,aes(ingreso))+ geom_histogram()+
  facet_wrap(facets="region")

Pregunta 3

Arregle los gráficos para que cada uno tenga un eje x legible, además arregle el eje y. Agregue color a cada gráfico:(4 puntos) Hint: utilice la función scales = ‘free_y’ dentro de facet_wrap para dejar libre el eje y. También recuerde chequear la clase de la variable region para que se asigne correctamente un color a cada región.

class(ESI$region)
## [1] "character"
ggplot(grafico1,aes(ingreso, fill= region ))+ geom_histogram()+
  facet_wrap(facets="region", scales="free_y")+
   theme(axis.text.x = element_text(angle=90, vjust=0.5))

Pregunta 4

Realice un gráfico de dispersión que muestre la relación entre el ingreso y la edad. (4 puntos)

grafico2 <- ESI[,ingreso,by="edad"]
grafico2 <- na.omit(grafico2)

ggplot(grafico2,aes(edad ,ingreso))+ geom_point()+
   theme(axis.text.x = element_text(angle=90, vjust=0.5))

Pregunta 4.

Un miembro de su equipo propone un modelo que calcule la incidencia del sexo y la educación en el ingreso, sin considerar variables adicionales. Usted quiere mostrarle que aquel modelo está incompleto. Para lograr esto, haga el modelo de regresión anteriormente mencionado. (5 puntos)

ESI$edad <- remove_na (ESI$edad)
ESI$cine <- remove_na(ESI$cine)
ESI <- ESI[sexo==1,hombre:=1,]
ESI <- ESI[sexo==2,hombre:=0,]
ESI <- ESI[cine!=999,]

reg1<-lm(data=ESI,formula =ingreso~hombre+cine) 
summary(reg1)
## 
## Call:
## lm(formula = ingreso ~ hombre + cine, data = ESI)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -279530 -114041  -71332   11413 9761842 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -135529.7     2701.2  -50.17   <2e-16 ***
## hombre        42708.5     1737.5   24.58   <2e-16 ***
## cine          41372.4      531.2   77.88   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 269000 on 96077 degrees of freedom
## Multiple R-squared:  0.06424,    Adjusted R-squared:  0.06422 
## F-statistic:  3298 on 2 and 96077 DF,  p-value: < 2.2e-16

Pregunta 4.1

Calcule el salario predicho para cada observación. (4 puntos)

ESI <- ESI[,prediccion:=predict(reg1)]

Pregunta 4.2

Dado el modelo anterior, calcule la predicción del salario para una mujer y para un hombre con educación Universitario (5 puntos)

-135529.7+0*42708.5+7*41372.4
## [1] 154077.1
-135529.7+1*42708.5+7*41372.4
## [1] 196785.6

Mujer: 154077.1 Hombre: 196785.6

Pregunta 5

Teniendo ya el modelo propuesto por su colega, contrarreste usted con un modelo de predicción en base a los datos con los que ya cuenta. Utilice el argumento na.action por los datos nulos en la función de la regresión. (7 puntos)

ESI <- ESI[tipo==1,rural:=0]
ESI <- ESI[tipo==2,rural:=0]
ESI <- ESI[tipo==3,rural:=1]

reg2<-lm(data=ESI,formula =ingreso~hombre+cine+edad+rural)

get_regression_table(reg2) %>% kable()
term estimate std_error statistic p_value lower_ci upper_ci
intercept -134285.025 2977.033 -45.107 0.000 -140119.976 -128450.074
hombre 43008.053 1740.018 24.717 0.000 39597.637 46418.468
cine 40799.676 554.160 73.624 0.000 39713.529 41885.824
edad 73.791 38.644 1.909 0.056 -1.951 149.534
rural -8099.214 2189.119 -3.700 0.000 -12389.863 -3808.565
summary(reg2)
## 
## Call:
## lm(formula = ingreso ~ hombre + cine + edad + rural, data = ESI)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -282340 -114055  -66632   11074 9761411 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -134285.02    2977.03 -45.107  < 2e-16 ***
## hombre        43008.05    1740.02  24.717  < 2e-16 ***
## cine          40799.68     554.16  73.624  < 2e-16 ***
## edad             73.79      38.64   1.909 0.056202 .  
## rural         -8099.21    2189.12  -3.700 0.000216 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 269000 on 96075 degrees of freedom
## Multiple R-squared:  0.0644, Adjusted R-squared:  0.06437 
## F-statistic:  1653 on 4 and 96075 DF,  p-value: < 2.2e-16

Pregunta 5.1

Calcule el salario predicho para cada observación.. (5 puntos)

ESI <- ESI[,prediccion1:=predict(reg2)]

Pregunta 6

Contando ya con su modelo, usted puede realizar una comparación directa entre ambos. Calcule los errores de predicción dentro de muestra para ambos modelos. (8 puntos)

ESI[,residuo1:=resid(reg1)]
ESI[,residuo2:=resid(reg2)]

Pregunta 7

Interprete la diferencia en los errores de predicción entre el Modelo 1 y el Modelo 2. ¿Qué modelo hace una mejor predicción dentro de muestra? (5 puntos)

ESI[,Cuociente:=residuo1/residuo2]
mean(ESI$Cuociente)
## [1] 1.020753

Podemos observar que el pormedio del cuociente entre los errores es mayor a 1, por lo que el modelo 2 es ligeramente mejor que el modelo 1 (el numerador es mayor que el denominador).

Pregunta 8

Realice validación cruzada (CV) a los modelos de la pregunta anterior por el método K-folds con 5 folds. ¿Se mantienen las conclusiones obtenidas en el análisis dentro de muestra? (9 puntos)

set.seed(12345)

setupKCV <- trainControl(method = "cv" , number = 5)
predkfolds1<-train(ingreso~hombre+cine,data=ESI,method="lm",trControl= setupKCV)

predkfolds2<-train(ingreso~hombre+cine+edad+rural,data=ESI,method="lm",trControl= setupKCV)
print(predkfolds1)
## Linear Regression 
## 
## 96080 samples
##     2 predictor
## 
## No pre-processing
## Resampling: Cross-Validated (5 fold) 
## Summary of sample sizes: 76864, 76864, 76864, 76864, 76864 
## Resampling results:
## 
##   RMSE      Rsquared    MAE   
##   268669.3  0.06440988  128202
## 
## Tuning parameter 'intercept' was held constant at a value of TRUE
print(predkfolds2)
## Linear Regression 
## 
## 96080 samples
##     4 predictor
## 
## No pre-processing
## Resampling: Cross-Validated (5 fold) 
## Summary of sample sizes: 76864, 76864, 76864, 76864, 76864 
## Resampling results:
## 
##   RMSE      Rsquared    MAE     
##   268781.3  0.06452235  128210.6
## 
## Tuning parameter 'intercept' was held constant at a value of TRUE

Si, se mantienen las conclusiones pues el Rsquared de nuestro segundo modelo sgue siendo superior al del primero.