Calculando la distancia caminanda por rangos de edad según un modelo Random Forest.

Introducción

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:

  • de 01 a 18 años
  • de 19 a 26 años
  • de 27 a 60 años
  • de 60 a 80 años

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.

1. Cargando librerías y modelo calibrado

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")

2. Función que crea perfil

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:

  • b: cifra que abre el rango de edad
  • c: cifra que cierra el rango de edad
  • s: Si es mujer (1) u hombre (0)
  • e: Si la persona está empleada (1) o no (0)
  • l: Si tiene (1) o no (0) licencia de conducir
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])
}

3. Creando perfiles con función que crea perfiles

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)

4. Creando función que calcula distancia promedio en base a las predicciones de cada una de las edades del rango elegido

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(.)

}

5. Aplico la función y veo la distancia recorrida en una tabla

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