Contexto

Los datos son simulados, se relacionan con una muestra observada durante un período de monitoreo que contiene información de 1000 árboles forestales con variables relacionadas con crecimiento, estructura, suelo, clima y condiciones ambientales.

El caso de estudio construye modelos de árboles de clasificación, bosques aleatorios y regresión logística para predecir y clasificar la condición de salud de los árboles. El caso permite evaluar y comparar calidad predictiva de los modelos con estos datos.

Son 15 las variables independientes:

Las de tipo dandométricas o mediciones físicas de los árboles:

Variables relativas a las condiciones del suelo edáficas:

Variables relativas a las condiciones del clima:

Variable de tipo topográfica: * altitud que es la altitud sobre el nivel del mar.

La variable dependiente es la de salud que define la condición de sanidad de un árbol y puede tener valores de Enfermedad, Estres_Hidrico, Plaga o Sano.

Los datos ya vienen transformados, limpios y con clases balanceadas para garantizar certidumbre en la construcción de modelos.

Los datos para su descarga se encuentran en el enlace de github.com en el espacio del autor: https://raw.githubusercontent.com/rpizarrog/Libro-Aprendizaje-Automatico.-Casos-de-Estudio-con-R-y-Python/refs/heads/main/datos/dataset_forestal_multinomial.csv .

Las funciones previamente codificadas y preparadas para este caso de estudio se pueden encontrar en https://raw.githubusercontent.com/rpizarrog/Libro-Aprendizaje-Automatico.-Casos-de-Estudio-con-R-y-Python/refs/heads/main/R%20MarkDown/funciones/funciones%20para%20ARBOLES%20DE%20REGRESION%20RANDOM%20FOREST%20y%20regresion%20logistica%20multinomial.R .

El caso de estudio se encuentra en el portal de rpubs.com https://rpubs.com/rpizarrog/1442071

Objetivo

Crear, evaluar y comparar modelos de clasificación con datos relacionados con el estado de salud de árboles. Los modelos que se crean son árboles de clasificación, bosques aleatorios y regresión logística.

Se partición los datos 70% para datos de entrenamiento y 30% para datos de validación.

La evaluación de los modelos se hace a través de los estadísticos extraídos a partir de la matriz de confusión de cada modelo.

Al final se interpreta el caso de estudio mencionando el modelo con mayor calidad predictiva para estos datos.

Descripción

Cargar librerías

# install.packages("readr")
# install.packages("tidyverse")
# install.packages("psych")
# install.packages("dplyr")
# install.packages("ggplot2")
# install.packages("caret")
# install.packages("broom")
# install.packages("lmtest")
# install.packages("car")
# install.packages("stats")
# install.packages("flextable")
# install.packages("officer")
# install.packages("patchwork")
# install.packages("performance")
# install.packages("see")
# install.packages("car")
# install.packages("nortest")
# install.packages("lmtest")
# install,packages("e1071")
# install.packages("rpart")
# install.packages("randomForest")
# install.packages("smotefamily")
# install.packages("themis")


library(readr)        # cargar datos datos
library(tidyverse)    # Para manipular
library (psych)       # Para descriobir datos
library(dplyr)        # Manipulación de datos
library(ggplot2)      # gráficos
library(caret)        # partición de datos y matriz de confusión
library(broom)        # tidy modelos
library(lmtest)       # Durbin-Watson
library(car)          # VIF y diagnóstico, entre otras
library(stats)        # lm, shapiro.test
library(patchwork)    # Graficos organizados en columnas renglones
# Tablas compatibles con Word
library(flextable)
library(officer)

library(performance) # Para evaluar postulados de modelos
library(see)         # Para evaluar postulados de modelos dependencia de performance
library(car)         # Para verificar postulados de los modelos

library(nortest)     # Para pruebas de normalidad Anderson-Darling
library(lmtest)      # Para pruebas de homocedasticidad Breusch–Pagan y prueba de White y otras pruebas
# library(glmnet)      # Para modelos Lasso y Ridge

# library(e1071)       # Para modelos SVR varios kernels
library(rpart)         #arboles de clasificación
library(randomForest)  # randomForest

library(rpart.plot)   # Visualizar arboles de clasificación

library(smotefamily)
library(themis)

Cargar funciones

# url <- "../funciones/funciones para ARBOLES DE REGRESION RANDOM FOREST y regresion logistica multinomial.R" # local
url <- "https://raw.githubusercontent.com/rpizarrog/Libro-Aprendizaje-Automatico.-Casos-de-Estudio-con-R-y-Python/refs/heads/main/R%20MarkDown/funciones/funciones%20para%20ARBOLES%20DE%20REGRESION%20RANDOM%20FOREST%20y%20regresion%20logistica%20multinomial.R"
source(url)

Cargar datos

Se cargan los datos con la función f_cargar_datos y la url indicada.

url <- "https://raw.githubusercontent.com/rpizarrog/Libro-Aprendizaje-Automatico.-Casos-de-Estudio-con-R-y-Python/refs/heads/main/datos/dataset_forestal_multinomial.csv"
datos = f_cargar_datos(url)

Visualizar datos

f_visualizar_head_tail_reducido_word(datos)

edad

altura

diametro

area

...

radiacion

viento

altitud

salud

38

12.94

29.57

40.96

...

7.31

13

931.45

Estres_Hidrico

19

9.06

43.47

55.68

...

7.96

13.32

1271.1

Estres_Hidrico

19

9.74

27.23

52.15

...

7.72

11.39

1199.06

Sano

35

10.86

39.23

43.66

...

8.95

13.2

1462.42

Plaga

8

22.06

42.01

57.25

...

8.59

10.72

1041.67

Sano

22

8.38

24.53

36.47

...

5.35

12.02

1238.07

Enfermedad

...

...

...

...

...

...

...

...

...

16

12.94

46.27

52.94

...

6.23

10.24

1210.76

Sano

30

18.96

37.49

41.54

...

8.22

13.82

974.52

Estres_Hidrico

30

13.32

26.63

53.89

...

10.18

13.5

1321.05

Estres_Hidrico

22

13.14

34.8

49.24

...

5.81

9.23

1088.92

Sano

16

10.56

37.32

60.31

...

7.52

15

947.18

Plaga

24

11.54

19.64

51.45

...

8.22

8.89

1425.47

Estres_Hidrico

Estadísticos descriptivos

f_describir_datos (datos)
## $describe
##                  vars    n    mean     sd  median trimmed    mad    min     max
## edad                1 1000   24.15   9.20   25.00   24.27  11.86   8.00   39.00
## altura              2 1000   13.53   3.19   13.48   13.53   3.22   3.65   23.34
## diametro            3 1000   31.58   6.66   31.53   31.59   6.09   6.77   57.81
## area                4 1000   45.08  10.31   44.75   44.90  10.36  13.62   80.98
## densidad            5 1000   57.30  16.46   55.22   56.66  16.58  16.18  108.88
## ph                  6 1000    6.41   0.53    6.50    6.44   0.51   4.58    7.61
## humedad             7 1000   39.71  17.46   40.11   39.28  20.43   5.74   83.37
## materia_organica    8 1000    4.58   1.25    4.56    4.58   1.29   0.47    8.27
## nitrogeno           9 1000   27.28   7.26   27.17   27.15   7.48   8.74   47.53
## fosforo            10 1000   19.56   5.47   19.47   19.46   5.99   2.09   34.89
## temperatura        11 1000   25.56   3.76   25.41   25.49   4.11  16.23   37.56
## precipitacion      12 1000  625.64 219.48  643.58  628.36 251.13 106.37 1200.93
## radiacion          13 1000    7.24   1.29    7.26    7.25   1.32   3.80   11.09
## viento             14 1000   12.28   2.52   12.29   12.30   2.56   3.45   19.73
## altitud            15 1000 1181.06 153.00 1182.82 1182.64 157.21 710.72 1632.66
## salud*             16 1000    2.50   1.12    2.50    2.50   1.48   1.00    4.00
##                    range  skew kurtosis   se
## edad               31.00 -0.08    -1.18 0.29
## altura             19.69  0.00     0.00 0.10
## diametro           51.04 -0.01     0.39 0.21
## area               67.36  0.17     0.00 0.33
## densidad           92.70  0.34    -0.50 0.52
## ph                  3.03 -0.48    -0.06 0.02
## humedad            77.63  0.14    -0.84 0.55
## materia_organica    7.80 -0.02    -0.02 0.04
## nitrogeno          38.79  0.15    -0.31 0.23
## fosforo            32.80  0.14    -0.41 0.17
## temperatura        21.33  0.16    -0.48 0.12
## precipitacion    1094.56 -0.12    -0.81 6.94
## radiacion           7.29 -0.02    -0.21 0.04
## viento             16.28 -0.11    -0.20 0.08
## altitud           921.94 -0.10    -0.24 4.84
## salud*              3.00  0.00    -1.36 0.04
## 
## $structure
## [1] "'data.frame':\t1000 obs. of  16 variables:\n $ edad            : num  38 19 19 35 8 22 22 16 35 34 ...\n $ altura          : num  12.94 9.06 9.74 10.86 22.06 ...\n $ diametro        : num  29.6 43.5 27.2 39.2 42 ...\n $ area            : num  41 55.7 52.1 43.7 57.2 ...\n $ densidad        : num  48.6 68.5 91.5 43.8 85.7 ...\n $ ph              : num  7.05 6.26 6.92 6.6 6.8 5.79 5.54 6.96 6.43 6.52 ...\n $ humedad         : num  11.5 22.3 46.1 22.2 37 ...\n $ materia_organica: num  5.95 4.46 5.26 5.46 5.63 3.77 4.3 5.56 5.74 6.04 ...\n $ nitrogeno       : num  36.8 29.9 37.8 33.5 39.2 ...\n $ fosforo         : num  20.9 13.4 22.8 22.1 29.3 ...\n $ temperatura     : num  28.8 28.1 21.8 25.5 21 ...\n $ precipitacion   : num  315 341 935 683 726 ...\n $ radiacion       : num  7.31 7.96 7.72 8.95 8.59 5.35 4.51 7.28 6.28 7.08 ...\n $ viento          : num  13 13.3 11.4 13.2 10.7 ...\n $ altitud         : num  931 1271 1199 1462 1042 ...\n $ salud           : chr  \"Estres_Hidrico\" \"Estres_Hidrico\" \"Sano\" \"Plaga\" ..."

Transformar datos a tipo factor

Se ejecuta la función f_convertir_factor() para convertir las variables categóricas a tipo factor que principalmente sirve para identificar frecuencias de clases.

datos <- f_convertir_factor(datos)

Frecuencia de clases

Se construye el diagrama de barra que presenta la frecuencia de clase de la variable dependiente salud. Se observa un balance de clases del 25% para cada estado de salud.

variable_dependiente <- "salud"
f_frecuencia_clase(datos, variable_dependiente)

Desarrollo

Datos de entrenamiento y datos de validación

Se crean los datos de entrenamiento con el 70% y el 30% para datos de validación. Con la función f_visualizar_head_tail_reducido_word(), se visualizan los primeros registros de los datos de entrenamiento con las primeras y últimas cuatro variables, luego los datos de validación. Ver tablas.

particiones <- f_particionar_datos(datos)
datos_entrenamiento <- particiones$datos_entrenamiento
datos_validacion <- particiones$datos_validacion
f_visualizar_head_tail_reducido_word(datos_entrenamiento)

edad

altura

diametro

area

...

radiacion

viento

altitud

salud

39

8.55

41.76

34.76

...

8.91

12.52

1311.86

Sano

8

12.77

21.28

39.71

...

4.43

9.81

1137.25

Enfermedad

28

15.65

35.52

62.01

...

7.44

10.81

1025.44

Sano

26

8.03

25.74

58.24

...

7.56

17.42

1279.77

Estres_Hidrico

10

14

30.49

49.03

...

8.14

9.57

1127.84

Plaga

19

15.65

38.47

45.65

...

6.58

13.64

1263.21

Plaga

...

...

...

...

...

...

...

...

...

22

18.13

38.26

51.2

...

7.27

14.26

1303.45

Plaga

11

10.74

31.97

37.21

...

6.81

14.62

1312.92

Estres_Hidrico

23

18.48

33.4

52.96

...

6.19

11.62

1366.01

Sano

29

14.45

31.16

53.29

...

6.71

11.28

1249.58

Sano

20

13.97

39.55

40.57

...

9.31

17.39

969.86

Estres_Hidrico

30

18.65

32.14

49.15

...

7.26

7.67

1278.28

Sano

Datos de validación:

f_visualizar_head_tail_reducido_word(datos_validacion)

edad

altura

diametro

area

...

radiacion

viento

altitud

salud

38

12.94

29.57

40.96

...

7.31

13

931.45

Estres_Hidrico

22

15.42

30.22

49.81

...

4.51

14.85

1199.17

Enfermedad

16

18.22

31.94

47.82

...

6.05

9.79

1372.14

Sano

16

16.53

38.62

48.81

...

8.94

12.58

984.84

Estres_Hidrico

12

16.12

35.23

48.21

...

9.04

15.07

1179.12

Plaga

8

13.84

27.3

57.21

...

9.13

12.03

1038.3

Estres_Hidrico

...

...

...

...

...

...

...

...

...

17

12.26

37.5

57.4

...

8.14

10.63

958.77

Plaga

34

18.6

25.51

55.42

...

7.67

14

1036.3

Estres_Hidrico

20

13.49

39.31

48.92

...

7.44

14.15

1089.43

Estres_Hidrico

16

12.94

46.27

52.94

...

6.23

10.24

1210.76

Sano

30

18.96

37.49

41.54

...

8.22

13.82

974.52

Estres_Hidrico

24

11.54

19.64

51.45

...

8.22

8.89

1425.47

Estres_Hidrico

Modelo árboles de clasificación

Se ejecuta la función f_construir_arbol_clasificacion() con los datos de entrenamiento, la variable dependiente y el criterio de corte para el árbol que puede ser ‘gini’ para medida de impureza Gini o ‘information’ para entropía. Se crea el modelo modelo_AC_gini con la medida de impureaa Gini.

modelo_AC_gini <- f_construir_arbol_clasificacion(datos_entrenamiento, variable_dependiente, criterio = "gini")
## 
## ====================================
##  ÁRBOL DE CLASIFICACIÓN
## ====================================
## Variable objetivo : salud 
## Criterio          : gini 
## Número clases     : 4 
## Observaciones     : 700 
## 
## Frecuencia de clases:
## 
##     Enfermedad Estres_Hidrico          Plaga           Sano 
##            168            182            171            179 
## ====================================

De manera similar, se crea el modelo modelo_AC_entropia para el modelo árbol de clasificación con medida de impureza entropía.

modelo_AC_entropia <- f_construir_arbol_clasificacion(datos_entrenamiento, variable_dependiente, criterio = "information")
## 
## ====================================
##  ÁRBOL DE CLASIFICACIÓN
## ====================================
## Variable objetivo : salud 
## Criterio          : information 
## Número clases     : 4 
## Observaciones     : 700 
## 
## Frecuencia de clases:
## 
##     Enfermedad Estres_Hidrico          Plaga           Sano 
##            168            182            171            179 
## ====================================

Predicciones de árbol de clasificación

Con el modelo se hacen predicciones usando los datos de validación con la función f_predicciones(), se muestran las predicciones y las probabilidad de cada una de ellas, luego e construye la matriz de confusión y se extraen los estadísticos de evaluación f_matriz_confusion(). Las predicciones muy similares en ambos modelos tanto el que se construye con la media de impureza Gini como el de entropía cruzada.

Predicciones del árbol de clasificación con Gini

predicciones <- f_predicciones(modelo_AC_gini, datos_validacion, variable_dependiente)
f_visualizar_head_tail_reducido_word(predicciones)

Real

Prediccion

Probabilidad

Porcentual

Estres_Hidrico

Estres_Hidrico

0.962

96.2 %

Enfermedad

Enfermedad

0.9162

91.62 %

Sano

Sano

0.9661

96.61 %

Estres_Hidrico

Estres_Hidrico

0.962

96.2 %

Plaga

Plaga

1

100 %

Estres_Hidrico

Estres_Hidrico

0.962

96.2 %

...

...

...

...

Plaga

Plaga

0.9172

91.72 %

Estres_Hidrico

Estres_Hidrico

0.962

96.2 %

Estres_Hidrico

Estres_Hidrico

0.962

96.2 %

Sano

Sano

0.9661

96.61 %

Estres_Hidrico

Estres_Hidrico

0.962

96.2 %

Estres_Hidrico

Estres_Hidrico

0.962

96.2 %

Prediccones de árbol de clasificación con Entropia

predicciones <- f_predicciones(modelo_AC_entropia, datos_validacion, variable_dependiente)
f_visualizar_head_tail_reducido_word(predicciones)

Real

Prediccion

Probabilidad

Porcentual

Estres_Hidrico

Estres_Hidrico

0.962

96.2 %

Enfermedad

Enfermedad

0.9162

91.62 %

Sano

Sano

0.9661

96.61 %

Estres_Hidrico

Estres_Hidrico

0.962

96.2 %

Plaga

Plaga

1

100 %

Estres_Hidrico

Estres_Hidrico

0.962

96.2 %

...

...

...

...

Plaga

Plaga

0.9172

91.72 %

Estres_Hidrico

Estres_Hidrico

0.962

96.2 %

Estres_Hidrico

Estres_Hidrico

0.962

96.2 %

Sano

Sano

0.9661

96.61 %

Estres_Hidrico

Estres_Hidrico

0.962

96.2 %

Estres_Hidrico

Estres_Hidrico

0.962

96.2 %

Matriz de confusión árbol de clasificación con Gini.

Se crea la matriz de confusión con la función f_matriz_confusion() que destaca un 92% de exactitud de predicciones y muy buenos valores en los estadísticos de Kappa y sensibilidad en las predicciones del modelo de árbol de clasificación con medida de impureza tanto para Gini, como para entropía; muy similares los resultados de los dos modelos, esto permite interpretar que ambos modelos tienen muy buena calidad predictiva para estos datos

f_matriz_confusion(modelo_AC_gini, datos_validacion, variable_dependiente)
## Confusion Matrix and Statistics
## 
##                 Reference
## Prediction       Enfermedad Estres_Hidrico Plaga Sano
##   Enfermedad             81              0    10    2
##   Estres_Hidrico          0             66     6    0
##   Plaga                   1              1    60    0
##   Sano                    0              1     3   69
## 
## Overall Statistics
##                                           
##                Accuracy : 0.92            
##                  95% CI : (0.8833, 0.9481)
##     No Information Rate : 0.2733          
##     P-Value [Acc > NIR] : < 2.2e-16       
##                                           
##                   Kappa : 0.8932          
##                                           
##  Mcnemar's Test P-Value : NA              
## 
## Statistics by Class:
## 
##                      Class: Enfermedad Class: Estres_Hidrico Class: Plaga
## Sensitivity                     0.9878                0.9706       0.7595
## Specificity                     0.9450                0.9741       0.9910
## Pos Pred Value                  0.8710                0.9167       0.9677
## Neg Pred Value                  0.9952                0.9912       0.9202
## Prevalence                      0.2733                0.2267       0.2633
## Detection Rate                  0.2700                0.2200       0.2000
## Detection Prevalence            0.3100                0.2400       0.2067
## Balanced Accuracy               0.9664                0.9724       0.8752
##                      Class: Sano
## Sensitivity               0.9718
## Specificity               0.9825
## Pos Pred Value            0.9452
## Neg Pred Value            0.9912
## Prevalence                0.2367
## Detection Rate            0.2300
## Detection Prevalence      0.2433
## Balanced Accuracy         0.9772

Matriz de confusión árbol de clasificación con Entropía.

f_matriz_confusion(modelo_AC_entropia, datos_validacion, variable_dependiente)
## Confusion Matrix and Statistics
## 
##                 Reference
## Prediction       Enfermedad Estres_Hidrico Plaga Sano
##   Enfermedad             81              0    10    2
##   Estres_Hidrico          0             66     6    0
##   Plaga                   1              1    60    0
##   Sano                    0              1     3   69
## 
## Overall Statistics
##                                           
##                Accuracy : 0.92            
##                  95% CI : (0.8833, 0.9481)
##     No Information Rate : 0.2733          
##     P-Value [Acc > NIR] : < 2.2e-16       
##                                           
##                   Kappa : 0.8932          
##                                           
##  Mcnemar's Test P-Value : NA              
## 
## Statistics by Class:
## 
##                      Class: Enfermedad Class: Estres_Hidrico Class: Plaga
## Sensitivity                     0.9878                0.9706       0.7595
## Specificity                     0.9450                0.9741       0.9910
## Pos Pred Value                  0.8710                0.9167       0.9677
## Neg Pred Value                  0.9952                0.9912       0.9202
## Prevalence                      0.2733                0.2267       0.2633
## Detection Rate                  0.2700                0.2200       0.2000
## Detection Prevalence            0.3100                0.2400       0.2067
## Balanced Accuracy               0.9664                0.9724       0.8752
##                      Class: Sano
## Sensitivity               0.9718
## Specificity               0.9825
## Pos Pred Value            0.9452
## Neg Pred Value            0.9912
## Prevalence                0.2367
## Detection Rate            0.2300
## Detection Prevalence      0.2433
## Balanced Accuracy         0.9772

Visualizar árbol medición Gini

Con la función f_visualizar_arbol() se muestra el árbol construido para ambos modelos con las reglas de decisión muy similares.

f_visualizar_arbol(modelo_AC_gini, arbol_rf = 1)

Visualizar árbol medición Gini

f_visualizar_arbol(modelo_AC_entropia, arbol_rf = 1)

Variables importantes

Al ejecutar la función f_variables_importantes() se identifican las variables importantes de ambos modelos de arboles de clasificación tanto Gini como entropía; los resultados muy similares. Las variables importantes sirven para tal vez construir modelos de clasificación únicamente con variables de mayor importancia y descartar aquellas con no lo son.

f_variables_importantes(modelo_AC_gini)
f_variables_importantes(modelo_AC_entropia)

Ambos modelos construidos con Gini y la entropía presentaron métricas de desempeño iguales. Este comportamiento sugiere que ambos criterios seleccionaron particiones muy similares durante la construcción del árbol, produciendo estructuras equivalentes y, por consecuencia, predicciones prácticamente iguales. El Índice de Gini y la entropía suelen generar árboles con capacidades predictivas semejantes cuando las variables independientes presentan una adecuada capacidad discriminatoria. OPENAI, 2026.

Modelos random forest

Con la función f_construir_random_forest(), se construye el modelo de clasificación random forest para estos datos de entrenamiento.

modelo_RF <- f_construir_random_forest (datos_entrenamiento, variable_dependiente)
## 
## ====================================
##  RANDOM FOREST
## ====================================
## Variable objetivo : salud 
## Número clases     : 4 
## Variables predictoras : 15 
## Número árboles    : 500 
## mtry              : 3 
## nodesize          : 1 
## Observaciones     : 700 
## 
## Frecuencia de clases:
## 
##     Enfermedad Estres_Hidrico          Plaga           Sano 
##            168            182            171            179 
## ====================================
modelo_RF
## 
## Call:
##  randomForest(formula = formula_modelo, data = datos, ntree = ntree,      mtry = mtry, nodesize = nodesize, importance = importance) 
##                Type of random forest: classification
##                      Number of trees: 500
## No. of variables tried at each split: 3
## 
##         OOB estimate of  error rate: 3%
## Confusion matrix:
##                Enfermedad Estres_Hidrico Plaga Sano class.error
## Enfermedad            166              0     2    0 0.011904762
## Estres_Hidrico          0            177     5    0 0.027472527
## Plaga                   3              9   158    1 0.076023392
## Sano                    0              0     1  178 0.005586592

Modelo de regresion logística multinomial

Con la función f_crear_modelo_regresion_logistica(), se construye el modelo de regesi[on log[istica mutinomial para estos datos de entrenamiento

modelo_RLM <- f_crear_modelo_regresion_logistica(datos_entrenamiento, variable_dependiente, tipo = "multinomial")
## 
## ====================================
##  REGRESIÓN LOGÍSTICA
## ====================================
## Tipo              : multinomial 
## Balanceo          : ninguno 
## Variable objetivo : salud 
## Clases            : 4 
## Observaciones     : 700 
## ====================================
modelo_RLM
## Call:
## nnet::multinom(formula = formula_modelo, data = datos, trace = FALSE)
## 
## Coefficients:
##                (Intercept)        edad    altura  diametro      area   densidad
## Estres_Hidrico   -45.65940 -0.28404882 0.1661789 0.8045574 0.3603032 -0.1764841
## Plaga            -65.08501 -0.23531648 0.1500737 0.9378896 0.3072153 -0.2338230
## Sano            -177.33182 -0.05520279 0.1282231 0.9796089 0.7779446  0.4591420
##                      ph   humedad materia_organica nitrogeno   fosforo
## Estres_Hidrico 16.95535 -2.603995         7.016107 1.0933369 0.3778258
## Plaga          18.18338 -2.133196         7.028195 0.9864327 0.4379453
## Sano           14.57589 -1.274269         7.629560 1.4119544 0.8532902
##                temperatura precipitacion radiacion    viento      altitud
## Estres_Hidrico  0.78098953 -0.0527986186  4.447960 -2.844328 -0.023269277
## Plaga           0.48862049 -0.0273734307  4.521123 -2.865899 -0.024752963
## Sano           -0.05126545 -0.0001272965  3.415186 -4.128011 -0.005198504
## 
## Residual Deviance: 66.01011 
## AIC: 162.0101

Evaluación del modelo

Se ejecuta la función f_evaluar_modelos() para evaluar los modelos con los datos de validación

Ambos modelos de árboles de clasificación construidos con Gini y la entropía presentaron métricas de desempeño iguales.

Por otra parte, el modelo de regresión logística presenta estadísticos que permiten interpretar que ofrecen mejor calidad predictiva que los árboles de decisión.

Y el modelo de clasificación random forest de acuerdo al estadístico accuracy ofrece mejor calidad predictiva que los otros modelos.

evaluacion <- f_evaluar_modelos(
  
  modelos = list(
    modelo_AC_gini,
    modelo_AC_entropia,
    modelo_RF,
    modelo_RLM
    
  ),
  
  datos_validacion = datos_validacion,
  
  variable_dependiente = variable_dependiente,
  
  nombres_modelos = c(
    "Arbol Gini",
    "Arbol Entropia",
    "Random Forest",
    "Reg Logística"
  )
)

evaluacion

Interpretación del caso de estudio

Este caso de estudio, cumple con el objetivo de construir, evaluar y comparar modelos predictivos de clasificación. Los modelos construidos fueron árboles de clasificación con medidas de impureza Gini y entropía respectivamente, el modelo bosques aleatorios y el modelo de regresión logística de tipo multinomial.

El caso de estudio utiliza y carga librerías y funciones para la adecuada ejecución.

Se particionaron los datos con el 70% para datos de entrenamiento y 30% para datos de validación.

El modelo que resultó tener mejor calidad predictiva para estos datos de los aquí descritos fue el de random forest con un exactitud predictiva aproximada del 97% y muy buenos estadísticos como sensibilidad, Kappa y F1-score.

Al final, todos los modelos cumplen con la expectativa del sobrepasar el 70% en el estadístico de exactitud al principio declarado en el objetivo del caso de estudio.

Este caso de estudio le sirve de ayuda al lector para recrear los datos y los modelos aquó presentqdos y construidos, las funciones puede servir para clasificar otros conjuntos de datos.