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
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.
# 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)
# 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)
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)
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 |
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\" ..."
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)
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)
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 |
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
## ====================================
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 <- 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 % |
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 % |
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
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
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)
f_visualizar_arbol(modelo_AC_entropia, arbol_rf = 1)
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.
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
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
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
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.