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)
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")
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))
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))
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
Calcule el salario predicho para cada observación. (4 puntos)
ESI <- ESI[,prediccion:=predict(reg1)]
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
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
Calcule el salario predicho para cada observación.. (5 puntos)
ESI <- ESI[,prediccion1:=predict(reg2)]
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)]
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).
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.