En este Markdown me propongo a calcular el promedio de la distancia caminada predicha por un modelo Random Forest según rango de edades, los rangos de edades son cuatro:
La idea de hacer este cálculo es elaborar una tabla para el papel que indique la distancia caminada que hace cada rango de edad según un modelo de Machine Learning: Random Forest.
En primer lugar cargo las librerías y el modelo calibrado por Antonio Paéz en la etapa anterior.
library(caret)
library(leaflet)
library(pdp) # for partial dependence plots
library(randomForest)
library(rpart)
library(rpart.plot)
library(sf)
library(tidyverse)
library(units)
library(vip)
library(greenConcepcion)
load("C:/CEDEUS/2020/noviembre4_revisionAPaez/01-Analysis/model_rf.RData")
Luego de cargar las librerías creo una función que crea los perfiles y calcula las funciones bases del set de datos que trae las coordenadas desde donde se calcula la distancia caminada. La función tiene los siguientes parámetros:
creaPerfil<-function(b,c,s,e,l){
x<-list()
for(i in b:c){
a<-pred_grid %>%
mutate(Female = s,
Age = i,
Walk = 1,
Employed = e,
License = l,
xn_plus_yn = xn + yn,
xnXyn = xn * yn,
xn2_plus_yn2 = xn^2 + yn^2,
exp_xn_plus_exp_yn = exp(xn) + exp(yn),
exp_xnXexp_yn = exp(xn) * exp(yn),
FemaleXxn = Female * xn,
FemaleXyn = Female * yn,
FemaleXxnXyn = Female * xn * yn,
AgeXxn = Age * xn,
AgeXyn = Age * yn,
AgeXxnXyn = Age * xn * yn,
WalkXxn = Walk * xn,
WalkXyn = Walk * yn,
WalkXxnXyn = Walk * xn * yn,
EmployedXxn = Employed * xn,
EmployedXyn = Employed * yn,
EmployedXxnXyn = Employed * xn * yn,
LicenseXxn = License * xn,
LicenseXyn = License * yn,
LicenseXxnXyn = License * xn * yn
)
x[[i]]<-a
}
return(x[b:c])
}
Luego aplicamos la función creaPerfil para crear los distintos perfiles que escojamos, por ejemplo, en este caso crearemos un perfil para un hombre (prof1) y mujer(prof2) ambos empleados entre 19 a 26 años de edad que poseen licencia de conducir.
prof1<-creaPerfil(19,26,0,1,1)
prof2<-creaPerfil(19,26,1,1,1)
Una vez creados los perfiles para cada una de las edades entre el rango que elegimos (19-26) procedemos a elaborar una función que calcule el promedio de la distancias predichas por Random Forest.
promPerfil<-function(x){
x %>%
map(., ~as.data.frame(.) %>%
mutate(., ID=1:n(), distancias_pred=predict(model_rf,.)%>%
exp()) %>%
.[,c("distancias_pred")] %>%
as.data.frame) %>%
bind_rows(.id="dist") %>%
.$. %>%
mean(.)
}
Aplico la función que calcula la distancia promedio a cada uno de los perfiles creados, en este caso el perfil 1 se refiere a un hombre y el perfil 2 a una mujer, ambos empleados entre 19 a 26 años de edad que poseen licencia de conducir
distancias<-cbind(Perfiles= c("Perfil 1", "Perfil 2"),
DistProm=
rbind(round(promPerfil(prof1)),
round(promPerfil(prof2))))
library(knitr)
kable(distancias, col.names = c("Perfil", "Distancia"))
| Perfil | Distancia |
|---|---|
| Perfil 1 | 524 |
| Perfil 2 | 527 |