P1

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.

#install.packages("rpart")
#install.packages("rpart.plot")
#install.packages("caret")
#install.packages("data.table")
#install.packages("jtools")


library(rpart)
library(rpart.plot)
library(caret)
library(data.table)
library(jtools)


hogares<-fread("Base_Hogares.csv")
personas<-fread("Base_Personas.csv")
viajes<-fread("Base_Viajes.csv")

P2

  1. Para poder tener un mejor análisis, es necesario analizar las características del hogar y de las personas que lo componen. Para esto, crea un objeto “EOD” que sea un merge entre la base de hogares y personas, dado el identificador de hogares.
EOD<-merge(x=hogares,y=personas,by="Hogar")

b.Reemplaza el objeto “EOD” con un merge entre la base EOD y viajes, dados los identificadores de hogares y de personas. De esta forma, tendrá información más detallada de las familias, las personas y los flujos de viajes.

EOD<-merge(x=EOD,y=viajes,by=c("Hogar","Persona"))

P3

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,distancia,minutosviaje)]

personaseod<-na.omit(personaseod)

P4

Realice dos modelos de regresión lineal para predecir los minutos promedios de viaje de cada persona ¿Cuál predice mejor dentro de muestra?. Trabaje con la base personaseod.

reg1<-lm(data= personaseod ,formula =minutosviaje~distancia+edad)

summ(reg1)
## MODEL INFO:
## Observations: 59161
## Dependent Variable: minutosviaje
## Type: OLS linear regression 
## 
## MODEL FIT:
## F(2,59158) = 15453.93, p = 0.00
## R² = 0.34
## Adj. R² = 0.34 
## 
## Standard errors: OLS
## ------------------------------------------------
##                      Est.   S.E.   t val.      p
## ----------------- ------- ------ -------- ------
## (Intercept)         16.90   0.17   102.40   0.00
## distancia            0.00   0.00   175.60   0.00
## edad                -0.03   0.00    -9.49   0.00
## ------------------------------------------------
personaseod[,pred1:=predict(reg1,na.action = na.exclude)]

reg2<-lm(data= personaseod ,formula =minutosviaje~distancia+edad+sexo+comunahg)

summ(reg2)
## MODEL INFO:
## Observations: 59161
## Dependent Variable: minutosviaje
## Type: OLS linear regression 
## 
## MODEL FIT:
## F(7,59153) = 4555.27, p = 0.00
## R² = 0.35
## Adj. R² = 0.35 
## 
## Standard errors: OLS
## ----------------------------------------------------------
##                                Est.   S.E.   t val.      p
## --------------------------- ------- ------ -------- ------
## (Intercept)                   10.64   0.35    30.30   0.00
## distancia                      0.00   0.00   175.39   0.00
## edad                          -0.03   0.00    -9.91   0.00
## sexoMujer                     -0.09   0.14    -0.63   0.53
## comunahgQuilpue                5.38   0.35    15.52   0.00
## comunahgValparaiso             6.20   0.34    18.49   0.00
## comunahgVilla Alemana          5.51   0.36    15.27   0.00
## comunahgVina del Mar           7.80   0.33    23.71   0.00
## ----------------------------------------------------------
personaseod[,pred2:=predict(reg2,na.action = na.exclude)]

#Sacando los RMSE y MAE

predicciones1<-data.table(RMSE=RMSE(personaseod[,pred1],personaseod[,minutosviaje]),
                         MAE=MAE(personaseod[,pred1],personaseod[,minutosviaje]))

predicciones2<-data.table(RMSE=RMSE(personaseod[,pred2],personaseod[,minutosviaje]),
                         MAE=MAE(personaseod[,pred2],personaseod[,minutosviaje]))

Interpretacion:

A partir de los R cuadrados y de los RMSE y MAE, podemos concluir que el mejor modelo es el segundo, ya que es el que presenta mayor R cuadrado (0.35) y menor RMSE y MAE.

P5

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? Trabaje con la base personaseod.

set.seed(12345)

setupKCV <- trainControl(method = "cv" , number = 5)

predkfolds1<-train(minutosviaje~distancia+edad,data=personaseod,method="lm",trControl= setupKCV)
 
predkfolds2<-train(minutosviaje~distancia+edad+sexo+comunahg,data=personaseod,method="lm",trControl= setupKCV)
 
print(predkfolds1)
## Linear Regression 
## 
## 59161 samples
##     2 predictor
## 
## No pre-processing
## Resampling: Cross-Validated (5 fold) 
## Summary of sample sizes: 47329, 47328, 47329, 47329, 47329 
## Resampling results:
## 
##   RMSE      Rsquared  MAE     
##   16.48867  0.343459  11.67049
## 
## Tuning parameter 'intercept' was held constant at a value of TRUE
print(predkfolds2)
## Linear Regression 
## 
## 59161 samples
##     4 predictor
## 
## No pre-processing
## Resampling: Cross-Validated (5 fold) 
## Summary of sample sizes: 47329, 47328, 47329, 47329, 47329 
## Resampling results:
## 
##   RMSE      Rsquared   MAE     
##   16.39885  0.3505077  11.57631
## 
## Tuning parameter 'intercept' was held constant at a value of TRUE

#Interpretacion: Si, haciendo el metodo de validacion cruzada podemos notar que se mantienen las mismas conclusiones, en donde el modelo numero 2 es el que mejor predice.

P6

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. Trabaje con la base personaseod.

arb1<-rpart(comunahg~., subset = IngresoFinal,
              data = personaseod, method = "class")
rpart.plot(arb1)

set.seed(1234)
ind<-createDataPartition(personaseod$comunahg,times = 1,p = 0.8,list = F)

train1<-personaseod[ind]
test1<-personaseod[-ind,]
arb2<-rpart(comunahg~., subset = edad,
              data = personaseod, method = "class")
rpart.plot(arb2)

set.seed(1234)
ind<-createDataPartition(personaseod$comunahg,times = 1,p = 0.8,list = F)

train2<-personaseod[ind]
test2<-personaseod[-ind,]
#Validacion Cruzada
 
matconf<-table(test$comunahg,pred)
 
precis<-sum(diag(matconf))/sum(matconf)

prec<-function(x,y,z) {
  pred <- predict(x, y, type = "class")
  matconf <- table(y[,z], pred)
  test<- sum(diag(matconf)) / sum(matconf)
  test
}

prec(arb2,test,"comunahg")