Se trata de clasificar niveles de felicidad de un conjunto de datos en donde las personas tienen ciertas características y todas ellas definen una variable dependiente llamada felicidad.
Corresponde a un estudio simulado sobre el nivel de felicidad de estudiantes de nivel superior en México, el caso de estudio trata de analizar la influencia de diversos factores personales, académicos y socioeconómicos sobre el bienestar de los estudiantes. Cada registro representa la información de un estudiante y fue diseñado con fines didácticos para ilustrar la construcción y evaluación de modelos de clasificación supervisada
Son 3000 registros del conjunto de datos. Los datos se encuentran en el enlce 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_felicidad_estudiantes_mexico_3000.csv .
Este caso de estudio se puede ver de manera digital el el servicio rpubs.com en https://rpubs.com/rpizarrog/1445820
Las variables independientes son:
La variable dependiente es felicidad es categórica y tiene tres valores de acuerdo a nivel de felicidad:
Las funciones preparadas para la adecuada ejecución de este caso de estudio se encuentran en github.com en PENDIENTE .
Crear, comparar y evaluar modelos de clasificación KNN, Ada Boost, y modelo de Bayes con datos de felicidad de las personas.
El caso de estudio también compara otros modelos previamente utilizados con los mimos datos de entrenamiento, estos modelos a comparar son el de regresión logística multinomial, árboles de clasificación, bosques aleatorios y los modelos de máquinas de soporte vectorial kernel lineal, polinomial y radial.
Al final el caso de estudio evalúa cada modelo y describe el mejor modelo de clasificación de los aquí presentando para con estos datos.
Los datos de entrenamiento serán el 70% de los datos y los datos de validación serán el complemento del 30% de los 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 SVM varios kernels y Bayes
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 KNN Ada Boost BAYES Y SVM ARBOLES RANDOM FOREST regresion logistica multinomial DATOS FELICIDAD.R" # local
# url <- "PENDIENTE.R"
source(url)
url <- "https://raw.githubusercontent.com/rpizarrog/Libro-Aprendizaje-Automatico.-Casos-de-Estudio-con-R-y-Python/refs/heads/main/datos/dataset_felicidad_estudiantes_mexico_3000.csv"
datos <- f_cargar_datos(url)
f_visualizar_head_tail_reducido_word(datos)
edad | salud | sueno | estres | ... | estudio | autoestima | optimismo | felicidad |
|---|---|---|---|---|---|---|---|---|
28 | 2 | 1 | 5 | ... | 39 | 2 | 10 | 0 |
24 | 1 | 1 | 2 | ... | 39 | 7 | 4 | 0 |
25 | 10 | 5 | 1 | ... | 18 | 6 | 2 | 1 |
19 | 7 | 2 | 6 | ... | 34 | 9 | 2 | 1 |
24 | 2 | 9 | 5 | ... | 9 | 1 | 4 | 1 |
30 | 5 | 2 | 4 | ... | 28 | 3 | 6 | 1 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
24 | 9 | 10 | 5 | ... | 21 | 7 | 10 | 2 |
21 | 10 | 9 | 3 | ... | 39 | 6 | 10 | 2 |
23 | 9 | 7 | 1 | ... | 20 | 9 | 10 | 2 |
26 | 8 | 10 | 3 | ... | 28 | 8 | 9 | 2 |
24 | 10 | 7 | 4 | ... | 20 | 10 | 9 | 2 |
18 | 7 | 9 | 4 | ... | 36 | 7 | 9 | 2 |
f_describir_datos(datos)
## $describe
## vars n mean sd median trimmed mad min max range
## edad 1 3000 24.05 3.76 24.0 24.07 4.45 18 30 12
## salud 2 3000 6.54 3.01 7.0 6.76 4.45 1 10 9
## sueno 3 3000 6.26 2.92 7.0 6.41 2.97 1 10 9
## estres 4 3000 4.77 2.91 4.0 4.62 2.97 1 10 9
## ingreso 5 3000 7372.19 3253.63 7870.5 7536.42 4019.33 1000 11997 10997
## familia 6 3000 6.33 2.93 7.0 6.50 2.97 1 10 9
## amigos 7 3000 8.83 4.70 10.0 9.08 5.93 0 15 15
## recreacion 8 3000 14.84 7.65 16.0 15.30 8.90 0 25 25
## promedio 9 3000 83.32 11.91 85.0 83.93 14.83 60 100 40
## estudio 10 3000 24.20 10.44 25.0 24.51 13.34 5 40 35
## autoestima 11 3000 6.22 2.93 7.0 6.37 2.97 1 10 9
## optimismo 12 3000 6.32 2.88 7.0 6.49 2.97 1 10 9
## felicidad 13 3000 1.00 0.82 1.0 1.00 1.48 0 2 2
## skew kurtosis se
## edad -0.04 -1.22 0.07
## salud -0.45 -1.16 0.05
## sueno -0.31 -1.19 0.05
## estres 0.31 -1.16 0.05
## ingreso -0.34 -1.13 59.40
## familia -0.36 -1.15 0.05
## amigos -0.36 -1.15 0.09
## recreacion -0.40 -1.09 0.14
## promedio -0.34 -1.13 0.22
## estudio -0.19 -1.19 0.19
## autoestima -0.31 -1.20 0.05
## optimismo -0.36 -1.12 0.05
## felicidad 0.00 -1.50 0.01
##
## $structure
## [1] "'data.frame':\t3000 obs. of 13 variables:\n $ edad : num 28 24 25 19 24 30 23 21 21 24 ...\n $ salud : num 2 1 10 7 2 5 4 6 8 10 ...\n $ sueno : num 1 1 5 2 9 2 5 1 7 7 ...\n $ estres : num 5 2 1 6 5 4 2 4 8 6 ...\n $ ingreso : num 5012 4582 3615 6635 11299 ...\n $ familia : num 4 4 7 10 10 7 3 6 5 3 ...\n $ amigos : num 4 0 10 8 11 8 7 12 4 15 ...\n $ recreacion: num 23 17 8 25 18 14 5 8 7 2 ...\n $ promedio : num 66 72 69 62 72 100 89 64 95 63 ...\n $ estudio : num 39 39 18 34 9 28 29 18 39 12 ...\n $ autoestima: num 2 7 6 9 1 3 5 10 5 3 ...\n $ optimismo : num 10 4 2 2 4 6 9 6 10 3 ...\n $ felicidad : num 0 0 1 1 1 1 1 0 1 0 ..."
Se construye el diagrama de barra que presenta la frecuencia de clase de la variable dependiente felicidad. Se observa un balance de clases de aproximadamente %33% para cada valor de la clase dependiente. Es un conjunto de datos con clases balanceadas. La variable felicidad se convierte a tipo factor.
variable_dependiente <- "felicidad"
datos$felicidad<- factor(datos$felicidad)
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 | salud | sueno | estres | ... | estudio | autoestima | optimismo | felicidad |
|---|---|---|---|---|---|---|---|---|
23 | 7 | 6 | 4 | ... | 13 | 7 | 7 | 1 |
29 | 8 | 7 | 8 | ... | 11 | 10 | 7 | 1 |
21 | 9 | 7 | 1 | ... | 25 | 9 | 9 | 2 |
28 | 4 | 2 | 4 | ... | 18 | 1 | 6 | 0 |
30 | 5 | 1 | 1 | ... | 11 | 8 | 2 | 0 |
29 | 2 | 9 | 9 | ... | 16 | 6 | 9 | 1 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
23 | 9 | 7 | 2 | ... | 34 | 10 | 3 | 2 |
25 | 3 | 3 | 10 | ... | 22 | 7 | 7 | 0 |
23 | 1 | 2 | 8 | ... | 27 | 7 | 2 | 0 |
20 | 1 | 5 | 5 | ... | 36 | 1 | 1 | 0 |
18 | 10 | 10 | 3 | ... | 26 | 10 | 5 | 2 |
28 | 9 | 3 | 3 | ... | 28 | 4 | 10 | 1 |
Datos de validación:
f_visualizar_head_tail_reducido_word(datos_validacion)
edad | salud | sueno | estres | ... | estudio | autoestima | optimismo | felicidad |
|---|---|---|---|---|---|---|---|---|
28 | 2 | 1 | 5 | ... | 39 | 2 | 10 | 0 |
24 | 1 | 1 | 2 | ... | 39 | 7 | 4 | 0 |
30 | 5 | 2 | 4 | ... | 28 | 3 | 6 | 1 |
30 | 3 | 9 | 2 | ... | 15 | 9 | 9 | 1 |
27 | 2 | 2 | 8 | ... | 40 | 3 | 5 | 0 |
26 | 10 | 7 | 4 | ... | 33 | 9 | 8 | 1 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
19 | 9 | 10 | 3 | ... | 7 | 9 | 10 | 2 |
26 | 10 | 10 | 3 | ... | 30 | 7 | 8 | 2 |
23 | 9 | 4 | 3 | ... | 23 | 9 | 10 | 2 |
19 | 8 | 9 | 4 | ... | 35 | 8 | 8 | 2 |
21 | 10 | 9 | 3 | ... | 39 | 6 | 10 | 2 |
18 | 7 | 9 | 4 | ... | 36 | 7 | 9 | 2 |
Se estandarizan los datos de entrenamiento y con los estadísticos de media y desviación estándar de estos, se estandarizan posteriormente los datos de validación.
Se ejecuta la función f_estandarizar_entrenamiento() que regresa un resultado con varios elementos, datos estandarizados, la media y desviación estándar que se calcularon para estandarizar los datos y las variables que fueron estandarizadas; con estos argumentos se deben estandarizar por consiguiente los datos de validación.
Los datos de entrenamiento se presentan con cuatro posiciones decimales habiendo llamado la función f_redondear_datos().
resultado_estandarizacion <- f_estandarizar_entrenamiento(datos_entrenamiento, variable_dependiente = "felicidad")
datos_entrenamiento <- resultado_estandarizacion$datos_estandarizados
f_visualizar_head_tail_reducido_word(f_redondear_datos(datos_entrenamiento, 4))
edad | salud | sueno | estres | ... | estudio | autoestima | optimismo | felicidad |
|---|---|---|---|---|---|---|---|---|
-0.2946 | 0.1564 | -0.0853 | -0.2506 | ... | -1.0791 | 0.2586 | 0.2171 | 1 |
1.2936 | 0.4874 | 0.2585 | 1.1381 | ... | -1.2719 | 1.2796 | 0.2171 | 1 |
-0.824 | 0.8185 | 0.2585 | -1.2922 | ... | 0.0773 | 0.9393 | 0.9156 | 2 |
1.0289 | -0.8368 | -1.4606 | -0.2506 | ... | -0.5973 | -1.7833 | -0.1322 | 0 |
1.5583 | -0.5057 | -1.8044 | -1.2922 | ... | -1.2719 | 0.599 | -1.5294 | 0 |
1.2936 | -1.4989 | 0.9462 | 1.4853 | ... | -0.79 | -0.0817 | 0.9156 | 1 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
-0.2946 | 0.8185 | 0.2585 | -0.945 | ... | 0.9447 | 1.2796 | -1.1801 | 2 |
0.2348 | -1.1679 | -1.1168 | 1.8325 | ... | -0.2118 | 0.2586 | 0.2171 | 0 |
-0.2946 | -1.83 | -1.4606 | 1.1381 | ... | 0.2701 | 0.2586 | -1.5294 | 0 |
-1.0887 | -1.83 | -0.4291 | 0.0966 | ... | 1.1374 | -1.7833 | -1.8787 | 0 |
-1.6181 | 1.1496 | 1.29 | -0.5978 | ... | 0.1737 | 1.2796 | -0.4815 | 2 |
1.0289 | 0.8185 | -1.1168 | -0.5978 | ... | 0.3664 | -0.7623 | 1.2649 | 1 |
Estandarizar ahora los datos de validación recuperando la media, la desviación estándar y las variables independientes numéricas. Los datos se presentan con cuatro posiciones decimales.
datos_validacion <- f_estandarizar_validacion(datos = datos_validacion,
medias = resultado_estandarizacion$medias,
desviaciones = resultado_estandarizacion$desviaciones,
variables_estandarizadas = resultado_estandarizacion$variables_estandarizadas
)
f_visualizar_head_tail_reducido_word(f_redondear_datos(datos_validacion, 4))
edad | salud | sueno | estres | ... | estudio | autoestima | optimismo | felicidad |
|---|---|---|---|---|---|---|---|---|
1.0289 | -1.4989 | -1.8044 | 0.0966 | ... | 1.4265 | -1.443 | 1.2649 | 0 |
-0.0299 | -1.83 | -1.8044 | -0.945 | ... | 1.4265 | 0.2586 | -0.8308 | 0 |
1.5583 | -0.5057 | -1.4606 | -0.2506 | ... | 0.3664 | -1.1026 | -0.1322 | 1 |
1.5583 | -1.1679 | 0.9462 | -0.945 | ... | -0.8864 | 0.9393 | 0.9156 | 1 |
0.7642 | -1.4989 | -1.4606 | 1.1381 | ... | 1.5229 | -1.1026 | -0.4815 | 0 |
0.4995 | 1.1496 | 0.2585 | -0.2506 | ... | 0.8483 | 0.9393 | 0.5664 | 1 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
-1.3534 | 0.8185 | 1.29 | -0.5978 | ... | -1.6573 | 0.9393 | 1.2649 | 2 |
0.4995 | 1.1496 | 1.29 | -0.5978 | ... | 0.5592 | 0.2586 | 0.5664 | 2 |
-0.2946 | 0.8185 | -0.773 | -0.5978 | ... | -0.1154 | 0.9393 | 1.2649 | 2 |
-1.3534 | 0.4874 | 0.9462 | -0.2506 | ... | 1.041 | 0.599 | 0.5664 | 2 |
-0.824 | 1.1496 | 0.9462 | -0.5978 | ... | 1.4265 | -0.0817 | 1.2649 | 2 |
-1.6181 | 0.1564 | 0.9462 | -0.2506 | ... | 1.1374 | 0.2586 | 0.9156 | 2 |
Ahora crear el modelo SVM con kernel lineal con los datos de entrenamiento mandando ejecutar la función previamente codificada llamada f_crear_modelo_SVM_lineal().
modelo_SVM_lineal <- f_crear_modelo_SVM_lineal(datos_entrenamiento, variable_dependiente, C = 0.01)
##
## ====================================
## MODELO SVM LINEAL
## ====================================
## Kernel : linear
## Cost (C): 0.01
## Vectores de soporte: 856
## ====================================
modelo_SVM_lineal
##
## Call:
## svm(formula = formula_modelo, data = datos, kernel = "linear", cost = C,
## probability = TRUE, scale = FALSE)
##
##
## Parameters:
## SVM-Type: C-classification
## SVM-Kernel: linear
## cost: 0.01
##
## Number of Support Vectors: 856
Se construye el SVM tipo polinomial de grado 2 mediante la función f_crear_modelo_SVM_polinomial().
modelo_SVM_poly2 <- f_crear_modelo_SVM_polinomial(datos_entrenamiento,
variable_dependiente = "felicidad", C = 0.1, grado = 2
)
##
## ====================================
## MODELO SVM POLINOMIAL
## ====================================
## Kernel : polynomial
## Cost (C): 0.1
## Grado: 2
## Coef0: 1
## Gamma: 0.08333333
## Vectores de soporte: 685
## ====================================
modelo_SVM_poly2
##
## Call:
## svm(formula = formula_modelo, data = datos, kernel = "polynomial",
## degree = grado, cost = C, coef0 = coef0, gamma = gamma, probability = TRUE,
## scale = FALSE)
##
##
## Parameters:
## SVM-Type: C-classification
## SVM-Kernel: polynomial
## cost: 0.1
## degree: 2
## coef.0: 1
##
## Number of Support Vectors: 685
Se construye el SVM tipo polinomial de grado 3 mediante la función f_crear_modelo_SVM_polinomial().
modelo_SVM_poly3 <- f_crear_modelo_SVM_polinomial(datos_entrenamiento,
variable_dependiente = "felicidad", C = 0.1, grado = 3
)
##
## ====================================
## MODELO SVM POLINOMIAL
## ====================================
## Kernel : polynomial
## Cost (C): 0.1
## Grado: 3
## Coef0: 1
## Gamma: 0.08333333
## Vectores de soporte: 567
## ====================================
modelo_SVM_poly3
##
## Call:
## svm(formula = formula_modelo, data = datos, kernel = "polynomial",
## degree = grado, cost = C, coef0 = coef0, gamma = gamma, probability = TRUE,
## scale = FALSE)
##
##
## Parameters:
## SVM-Type: C-classification
## SVM-Kernel: polynomial
## cost: 0.1
## degree: 3
## coef.0: 1
##
## Number of Support Vectors: 567
Se construye el SVM tipo radial mediante la función f_crear_modelo_SVM_radial().
modelo_SVM_radial <- f_crear_modelo_SVM_radial(datos_entrenamiento,
variable_dependiente = "felicidad", C = 0.1
)
##
## ====================================
## MODELO SVM RADIAL
## ====================================
## Kernel : radial
## Cost (C): 0.1
## Gamma: 0.08333333
## Vectores de soporte: 1286
## ====================================
modelo_SVM_radial
##
## Call:
## svm(formula = formula_modelo, data = datos, kernel = "radial", cost = C,
## gamma = gamma, probability = TRUE, scale = FALSE)
##
##
## Parameters:
## SVM-Type: C-classification
## SVM-Kernel: radial
## cost: 0.1
##
## Number of Support Vectors: 1286
modelo_RF <- f_construir_random_forest(datos_entrenamiento, variable_dependiente, semilla=2025)
##
## ====================================
## RANDOM FOREST
## ====================================
## Variable objetivo : felicidad
## Número clases : 3
## Variables predictoras : 12
## Número árboles : 500
## mtry : 3
## nodesize : 1
## Observaciones : 2100
##
## Frecuencia de clases:
##
## 0 1 2
## 694 691 715
## ====================================
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: 8.19%
## Confusion matrix:
## 0 1 2 class.error
## 0 630 64 0 0.092219020
## 1 86 584 21 0.154848046
## 2 0 1 714 0.001398601
modelo_AC_gini <- f_construir_arbol_clasificacion(datos_entrenamiento, variable_dependiente, criterio = "gini")
##
## ====================================
## ÁRBOL DE CLASIFICACIÓN
## ====================================
## Variable objetivo : felicidad
## Criterio : gini
## Número clases : 3
## Observaciones : 2100
##
## Frecuencia de clases:
##
## 0 1 2
## 694 691 715
## ====================================
modelo_AC_gini
## n= 2100
##
## node), split, n, loss, yval, (yprob)
## * denotes terminal node
##
## 1) root 2100 1385 2 (0.330476190 0.329047619 0.340476190)
## 2) salud< -0.009143546 908 374 0 (0.588105727 0.351321586 0.060572687)
## 4) optimismo< 0.04241426 527 142 0 (0.730550285 0.258064516 0.011385199) *
## 5) optimismo>=0.04241426 381 198 1 (0.391076115 0.480314961 0.128608924)
## 10) estres>=-0.0770422 203 87 0 (0.571428571 0.403940887 0.024630542)
## 20) amigos< -0.2898923 104 26 0 (0.750000000 0.250000000 0.000000000) *
## 21) amigos>=-0.2898923 99 43 1 (0.383838384 0.565656566 0.050505051) *
## 11) estres< -0.0770422 178 77 1 (0.185393258 0.567415730 0.247191011)
## 22) amigos< 0.9868092 144 51 1 (0.215277778 0.645833333 0.138888889) *
## 23) amigos>=0.9868092 34 10 2 (0.058823529 0.235294118 0.705882353) *
## 3) salud>=-0.009143546 1192 532 2 (0.134228188 0.312080537 0.553691275)
## 6) sueno< -0.2572135 374 186 1 (0.304812834 0.502673797 0.192513369)
## 12) familia< 0.4015933 231 113 1 (0.441558442 0.510822511 0.047619048)
## 24) ingreso< -0.1390761 128 50 0 (0.609375000 0.390625000 0.000000000)
## 48) estres>=-0.0770422 78 18 0 (0.769230769 0.230769231 0.000000000) *
## 49) estres< -0.0770422 50 18 1 (0.360000000 0.640000000 0.000000000) *
## 25) ingreso>=-0.1390761 103 35 1 (0.233009709 0.660194175 0.106796117) *
## 13) familia>=0.4015933 143 73 1 (0.083916084 0.489510490 0.426573427)
## 26) amigos< 0.3484585 71 21 1 (0.154929577 0.704225352 0.140845070) *
## 27) amigos>=0.3484585 72 21 2 (0.013888889 0.277777778 0.708333333) *
## 7) sueno>=-0.2572135 818 230 2 (0.056234719 0.224938875 0.718826406)
## 14) amigos< -0.5026759 154 68 1 (0.201298701 0.558441558 0.240259740) *
## 15) amigos>=-0.5026759 664 113 2 (0.022590361 0.147590361 0.829819277)
## 30) promedio< -0.2497095 141 72 2 (0.099290780 0.411347518 0.489361702)
## 60) estres>=-0.0770422 53 18 1 (0.226415094 0.660377358 0.113207547) *
## 61) estres< -0.0770422 88 25 2 (0.022727273 0.261363636 0.715909091) *
## 31) promedio>=-0.2497095 523 41 2 (0.001912046 0.076481836 0.921606119) *
modelo_AC_entropia <- f_construir_arbol_clasificacion(datos_entrenamiento, variable_dependiente, criterio = "information")
##
## ====================================
## ÁRBOL DE CLASIFICACIÓN
## ====================================
## Variable objetivo : felicidad
## Criterio : information
## Número clases : 3
## Observaciones : 2100
##
## Frecuencia de clases:
##
## 0 1 2
## 694 691 715
## ====================================
modelo_AC_entropia
## n= 2100
##
## node), split, n, loss, yval, (yprob)
## * denotes terminal node
##
## 1) root 2100 1385 2 (0.330476190 0.329047619 0.340476190)
## 2) salud< -0.009143546 908 374 0 (0.588105727 0.351321586 0.060572687)
## 4) ingreso< 0.2526411 574 167 0 (0.709059233 0.285714286 0.005226481)
## 8) optimismo< 0.04241426 358 63 0 (0.824022346 0.175977654 0.000000000) *
## 9) optimismo>=0.04241426 216 104 0 (0.518518519 0.467592593 0.013888889)
## 18) recreacion< -0.7169662 84 21 0 (0.750000000 0.250000000 0.000000000) *
## 19) recreacion>=-0.7169662 132 52 1 (0.371212121 0.606060606 0.022727273) *
## 5) ingreso>=0.2526411 334 179 1 (0.380239521 0.464071856 0.155688623)
## 10) autoestima< 0.4288064 219 108 0 (0.506849315 0.456621005 0.036529680)
## 20) promedio< 0.3396819 142 53 0 (0.626760563 0.373239437 0.000000000) *
## 21) promedio>=0.3396819 77 30 1 (0.285714286 0.610389610 0.103896104) *
## 11) autoestima>=0.4288064 115 60 1 (0.139130435 0.478260870 0.382608696)
## 22) sueno< 0.08661103 50 19 1 (0.300000000 0.620000000 0.080000000) *
## 23) sueno>=0.08661103 65 25 2 (0.015384615 0.369230769 0.615384615) *
## 3) salud>=-0.009143546 1192 532 2 (0.134228188 0.312080537 0.553691275)
## 6) sueno< -0.2572135 374 186 1 (0.304812834 0.502673797 0.192513369)
## 12) familia< 0.4015933 231 113 1 (0.441558442 0.510822511 0.047619048)
## 24) ingreso< -0.1390761 128 50 0 (0.609375000 0.390625000 0.000000000)
## 48) estres>=-0.0770422 78 18 0 (0.769230769 0.230769231 0.000000000) *
## 49) estres< -0.0770422 50 18 1 (0.360000000 0.640000000 0.000000000) *
## 25) ingreso>=-0.1390761 103 35 1 (0.233009709 0.660194175 0.106796117) *
## 13) familia>=0.4015933 143 73 1 (0.083916084 0.489510490 0.426573427)
## 26) estres>=-0.0770422 63 18 1 (0.174603175 0.714285714 0.111111111) *
## 27) estres< -0.0770422 80 26 2 (0.012500000 0.312500000 0.675000000) *
## 7) sueno>=-0.2572135 818 230 2 (0.056234719 0.224938875 0.718826406)
## 14) amigos< -0.5026759 154 68 1 (0.201298701 0.558441558 0.240259740) *
## 15) amigos>=-0.5026759 664 113 2 (0.022590361 0.147590361 0.829819277)
## 30) promedio< -0.2497095 141 72 2 (0.099290780 0.411347518 0.489361702)
## 60) estres>=-0.0770422 53 18 1 (0.226415094 0.660377358 0.113207547) *
## 61) estres< -0.0770422 88 25 2 (0.022727273 0.261363636 0.715909091) *
## 31) promedio>=-0.2497095 523 41 2 (0.001912046 0.076481836 0.921606119) *
modelo_RLM <- f_crear_modelo_regresion_logistica(datos_entrenamiento, variable_dependiente, tipo = "multinomial")
##
## ====================================
## REGRESIÓN LOGÍSTICA
## ====================================
## Tipo : multinomial
## Balanceo : ninguno
## Variable objetivo : felicidad
## Clases : 3
## Observaciones : 2100
## ====================================
modelo_RLM
## Call:
## nnet::multinom(formula = formula_modelo, data = datos, trace = FALSE)
##
## Coefficients:
## (Intercept) edad salud sueno estres ingreso familia amigos
## 1 1021.9439 -1.10476 405.2033 255.8051 -253.2807 262.2900 255.8361 275.8805
## 2 -581.6034 14.99698 859.4028 565.8609 -488.6069 534.9705 512.6792 558.2091
## recreacion promedio estudio autoestima optimismo
## 1 267.9381 267.6665 130.3840 259.0919 251.1773
## 2 537.8255 574.3287 236.0703 482.9373 514.4354
##
## Residual Deviance: 0.01287561
## AIC: 52.01288
resultado <- f_evaluar_modelos(
modelos = list(
modelo_RLM,
modelo_AC_gini,
modelo_AC_entropia,
modelo_RF,
modelo_SVM_lineal,
modelo_SVM_poly2,
modelo_SVM_poly3,
modelo_SVM_radial
),
datos_validacion = datos_validacion,
variable_dependiente = "felicidad",
nombres_modelos = c(
"RLM",
"AR Gini",
"AR Entropía",
"RF",
"SVM Lineal",
"SVM Poly 2",
"SVM Poly 3",
"SVM Radial"
)
)
resultado