Grupo 1. Proyecto final Modelos Estadísticos Multivariados
Author
Gina Buvoli, Linda Herrera, Andres Vargas
Resumen
Este artículo presenta un estudio detallado del Análisis de Componentes Principales (PCA) y la Regresión Logística Multinomial (MLR), dos técnicas estadísticas fundamentales en el campo de la ciencia de datos. El objetivo es proporcionar un análisis práctico para cada tema. En el caso de PCA, se analizan datos de de señales obtenidas de un torno CNC durante un mes de trabajo que reporta medidas como presión y temperatura a lo largo de un día. Para la MLR, se realiza un análisis práctico utilizando un conjunto de datos que incluye información para la estimación de niveles de obesidad en individuos de México, Perú y Colombia, basado en sus hábitos alimenticios y condición física. Los datos contienen 17 atributos y 2.111 registros, etiquetados con la variable de clase NObesity (Nivel de Obesidad). Las conclusiones de este estudio buscan sustentar y explicar con datos la utilidad y aplicación de estas técnicas estadísticas.
Introducción
El análisis de componentes principales (PCA) y la regresión logística multinomial (MLR) son técnicas estadísticas ampliamente utilizadas en el análisis de datos multivariantes. PCA es una técnica de reducción de dimensionalidad que permite identificar patrones en los datos y expresar los datos de alta dimensión en un espacio de menor dimensión sin perder información significativa. Por otro lado, MLR es una extensión de la regresión logística utilizada para predecir el resultado de una variable categórica con más de dos categorías.
El uso de PCA es común en áreas donde los datos de alta dimensión son frecuentes, como en la manufactura y en la monitorización de máquinas. Por ejemplo, los datos recopilados de un torno CNC durante un mes de trabajouna máquina que mide presión, temperatura y otras variables a lo largo del tiempo pueden ser analizados con PCA para identificar las principales fuentes de variabilidad.
La MLR se aplica en situaciones donde se necesita clasificar observaciones en más de dos categorías. Un caso práctico es la clasificación del nivel de obesidad de diferentes personas a nivel mundial, con el fin de aplicar medidas que ayuden a prevenir enfermedades como diabetes, cancer, entre otras.
Objetivos
Análisis de Componentes Principales (PCA):
Identificar Patrones en el Funcionamiento del Torno CNC: Detectar cualquier comportamiento anómalo o patrones en los datos que puedan indicar problemas operativos.
Reducción de Dimensionalidad: Simplificar el conjunto de datos de señales, eliminando redundancias y resaltando las variables más importantes que explican la mayor parte de la variabilidad en los datos.
Regresión Logística Multinomial (MLR):
Realizar un análisis de clasificación de niveles de obesidad utilizando MLR.
Determinar las características más importantes que influyen en la clasificación de los niveles de obesidad.
Evaluar el rendimiento del modelo y su capacidad para predecir correctamente las categorías de obesidad.
Marco Teórico
1. Análisis de Componentes Principales
El Análisis de Componentes Principales (PCA) es una técnica de reducción de dimensionalidad utilizada en estadística y aprendizaje automático. Su objetivo principal es transformar un conjunto de variables posiblemente correlacionadas en un conjunto de valores de variables linealmente no correlacionadas llamadas componentes principales. Este proceso se realiza de manera que la primera componente principal tenga la mayor varianza posible (es decir, captura la mayor parte de la variabilidad en los datos), seguida de la segunda componente, y así sucesivamente.
Utilidad de PCA
Reducción de Dimensionalidad: Simplifica conjuntos de datos grandes y complejos, reduciendo el número de variables a considerar sin perder demasiada información.
Eliminación de Redundancia: Al transformar variables correlacionadas en componentes no correlacionadas, se elimina la redundancia en los datos.
Visualización de Datos: Permite la visualización de datos de alta dimensionalidad en 2D o 3D, facilitando la comprensión de estructuras subyacentes y patrones en los datos.
Preprocesamiento de Datos: Es común en el preprocesamiento de datos antes de aplicar algoritmos de aprendizaje automático para mejorar el rendimiento y reducir el tiempo de cómputo.
Aplicaciones de PCA
Reconocimiento de Patrones y Visión por Computadora: Para la reducción de dimensionalidad en imágenes y videos.
Análisis Genómico: En biología y medicina para reducir la dimensionalidad de datos genéticos.
Finanzas: Para la simplificación de portafolios de activos y análisis de riesgos.
Compresión de Datos: Para reducir el tamaño de los datos manteniendo la mayor cantidad de información posible.
Control de Calidad y Mantenimiento Predictivo: En industrias manufactureras para el monitoreo y análisis de señales de máquinas.
\[
Y_j=α_{j1}X_1+α_{j2}X_2+⋯+α_{jK}X_K=α^T_jX
\] la cual tiene la varianza más grande entre todas las siguientes. Aquí, \(α_j=(α_{j1},α_{j12},…,α_{j1K})^T\) y es un vector con módulo 1 (o sea, ortonomal). Es decir, debe cumplir la condición:
\[
α^T_jα_j=\sum _{k=1}^Kα^2_{jk}=1
\]
2. Regresión Logística Multinomial
Note
En el texto a continuación se encontrarán fragmentos tomados directamente del trabajo de grado de Mariano Brage Escalona para optar su título en Matemáticas de la Universiad de Lagunas, titulado: Análisis de datos categóricos: regresión logística y multinomial (julio, 2020)
La regresión logística multinomial es una extensión de la regresión logística que se utiliza cuando la variable dependiente tiene tres o más categorías.
En la regresión logística multinomial, se modelan las probabilidades de pertenecer a cada categoría en comparación con una categoría de referencia.
Diferencias entre la Regresión Logística Binomial y la Regresión Logística Multinomial
Las principales diferencias con la regresión logística binomial son:
Variable Dependiente: En la regresión logística multinomial, la variable dependiente tiene más de dos categorías, mientras que en la regresión logística binomial, solo tiene dos categorías.
Interpretación de Coeficientes: En la regresión logística multinomial, se comparan las categorías con una categoría de referencia, lo que implica interpretaciones diferentes de los coeficientes en comparación con la regresión logística binomial.
Formulación del modelo
Sea \(Y\) una variable respuesta categórica con \(J\) categorías y sean \(\pi_1\), \(\pi_2\), \(\ldots\), \(\pi_J\) las probabilidades asociadas, tal que:
\[\sum_{j=1}^{J} \pi_j = 1 \\\]
Este modelo se construye tomando como respuesta base una de las categorías, por ejemplo, la última, \(J\), y se define un modelo logit con respecto a ella:
El modelo tiene \(J - 1\) ecuaciones con sus propios parámetros.
Cada uno de estos parámetros expresa el efecto con respecto a la categoría de referencia. Cuando \(J = 2\), se simplifica a una única ecuación, obteniendo el modelo logístico binomial que ya conocemos.
Utilizando la ecuación anterior y fijando dos categorías cualesquiera, \(a\) y \(b\), se tiene que:
Así se obtiene la ecuación logit de la categoría \(a\) con respecto a una categoría \(b\) cualquiera, \(\alpha =\alpha_a - \alpha_b\), \(\beta_1 = \beta_{1a} - \beta_{1b}\), \(\ldots\) y \(\beta_k = \beta_{ka} - \beta_{kb}\).
Los parámetros del modelo se estiman utilizando el método de máxima verosimilitud como en el caso de regresión logística. Después de calcular estos parámetros, se pueden calcular las probabilidades predichas de cada categoría despejando \(\pi_j\) de la ecuación anterior.
La probabilidad de pertenecer a un sector específico según el modelo de Regresión Logística Multinomial se determina a través de la fórmula que proporciona las probabilidades de pertenencia a las clases.
Se calcula el valor de la variable dependiente para cada clase y se utiliza el modelo logit para obtener las probabilidades predichas de pertenencia a cada categoría. Finalmente, se despejan las probabilidades de pertenencia a las clases basadas en los coeficientes del modelo.
Probabilidad de pertenencia a una clase específica
\(\pi_{in}\) es la probabilidad de pertenencia del caso \(i\) a la clase \(n\)
\(Z_{in}\) es el valor de la variable dependiente \(Z\) correspondiente a la clase \(n\) en el caso \(i\).
\(\beta_{nj}\) es el coeficiente de la variable independiente \(j\) para la clase \(n\).
\(X_{ij}\) es el valor de la variable independiente \(j\) para el caso \(i\).
Regresión Multinomial Ordinal
Un caso particular que se utiliza cuando las categorías de la variable respuesta tienen orden y cumplen la prueba de líneas paralelas, es decir, que el comportamiento de las variables independientes en cada categoría de la variable \(Y\) es igual.
Esta regresión proporciona modelos más sencillos de interpretar que el modelo multinomial. Esto se debe a que la solución de los coeficientes \(\beta_i\) es la misma para todas las ecuaciones y la única diferencia es el coeficiente \(\alpha\).
El modelo de regresión ordinal, a diferencia del multinomial, acumula las probabilidades de las categorías anteriores y no utiliza la última categoría como referencia, pues la probabilidad acumulada es igual a 1. De esta forma, el modelo de regresión ordinal puede ser escrito como:
Dada una muestra de tamaño \(n\) de las variables \(Y_{ji}\) y \(X_k\) con \(i = 1\), \(\ldots\), \(n\) tamaño de la muestra, \(j = 1\), \(\ldots\), \(J\) número de categorías de \(Y\) y \(k = 1\), \(\ldots\), \(K\) número de variables regresoras \(X\), se puede definir en función de estas los valores de \(Z\) y \(\pi\). La función de verosimilitud del modelo \(V\) queda definida como:
\[ V = \prod_{i=1}^{n} p_{1i}^{Y_{1i}} \cdots p_{Ji}^{1-\sum_{j=1}^{J-1} Y_{ji}}\]
De igual modo que en regresión logística, se busca maximizar la verosimilitud, o de forma equivalente, minimizar la distancia \(L\):
\[ L = -2 \ln(V)\]
Para evaluar la significación de cada una de las variables, principalmente se utilizan el estadístico de Wald y el estadístico condicional de razón de verosimilitud.
Es decir, se realiza el siguiente contraste de hipótesis:
Utilizando el estadístico de Wald que sigue una distribución \(\chi^2_1\), se puede contrastar si cada uno de los estimadores de los parámetros son significativamente distintos de 0. Una variable se considera significativa si \(Z_{Wald}> \chi^2_{1;\alpha}\), es decir, se rechaza la hipótesis nula.
Significación de cada variable regresora
Este contraste de hipótesis estudia qué ocurre en el modelo si se elimina una variable regresora del modelo, es decir, se evalúa si los coeficientes que acompañan a dicha variable son nulos. Para ello, se calcula la distancia del modelo eliminando la variable regresora \(X_i\), \(L_{-i}\). Realizando la diferencia entre las distancias del modelo sin la correspondiente variable \(X_i\) y el modelo final, $L_f$, obteniendo un estadístico que se distribuye como una \(\chi^2_{(k-1)(J-1)}\), siendo \(k\) el número de variables regresoras. Se rechaza la hipótesis nula si \(p(\chi^2_2 > L_{-i} - L_f)\).
Contraste de bondad de ajuste del modelo
Se puede probar que ninguna variable del modelo es significativa utilizando la razón de verosimilitudes que se utilizó en el capítulo anterior, que consiste en la diferencia entre las distancias inicial y final. Este estadístico sigue una distribución \(\chi^2_{k(J-1)}\), siendo \(k\) el número de variables regresoras del modelo. El p-valor de este test vendrá dado por\(p(\chi^2_{k(J-1)} > L_0 - L_f)\), siendo \(k\) el número de variables regresoras. Con esta prueba se estudia si todos los coeficientes \(\beta\) son nulos.
Medidas tipo \(R^2\)
La calidad de ajuste del modelo multinomial se puede medir utilizando los coeficientes de determinación pseudo \(R^2\).
Se utilizan los pseudo \(R^2_{MF}\), \(R^2_{CS}\) y \(R^2_N\). Para comparar modelos multinomiales con diferente número de variables regresoras se introducen coeficientes pseudo \(R^2\) ajustados. El más conocido es el de Mc-Fadden (Pando y San Martín (2004) [8]), definido como:
\(Adj - R^2_{MF} = 1 - \frac{0.5L_f + k + 1}{0.5L_0 + 1}, \quad\) siendo \(k\), el número de variables regresoras.
Tasa de clasificaciones correctas
Otra forma de cuantificar la bondad de ajuste del modelo consiste en comparar los resultados obtenidos por este frente a los observados, obteniendo así una matriz de clasificación. De forma que el número de individuos de cada categoría bien clasificados se contabiliza en la diagonal de esta matriz. Calculando la traza de la matriz, dividiendo por el número total y multiplicando por 100, se obtiene el porcentaje de aciertos o también llamado tasa de clasificaciones correctas.
Limitaciones de la regresión multinomial
Interpretación de coeficientes: La interpretación de los coeficientes en la regresión multinomial puede ser más compleja que en otros modelos, ya que se comparan múltiples categorías con una categoría de referencia, lo que puede dificultar la comprensión de la influencia de las variables independientes en cada categoría.
Requisitos de linealidad: La regresión multinomial asume una relación lineal entre las variables independientes y la variable dependiente, lo que puede no ser realista en todos los casos y limitar la capacidad del modelo para capturar relaciones no lineales.
Sensibilidad a la categorización: La elección de la categoría de referencia puede afectar los resultados y la interpretación del modelo, lo que requiere cuidado al seleccionar la categoría base para evitar sesgos en las conclusiones.
A pesar de estas limitaciones, la regresión multinomial sigue siendo una herramienta valiosa para analizar variables categóricas con múltiples categorías y proporciona información útil para comprender las relaciones entre las variables independientes y la variable dependiente en un contexto multinomial.
Metodología
1. Análisis de Componentes Principales (PCA)
Recopilación de Datos: Se recolectarán datos de una máquina que registra varias medidas como presión, temperatura y otras variables a lo largo de un día.
Preprocesamiento de Datos: Se limpiarán y normalizarán los datos para asegurar que todas las variables estén en la misma escala y sean comparables.
Aplicación de PCA: Se calcularán los componentes principales utilizando la matriz de covarianza de los datos normalizados. También se interpretarán los componentes principales en términos de las variables originales.
Análisis de Resultados: Se analizarán los componentes principales para identificar las principales fuentes de variabilidad. Se crearán gráficos para visualizar los componentes principales y su relación con las variables originales.
Utilidad Posterior del Análisis
El análisis mediante PCA puede tener varias utilidades posteriores:
Mantenimiento Predictivo: Utilizar los componentes principales para predecir fallos antes de que ocurran, permitiendo el mantenimiento proactivo de la máquina.
Facilitar la Visualización y Monitoreo: Permitir a los ingenieros y técnicos visualizar el estado de la máquina en 2D o 3D, facilitando la identificación rápida de posibles problemas.
Optimización del Rendimiento: Identificar parámetros operativos que afecten significativamente el rendimiento del torno CNC, permitiendo ajustes y mejoras en el proceso.
Monitoreo Continuo: Implementar un sistema de monitoreo continuo basado en los componentes principales para alertar sobre cualquier desviación del comportamiento normal de la máquina.
Análisis Histórico y Trazabilidad: Mantener un registro histórico de los datos procesados, facilitando la trazabilidad y análisis retrospectivo en caso de fallos.
2. Regresión Logística Multinomial (MLR)
Recopilación de Datos: Se obtendrán datos que contiene información para estimar los niveles de obesidad en individuos de México, Perú y Colombiael.
Preprocesamiento de Datos: Se limpiarán y codificarán las variables categóricas. Se dividirán los datos en conjuntos de entrenamiento y prueba.
Construcción del Modelo: Se ajustará un modelo de regresión logística multinomial utilizando el conjunto de entrenamiento. Se seleccionarán las características más relevantes utilizando métodos de selección de características.
Evaluación del Modelo: Se evaluará el rendimiento del modelo utilizando métricas como la precisión, el recall y la puntuación F1.
Análisis de Resultados: Se interpretarán los coeficientes del modelo para entender la influencia de cada característica en la clasificación. Se generarán gráficos y tablas para visualizar los resultados.
Casos Prácticos
1. Análisis de Componentes Principales (PCA)
Librerias
Loading required package: ggplot2
Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
Attaching package: 'ade4'
The following object is masked from 'package:FactoMineR':
reconst
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.2 ✔ readr 2.1.4
✔ forcats 1.0.0 ✔ stringr 1.5.1
✔ lubridate 1.9.2 ✔ tibble 3.2.1
✔ purrr 1.0.1 ✔ tidyr 1.3.0
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
Attaching package: 'EnvStats'
The following objects are masked from 'package:stats':
predict, predict.lm
Registered S3 method overwritten by 'quantmod':
method from
as.zoo.data.frame zoo
corrplot 0.92 loaded
Attaching package: 'textshape'
The following object is masked from 'package:lubridate':
duration
The following object is masked from 'package:dplyr':
combine
The following object is masked from 'package:purrr':
flatten
The following object is masked from 'package:tibble':
column_to_rownames
Attaching package: 'psych'
The following object is masked from 'package:outliers':
outlier
The following objects are masked from 'package:ggplot2':
%+%, alpha
Iniciaremos leyendo los datos de un archivo CSV.
# Leer los datos del archivo datos <-read.csv("https://drive.google.com/uc?id=1fn7RTwUVFeXwa-8TYnHGYbxCm-hIQjrh", header =TRUE)knitr::kable (head(datos))
time
driveLoad.EJE.X
driveLoad.EJE.Z
driveLoad.EJE.U
driveLoad.EJE.W
driveLoad.CABEZAL
actFeedRate.VELO.Cabezal
actFeedRate.VELO.Eje.X
actFeedRate.VELO.Eje.Z
actFeedRate.VELO.Eje.U
actFeedRate.VELO.Eje.W
cmdFeedRate.VELO.Cabezal
actSpeed_Cabezal
01.10.2023 13:32:46.000000
0.885544
1.059860
1.043600
1.77577
26.15470
102478.000
-33.5687
-11.0669
30.1035
22.6673
100800
284.662000
01.10.2023 13:32:56.000000
0.885544
1.059860
1.043600
1.77577
26.15470
102478.000
-33.5687
-11.0669
30.1035
22.6673
100800
284.662000
01.10.2023 13:33:06.000000
1.413420
0.915699
1.217590
1.77460
23.19210
52120.400
34.9625
17.3966
0.0000
0.0000
100800
144.779000
01.10.2023 13:33:16.000000
1.413420
0.915699
1.217590
1.77460
23.19210
52120.400
34.9625
17.3966
0.0000
0.0000
100800
144.779000
01.10.2023 13:33:26.000000
0.767860
0.150078
0.800358
1.18003
4.36691
329.965
0.0000
0.0000
0.0000
0.0000
100800
0.916569
01.10.2023 13:33:36.000000
2.084710
1.386930
1.217560
1.17059
43.70920
94897.400
-31.7185
-33.3408
-29.9724
-13.3515
100800
263.604000
Breve descripción de los datos:
knitr::kable(describe(datos))
vars
n
mean
sd
median
trimmed
mad
min
max
range
skew
kurtosis
se
time*
1
518400
2.592005e+05
1.496493e+05
2.592005e+05
2.592005e+05
1.921450e+05
1.00000e+00
5.18400e+05
5.183990e+05
0.0000000
-1.2000069
207.8462974
driveLoad.EJE.X
2
518363
1.241059e+00
4.963294e-01
1.106420e+00
1.196917e+00
5.040247e-01
5.04364e-01
2.32992e+00
1.825556e+00
0.6036782
-0.8218979
0.0006894
driveLoad.EJE.Z
3
518363
9.215821e-01
5.169796e-01
9.687040e-01
9.179519e-01
6.100691e-01
1.29139e-01
1.98340e+00
1.854261e+00
-0.0519099
-1.2036028
0.0007181
driveLoad.EJE.U
4
518363
1.086253e+00
1.352032e-01
1.078930e+00
1.091687e+00
1.577486e-01
6.24487e-01
1.40520e+00
7.807130e-01
-0.2170217
-0.5394510
0.0001878
driveLoad.EJE.W
5
518363
1.551459e+00
2.863846e-01
1.620290e+00
1.544392e+00
3.943271e-01
9.12188e-01
3.63530e+00
2.723112e+00
0.0421726
-1.3672902
0.0003978
driveLoad.CABEZAL
6
518363
2.524803e+01
1.083301e+01
2.701370e+01
2.620514e+01
5.835217e+00
0.00000e+00
4.69896e+01
4.698960e+01
-0.8458550
0.5572283
0.0150464
actFeedRate.VELO.Cabezal
7
518363
6.920164e+04
3.945343e+04
9.425500e+04
7.367641e+04
1.222552e+04
-9.69458e+00
1.02542e+05
1.025517e+05
-0.6937238
-1.1618736
54.7983850
actFeedRate.VELO.Eje.X
8
518363
2.445828e-01
2.897126e+01
0.000000e+00
1.315471e-01
4.718864e+01
-4.47583e+01
3.93632e+01
8.412150e+01
0.0064481
-1.7087483
0.0402393
actFeedRate.VELO.Eje.Z
9
518363
6.144407e-01
1.778376e+01
0.000000e+00
1.189596e+00
2.310988e+01
-3.87537e+01
3.78874e+01
7.664110e+01
-0.2118239
-0.7669251
0.0247005
actFeedRate.VELO.Eje.U
10
518363
3.113340e-02
1.889538e+01
0.000000e+00
4.248180e-02
1.764057e+00
-3.02185e+01
3.96278e+01
6.984630e+01
-0.0492337
-0.5822513
0.0262445
actFeedRate.VELO.Eje.W
11
518363
1.824750e-02
1.585174e+01
0.000000e+00
-1.480633e+00
1.975312e+01
-2.72862e+01
2.60441e+02
2.877272e+02
0.7915455
0.2357255
0.0220171
cmdFeedRate.VELO.Cabezal
12
518363
1.008000e+05
0.000000e+00
1.008000e+05
1.008000e+05
0.000000e+00
1.00800e+05
1.00800e+05
0.000000e+00
NaN
NaN
0.0000000
actSpeed_Cabezal
13
518363
1.922268e+02
1.095929e+02
2.618190e+02
2.046567e+02
3.396192e+01
-2.69294e-02
2.84840e+02
2.848669e+02
-0.6937237
-1.1618738
0.1522177
Podemos observar que existen variables con una escala muy superior al resto, por ejemplo, la variable ‘actFeedRate.VELO.Cabezal’, eso lo consideraremos posteriormente dado que será necesario escalar los datos para no dar más peso a estas variables.
# Ver el resumen completo del dataset para entender la distribución de los datos incluyendo NA knitr::kable(summary(datos))
time
driveLoad.EJE.X
driveLoad.EJE.Z
driveLoad.EJE.U
driveLoad.EJE.W
driveLoad.CABEZAL
actFeedRate.VELO.Cabezal
actFeedRate.VELO.Eje.X
actFeedRate.VELO.Eje.Z
actFeedRate.VELO.Eje.U
actFeedRate.VELO.Eje.W
cmdFeedRate.VELO.Cabezal
actSpeed_Cabezal
Length:518400
Min. :0.5044
Min. :0.1291
Min. :0.6245
Min. :0.9122
Min. : 0.00
Min. : -9.69
Min. :-44.7583
Min. :-38.7537
Min. :-30.21850
Min. :-27.28620
Min. :100800
Min. : -0.02693
Class :character
1st Qu.:0.7974
1st Qu.:0.5304
1st Qu.:0.9933
1st Qu.:1.2649
1st Qu.:23.19
1st Qu.: 32840.20
1st Qu.:-31.9336
1st Qu.:-10.6563
1st Qu.: -0.11203
1st Qu.:-13.35150
1st Qu.:100800
1st Qu.: 91.22290
Mode :character
Median :1.1064
Median :0.9687
Median :1.0789
Median :1.6203
Median :27.01
Median : 94255.00
Median : 0.0000
Median : 0.0000
Median : 0.00000
Median : 0.00000
Median :100800
Median :261.81900
NA
Mean :1.2411
Mean :0.9216
Mean :1.0862
Mean :1.5515
Mean :25.25
Mean : 69201.64
Mean : 0.2446
Mean : 0.6144
Mean : 0.03113
Mean : 0.01825
Mean :100800
Mean :192.22678
NA
3rd Qu.:1.5306
3rd Qu.:1.3464
3rd Qu.:1.2032
3rd Qu.:1.7735
3rd Qu.:30.96
3rd Qu.:102415.00
3rd Qu.: 31.7226
3rd Qu.: 16.6624
3rd Qu.: 1.40449
3rd Qu.: 11.07560
3rd Qu.:100800
3rd Qu.:284.48700
NA
Max. :2.3299
Max. :1.9834
Max. :1.4052
Max. :3.6353
Max. :46.99
Max. :102542.00
Max. : 39.3632
Max. : 37.8874
Max. : 39.62780
Max. :260.44100
Max. :100800
Max. :284.84000
NA
NA’s :37
NA’s :37
NA’s :37
NA’s :37
NA’s :37
NA’s :37
NA’s :37
NA’s :37
NA’s :37
NA’s :37
NA’s :37
NA’s :37
Dado que vemos que todas las columnas tienen 37 datos \(NA's\), procederemos a verificar cuales son estos datos y si es pertinente eliminar esas observaciones. La presencia de datos nulos puede causar varios problemas técnicos al realizar PCA, como la incapacidad para Calcular la Matriz de Covarianza; PCA se basa en la matriz de covarianza (o matriz de correlación) de las variables del conjunto de datos. La matriz de covarianza es esencial para determinar los autovalores y autovectores que definen las componentes principales. La presencia de datos nulos impide el cálculo correcto de esta matriz, ya que las operaciones matemáticas con valores nulos no son definidas.
# Contar NA en cada columna na_count <-sapply(datos, function(x) sum(is.na(x))) # Ver el conteo de NA print(na_count)
# Eliminar posibles valores NA datos <-na.omit(datos) # Asegurarse de que todas las columnas son numéricas datos[] <-lapply(datos, as.numeric)
Warning in lapply(datos, as.numeric): NAs introducidos por coerción
Antes de proceder con el Análisis de Componentes Principales (PCA), es crucial asegurarnos de que no existan columnas en nuestro conjunto de datos que tengan varianza cero. La razón detrás de esto es que PCA se basa en la varianza de las variables para identificar las componentes principales que capturan la mayor parte de la variabilidad en los datos.
Una columna con varianza cero contiene el mismo valor constante para todas las observaciones. Esto significa que no hay dispersión ni variabilidad en los datos de esa columna. Técnicamente, esta falta de variabilidad implica que:
Incapacidad de Contribuir a la Varianza Total: Una variable con varianza cero no puede contribuir a la varianza total del conjunto de datos. Dado que PCA busca componentes que expliquen la varianza, una variable sin varianza no puede ser descompuesta en componentes principales significativos.
Singularidad de la Matriz de Covarianza: Como se ha mencionado anteriormente la matriz de covarianza es una parte esencial del PCA. La presencia de columnas con varianza cero puede llevar a una matriz de covarianza singular (no invertible), lo que imposibilita el cálculo correcto de los autovalores y autovectores necesarios para el PCA.
# Identificar y eliminar columnas con varianza cero variances <-apply(datos, 2, var, na.rm =TRUE) constant_columns <-names(variances[variances ==0]) # Ver qué columnas son constantes print(constant_columns)
[1] NA "cmdFeedRate.VELO.Cabezal"
# Eliminar estas columnas de los datos datos <- datos[, !names(datos) %in% constant_columns]
# Asegurarse de que todas las columnas son numéricas antes de calcular la varianza datos[] <-lapply(datos, function(x) as.numeric(as.character(x))) # Calcular la varianza para cada columna, excluyendo NA variances <-sapply(datos, function(x) var(x, na.rm =TRUE)) # Identificar columnas con varianza cero o que son NA (pueden haber sido pasadas por alto si todos excepto uno son NA) zero_variance_cols <-names(variances[variances ==0|is.na(variances)]) # Imprimir las columnas de varianza cero para revisión print(zero_variance_cols)
[1] "time"
# Eliminar columnas de varianza cero datos <- datos[, !(names(datos) %in% zero_variance_cols)]
**Results for the Principal Component Analysis (PCA)**
The analysis was performed on 518363 individuals, described by 11 variables
*The results are available in the following objects:
name description
1 "$eig" "eigenvalues"
2 "$var" "results for the variables"
3 "$var$coord" "coord. for the variables"
4 "$var$cor" "correlations variables - dimensions"
5 "$var$cos2" "cos2 for the variables"
6 "$var$contrib" "contributions of the variables"
7 "$ind" "results for the individuals"
8 "$ind$coord" "coord. for the individuals"
9 "$ind$cos2" "cos2 for the individuals"
10 "$ind$contrib" "contributions of the individuals"
11 "$call" "summary statistics"
12 "$call$centre" "mean of the variables"
13 "$call$ecart.type" "standard error of the variables"
14 "$call$row.w" "weights for the individuals"
15 "$call$col.w" "weights for the variables"
Eigenvalores / Varianzas
Los eigenvalores cuantifican la cantidad de variación capturada por cada componente principal. Generalmente, los eigenvalores son más altos para los primeros componentes principales y disminuyen para los componentes siguientes. Esto significa que los primeros componentes principales representan las direcciones con mayor variabilidad en el conjunto de datos. Al analizar los eigenvalores, podemos determinar cuántos componentes principales deben ser considerados para nuestro análisis. A continuación, utilizaremos la función get_eigenvalue del paquete factoextra para obtener estos eigenvalores y la proporción de varianza retenida por los componentes principales (PC).
El análisis de componentes principales (PCA) ha proporcionado los eigenvalores y la proporción de varianza explicada por cada componente principal. A continuación, se detallan las primeras cuatro componentes principales que capturan la mayor parte de la variabilidad en los datos:
Dim.1 (Componente Principal 1)
Eigenvalue: 3.930895
Varianza Explicada: 35.73541%
Varianza Acumulada: 35.73541%
La primera componente principal captura aproximadamente el 35.74% de la variabilidad total en los datos. Esta componente representa la dirección con mayor variabilidad y es la más significativa en la explicación de los datos.
Dim.2 (Componente Principal 2)
Eigenvalue: 2.936661
Varianza Explicada: 26.69692%
Varianza Acumulada: 62.43233%
La segunda componente principal explica aproximadamente el 26.70% de la variabilidad total, llevando la varianza acumulada a 62.43%. Esta componente captura una parte importante de la variabilidad que no está capturada por la primera componente.
Dim.3 (Componente Principal 3)
Eigenvalue: 2.051088
Varianza Explicada: 18.64625%
Varianza Acumulada: 81.07858%
La tercera componente principal explica el 18.65% de la variabilidad total, aumentando la varianza acumulada a 81.08%. Esto significa que las tres primeras componentes principales juntas explican la mayoría de la variabilidad en los datos.
Dim.4 (Componente Principal 4)
Eigenvalue: 1.000849
Varianza Explicada: 9.09863%
Varianza Acumulada: 90.17721%
La cuarta componente principal explica aproximadamente el 9.10% de la variabilidad, llevando la varianza acumulada a 90.18%. Aunque esta componente agrega información valiosa, su contribución es menor en comparación con las tres primeras.
A medida que seguimos analizando las dimensiones nos damos cuenta de que contribuyen en menor medida a explicar la variabilidad de los datos.
A continuación, un Scree plot que ilustra lo comentado anteriormente.
fviz_eig(res.pca, addlabels =TRUE)
Las primeras tres componentes principales capturan aproximadamente el 81.08% de la variabilidad total en los datos. Estas componentes son las más significativas para explicar la estructura subyacente de los datos y representan la mayor variabilidad. Además, observamos un punto de inflexión (el “codo”) en el gráfico de eigenvalores, lo que indica que las tres primeras componentes son las más relevantes. Por lo tanto, enfocarse en estas tres componentes será suficiente para representar la mayoría de la variabilidad en los datos, facilitando análisis posteriores y reduciendo la dimensionalidad del conjunto de datos.
Análisis Detallado de las Variables
A continuación, procederemos a obtener los resultados para las variables, incluyendo información sobre las coordenadas, correlaciones entre variables y ejes (dimensiones), coseno cuadrado, y contribuciones.
Obtener esta información detallada de las variables nos permite:
Interpretar Componentes Principales: Entender qué variables contribuyen más a cada componente principal, facilitando una interpretación más clara de los componentes.
Identificar Variables Relevantes: Determinar qué variables tienen mayor influencia en los datos, lo cual es útil para la reducción de dimensionalidad y selección de características.
Evaluar Calidad de Representación: Utilizar el coseno cuadrado para evaluar cómo bien los componentes principales representan cada variable, ayudando a decidir cuántos componentes retener.
Comprender Relaciones: Analizar las correlaciones entre variables y componentes para comprender las relaciones subyacentes en los datos y cómo las variables originales se relacionan en el espacio reducido.
var <-get_pca_var(res.pca) var
Principal Component Analysis Results for variables
===================================================
Name Description
1 "$coord" "Coordinates for the variables"
2 "$cor" "Correlations between variables and dimensions"
3 "$cos2" "Cos2 for the variables"
4 "$contrib" "contributions of the variables"
Coordenadas de las Variables
Las coordenadas de las variables en el espacio de los componentes principales nos indican la posición de cada variable respecto a los ejes definidos por los componentes. Estas coordenadas son esenciales para entender cómo las variables originales se proyectan en el nuevo espacio reducido.
Los resultados de las coordenadas (var$coord) muestran cómo cada variable se proyecta en el espacio de los componentes principales. A continuación, se presenta un resumen de estos resultados para las primeras tres dimensiones (componentes principales):
Dim.1 (Componente Principal 1)
driveLoad.EJE.X: 0.5787
driveLoad.EJE.Z: 0.9038
driveLoad.EJE.U: 0.1975
driveLoad.EJE.W: 0.2879
driveLoad.CABEZAL: 0.8032
actFeedRate.VELO.Cabezal: 0.9554
actFeedRate.VELO.Eje.X: -0.1020
actFeedRate.VELO.Eje.Z: -0.0681
actFeedRate.VELO.Eje.U: 0.3685
actFeedRate.VELO.Eje.W: 0.1891
actSpeed_Cabezal: 0.9554
La primera componente principal está dominada por las variables driveLoad.EJE.Z, actFeedRate.VELO.Cabezal, actSpeed_Cabezal, y driveLoad.CABEZAL, indicando que estas variables explican una gran parte de la variabilidad en esta dimensión.
Dim.2 (Componente Principal 2)
driveLoad.EJE.X: -0.6294
driveLoad.EJE.Z: -0.1515
driveLoad.EJE.U: -0.2729
driveLoad.EJE.W: 0.8676
driveLoad.CABEZAL: -0.4133
actFeedRate.VELO.Cabezal: 0.1622
actFeedRate.VELO.Eje.X: 0.3488
actFeedRate.VELO.Eje.Z: 0.5966
actFeedRate.VELO.Eje.U: 0.7762
actFeedRate.VELO.Eje.W: 0.6219
actSpeed_Cabezal: 0.1622
La segunda componente principal está influenciada fuertemente por las variables driveLoad.EJE.W, actFeedRate.VELO.Eje.U, actFeedRate.VELO.Eje.W, y actFeedRate.VELO.Eje.Z, sugiriendo que estas variables son importantes en esta dimensión.
Dim.3 (Componente Principal 3)
driveLoad.EJE.X: 0.1628
driveLoad.EJE.Z: 0.2383
driveLoad.EJE.U: -0.0563
driveLoad.EJE.W: 0.0004
driveLoad.CABEZAL: 0.1078
actFeedRate.VELO.Cabezal: -0.0114
actFeedRate.VELO.Eje.X: 0.9039
actFeedRate.VELO.Eje.Z: 0.7828
actFeedRate.VELO.Eje.U: -0.2411
actFeedRate.VELO.Eje.W: -0.6818
actSpeed_Cabezal: -0.0114
La tercera componente principal tiene altas contribuciones de actFeedRate.VELO.Eje.X y actFeedRate.VELO.Eje.Z, indicando que estas variables capturan la variabilidad explicada por esta dimensión.
Las coordenadas de las variables en los componentes principales nos permiten entender qué variables son más importantes en cada dimensión y cómo se proyectan en el espacio reducido. Las primeras tres componentes principales capturan la mayor parte de la variabilidad en los datos, con contribuciones significativas de variables como driveLoad.EJE.Z, actFeedRate.VELO.Cabezal, actSpeed_Cabezal, driveLoad.EJE.W, actFeedRate.VELO.Eje.U, actFeedRate.VELO.Eje.X, y actFeedRate.VELO.Eje.Z.
Coseno Cuadrado (Cos2)
El coseno cuadrado de una variable respecto a un componente principal mide la calidad de la representación de la variable en ese componente. Es decir, indica qué proporción de la varianza de una variable se explica por un componente específico. Un coseno cuadrado alto implica que el componente principal representa bien la variable.
corrplot(var$cos2, is.corr=FALSE, tl.col ="black", bg ="lightblue", #Color del fondo tl.srt =90, title="Matriz de correlaciones", mar=c(0,0,4,0), #Ubicación del título )
# cos2 total de las variables sobre Dim.1, Dim.2 y Dim.3 fviz_cos2(res.pca, choice ="var", axes =1:3)
#Color por valores cos2: calidad sobre el mapa factorial fviz_pca_var(res.pca, col.var ="cos2", gradient.cols =c("green", "brown", "blue"), title="Gradiente de las variables por cos2", repel =TRUE# Evita traslapamiento de textos )
Los resultados del coseno cuadrado (var$cos2) nos indican la calidad de la representación de cada variable en los componentes principales. A continuación, se presenta un resumen de estos resultados para las primeras tres dimensiones (componentes principales):
La primera componente principal representa muy bien a las variables actFeedRate.VELO.Cabezal, actSpeed_Cabezal, driveLoad.EJE.Z, y driveLoad.CABEZAL, con cosenos cuadrados altos indicando una buena calidad de representación.
La segunda componente principal tiene una alta calidad de representación para driveLoad.EJE.W, actFeedRate.VELO.Eje.U, y actFeedRate.VELO.Eje.W, sugiriendo que estas variables son bien representadas en esta dimensión.
La tercera componente principal representa muy bien a las variables actFeedRate.VELO.Eje.X, actFeedRate.VELO.Eje.Z, y actFeedRate.VELO.Eje.W, con cosenos cuadrados altos.
Los cosenos cuadrados (cos2) nos ayudan a evaluar cuan bien estan representadas las variables en las componentes principales. Las primeras tres componentes principales representan bien la mayoría de las variables, especialmente driveLoad.EJE.Z, actFeedRate.VELO.Cabezal, actSpeed_Cabezal, y driveLoad.EJE.U. Esto sugiere que estas componentes capturan la mayoría de la variabilidad y estructura en los datos, proporcionando una buena calidad de representación para las variables más importantes.
Contribuciones de las Variables
Las contribuciones de las variables a los componentes principales cuantifican la importancia de cada variable en la formación de los componentes. Esta información nos permite identificar qué variables tienen mayor influencia en cada componente, ayudando a interpretar los componentes de manera más precisa.
Los resultados de las contribuciones (var$contrib) nos indican la importancia de cada variable en la formación de los componentes principales. A continuación, se presenta un resumen de estos resultados para las primeras cuatro dimensiones (componentes principales):
Dim.1 (Componente Principal 1)
driveLoad.EJE.X: 8.52%
driveLoad.EJE.Z: 20.78%
driveLoad.EJE.U: 0.99%
driveLoad.EJE.W: 2.11%
driveLoad.CABEZAL: 16.41%
actFeedRate.VELO.Cabezal: 23.22%
actFeedRate.VELO.Eje.X: 0.26%
actFeedRate.VELO.Eje.Z: 0.12%
actFeedRate.VELO.Eje.U: 3.45%
actFeedRate.VELO.Eje.W: 0.91%
actSpeed_Cabezal: 23.22%
En la primera componente principal, las variables actFeedRate.VELO.Cabezal, actSpeed_Cabezal, driveLoad.EJE.Z, y driveLoad.CABEZAL son las que más contribuyen, con porcentajes significativos.
Dim.2 (Componente Principal 2)
driveLoad.EJE.X: 13.49%
driveLoad.EJE.Z: 0.78%
driveLoad.EJE.U: 2.54%
driveLoad.EJE.W: 25.63%
driveLoad.CABEZAL: 5.82%
actFeedRate.VELO.Cabezal: 0.90%
actFeedRate.VELO.Eje.X: 4.14%
actFeedRate.VELO.Eje.Z: 12.12%
actFeedRate.VELO.Eje.U: 20.52%
actFeedRate.VELO.Eje.W: 13.17%
actSpeed_Cabezal: 0.90%
La segunda componente principal tiene altas contribuciones de driveLoad.EJE.W, actFeedRate.VELO.Eje.U, y actFeedRate.VELO.Eje.Z, indicando su importancia en esta dimensión.
Dim.3 (Componente Principal 3)
driveLoad.EJE.X: 1.29%
driveLoad.EJE.Z: 2.77%
driveLoad.EJE.U: 0.15%
driveLoad.EJE.W: 0.00%
driveLoad.CABEZAL: 0.57%
actFeedRate.VELO.Cabezal: 0.01%
actFeedRate.VELO.Eje.X: 39.83%
actFeedRate.VELO.Eje.Z: 29.88%
actFeedRate.VELO.Eje.U: 2.83%
actFeedRate.VELO.Eje.W: 22.67%
actSpeed_Cabezal: 0.01%
La tercera componente principal está dominada por actFeedRate.VELO.Eje.X, actFeedRate.VELO.Eje.Z, y actFeedRate.VELO.Eje.W, que tienen contribuciones muy altas.
Dim.4 (Componente Principal 4)
driveLoad.EJE.X: 0.45%
driveLoad.EJE.Z: 0.15%
driveLoad.EJE.U: 85.90%
driveLoad.EJE.W: 1.67%
driveLoad.CABEZAL: 0.02%
actFeedRate.VELO.Cabezal: 3.30%
actFeedRate.VELO.Eje.X: 0.73%
actFeedRate.VELO.Eje.Z: 1.10%
actFeedRate.VELO.Eje.U: 0.50%
actFeedRate.VELO.Eje.W: 2.89%
actSpeed_Cabezal: 3.30%
La cuarta componente principal está casi exclusivamente influenciada por driveLoad.EJE.U, que explica la mayor parte de la varianza en esta dimensión.
Las contribuciones (contrib) nos indican qué variables son más influyentes en la formación de cada componente principal. Las primeras tres componentes principales están principalmente influenciadas por actFeedRate.VELO.Cabezal, actSpeed_Cabezal, driveLoad.EJE.Z, driveLoad.EJE.W, actFeedRate.VELO.Eje.X, actFeedRate.VELO.Eje.Z, y driveLoad.EJE.U. Estas variables son cruciales para explicar la variabilidad y estructura subyacente en los datos. En el caso de la cuarta dimension esta casi exclusivamente influenciada por una sola variable driveLoad.EJE.U.
Relación entre componentes
# Crear 3 clúster (centers = 3) set.seed(123) res2.km <-kmeans(datos, centers =3, nstart =25) # Extraer etiquetas de los clúster cluster_labels <- res2.km$cluster # Añadir etiquetas de los clúster a los datos originales datos$Cluster <- cluster_labels gr <-as.factor(datos$Cluster) gr_name <-"Clusters"
fviz_pca_ind(res.pca, geom.ind ="point", # mostrar solo puntos (no "texto") col.ind = gr , # color por grupos palette =c("blue", "brown", "green"), addEllipses =TRUE, # concentración de elipses legend.title = gr_name )
2. Regresión Logística Multinomial (MLR)
Se realiza el caso práctico sobre el conjunto de datos Estimation of Obesity Levels Based On Eating Habits and Physical Condition. El conjunto de datos que tienes contiene información para estimar los niveles de obesidad en individuos de México, Perú y Colombia, basada en sus hábitos alimenticios y condición física. Variable de Clase: NObesity (Nivel de Obesidad) con las siguientes categorías:
Insufficient Weight
Normal Weight
Overweight Level I
Overweight Level II
Obesity Type I
Obesity Type II
Obesity Type III
Variables de Conjunto de Datos:
Para construir un modelo de regresión logística multinomial en R, utilizaremos el paquete nnet que contiene la función multinom() para ajustar modelos de regresión logística multinomial.
Librerías
Loading required package: lattice
Registered S3 method overwritten by 'lava':
method from
print.estimate EnvStats
Attaching package: 'caret'
The following object is masked from 'package:purrr':
lift
El conjunto de datos no está depurado y podría estar normalizado, lo que puede dificultar su comprensión. Podemos ver los datos sin procesar para comprender mejor los datos normalizados.
# Verificar datos faltantes sum(is.na(df))
[1] 0
df <-na.omit(df)
# Gráfico de dispersión ggplot(df, aes(x = Weight, y = Height, color = Gender)) +geom_point() +labs(title ="Weight vs Height by Gender", x ="Weight", y ="Height") +theme_minimal()
El gráfico sugiere que hay diferencias notables en las distribuciones de peso y altura entre hombres y mujeres. Se observan algunos outliers, especialmente en los hombres, con alturas superiores a 1.9 metros y pesos superiores a 120 kg. En las mujeres, también hay algunos outliers con pesos que superan los 90 kg, aunque son menos frecuentes.
# Gráfico de dispersión ggplot(df, aes(x = Weight, y = Age, color = Gender)) +geom_point() +labs(title ="Weight vs Age by Gender", x ="Weight", y ="Age") +theme_minimal()
Podemos visualizar claramente una relación entre GÉNERO, ALTURA, PESO. El gráfico nos da un indicio de que la edad y el género son factores importantes en la distribución del peso, con hombres mostrando mayor variabilidad y generalmente mayor peso en todos los grupos de edad en comparación con las mujeres.
ggplot(df, aes(x = Weight, y = Height, color = SMOKE)) +geom_point() +labs(title ="Weight vs Height by SMOKE", x ="Weight", y ="Height") +theme_minimal()
Aunque fumar puede influir en la distribución del peso y la altura, la mayoría de las personas no fuman y muestran una mayor variabilidad en estas medidas. Estos datos sugieren que otras variables pueden tener un impacto más significativo en el peso y la altura que el hecho de fumar.
ggplot(df, aes(x = Weight, y = Age, color = FCVC)) +geom_point() +labs(title ="Weight vs Age by FCVC", x ="Weight", y ="Age") +theme_minimal()
Un mayor consumo de vegetales está asociado con un peso más saludable, especialmente entre los individuos más jóvenes. Las personas entre 20 y 30 años son más conscientes de sus hábitos alimentarios y tienden a consumir más vegetales.
Ahora análizamos la variable dependiente para ver si existe algún tipo de patrón o dato atípico que podamos identificar.
# Contar los valores únicos en la columna NObeyesdad knitr::kable(table(df$NObeyesdad))
Var1
Freq
Insufficient_Weight
272
Normal_Weight
287
Obesity_Type_I
351
Obesity_Type_II
297
Obesity_Type_III
324
Overweight_Level_I
290
Overweight_Level_II
290
ggplot(df, aes(x = NObeyesdad, y = Weight, fill = Gender)) +geom_boxplot() +labs(title ="Weight vs NObeyesdad by Gender",x ="NObeyesdad",y ="Weight") +theme_minimal() +theme(axis.text.x =element_text(angle =45, hjust =1))
Existen diferencias significativas en la distribución del peso por género en todas las categorías de obesidad, con hombres generalmente pesando más que las mujeres.
ggplot(df, aes(x = NObeyesdad, y = Age, fill = Gender)) +geom_boxplot() +labs(title ="Age vs NObeyesdad",x ="NObeyesdad",y ="Age") +theme_minimal() +theme(axis.text.x =element_text(angle =45, hjust =1))
Existen diferencias significativas en la distribución de la edad por género en todas las categorías de obesidad, con hombres y mujeres mostrando variabilidad en diferentes medidas.
ggplot(df, aes(x = Weight, y = NObeyesdad, color = family_history_with_overweight)) +geom_point(alpha =0.2) +geom_smooth(method ="lm", se =FALSE) +labs(title ="Weight vs NObeyesdad",x ="Weight", y ="NObeyesdad") +theme_minimal()
`geom_smooth()` using formula = 'y ~ x'
El gráfico indica que el historial familiar de sobrepeso tiene una fuerte asociación con el peso y la categoría de obesidad en los individuos.
ggplot(df, aes(x = Weight, y = NObeyesdad, color = Age)) +geom_point(alpha =0.2) +geom_smooth(method ="lm", se =FALSE) +labs(title ="Weight vs NObeyesdad",x ="Weight", y ="NObeyesdad") +theme_minimal()
`geom_smooth()` using formula = 'y ~ x'
Warning: The following aesthetics were dropped during statistical transformation: colour
ℹ This can happen when ggplot fails to infer the correct grouping structure in
the data.
ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
variable into a factor?
La obesidad es una condición que afecta a individuos de todas las edades y presenta una gran variabilidad en términos de peso.
Preparación de datos para el análisis predictivo
División de datos:
df$combined_factors <-interaction(df$CAEC, df$CALC, df$MTRANS, drop =TRUE) set.seed(123) # Fija la semilla para reproducibilidad trainIndex <-createDataPartition(df$combined_factors, p =0.7, list =FALSE) # Crear conjuntos de entrenamiento y prueba traindf <- df[trainIndex, ] testdf <- df[-trainIndex, ] # Elimina la columna combinada ya que no se necesita más traindf$combined_factors <-NULLtestdf$combined_factors <-NULL
summary(traindf$NObeyesdad)
Length Class Mode
1494 character character
summary(testdf$NObeyesdad)
Length Class Mode
617 character character
Estadísticas de Chi-cuadrado y Cramer’s V
Esta prueba estadística tiene como objetivo evaluar si hay una asociación significativa entre las variables categóricas independientes y la variable dependiente (NObeyesdad).
Chi-squared Statistic (statistic): El valor de la estadística Chi-cuadrado es una medida de la asociación entre las variables. Valores más altos indican una mayor desviación de la hipótesis nula, lo que sugiere una asociación más fuerte entre las variables.
El p-valor: indica la probabilidad de obtener una asociación tan fuerte como la observada (o más fuerte) si la hipótesis nula fuera verdadera (es decir, no hay asociación entre las variables).
El valor de Cramer’s V: es una medida de la fuerza de la asociación entre las variables, ajustada por el tamaño de la tabla de contingencia. Cramer’s V varía de 0 a 1, donde 0 indica ninguna asociación y 1 indica una asociación perfecta.
# Variables categóricas en el conjunto de entrenamiento traindf_cat <- traindf[, c("Gender", "family_history_with_overweight", "FAVC", "CAEC", "SMOKE", "SCC", "CALC", "MTRANS", "NObeyesdad")] # Estadísticas de Chi-cuadrado CHIS <-lapply(traindf_cat[, -9], function(x) chisq.test(traindf_cat$NObeyesdad, x)) # Resultados de Chi-cuadrado CHIs_table <-do.call(rbind, lapply(CHIS, function(x) c(x$statistic, x$p.value))) CHIs_table <-as.data.frame(CHIs_table) colnames(CHIs_table) <-c("statistic", "p.value") CHIs_table$Variable <-rownames(CHIs_table) # Número de niveles para cada variable level <- traindf_cat %>%summarise_all(n_distinct) level <-as.data.frame(t(level)) level$Variable <-rownames(level) # Combinar las tablas CHIs_table <-merge(CHIs_table, level, by ="Variable") # Calcular el valor de Cramer's V CHIs_table$statistic <-as.numeric(CHIs_table$statistic) CHIs_table$p.value <-as.numeric(CHIs_table$p.value) CHIs_table$Cramers_Value <-sqrt((CHIs_table$statistic /nrow(traindf)) /pmin(CHIs_table$V1, n_distinct(traindf$NObeyesdad) -1)) # Tabla knitr::kable(CHIs_table)
Variable
statistic
p.value
V1
Cramers_Value
CAEC
555.36023
0.00e+00
4
0.3048471
CALC
251.72984
0.00e+00
4
0.2052400
family_history_with_overweight
448.14948
0.00e+00
2
0.3872765
FAVC
165.42559
0.00e+00
2
0.2352941
Gender
461.96684
0.00e+00
2
0.3932014
MTRANS
206.84301
0.00e+00
5
0.1664026
SCC
94.00453
0.00e+00
2
0.1773716
SMOKE
31.14030
2.38e-05
2
0.1020872
Con este análisis de Chi-cuadrado logramos identificar asociaciones significativas entre las variables categóricas y la variable dependiente (NObeyesdad). El valor de Cramer’s V proporciona una medida de la fuerza de estas asociaciones.
Hay asociaciones significativas entre todas las variables categóricas analizadas y NObeyesdad.
La fuerza de estas asociaciones varía, siendo más fuerte para family_history_with_overweight y Gender, y más débil para SMOKE.
Este tipo de análisis es útil para identificar variables que tienen una relación significativa con la variable de interés, lo que facilita análisis adicionales y la construcción de modelos predictivos.
Modelo Regresión Logística Multinomial
Ahora trabajaremos en la predicción de NObeyesdad (característica categórica). Para ello utilizaremos la regresión logística multinomial.
{r} # Convertir la variable dependiente a factor} traindf$NObeyesdad <- as.factor(traindf$NObeyesdad) testdf$NObeyesdad <- as.factor(testdf$NObeyesdad)
# Ajustar el modelo de regresión logística multinomial # Modelo de training modelo <-multinom(NObeyesdad ~ ., data = traindf)
# weights: 175 (144 variable)
initial value 2907.189763
iter 10 value 2488.772808
iter 20 value 1488.822020
iter 30 value 1110.275006
iter 40 value 910.854584
iter 50 value 670.955623
iter 60 value 414.360624
iter 70 value 261.721719
iter 80 value 173.646963
iter 90 value 100.296324
iter 100 value 66.461406
final value 66.461406
stopped after 100 iterations
La regresión logística multinomial extiende la regresión logística para manejar variables dependientes categóricas con más de dos niveles. La ecuación para cada categoría \(j\) comparación con la categoría de referencia \(j^*\) se puede expresar como:
\(P(Y = j)\): Es la probabilidad de pertenecer a la categoría \(j\).
\(\beta_{0,j}\): es el intercepto para la categoría \(j\).
\(\beta_{ij}\): es el coeficiente para la variable independiente \(X_i\) en la categoría \(j\).
Interpretación de los Coeficientes
Los coeficientes indican cómo cada variable explicativa (género, edad, altura, peso, hábitos alimenticios, etc.) afecta las probabilidades de pertenecer a diferentes categorías de NObeyesdad en comparación con la categoría de referencia. La magnitud y el signo de cada coeficiente proporcionan información sobre la dirección y la fuerza de estas asociaciones.
Obesity_Type_I:
Intercepto: 319.96239, indica el logit base para esta categoría.
GenderMale: -26.741438, ser hombre disminuye la probabilidad de estar en Obesity_Type_I.
Age: 1.4567232, mayor edad aumenta la probabilidad de estar en Obesity_Type_I.
Height: -831.5932, mayor altura disminuye la probabilidad de estar en Obesity_Type_I.
Weight: 13.254104, mayor peso aumenta la probabilidad de estar en Obesity_Type_I.
Normal_Weight:
Intercepto: 130.23102, indica el logit base para esta categoría.
GenderMale: -4.132299, ser hombre disminuye la probabilidad de estar en Normal_Weight.
Age: 0.5382209, mayor edad aumenta la probabilidad de estar en Normal_Weight.
Height: -160.6125, mayor altura disminuye la probabilidad de estar en Normal_Weight.
Weight: 3.979171, mayor peso aumenta la probabilidad de estar en Normal_Weight.
Errores Estándar
Los errores estándar miden la precisión de los coeficientes estimados. Coeficientes con errores estándar relativamente pequeños son más precisos. Por ejemplo, para la categoría Obesity_Type_I:
GenderMale (SE: 3.682049): Este error estándar indica que el coeficiente es relativamente preciso, pero hay cierta variabilidad en su estimación.
Age (SE: 0.2529448): Este error estándar es bastante pequeño, indicando que la estimación del coeficiente es precisa.
Residual Deviance y AIC
Residual Deviance: Este valor mide la bondad de ajuste del modelo. Un deviance residual más bajo indica un mejor ajuste. La deviance residual es 132.9228. Este valor, por sí solo, no proporciona mucha información a menos que se compare con otro modelo (modelo Nulo).
AIC (Akaike Information Criterion): 444.7616.ndefined El AIC penaliza por la complejidad del modelo, balanceando la bondad de ajuste y el número de parámetros.
Comentarios Generales:
Género: Ser hombre disminuye significativamente las probabilidades de pertenecer a las categorías de obesidad (Obesity_Type_I, Obesity_Type_II, etc.) en comparación con la categoría de referencia.
Edad: La edad tiene un efecto positivo en las probabilidades de pertenecer a las categorías de obesidad. A medida que la edad aumenta, también lo hace la probabilidad de pertenecer a estas categorías.
Altura y Peso: La altura y el peso tienen efectos significativos en las probabilidades de pertenecer a las categorías de obesidad. Por ejemplo, un mayor peso está asociado con una mayor probabilidad de pertenecer a las categorías de obesidad.
Variables Categóricas: Variables como family_history_with_overweight, FAVC, CAEC, etc., también tienen coeficientes significativos que indican cómo estas variables afectan las probabilidades de pertenecer a diferentes categorías de obesidad.
Precisión del Modelo: El modelo parece tener un buen ajuste, dado el deviance residual y el AIC. Los coeficientes son en su mayoría precisos, con errores estándar relativamente pequeños.
Significancia Estadística
Los errores estándar proporcionan una medida de la precisión de los coeficientes estimados. Coeficientes con errores estándar pequeños son más precisos. Los valores \(z\) y los valores \(p\) se pueden calcular para determinar la significancia estadística de cada coeficiente.
$z = \beta/SE$
Valores z altos (positivos o negativos) indican que el coeficiente es significativamente diferente de cero. Un valor p bajo (típicamente < 0.05) indica que podemos rechazar la hipótesis nula de que el coeficiente es igual a cero.
z <-summary(modelo)$coefficients/summary(modelo)$standard.errors p <- (1-pnorm(abs(z),0,1))*2p
Género y Edad: Son variables consistentemente significativas en la mayoría de las categorías de peso, indicando que son factores importantes para predecir el peso.
Historial Familiar con Sobrepeso: Tiene una fuerte asociación con la obesidad, especialmente en los tipos más severos.
Consumo de Comida y Hábitos Alimenticios: Variables como el consumo frecuente de vegetales y el número de comidas por día muestran significancia en algunas categorías, sugiriendo que los hábitos alimenticios juegan un papel importante en el control del peso.
Estilo de Vida: Factores como el ejercicio (FAF y TUE) y la monitorización de la ingesta calórica también muestran cierta significancia, indicando que un estilo de vida activo y consciente de la dieta puede influir en el peso.
Modo de Transporte: Muestra asociaciones significativas en algunos casos, sugiriendo que la elección del transporte podría estar relacionada con los niveles de actividad física y, por ende, con el peso.
Datos Entrenamiento
# Predicción en los datos de entrenamiento train_predictions <-predict(modelo, traindf) # Evaluar la precisión del modelo en los datos de entrenamiento mean(train_predictions == traindf$NObeyesdad)
[1] 0.9872825
# Generar la matriz de confusión conf_matrix <-confusionMatrix(as.factor(train_predictions), as.factor(traindf$NObeyesdad)) # Convertir la matriz de confusión a un data frame conf_matrix_df <-as.data.frame(conf_matrix$table) # Renombrar las columnas para claridad colnames(conf_matrix_df) <-c("Predicted", "Actual", "Freq") # Crear el gráfico ggplot(data = conf_matrix_df, aes(x = Actual, y = Predicted)) +geom_tile(aes(fill = Freq), color ="white") +geom_text(aes(label = Freq), vjust =1) +scale_fill_gradient(low ="white", high ="blue") +theme_minimal() +labs(title ="Matriz de Confusión", x ="Actual", y ="Predicted") +theme(axis.text.x =element_text(angle =45, hjust =1)) +coord_fixed(ratio =1.2)
La matriz de confusión es una herramienta poderosa para evaluar el rendimiento de los modelos de clasificación. En este caso, parece que el modelo predice correctamente la mayoría de las categorías, con algunas áreas de mejora en la distinción de categorías adyacentes o similares en características.
Datos de Test
# Predicción en los datos de prueba test_predictions <-predict(modelo, testdf)
# Evaluar la precisión del modelo en los datos de prueba mean(test_predictions == testdf$NObeyesdad)
[1] 0.9286872
# Generar la matriz de confusión conf_matrix <-confusionMatrix(as.factor(test_predictions), as.factor(testdf$NObeyesdad)) # Convertir la matriz de confusión a un data frame conf_matrix_df <-as.data.frame(conf_matrix$table) # Renombrar las columnas para claridad colnames(conf_matrix_df) <-c("Predicted", "Actual", "Freq") # Crear el gráfico ggplot(data = conf_matrix_df, aes(x = Actual, y = Predicted)) +geom_tile(aes(fill = Freq), color ="white") +geom_text(aes(label = Freq), vjust =1) +scale_fill_gradient(low ="white", high ="blue") +theme_minimal() +labs(title ="Matriz de Confusión", x ="Actual", y ="Predicted") +theme(axis.text.x =element_text(angle =45, hjust =1)) +coord_fixed(ratio =1.2)
El modelo predice correctamente la mayoría de las categorías, con algunas áreas de mejora en la distinción de categorías adyacentes o similares en características.
Conclusión General
Este artículo presentó un análisis detallado del Análisis de Componentes Principales (PCA) y la Regresión Logística Multinomial (MLR), dos técnicas estadísticas fundamentales en la ciencia de datos. Los resultados obtenidos demuestran la eficacia y la aplicabilidad de estas técnicas en diferentes contextos.
Análisis de Componentes Principales (PCA):
Identificación de Patrones en el Funcionamiento del Torno CNC:
El uso de PCA en los datos recopilados del torno CNC permitió identificar patrones significativos en las señales de presión y temperatura. Estos patrones ayudaron a detectar comportamientos anómalos, proporcionando una visión clara sobre posibles problemas operativos.
La reducción de dimensionalidad facilitó la simplificación del conjunto de datos, eliminando redundancias y resaltando las variables más importantes que explican la mayor parte de la variabilidad. Esto optimizó el análisis y la interpretación de los datos, mejorando la eficiencia en la monitorización de la máquina.
Regresión Logística Multinomial (MLR):
Clasificación de Niveles de Obesidad:
La MLR se aplicó exitosamente en el análisis de datos para clasificar los niveles de obesidad en individuos de México, Perú y Colombia. Los resultados mostraron que la MLR es una herramienta eficaz para predecir la categoría de obesidad basada en hábitos alimenticios y condiciones físicas.
Las características más influyentes en la clasificación de niveles de obesidad fueron identificadas, permitiendo una mejor comprensión de los factores determinantes. Esto puede guiar estrategias de salud pública para abordar problemas relacionados con la obesidad en la región.
En conclusión, tanto el PCA como la MLR demostraron ser técnicas poderosas para el análisis de datos en sus respectivos dominios. El PCA facilitó la identificación de patrones y la reducción de dimensionalidad en datos de alta variabilidad, mientras que la MLR proporcionó una clasificación precisa y útil para la toma de decisiones en salud pública. Los hallazgos de este artículo destacan la importancia de estas técnicas en la ciencia de datos y su potencial para abordar problemas complejos de manera efectiva.
Referencias Bibliográficas
Abdi, H., & Williams, L. J. (2010). Principal component analysis. Wiley Interdisciplinary Reviews: Computational Statistics, 2(4), 433-459.
Agresti, A. (2002). Categorical Data Analysis (2nd ed.). Wiley. ISBN 978-0471360933.
Brage Escalona, M. (2020). Análisis de datos categóricos: regresión logística y multinomial. Universidad de Lagunas
Hair, J. F., Black, W. C., Babin, B. J., & Anderson, R. E. (2014). Multivariate Data Analysis. Pearson Education Limited.
Hosmer, D. W., Lemeshow, S., & Sturdivant, R. X. (2013). Applied Logistic Regression (3rd ed.). Wiley. ISBN 978-0470582473.
Jackson, J. E. (1991). A User’s Guide to Principal Components. Wiley. ISBN 978-0471622673.
James, G., Witten, D., Hastie, T., & Tibshirani, R. (2013). An Introduction to Statistical Learning with Applications in R. Springer.
Jolliffe, I. T. (2002). Principal Component Analysis (2nd ed.). Springer. ISBN 978-0387954424.
Kassambara, A. & Mundt, F. (2020). factoextra: Extract and Visualize the Results of Multivariate Data Analyses.
Kleinbaum, D. G., & Klein, M. (2010). Logistic Regression: A Self-Learning Text (3rd ed.). Springer. ISBN 978-1441917416.
Lantz, B. (2015). Machine Learning with R. Packt Publishing Ltd.