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 |