Cargue los paquetes y las bases necesarias para poder trabajar con la base de datos de personas, hogares y viajes de la Encuesta Origen y Destino en clase data.table.
library(data.table)
library(factoextra)
library(ggplot2)
library(caret)
library(jtools)
library(rpart)
library(rpart.plot)
hogar<-fread("Base_Hogares.csv")
personas<-fread("Base_Personas.csv")
viajes<-fread("Base_Viajes.csv")
EOD<-merge(x=hogar,y=personas, by="Hogar")
EOD<-merge(x=EOD,y=viajes, by=c("Hogar","Persona"))
El análisis se realizará a nivel de personas. Para esto crea un objeto denominado “personaseod” que contenga las variables edad, sexo, educ, IngresoFinal, Factor, comunahg, Macrozonahg, la distancia promedio que recorre cada persona y los minutos de viaje promedio. Además, borre todas las observaciones que tienen ´NA´ en alguna de las variables.
personaseod<-EOD[,.(edad,sexo, educ,IngresoFinal, Factor, comunahg, Macrozonahg,EOD[,mean(distancia), by=.(Persona,Hogar)], EOD[,mean(minutosviaje),by=.(Persona,Hogar)])]
personaseod<-na.omit(personaseod)
colnames(personaseod)[10]<-"promDist"
colnames(personaseod)[13]<-"promTiem"
personaseod$Persona.1<-NULL
personaseod$Hogar.1<-NULL
` ### P4 a) Realice un análisis de cluster utilizando kmeans y 3 centers con las variables de edad e IngresoFinal. Cree una variable en la base de datos que guarde a que cluster corresponde cada observación
variables<-personaseod[,.(edad, IngresoFinal)]
K1<-kmeans(variables,centers = 3)
personaseod$clusters<-K1$cluster
fviz_cluster(K1,data=variables,geom = "point")
c) Realice un gráfico de barra que contenga el número de personas que hay en cada ciudad, separados por cluster dentro de la comuna. Pista:Recuerde cargar el paquete ggplot2.
ggplot(data=personaseod, aes(x=comunahg, y=Persona)) + geom_bar(stat="identity")+facet_wrap(facets ="clusters")
### P5 Realice dos modelos de regresión lineal para predecir el ingreso de cada persona ¿Cuál predice mejor dentro de muestra? Pista:Recuerde cargar el paquete caret.
personaseod[,educ:=as.factor(educ)]
personaseod[,sexo:=as.factor(sexo)]
personaseod[,IngresoFinal:=as.integer(IngresoFinal)]
personaseod[,promDist:=as.integer(promDist)]
personaseod[,promTiem:=as.integer(promTiem)]
reg1<-lm(data=personaseod, formula=IngresoFinal~sexo+educ+promTiem)
reg2<-lm(data=personaseod,formula=IngresoFinal~promDist+sexo+clusters)
summ(reg1)
## MODEL INFO:
## Observations: 57876
## Dependent Variable: IngresoFinal
## Type: OLS linear regression
##
## MODEL FIT:
## F(8,57867) = 1578.48, p = 0.00
## R² = 0.18
## Adj. R² = 0.18
##
## Standard errors: OLS
## ---------------------------------------------------------------------
## Est. S.E. t val. p
## ----------------------------- ------------ ---------- -------- ------
## (Intercept) 213202.30 25818.41 8.26 0.00
## sexoMujer -162616.88 3202.55 -50.78 0.00
## educNo tiene -117469.01 27211.93 -4.32 0.00
## educPrebásicos -129532.56 27566.37 -4.70 0.00
## educPrimarios -43111.37 25977.89 -1.66 0.10
## educProfesional 363161.08 25865.83 14.04 0.00
## educSecundarios 89948.03 25819.89 3.48 0.00
## educTécnico Profesional 234612.84 26056.26 9.00 0.00
## promTiem -100.09 85.15 -1.18 0.24
## ---------------------------------------------------------------------
summ(reg2)
## MODEL INFO:
## Observations: 57876
## Dependent Variable: IngresoFinal
## Type: OLS linear regression
##
## MODEL FIT:
## F(3,57872) = 30218.34, p = 0.00
## R² = 0.61
## Adj. R² = 0.61
##
## Standard errors: OLS
## ---------------------------------------------------------
## Est. S.E. t val. p
## ----------------- ------------ --------- --------- ------
## (Intercept) 2093753.39 6267.31 334.08 0.00
## promDist -0.02 0.18 -0.09 0.93
## sexoMujer -22637.75 2260.59 -10.01 0.00
## clusters -668160.97 2294.02 -291.26 0.00
## ---------------------------------------------------------
train.control <- trainControl(method = "cv", number = 3)
pred<-train(IngresoFinal~sexo+educ+promTiem,data=personaseod,method="lm",trControl= train.control)
pred2<-train(IngresoFinal~promDist+sexo+clusters, data=personaseod, method="lm",trcontrol=train.control)
print(pred)
## Linear Regression
##
## 57876 samples
## 3 predictor
##
## No pre-processing
## Resampling: Cross-Validated (3 fold)
## Summary of sample sizes: 38584, 38584, 38584
## Resampling results:
##
## RMSE Rsquared MAE
## 384235.5 0.1792706 215027.2
##
## Tuning parameter 'intercept' was held constant at a value of TRUE
print(pred2)
## Linear Regression
##
## 57876 samples
## 3 predictor
##
## No pre-processing
## Resampling: Bootstrapped (25 reps)
## Summary of sample sizes: 57876, 57876, 57876, 57876, 57876, 57876, ...
## Resampling results:
##
## RMSE Rsquared MAE
## 263745.4 0.6113124 160815.9
##
## Tuning parameter 'intercept' was held constant at a value of TRUE
El modelo 1 muestra un valor mayor en su RMSE (suma cuadratica del error), ademas de un menor valor del R^2, esto quiere decir que el modelo 2 es mejor predictor que el modelo 2, pues muestra una mayor aproximación a los datos reales
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 anteriores? Pista: Recuerde setear la semilla.
set.seed(12345)
setupKCV <- trainControl(method = "cv" , number = 5)
predkfolds1<-train(IngresoFinal~sexo+educ+promTiem,data=personaseod,method="lm",trControl= setupKCV)
predkfolds2<-train(IngresoFinal~promDist+sexo+clusters,data=personaseod,method="lm",trControl= setupKCV)
print(predkfolds1)
## Linear Regression
##
## 57876 samples
## 3 predictor
##
## No pre-processing
## Resampling: Cross-Validated (5 fold)
## Summary of sample sizes: 46300, 46301, 46301, 46302, 46300
## Resampling results:
##
## RMSE Rsquared MAE
## 384210.2 0.1792052 215026.2
##
## Tuning parameter 'intercept' was held constant at a value of TRUE
print(predkfolds2)
## Linear Regression
##
## 57876 samples
## 3 predictor
##
## No pre-processing
## Resampling: Cross-Validated (5 fold)
## Summary of sample sizes: 46301, 46300, 46301, 46301, 46301
## Resampling results:
##
## RMSE Rsquared MAE
## 264774.1 0.6105037 160994
##
## Tuning parameter 'intercept' was held constant at a value of TRUE
El caso de validar los datos por el metodo Kfolds da un valor muy similar a la validación realizada por el packete de datos Caret, mantiene la misma tendencia donde es mejor predictor el modelo 2
Realice dos modelos de árboles de clasificación. Pruebe cuál clasifica mejor con validación cruzada. Entrene el modelo con un 80% de la muestra y testee con el 20% restante. Pista 1:Recuerde cargar el paquete rpart y rpart.plot Pista 2: Recuerde setear la semilla.