#install.packages("data.table")
#install.packages("rpart")
#install.packages("rpart.plot")
#install.packages("caret")
#install.packages("factoextra")
#install.packages("ggplot2")
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)
hogares<-fread("Base_Hogares.csv")
personas<-fread("Base_Personas.csv")
viajes<-fread("Base_Viajes.csv")
a)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"))
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)])]
personaseod2<-na.omit(personaseod)
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
personaseod3<-personaseod2[,.(edad,IngresoFinal)]
k1<-kmeans(personaseod3,centers=3)
b)Muestre el gráfico de los cluster. Pista:Recuerde cargar el paquete factoextra.
library("ggplot2")
library("factoextra")
fviz_cluster(k1,data=personaseod3,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.
personaseod2$clusters<-k1$cluster
ggplot(data=personaseod2, aes(x=comunahg, y=Persona)) + geom_bar(stat="identity")+facet_wrap(facets ="clusters")
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.
library("caret")
reg1<-lm(data=personaseod2,formula =IngresoFinal~educ+sexo+edad)
reg2<-lm(data=personaseod2,formula =IngresoFinal~Macrozonahg+V1+V1.1)
summary(reg1)
##
## Call:
## lm(formula = IngresoFinal ~ educ + sexo + edad, data = personaseod2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -799725 -168606 -37983 106628 5720160
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 38741.81 24985.12 1.551 0.12100
## educNo tiene -8217.91 26343.03 -0.312 0.75507
## educPrebásicos -4321.91 26701.77 -0.162 0.87142
## educPrimarios -71815.13 25099.93 -2.861 0.00422 **
## educProfesional 315119.91 24999.02 12.605 < 2e-16 ***
## educSecundarios 11992.81 24972.75 0.480 0.63106
## educTécnico Profesional 152962.37 25203.56 6.069 1.29e-09 ***
## sexoMujer -165802.21 3094.25 -53.584 < 2e-16 ***
## edad 5124.86 79.66 64.332 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 371300 on 57867 degrees of freedom
## Multiple R-squared: 0.2339, Adjusted R-squared: 0.2338
## F-statistic: 2208 on 8 and 57867 DF, p-value: < 2.2e-16
summary(reg2)
##
## Call:
## lm(formula = IngresoFinal ~ Macrozonahg + V1 + V1.1, data = personaseod2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -759330 -210767 -73372 126334 5714963
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.136e+05 9.277e+03 23.026 < 2e-16 ***
## MacrozonahgConcon Oriente 2.460e+03 4.721e+04 0.052 0.958441
## MacrozonahgConcon Poniente 2.294e+05 1.193e+04 19.223 < 2e-16 ***
## MacrozonahgEl Belloto 3.080e+04 1.135e+04 2.713 0.006661 **
## MacrozonahgEl Belloto Norte -4.127e+04 1.660e+04 -2.486 0.012923 *
## MacrozonahgForestal 5.220e+04 1.258e+04 4.148 3.36e-05 ***
## MacrozonahgMarga-Marga 4.007e+05 1.552e+04 25.822 < 2e-16 ***
## MacrozonahgMiraflores 1.053e+05 1.299e+04 8.104 5.43e-16 ***
## MacrozonahgPenablanca 5.091e+04 1.666e+04 3.056 0.002240 **
## MacrozonahgPlacilla-Curauma 8.347e+04 1.238e+04 6.740 1.60e-11 ***
## MacrozonahgPlan Valparaiso 9.311e+04 1.868e+04 4.984 6.26e-07 ***
## MacrozonahgPlan Vina 1.953e+05 1.154e+04 16.928 < 2e-16 ***
## MacrozonahgPlaya Ancha -2.032e+04 1.134e+04 -1.792 0.073111 .
## MacrozonahgQuilpue Norte 7.989e+04 1.489e+04 5.365 8.12e-08 ***
## MacrozonahgQuilpue Poniente 3.463e+04 1.123e+04 3.084 0.002044 **
## MacrozonahgQuilpue Sur 2.761e+04 1.296e+04 2.131 0.033118 *
## MacrozonahgRecreo 1.801e+05 1.127e+04 15.978 < 2e-16 ***
## MacrozonahgRenaca 5.387e+05 1.370e+04 39.327 < 2e-16 ***
## MacrozonahgRodelillo -1.781e+04 1.222e+04 -1.457 0.145046
## MacrozonahgSanta Julia 1.168e+02 1.041e+04 0.011 0.991043
## MacrozonahgValparaiso Alto -2.005e+04 1.073e+04 -1.869 0.061663 .
## MacrozonahgVilla Alemana Norte -2.108e+04 1.281e+04 -1.646 0.099867 .
## MacrozonahgVilla Alemana Poniente -3.636e+04 1.059e+04 -3.434 0.000594 ***
## MacrozonahgVina del Mar Oriente -6.278e+03 1.322e+04 -0.475 0.634884
## V1 6.257e-01 3.588e-01 1.744 0.081186 .
## V1.1 -2.319e+02 1.174e+02 -1.975 0.048294 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 406700 on 57850 degrees of freedom
## Multiple R-squared: 0.08115, Adjusted R-squared: 0.08076
## F-statistic: 204.4 on 25 and 57850 DF, p-value: < 2.2e-16
Al analizar ambas regresionesm dado que R2 de reg1 (0,2339) > R2 de reg2 (0,08115), se puede concluir que la primera regresión es es mejor (ocurre lo mismo con R2 Ajustado). El hecho de que R2 de la primera regresión sea 0,2339 nos indica que el modelo explica un 23,39 % de nuestra variable dependiente
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.
k<-5
set.seed(12345)
personaseod2[,fold:=sample(k,size=nrow(personaseod2),replace=TRUE)]
personaseod2[,nr:=.I]
setupKCV1 <- trainControl(method = "cv" , number = 5)
predkfolds1<-train(IngresoFinal~educ+sexo+edad,data=personaseod2,method="lm",trControl= setupKCV1)
predkfolds2<-train(IngresoFinal~Macrozonahg+V1+V1.1,data=personaseod2,method="lm",trControl= setupKCV1)
print(predkfolds1)
## Linear Regression
##
## 57876 samples
## 3 predictor
##
## No pre-processing
## Resampling: Cross-Validated (5 fold)
## Summary of sample sizes: 46301, 46301, 46300, 46300, 46302
## Resampling results:
##
## RMSE Rsquared MAE
## 371176.4 0.23401 207393.4
##
## 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: 46302, 46300, 46300, 46301, 46301
## Resampling results:
##
## RMSE Rsquared MAE
## 406660.8 0.08059936 251523.1
##
## Tuning parameter 'intercept' was held constant at a value of TRUE
Realizando un proceso de validación cruzada se llegan a las mismas conclusiones gracias a sus indicadores, RMSE R2 y MAE, El primer modelo explica mejor el ingreso esperado.
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.
library("rpart")
library("rpart.plot")
arbol <- rpart(educ~., data = personaseod2,method="class")
rpart.plot(arbol)
set.seed(1234)
ind<-createDataPartition(personaseod2[,comunahg],times = 1,p = 0.8,list = F)
train<-personaseod2[ind,]
test<-personaseod2[-ind,]
arbol <- rpart(educ~., data = personaseod2,method="class")
rpart.plot(arbol)