Contexto

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 .

Objetivo

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.

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

Cargar funciones

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)

Cargar datos

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

Estadísticos descriptivos

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

Frecuencia de clases

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)

Dersarrollo

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

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

Estandarizar datos de entrenamiento

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 datos de validación

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

Modelo SVM Kernel lineal

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

Modelo SVM Kernel polinomial grado 2

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

Modelo SVM Kernel polinomial grado 3

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

Modelo SVM kernel radial

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 random forest

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 árboles de regresión criterio Gini

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 árboles de regresión criterio entropía

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 regresión logística multinomial

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

Evaluación de modelos

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

Interpretación del caso