Se trata de un conjunto de datos bivariados con dos variables de interés, un promedio de publicaciones anuales como variable independiente y un valor numérico que representa un indicador de calidad de una recopilación simulada de registros de mil universidades.
Implementar y evaluar un modelo de regresión polinomial de primer, segundo tercer y quinto grado con datos bivariados que estiman la calidad de universidades.
Se cargan las librerías adecuadas para este caso de estudio, se debe contemplar haber instalado con anticipación estas librerías en el entorno de trabajo de R y R Studio, se indican con comentarios la instalación de las librerías y su carga con la función library().
# 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")
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
library(broom) # tidy modelos
library(lmtest) # Durbin-Watson
library(car) # VIF y diagnóstico
library(stats) # lm, shapiro.test
library(patchwork) # Graficos organizados en columnas renglones
# Tablas compatibles con Word
library(flextable)
library(officer)
Se cargan las funciones que se encuentra en el archivo de la ruta de github.com https://raw.githubusercontent.com/rpizarrog/Libro-Aprendizaje-Automatico.-Casos-de-Estudio-con-R-y-Python/refs/heads/main/R%20MarkDown/funciones/funciones%20para%20modelos%20polinomiales%20RP.R. Algunas de estas funciones se reutilizan del caso de regresión lineal simple y es aquí en donde entra se toma ventaja de organizar por funciones que se pueden reutilizar.
source("https://raw.githubusercontent.com/rpizarrog/Libro-Aprendizaje-Automatico.-Casos-de-Estudio-con-R-y-Python/refs/heads/main/R%20MarkDown/funciones/funciones%20para%20modelos%20polinomiales%20RP.R")
Se cargan los datos con la función f_cargar_datos() indicando la ruta en donde están estos, https://raw.githubusercontent.com/rpizarrog/Libro-Aprendizaje-Automatico.-Casos-de-Estudio-con-R-y-Python/refs/heads/main/datos/publicacones_calidad_universidades.csv.
datos <- f_cargar_datos("https://raw.githubusercontent.com/rpizarrog/Libro-Aprendizaje-Automatico.-Casos-de-Estudio-con-R-y-Python/refs/heads/main/datos/publicacones_calidad_universidades.csv")
Se presentan en modo tabla los primeros y últimos registros del conjunto de datos original con la función f_visualizar_head_tail_reducido_word().
f_visualizar_head_tail_reducido_word(datos)
id_universidad | publicaciones_anuales | indice_calidad |
|---|---|---|
1 | 228 | 82.8 |
2 | 571 | 100 |
3 | 441 | 99.91 |
4 | 361 | 95.05 |
5 | 98 | 69.37 |
6 | 98 | 70.93 |
7 | 40 | 60.11 |
8 | 520 | 100 |
9 | 363 | 93.11 |
10 | 426 | 92.83 |
... | ... | ... |
991 | 481 | 100 |
992 | 418 | 100 |
993 | 167 | 74.31 |
994 | 356 | 93.43 |
995 | 220 | 79.28 |
996 | 59 | 57.64 |
997 | 551 | 100 |
998 | 86 | 65.92 |
999 | 570 | 100 |
1000 | 270 | 83.96 |
Con la función ya conocida f_describir_datos() se presentan los estadístico; se destaca que la media de las publicaciones es alrededor de 296.70 con desviación estándar de 173.50 y la media aritmética de el indicador de calidad es aproximado a 84.67 con una desviación estándar de 14.78.
resultado <- f_describir_datos(datos)
resultado$describe
cat(resultado$structure)
## 'data.frame': 1000 obs. of 3 variables:
## $ id_universidad : num 1 2 3 4 5 6 7 8 9 10 ...
## $ publicaciones_anuales: num 228 571 441 361 98 98 40 520 363 426 ...
## $ indice_calidad : num 82.8 100 99.9 95 69.4 ...
Ahora siguiendo la metodología se parten los datos originales en 70% datos de entrenamiento y 30% datos de validación, usando la función f_particionar_datos():
datos_entrenamiento 70%
datos_validacion 30%
particion <- f_particionar_datos(datos)
datos_entrenamiento <- particion$datos_entrenamiento
datos_validacion <- particion$datos_validacion
Se presentan los primeros y últimos seis registros de los datos de entrenamiento:
f_visualizar_head_tail_reducido_word(datos_entrenamiento, n=6)
id_universidad | publicaciones_anuales | indice_calidad |
|---|---|---|
733 | 401 | 93.9 |
633 | 309 | 90.62 |
993 | 167 | 74.31 |
294 | 219 | 77.62 |
557 | 85 | 63.93 |
623 | 225 | 85.6 |
... | ... | ... |
195 | 207 | 78.92 |
985 | 438 | 97.88 |
511 | 370 | 95.02 |
875 | 20 | 53.57 |
710 | 410 | 100 |
84 | 43 | 63.71 |
Ahora los datos de validación
f_visualizar_head_tail_reducido_word(datos_validacion, n=6)
id_universidad | publicaciones_anuales | indice_calidad |
|---|---|---|
1 | 228 | 82.8 |
7 | 40 | 60.11 |
11 | 17 | 52.92 |
13 | 500 | 100 |
16 | 114 | 73.07 |
21 | 369 | 96.6 |
... | ... | ... |
986 | 300 | 85.95 |
991 | 481 | 100 |
992 | 418 | 100 |
995 | 220 | 79.28 |
996 | 59 | 57.64 |
1000 | 270 | 83.96 |
Se construyen cuatro modelos polinomiales, uno de primer orden, segundo, tercer y quinto orden o grado de la ecuación polinomial; las variables a usar de cada modelo serán modelo_RP1, modelo_RP2, modelo_RP4, modelo_RP5 ; se utiliza la función f_construir_modelo() que crear los cuatro modelos; esta funci[on queda preparada para construir modelos de regresión polinomial de cualquier orden.
modelo_RP1 <- f_construir_modelo(datos_entrenamiento, "publicaciones_anuales", "indice_calidad", 1)
modelo_RP2 <- f_construir_modelo(datos_entrenamiento, "publicaciones_anuales", "indice_calidad", 2)
modelo_RP3 <- f_construir_modelo(datos_entrenamiento, "publicaciones_anuales", "indice_calidad", 3)
modelo_RP5 <- f_construir_modelo(datos_entrenamiento, "publicaciones_anuales", "indice_calidad", 5)
Se presenta en la función f_matriz_dispersión_modelos_tendencia() las cuatro tendencias de los cuatro modelos construidos. Los gráficos de dispersión de la figura, indican que para estos datos los modelos polinomiales ofrecen mejor significado en las predicciones dado que la curva mejora estas estimaciones en lugar del modelo de tendencia de linea recta del modelo de primer orden.
Con los valores de r-square los modelos polinomiales de segundo, tercer y quinto orden garantizan que la variable publicaciones anuales representa aproximadamente el 97% de la variabilidad del indicador de calidad. Los modelos cumplen con el supuesto de linealidad.
modelos <- list(modelo_RP1, modelo_RP2, modelo_RP3, modelo_RP5)
nombres <- c(
"Grado 1",
"Grado 2",
"Grado 3",
"Grado 5"
)
f_matriz_dispersion_modelos_tendencia(
modelos,
datos_entrenamiento,
"publicaciones_anuales",
"indice_calidad",
nombres
)
Para verificar la homocedasticidad de los residuos de los diferentes modelos, se ejecuta la función f_matriz_verificar_homocedasticidad(), esta función, recibe los modelos en un arreglo, los datos de entrenamiento, los nombres de las variables de interés dependiente e independiente y en nombre de cada modelo; luego visualiza gráficos de homocedasticidad que se observan en la figura en en la que hay mayor certeza de que los modelos polinomiales de de segundo, tercer y quinto orden, ofrecen mejor calidad con respecto al postulado de homocedasticidad.
modelos <- list(modelo_RP1, modelo_RP2, modelo_RP3, modelo_RP5)
nombres <- c(
"Lineal",
"Polinomial grado 2",
"Polinomial grado 3",
"Polinomial grado 5"
)
f_matriz_verificar_homocedasticidad(
modelos,
datos_entrenamiento,
"publicaciones_anuales",
"indice_calidad",
nombres
)
La prueba de normalidad para los cuatro modelos polinomiales construidos se hace haciendo construyendo el histograma de los residuos el diagrama qq-plot para ver la normalidad de los residuos y hace la prueba de Shapiro-Wilks; la función que recibe los cuatro modelos y hace la prueba de normalidad es f_matriz_verificar_normalidad(); esta recibe los argumentos adecuados y verifica la normalidad de los residuos de cada modelo.
En la gráfica se observa la valoración de los cuatro modelos, y a pesar de que la visualización gráfica del histograma y el diagrama qq-plot puede tal vez apreciarse comportamientos casi normales en los residuos, la prueba de Shapiro-Wilk proporciona evidencia estadística robusta sobre la normalidad de los residuos, encontrándose que ningún modelo cumple con el supuesto de normalidad en los residuales.
Esta función se ejecuta a continuación:
modelos <- list(modelo_RP1, modelo_RP2, modelo_RP3, modelo_RP5)
nombres <- c(
"Grado 1",
"Grado 2",
"Grado 3",
"Grado 5"
)
f_matriz_verificar_normalidad(
modelos,
datos_entrenamiento,
"publicaciones_anuales",
"indice_calidad",
nombres
)
Se ejecuta la función f_matriz_verificar_independencia_residuos() que recibe los argumentos de los cuatro modelos polinomiales previamente construidos y calcula la prueba Durbin-Watson, además visualiza que no existe alguna posible correlación de los residuales en todos los modelos.
La prueba Durbin-Watson calcula valores muy cercanos a 2 en todos los modelos, lo que se interpreta que los residuales no tienen correlación alguna los que garantiza que los modelos cumplen con el supuesto de independencia de los residuales.
f_matriz_verificar_independencia_residuos(
modelos,
datos_entrenamiento,
"publicaciones_anuales",
"indice_calidad"
)
Se extraen de cada modelos los coeficientes que sirven para construir las ecuaciones matemáticas que permiten deducir las predicciones de acuerdo al modelo polinomial de primer orden, segundo, tercer y quinto grado.
Se ejecuta para ello la función f_ecuaciones_modelos() la cual extrae a partir de los modelos, los coeficientes.
f_ecuaciones_modelos(modelos, nombres)
##
## ============================
## Grado 1
## ============================
##
## Coeficientes:
## (Intercept)
## 60.6639
## poly(publicaciones_anuales, 1, raw = TRUE)
## 0.0802
##
## Ecuación:
## ŷ = 60.6639 + 0.0802 x^1
##
## ============================
## Grado 2
## ============================
##
## Coeficientes:
## (Intercept)
## 51.5297
## poly(publicaciones_anuales, 2, raw = TRUE)1
## 0.1736
## poly(publicaciones_anuales, 2, raw = TRUE)2
## -0.0002
##
## Ecuación:
## ŷ = 51.5297 + 0.1736 x^1 - 2e-04 x^2
##
## ============================
## Grado 3
## ============================
##
## Coeficientes:
## (Intercept)
## 50.9752
## poly(publicaciones_anuales, 3, raw = TRUE)1
## 0.1844
## poly(publicaciones_anuales, 3, raw = TRUE)2
## -0.0002
## poly(publicaciones_anuales, 3, raw = TRUE)3
## 0.0000
##
## Ecuación:
## ŷ = 50.9752 + 0.1844 x^1 - 2e-04 x^2 + 0 x^3
##
## ============================
## Grado 5
## ============================
##
## Coeficientes:
## (Intercept)
## 47.9821
## poly(publicaciones_anuales, 5, raw = TRUE)1
## 0.2958
## poly(publicaciones_anuales, 5, raw = TRUE)2
## -0.0013
## poly(publicaciones_anuales, 5, raw = TRUE)3
## 0.0000
## poly(publicaciones_anuales, 5, raw = TRUE)4
## 0.0000
## poly(publicaciones_anuales, 5, raw = TRUE)5
## 0.0000
##
## Ecuación:
## ŷ = 47.9821 + 0.2958 x^1 - 0.0013 x^2 + 0 x^3 - 0 x^4 + 0 x^5
La calidad y eficiencia predictiva de los modelos de regresión se valora calculando los estadísticos r-square y RMSE; r-square mide la representatividad que tiene variable independiente sobre al variable dependiente en cuanto a la variabilidad de esta última y RMSE identifica que tanto se acerca o se desvían las predicciones con respecto a los valores reales.
Para valorar con estos estadísticos, se requieren los datos de validación y los modelos participantes.
f_evaluar_modelos_varios(modelos, datos_validacion, "indice_calidad", "publicaciones_anuales", nombres)
Los valores de RMSE son similares en los modelos polinomiales de segundo, tercer y quinto orden.
El caso de estudio de la implementación de modelos de regresión polinomial, se puede recrear con el enlace rpubs.com del espacio del autor https://rpubs.com/rpizarrog/1414315
El caso arroja que el mejor modelos en término de rendimiento y con los estadísticos r-square y RMSE fue el polinomial de quinto grado, sin embargo cualquiera de los modelos polinomiales de segundo, tercer y quinto orden tienen un valor similar en RMSE.
Todos los modelos cumplen con los supuestos de linealidad, homocedasticidad, e independencia de residuos, el supuesto de normalidad de los residuos no se cumple en ningún modelo.