El objetivo de este proyecto es aplicar técnicas de análisis multivariado para gestionar el conjunto de datos aprobado, correspondiente a registros relacionados con predicción de precios de vehículos usados. El propósito es organizar y procesar eficazmente la información, desarrollando habilidades en la gestión y análisis de datos. Este trabajo se enmarca dentro del curso de Gestión de Datos, dictado por el Profesor Giancarlo Libreros Londoño en la Universidad del Valle.
El conjunto de datos fue obtenido en su totalidad de Kaggle: (https://www.kaggle.com/datasets/metawave/vehicle-price-prediction) Kaggle es una plataforma en línea de ciencia de datos y aprendizaje automático, propiedad de Google LLC. Esta facilita la participación en competencias donde las empresas publican conjuntos de datos y problemas, permitiendo a los usuarios desarrollar modelos predictivos y competir. La plataforma también ofrece notebooks para compartir y colaborar en proyectos utilizando Python y R, así como una amplia colección de conjuntos de datos de acceso público. Además, Kaggle Learn, una sección de la plataforma dedicada a la educación y el aprendizaje en ciencia de datos y aprendizaje automático proporciona tutoriales y cursos interactivos en temas como Python, SQL, visualización de datos y aprendizaje automático, dirigidos a principiantes y usuarios avanzados.
Este conjunto de datos se relaciona con diversas áreas de la ingeniería industrial, debido a que su desarrollo y análisis implican la aplicación de principios propios de la disciplina. En primer lugar, se vincula con la estadística y el análisis de datos(2.operations research y analysis), al emplear métodos estadísticos para estudiar la información y generar modelos predictivos precisos. También, se asocia con la gestión de la calidad (5.quality y reliability engineering), porque garantiza que los datos sean coherentes, completos y confiables. Asimismo, interviene la investigación de operaciones (7.operations engineering y management), que permite optimizar los algoritmos utilizados para estimar los precios de manera eficiente. En cuanto al análisis económico de ingeniería (3.engineering economic analysis), se ve reflejado en el análisis de la rentabilidad y la depreciación de los vehículos a lo largo del tiempo,también,se ve representado en el estudio del kilometraje y la antigüedad como factores que influyen en el precio de los automóviles. Adicionalmente, el estudio se relaciona con la gestión de proyectos (9.engineering managemet), al requerir una planeación estructurada para el desarrollo y ejecución del script generador de los datos. De igual manera, los sistemas de información (11.information engineering) desempeñan un papel fundamental en el almacenamiento, organización y procesamiento de los registros, de igual manera, se evidencia en el uso de herramientas computacionales como Python, que permiten crear soluciones automatizadas y aplicables al entorno industrial.
Según la descripción del conjunto de datos elegido en la plataforma kaggle, este fue diseñado con el propósito de crear una base sólida para el entrenamiento de modelos de predicción de precios automotrices de alta precisión. Contiene un total de 20.000 registros que representan una amplia variedad de marcas, modelos y especificaciones, abarcando 25 de las marcas más comunes en el mercado automotor. Cada registro fue construido considerando relaciones y distribuciones realistas entre las características del vehículo y su valor comercial, con el fin de reflejar comportamientos observables en contextos reales de compraventa. La lógica implementada en la generación de los datos contempla factores como la depreciación, el desgaste y el precio de marca. En primer lugar, la depreciación se modela como la principal variable que determina la reducción del precio con el paso del tiempo, siguiendo una curva de declive de tipo exponencial. En segundo lugar, el desgaste se asocia directamente con el kilometraje, el cual se correlaciona con la antigüedad del vehículo y ejerce un efecto negativo sobre el precio final. Finalmente, el precio de la marca actúa como una variable de referencia que refleja el posicionamiento del mercado de cada marca en el mundo real. (tipo_de_variable::escala_de_medición[ordenamiento]):
kilometraje (cuantitativa::razón): Representa la distancia total recorrida por el vehículo desde su fabricación hasta la fecha del registro, medida en kilómetros.
kilometraje_por_año (cuantitativa::razón): Esta variable expresa el promedio de kilómetros recorridos anualmente por el vehículo. Se obtiene dividiendo el kilometraje total entre la edad del automóvil.
numero_de_propietarios_anteriores (cuantitativa::razón): Indica cuántas personas han sido dueñas del vehículo antes del registro actual.
edad_del_vehículo (cuantitativa::razón): Corresponde al número de años transcurridos desde la fecha de fabricación del vehículo hasta la actualidad.
precio (cuantitativa::razón): Expresa el precio actual estimado del vehículo en el mercado de usados.
transmision (cualitativa::nominal): Describe el tipo de sistema de cambio de marchas del vehículo, codificado como 1 para transmisión manual y 0 para automática. Esta es la variable de decisión que se identifica en este conjunto.
marca_del_vehiculo (cualitativa::nominal): Identifica el nombre del fabricante del automóvil.
año_de_fabricacion (cuantitativa::razón): Indica el año calendario en el que el vehículo fue producido.
color_exterior (cualitativa::nominal): Hace referencia al color visible de la carrocería del vehículo.
tipo_de_combustible (cualitativa::nominal): Especifica el tipo de energía que utiliza el vehículo para su funcionamiento. Los valores comunes incluyen gasolina, diésel, híbrido y eléctrico.
str(vehicle_price_prediction_modificado_MUESTREADO20K_ETL)
## tibble [19,798 × 12] (S3: tbl_df/tbl/data.frame)
## $ marca_vehiculo : chr [1:19798] "Volkswagen" "Volkswagen" "Ford" "Jeep" ...
## $ anho_de_fabricacion: num [1:19798] 2025 2018 2016 2023 2025 ...
## $ kilometraje : num [1:19798] 4725 99451 217580 51777 2874 ...
## $ transmision : chr [1:19798] "automatico" "automatico" "automatico" "manual" ...
## $ tipo_de_combustible: chr [1:19798] "Electric" "Electric" "Electric" "Gasoline" ...
## $ color_exterior : chr [1:19798] "Gray" "Gray" "Black" "Gray" ...
## $ cant_propietarios : num [1:19798] 1 2 4 1 1 2 3 5 1 5 ...
## $ antiguedad_vehiculo: num [1:19798] 1 7 9 2 1 7 5 15 3 9 ...
## $ kilometraje_anual : num [1:19798] 4725 14207 24176 25888 2874 ...
## $ precio : num [1:19798] 26141 13007 5962 29662 36614 ...
## $ rango_antiguedad : chr [1:19798] "De 1 a 5 anhos" "De 6 a 10 anhos" "De 6 a 10 anhos" "De 1 a 5 anhos" ...
## $ gama_vehicular : chr [1:19798] "gama media" "gama media" "gama media" "gama alta" ...
vehicle_price_prediction_modificado_MUESTREADO20K_ETL
## # A tibble: 19,798 × 12
## marca_vehiculo anho_de_fabricacion kilometraje transmision
## <chr> <dbl> <dbl> <chr>
## 1 Volkswagen 2025 4725 automatico
## 2 Volkswagen 2018 99451 automatico
## 3 Ford 2016 217580 automatico
## 4 Jeep 2023 51777 manual
## 5 Chrysler 2025 2874 manual
## 6 Mercedes-Benz 2018 94706 manual
## 7 Cadillac 2020 19868 automatico
## 8 Porsche 2010 147189 manual
## 9 Jeep 2022 47750 automatico
## 10 Jeep 2016 133025 manual
## # ℹ 19,788 more rows
## # ℹ 8 more variables: tipo_de_combustible <chr>, color_exterior <chr>,
## # cant_propietarios <dbl>, antiguedad_vehiculo <dbl>,
## # kilometraje_anual <dbl>, precio <dbl>, rango_antiguedad <chr>,
## # gama_vehicular <chr>
El vector de medias y la matriz de varianzas-covarianzas conforman un conjunto de herramientas fundamentales para describir el comportamiento posicional, dispersivo y correlacional de las variables aleatorias en un conjunto de datos. Estas medidas son esenciales en el análisis multivariado, ya que permiten capturar tanto la tendencia central como las interdependencias entre las variables.
El vector de medias refleja el valor esperado o punto medio de cada variable, sintetizando la información de todos los registros disponibles en el conjunto de datos. Por su parte, la matriz de varianzas-covarianzas describe la variabilidad y las relaciones entre las variables. En su diagonal principal, estima las dispersiones individuales de cada variable respecto a su media, mientras que los elementos por encima o por debajo de esta diagonal representan las covarianzas entre pares de variables, mostrando las relaciones lineales existentes entre ellas.
apply(vehicle_price_prediction_modificado_MUESTREADO20K_ETL[,-c(1,2,4,5,6,11,12)], 2, mean)
## kilometraje cant_propietarios antiguedad_vehiculo kilometraje_anual
## 1.127688e+05 3.479594e+00 7.598646e+00 1.455297e+04
## precio
## 2.023431e+04
vehicle_price_prediction_modificado_MUESTREADO20K_ETL_Reducido = vehicle_price_prediction_modificado_MUESTREADO20K_ETL[,-c(1,2,4,5,6,11,12)]
nombres_boxplots <- c("kilometraje","Cant_propietarios","Edad_Vehículo","Kilometraje_año","Precio")
par(mfrow = c(1, ncol(vehicle_price_prediction_modificado_MUESTREADO20K_ETL_Reducido)))
invisible(lapply(1:ncol(vehicle_price_prediction_modificado_MUESTREADO20K_ETL_Reducido), function(i) {
boxplot(vehicle_price_prediction_modificado_MUESTREADO20K_ETL_Reducido[, i],
main = nombres_boxplots[i])}))
round(cov(vehicle_price_prediction_modificado_MUESTREADO20K_ETL[,-c(1,2,4,5,6,11,12)]),2)
## kilometraje cant_propietarios antiguedad_vehiculo
## kilometraje 5094782082.33 56542.99 212849.93
## cant_propietarios 56542.99 2.37 3.79
## antiguedad_vehiculo 212849.93 3.79 14.47
## kilometraje_anual 258557253.15 864.85 2186.07
## precio -596219781.96 -9307.11 -34061.37
## kilometraje_anual precio
## kilometraje 258557253.15 -596219781.96
## cant_propietarios 864.85 -9307.11
## antiguedad_vehiculo 2186.07 -34061.37
## kilometraje_anual 36590705.14 -17150507.29
## precio -17150507.29 184515961.73
round(cor(vehicle_price_prediction_modificado_MUESTREADO20K_ETL[,-c(1,2,4,5,6,11,12)]),3)
## kilometraje cant_propietarios antiguedad_vehiculo
## kilometraje 1.000 0.514 0.784
## cant_propietarios 0.514 1.000 0.647
## antiguedad_vehiculo 0.784 0.647 1.000
## kilometraje_anual 0.599 0.093 0.095
## precio -0.615 -0.445 -0.659
## kilometraje_anual precio
## kilometraje 0.599 -0.615
## cant_propietarios 0.093 -0.445
## antiguedad_vehiculo 0.095 -0.659
## kilometraje_anual 1.000 -0.209
## precio -0.209 1.000
Con base en la pestaña Vector de Medias y Boxplots, se puede observar que las variables cuantitativas analizadas muestran patrones de distribución particulares.
La variable kilometraje presenta una distribución con cola a la derecha, lo que sugiere que la mayoría de los vehículos tienen recorridos moderados, pero algunos presentan kilometrajes muy elevados que extienden la cola superior.
La variable Cant_propietarios tiende a tomar valores bajos en la mayoría de los casos, ya que la mayor parte de los vehículos suelen tener pocos propietarios previos; sin embargo, también pueden aparecer valores atípicos asociados a automóviles con múltiples transferencias.
La Edad_Vehículo puede presentar cierta asimetría hacia la derecha, ya que predominan vehículos relativamente recientes, mientras que algunos modelos más antiguos generan la extensión de la cola.
En cuanto a la variable Kilometraje_año, está generalmente presenta una distribución con cola a la derecha, dado que la mayoría de los vehículos tienen un uso anual moderado, pero algunos registran un uso muy intensivo que incrementa notablemente los valores superiores.
Finalmente, la variable Precio también puede mostrar una ligera cola hacia la derecha, indicando que la mayoría de los vehículos se concentran en rangos de precios medios, mientras que unos pocos, con características particulares o gamas superiores, elevan la cola superior de la distribución.
Con base en la matriz de varianzas-covarianzas y la matriz de correlaciones, se identifica que las relaciones lineales entre las variables cuantitativas suelen ser de baja a moderada intensidad.
Es común que variables como kilometraje y Edad_Vehículo presenten una correlación positiva, ya que los vehículos más antiguos tienden a haber recorrido mayores distancias.
Por otro lado, variables como Precio pueden mostrar correlaciones moderadas o débiles con Kilometraje_año o Cant_propietarios, lo que sugiere que su influencia directa no es estrictamente lineal.
En general, los coeficientes de correlación cercanos a cero indican que no existen relaciones lineales fuertes entre las variables, por lo que sus efectos mutuos son limitados. Esto abre la posibilidad de interacciones no lineales o de que cada variable capture dimensiones distintas del estado, historial y valor del vehículo. Estos aspectos se exploran con mayor detalle en la sección 1.5
En general, los gráficos multivariados cumplen dos objetivos esenciales: primero, ayudan a comparar el comportamiento de poblaciones de estudio con base en variables categóricas y facilitan la comprensión de la estructura de correlación entre varias variables. Además, permiten identificar patrones, tendencias, y posibles outliers en los datos, simplificando la interpretación de relaciones complejas y destacando las características más significativas de los mismos (Aldás, 2017). En este sentido, el conjunto de datos de trabajo tendrá apoyo descriptivo gráfico a través de tres diagramas: uno conjunto que integra dispersión, distribución y correlaciones; otro basado en la renderización de polígonos; y, por último, uno que recurre a las caras de Chernoff.
ggpairs(vehicle_price_prediction_modificado_MUESTREADO20K_ETL[,-c(1,2,4,5,6,11,12)])
vehicle_price_prediction_modificado_MUESTREADO20K_ETL$transmision <- factor(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$transmision)
levels= c (0,1)
labels= c ( "automatico" , "manual")
ggpairs(vehicle_price_prediction_modificado_MUESTREADO20K_ETL, column = c(3,7,8,9,10), aes(color = transmision, alpha = 0.5), upper = list(continuous = wrap("cor", size = 2.5)))
set.seed(051802)
vehicle_price_prediction_modificado = vehicle_price_prediction_modificado_MUESTREADO20K_ETL[sample(1:nrow(vehicle_price_prediction_modificado_MUESTREADO20K_ETL),23),-c(1,2,4,5,6,11,12)]
stars(vehicle_price_prediction_modificado, len = 1, cex = 0.4, key.loc = c(10, 2), draw.segments = TRUE)
set.seed(051802)
vehicle_price_prediction_modificado = vehicle_price_prediction_modificado_MUESTREADO20K_ETL [sample(1:nrow(vehicle_price_prediction_modificado_MUESTREADO20K_ETL),23),-c(1,2,4,5,6,11,12)]
faces(vehicle_price_prediction_modificado)
## effect of variables:
## modified item Var
## "height of face " "kilometraje"
## "width of face " "cant_propietarios"
## "structure of face" "antiguedad_vehiculo"
## "height of mouth " "kilometraje_anual"
## "width of mouth " "precio"
## "smiling " "kilometraje"
## "height of eyes " "cant_propietarios"
## "width of eyes " "antiguedad_vehiculo"
## "height of hair " "kilometraje_anual"
## "width of hair " "precio"
## "style of hair " "kilometraje"
## "height of nose " "cant_propietarios"
## "width of nose " "antiguedad_vehiculo"
## "width of ear " "kilometraje_anual"
## "height of ear " "precio"
Es posible analizar o determinar la distribución multivariada de un conjunto de datos mediante métodos descriptivos, como los gráficos, o inferenciales, como las pruebas estadísticas. Mientras que los procedimientos inferenciales permiten obtener conclusiones más generalizables, los gráficos resultan útiles como soporte para la interpretación de los resultados.
En este apartado se aborda la aplicación de procedimientos inferenciales para verificar si el conjunto de datos de trabajo, respecto a sus variables numéricas, sigue una distribución normal multivariada (DNM). Las pruebas de normalidad multivariada (PNM) que se aplicarán son: Mardia, Henze-Zirkler, Doornik-Hansen y Royston. Estas pruebas de normalidad se realizan bajo un nivel de significancia determinado \(\alpha = 0.05\) y a las hipótesis:\[H_0: \text {Las variables tienen una DNM}\] \[H_1: \text {Las variables NO tienen una DNM}\]
La prueba de Mardia se fundamenta en las extensiones de asimetría y curtosis, el cuadrado de la distancia de Mahalanobis, el número de variables \(p\) a analizar y el número de registros \(n\). Asimismo, se considera que la estadística de la prueba para la asimetría sigue una distribución \(\chi^2\), mientras que la estadística para la curtosis se distribuye de manera aproximada de forma normal.
La prueba de Henze-Zirkler se basa en la distancia funcional, ya que si el conjunto de datos sigue una distribución normal multivariada, el estadístico de la prueba se distribuye de manera aproximada como una lognormal, con parámetros de media \(\mu\) y varianza \(\sigma^2\).
La prueba de Bowman and Shenton se basa en la asimetría y la curtosis de un conjunto de datos multivariados, los cuales se transforman para asegurar la independencia. Se considera más potente que la prueba de Zhou-Shao en casos multivariados. El estadístico de la prueba se define como la suma de las transformaciones al cuadrado de la asimetría y la curtosis, y sigue aproximadamente una distribución \(\chi^2\).
Por otro lado, la prueba de Zhou-Shao es una prueba sencilla y a la vez muy eficaz para evaluar la normalidad multivariante, combina la curtosis multivariante (MK) con el test de Shapiro-Wilk, según la propuesta de Zhou y Shao (2014). El valor p del estadístico de prueba (Tn) se obtiene mediante una distribución nula simulada específicamente para Tn. Para más información, se puede consultar el trabajo de Zhou y Shao (2014).
Con base en la matriz de varianzas-covarianza, la matriz de correlaciones y el diagrama de dispersión, se concluye que las relaciones entre las variables cuantitativas analizadas en el conjunto de datos sobre vehículos son, en su mayoría, débiles o moderadas. Por ejemplo, la correlación entre kilometraje y antigüedad del vehículo es de 0.784, lo que indica una relación lineal positiva relativamente fuerte; mientras que la correlación entre precio y kilometraje es de –0.615, indicando que a mayor kilometraje, menor precio, reflejando el efecto de la depreciación.
El diagrama conjunto de dispersión, distribución y correlaciones refuerza estas observaciones, mostrando dispersión y patrones claros únicamente entre algunas variables específicas, como kilometraje y antigüedad. En general, estas métricas sugieren que no todas las variables presentan relaciones lineales fuertes, lo que podría indicar la necesidad de explorar interacciones no lineales o factores externos (como tipo de marca o tipo de combustible) para comprender mejor las posibles asociaciones entre las características del vehículo y su precio. Para más detalles, se puede consultar el análisis de regresión desarrollado sobre el mismo conjunto de datos en la sección 5.
Cuando se observa el Diagrama Conjunto de Dispersión, Distribución y Correlaciones en su versión basada en grupos a partir de la variable categórica transmisión, se puede apreciar que comparativamente la diferenciación por tipo de transmisión no muestra relevancia para explicar de manera significativa la variabilidad en precio o kilometraje, ya que las distribuciones y correlaciones dentro de cada grupo son muy similares.
En el diagrama de estrellas, se observa que las formas de los polígonos son heterogéneas, lo que evidencia la alta variabilidad en las observaciones, especialmente en las variables de kilometraje, antigüedad y precio. No se aprecia la formación de grupos claros, lo que indica que los vehículos del conjunto presentan combinaciones diversas de características.
En el diagrama de las Caras de Chernoff no se aprecia con claridad la formación de grupos entre los vehículos con características similares, lo que dificulta identificar patrones consistentes dentro del conjunto. Esto se debe a que las diferencias en las representaciones faciales no son lo suficientemente consistentes como para generar agrupamientos definidos. Sin embargo, de lograrse una agrupación, podrían identificarse pares como las caras 6 y 18, así como 2 y 12, que muestran ciertos niveles de similitud, posiblemente reflejando vehículos con características similares en antigüedad, kilometraje y precio.
set.seed(051802)
vehicle_price_prediction_modificado_MUESTREADO20K_ETL_5K =
vehicle_price_prediction_modificado_MUESTREADO20K_ETL[sample(1:nrow(vehicle_price_prediction_modificado_MUESTREADO20K_ETL),5000),-c(1,2,4,5,6,11,12)]
mardia(vehicle_price_prediction_modificado_MUESTREADO20K_ETL_5K)
## $mv.test
## Test Statistic p-value Result
## 1 Skewness 7915.9402 0 NO
## 2 Kurtosis 42.1233 0 NO
## 3 MV Normality <NA> <NA> NO
##
## $uv.shapiro
## W p-value UV.Normality
## kilometraje 0.9622 0 No
## cant_propietarios 0.8143 0 No
## antiguedad_vehiculo 0.9812 0 No
## kilometraje_anual 0.9969 0 No
## precio 0.9338 0 No
mhz(vehicle_price_prediction_modificado_MUESTREADO20K_ETL_5K)
## $mv.test
## Statistic p-value Result
## 33.9655 0 NO
##
## $uv.shapiro
## W p-value UV.Normality
## kilometraje 0.9622 0 No
## cant_propietarios 0.8143 0 No
## antiguedad_vehiculo 0.9812 0 No
## kilometraje_anual 0.9969 0 No
## precio 0.9338 0 No
msk(vehicle_price_prediction_modificado_MUESTREADO20K_ETL_5K, 10)
## $mv.test
## Statistic p-value Result
## 9690.3097 0 NO
##
## $uv.shapiro
## W p-value UV.Normality
## kilometraje 0.9622 0 No
## cant_propietarios 0.8143 0 No
## antiguedad_vehiculo 0.9812 0 No
## kilometraje_anual 0.9969 0 No
## precio 0.9338 0 No
mvnTest(vehicle_price_prediction_modificado_MUESTREADO20K_ETL_5K, 10)
## $mv.test
## Tn p-value Result
## 1 0 NO
##
## $uv.shapiro
## W p-value UV.Normality
## kilometraje 0.9622 0 No
## cant_propietarios 0.8143 0 No
## antiguedad_vehiculo 0.9812 0 No
## kilometraje_anual 0.9969 0 No
## precio 0.9338 0 No
Se evaluó la normalidad multivariada de las variables cuantitativas aplicando las pruebas de PNM Mardia, PNM Henze–Zirkler,PNM Bowman and Shenton y PNM Zhou–Shao, todas bajo un nivel de significancia \(\alpha=0.05\). Las hipótesis consideradas fueron: H₀: el vector de variables sigue una Distribución Normal Multivariada (DNM). H₁: el vector de variables no sigue una DNM.
La PNM Mardia Evalúa simultáneamente si la distribución conjunta presenta asimetría (skewness) y curtosis(kurtosis) compatibles con una DNM. Los \(p-values\) obtenidos fueron menores a \(\alpha=0.05\) en ambos componentes, lo que indica desviaciones significativas en la forma de la distribución (asimetría marcada y curtosis diferente a la normal). Esto lleva a rechazar la normalidad multivariad
La Henze-Zirkler Considerada una de las pruebas más robustas, evalúa la distancia entre la distribución observada y la normal multivariada esperada. El resultado mostró un \(p-value\) menor que \(\alpha=0.05\), confirmando que los datos no se ajustan a una DNM. Esto refuerza la presencia de relaciones no normales entre las variables.
En el caso de la PNM Bowman and Shenton Examina conjuntamente asimetría y curtosis en el vector multivariado. También arrojó valores significativos \(p-value\) menor que \(\alpha=0.05\), indicando desviaciones sistemáticas respecto a la normalidad.
Finalmente, la PNM Zhou-Shao Prueba no paramétrica diseñada para detectar desviaciones fuertes en la estructura conjunta de los datos. Los resultados fueron significativos, lo que confirma nuevamente el rechazo de H₀.
En síntesis, para el nivel de significancia considerado \(\alpha = 0.05\), ninguna de las pruebas aplicadas apoya la hipótesis nula de normalidad multivariada, por lo que se acepta la hipótesis alternativa: el conjunto de datos, en términos de sus variables numéricas, no proviene de una distribución normal multivariada.
En esta segunda etapa del estudio, se presentarán cálculos, visualizaciones e interpretaciones basadas en el conjunto de datos analizado previamente en la Fase 1. Ahora, el enfoque se centrará en el análisis de componentes principales (ACP) aplicado a las variables cuantitativas, incluyendo aspectos como la selección de componentes, calidad de representación, contribuciones y su interpretación.
El ACP se logra a lo largo de las siguientes fases: generación de nuevas variables, reducción dimensional del espacio de los datos, eliminación de variables de poco aporte e interpretación de los componentes resultantes en el contexto del problema del cual se obtuvieron los dato.
Estimado lector, si desea explorar los fundamentos de este análisis con mayor profundidad. Los detalles del conjunto de datos se encuentran descritos en la Sección 1.2, mientras que los principios teóricos que sustentan este estudio están cuidadosamente desarrollados en la Fase 1. Una lectura detenida de estas secciones enriquecerá su comprensión y apreciación del trabajo presentado.
El Análisis de Componentes Principales (ACP) permite reorganizar un conjunto de datos multivariado al reducir el número de variables, sin requerir suposiciones específicas sobre la distribución de probabilidad de estas. Esta reducción se alcanza mediante la creación de combinaciones lineales de las variables originales, diseñadas para captar la mayor variabilidad posible en los datos. De este modo, el ACP genera nuevas variables, denominadas componentes principales, que presentan independencia estadística y ausencia de correlación, siempre bajo el supuesto de normalidad.
La interpretación del Análisis de Componentes Principales (ACP) se basa en los resultados obtenidos a partir de la matriz de correlaciones, los valores y vectores propios, la matriz ACP y los gráficos diagnósticos, con el fin de comprender la estructura interna del conjunto de datos y la calidad de su representación en un espacio reducido. Los valores propios y la matriz ACP muestran que las primeras dimensiones capturan el mayor porcentaje de variabilidad total, lo que indica que es posible sintetizar adecuadamente la información del sistema original en un número reducido de componentes sin comprometer su estructura estadística esencial.
La matriz de correlaciones evidencia relaciones lógicas entre las variables: el kilometraje se relaciona directamente con la antigüedad del vehículo, mientras que el precio presenta correlaciones inversas con ambas, reflejando el proceso de depreciación natural asociado al uso y al paso del tiempo. A su vez, variables como el kilometraje anual y la cantidad de propietarios muestran correlaciones más moderadas, pero mantienen un aporte significativo para describir patrones de rotación, historial y ritmo de uso de los vehículos.
El análisis de los valores y vectores propios permite identificar el peso que cada variable tiene en la construcción de los componentes principales. En este sentido, la primera componente agrupa principalmente la variabilidad relacionada con el precio, el kilometraje acumulado y la antigüedad, formando un eje asociado a la depreciación y desgaste del vehículo. La segunda componente, por su parte, recoge la información vinculada al kilometraje anual y al número de propietarios, lo que configura un eje relacionado con la intensidad de uso reciente y los patrones de transferencia del vehículo.
La comparación entre la matriz de correlaciones original y la obtenida a partir de los scores del ACP muestra que la estructura relacional del conjunto de datos se conserva dentro del espacio reducido, lo que confirma la validez y eficiencia del procedimiento. Este resultado respalda el uso del ACP como herramienta para sintetizar información redundante, manteniendo los patrones esenciales del fenómeno estudiado.
Finalmente, los gráficos de Cattell y Cattell-Kaiser permiten determinar el número adecuado de componentes a retener. El quiebre observado en la gráfica de sedimentación, junto con el criterio de Kaiser (valor propio mayor a 1), confirma que las primeras dimensiones concentran la variabilidad suficiente para ser consideradas en el análisis, mientras que las restantes no aportan información relevante adicional. En conjunto, estos elementos demuestran que la reducción dimensional realizada es adecuada y que los componentes obtenidos representan de manera fiel y eficaz las relaciones existentes entre las variables cuantitativas del estudio.
get_eigenvalue(PCA(vehicle_price_prediction_modificado_MUESTREADO20K_ETL[,-c(1,2,4,5,6,11,12)], ncp = 6, scale.unit = TRUE, graph = F))
## eigenvalue variance.percent cumulative.variance.percent
## Dim.1 2.97851351 59.570270 59.57027
## Dim.2 1.08348646 21.669729 81.24000
## Dim.3 0.54078683 10.815737 92.05574
## Dim.4 0.34110603 6.822121 98.87786
## Dim.5 0.05610716 1.122143 100.00000
round(cor(vehicle_price_prediction_modificado_MUESTREADO20K_ETL[,-c(1,2,4,5,6,11,12)]),2)
## kilometraje cant_propietarios antiguedad_vehiculo
## kilometraje 1.00 0.51 0.78
## cant_propietarios 0.51 1.00 0.65
## antiguedad_vehiculo 0.78 0.65 1.00
## kilometraje_anual 0.60 0.09 0.10
## precio -0.61 -0.44 -0.66
## kilometraje_anual precio
## kilometraje 0.60 -0.61
## cant_propietarios 0.09 -0.44
## antiguedad_vehiculo 0.10 -0.66
## kilometraje_anual 1.00 -0.21
## precio -0.21 1.00
princomp(vehicle_price_prediction_modificado_MUESTREADO20K_ETL[,-c(1,2,4,5,6,11,12)], cor = TRUE)$sdev^2
## Comp.1 Comp.2 Comp.3 Comp.4 Comp.5
## 2.97851351 1.08348646 0.54078683 0.34110603 0.05610716
princomp(vehicle_price_prediction_modificado_MUESTREADO20K_ETL[,-c(1,2,4,5,6,11,12)], cor = TRUE)$loadings[ ,1:5]
## Comp.1 Comp.2 Comp.3 Comp.4 Comp.5
## kilometraje 0.5325797 0.2607584 0.008214931 0.3977531 0.70006350
## cant_propietarios 0.4215429 -0.3511541 0.706010944 -0.4445049 0.05437305
## antiguedad_vehiculo 0.5138550 -0.2886414 -0.061243081 0.5455653 -0.59266090
## kilometraje_anual 0.2540115 0.8426995 0.170386076 -0.2024179 -0.39412092
## precio -0.4583576 0.1234487 0.684615901 0.5528050 -0.01940154
par(mfrow=c(1,2))
corrplot::corrplot(cor(vehicle_price_prediction_modificado_MUESTREADO20K_ETL[,-c(1,2,4,5,6,11,12)]), method = "color", type = "upper", number.cex = 0.4)
corrplot::corrplot(cor(princomp(vehicle_price_prediction_modificado_MUESTREADO20K_ETL[,-c(1,2,4,5,6,11,12)], cor = TRUE)$scores), method = "color", type = "upper", number.cex = 0.4)
fviz_eig(PCA(vehicle_price_prediction_modificado_MUESTREADO20K_ETL[,-c(1,2,4,5,6,11,12)], scale.unit = T, graph = F), addlabels = T, ylim=c(0,90), main = "")
## Warning in geom_bar(stat = "identity", fill = barfill, color = barcolor, :
## Ignoring empty aesthetic: `width`.
scree(vehicle_price_prediction_modificado_MUESTREADO20K_ETL[,-c(1,2,4,5,6,11,12)],factors = FALSE, pc = TRUE, main ="")
La Matriz ACP muestra los valores propios asociados a cada componente principal y la proporción de varianza explicada por estos. En el análisis realizado, el Componente 1 explica aproximadamente \(59.57\)\(%\)de la variabilidad total del conjunto de datos, lo que indica que concentra la mayor parte de la información contenida en las variables originales. El Componente 2 aporta alrededor de \(21.84\)\(%\), de modo que las dos primeras dimensiones acumulan cerca del \(81\)\(%\) de la varianza total. Este resultado justifica la reducción de dimensionalidad, ya que permite interpretar la estructura interna del sistema manteniendo la mayor parte de la información relevante. Los componentes restantes (\(10.87\)\(%\), \(6.82\)\(%\) y \(1.12\)\(%\)) poseen menor peso y su contribución es marginal en términos descriptivos, por lo cual no son indispensables para el análisis global. La Matriz de Correlaciones evidencia la fuerza y dirección de las relaciones entre las variables originales del estudio: kilometraje, cantidad de propietarios, antigüedad del vehículo, kilometraje anual y precio. Se observa que el kilometraje presenta una correlación positiva alta con la antigüedad del vehículo (\(0.78\)) y una correlación moderada con el kilometraje anual (\(0.60\)). Esto refleja que los vehículos más antiguos y más usados tienden a acumular mayor recorrido total. A su vez, el precio muestra correlaciones negativas con varias variables de desgaste, como el kilometraje (\(-0.61\)) y la antigüedad (\(-0.66\)), lo que indica que los vehículos con mayor uso y más años tienden a tener un valor comercial más bajo. Estas relaciones confirman que los patrones de uso del vehículo influyen de manera directa en su depreciación y aportan la base estructural a partir de la cual se construyen los componentes principales. Los vectores propios permiten identificar el peso o contribución de cada variable en la formación de los componentes principales. En este análisis, el Componente 1 recibe las cargas más altas por parte de variables como el kilometraje (\(0.97\)), la antigüedad del vehículo (\(0.82\)) y la cantidad de propietarios (\(0.53\)), mientras que el precio aporta en sentido inverso (\(-0.45\)). Estas cargas indican que este componente está capturando un eje interpretativo relacionado con el uso acumulado y la depreciación del vehículo. Por su parte, el Componente 2 está influido principalmente por el kilometraje anual (\(0.84\)), lo que sugiere que esta dimensión representa la intensidad de uso anual, independiente del desgaste acumulado. De esta manera, los dos primeros componentes dividen la información en dos grandes fenómenos: el desgaste histórico y la dinámica de uso reciente. El análisis de Correlaciones Comparadas permite contrastar la matriz de correlaciones de las variables originales con la matriz correspondiente a los componentes principales. Mientras la primera refleja relaciones directas entre las variables del dataset, la estructura de correlaciones entre los componentes confirma que estos son ortogonales, es decir, no están correlacionados entre sí. Esta propiedad demuestra que cada componente captura una parte distinta y no redundante de la variabilidad total. Además, se observa que la organización de las correlaciones en los componentes permite condensar de forma eficiente la estructura global del conjunto de datos, facilitando la interpretación y reduciendo la complejidad del modelo sin pérdida sustancial de información. El Gráfico de Cattell (scree plot) muestra el porcentaje de varianza explicada por cada componente y permite visualizar el punto de inflexión o “codo”. En este caso, el gráfico evidencia un descenso abrupto después del Componente 2, donde la varianza explicada cae de forma significativa. Este comportamiento confirma que los primeros dos componentes son suficientes para modelar la estructura interna del conjunto de datos, ya que concentran el \(81\)\(%\) de la información total. Los componentes restantes presentan porcentajes muy reducidos, lo que indica que su inclusión no aporta valor interpretativo significativo. De esta forma, el scree plot respalda la decisión de conservar únicamente las dos primeras dimensiones en el análisis. El criterio de Cattell-Kaiser establece que deben conservarse únicamente los componentes cuyo valor propio sea mayor a 1. En los resultados obtenidos, el Componente 1 presenta un valor propio de aproximadamente \(2.97\) y el Componente 2 un valor cercano a 1.08, ambos superiores al umbral establecido. Los demás componentes presentan valores inferiores, lo que indica que no deben ser retenidos. En el gráfico correspondiente se observa de forma clara que solo los dos primeros puntos se ubican por encima de la línea de referencia del valor propio 1, lo que refuerza la selección de dos componentes principales como suficientes para representar la estructura de datos. Este criterio coincide con lo observado en el gráfico de Cattell tradicional, consolidando la decisión de trabajar únicamente con dos dimensiones relevantes.
El análisis de componentes principales (ACP) transforma variables correlacionadas en nueveas dimensiones, y esta sección evalúa qué tan bien las variables originales quedaron representadas en el nuevo espacio factorial. Para ello, se analizan indicadores como correlaciones factoriales, cos² y contribuciones, los cuales permiten determinar la fidelidad de la proyección de cada variable sobre los componentes seleccionados.
Siguiendo lo establecido por (Díaz Morales & Morales Rivera, 2012), las variables estandarizadas se proyectan sobre una hiperesfera de correlaciones y su interpretación debe iniciarse examinando dichas correlaciones. Una alta calidad de representación implica que la variable conserva su información relevante en el plano factorial; por el contrario, valores bajos indicarían la necesidad de considerar dimensiones adicionales o reevaluar su aporte al análisis.
En síntesis, esta etapa garantiza que la reducción dimensional no distorsione el comportamiento de las variables estudiadas: precio, kilometraje, antigüedad, uso anual y ¨número de propietarios**, sino que fortalezca la interpretación de los componentes principales, preservando la estructura informativa del conjunto de datos.
Explorar las pestañas revela que la reducción de dimensionalidad permite evaluar la estructura interna del conjunto de datos a partir de las componentes principales. Este análisis se basa en la comparación simultánea de las correlaciones entre variables, la calidad de representación y la distribución de los individuos según las dimensiones seleccionadas, utilizando escalas continuas de contribución y proyección.
El Círculo de Correlaciones muestra cómo las variables originales se relacionan con las dos dimensiones principales del análisis. En este caso, la dimensión 1 (Dim1) agrupa la mayor parte de la información relevante: variables como kilometraje, antiguedad_vehiculo, precio y cant_propietarios se encuentran alineadas y cercanas al borde del círculo, lo que indica una alta correlación con este eje y, por lo tanto, una contribución significativa en su construcción. Esto sugiere que Dim1 está capturando un componente asociado al uso del vehículo y sus características estructurales.
En contraste, la dimensión 2 (Dim2)está principalmente asociada a la variable kilometraje_anual, cuyo vector se proyecta de forma destacada hacia esta dimensión y se aleja del conjunto de variables asociadas a (Dim1). Esta separación indica que (Dim2) representa un fenómeno alternativo, relacionado con la intensidad de uso reciente del vehículo, diferenciándose claramente de los factores estructurales identificados en (Dim1). Las relaciones entre variables también se evidencian en la cercanía de los vectores: kilometraje y antiguedad_vehiculo muestran direcciones similares, lo que indica un patrón compartido en las dos dimensiones. Por otro lado, kilometraje_anual forma ángulos amplios (cercanos a la perpendicularidad) respecto a variables como precio o cant_propietarios, lo que sugiere una baja correlación entre estos atributos dentro del espacio definido por las dos componentes principales.
La matriz de representación (cos²) refleja qué tan bien cada variable queda proyectada en las dimensiones principales. En la dimensión 1(Dim1), destacan valores elevados para kilometraje (\(0.84\)), antiguedad_vehiculo \(0.78\), precio \(0.62\) y cant_propietarios \(0.52\), lo que confirma que estas variables están fuertemente asociadas con esta componente. Su variabilidad se concentra principalmente en este eje, reforzando su papel dentro del patrón estructural del análisis. Por su parte, la dimensión 2(Dim2) muestra una representación muy alta para kilometraje_anual \(0.76\), indicando que esta variable se explica mejor desde este eje y no desde la primera componente. El resto de variables presenta valores bajos de cos² en (Dim2), lo que implica que su estructura se distribuye de manera predominante hacia la primera dimensión. En conjunto, la matriz permite diferenciar claramente entre variables de naturaleza estructural altamente representadas en (Dim1)y variables de comportamiento reciente representadas en (Dim2), mostrando la coherencia interna del modelo.
El gráfico de Calidad de Representación refuerza la interpretación anterior al mostrar mediante una escala continua de colores qué tan bien se ajusta cada variable al plano formado por (Dim1) y (Dim2). Las tonalidades cálidas asociadas a kilometraje, antiguedad_vehiculo, precio y cant_propietarios evidencian que estas variables poseen una alta precisión de proyección en la primera dimensión, siendo las mejor representadas en el espacio factorial. En contraste, kilometraje_anual obtiene su mejor calidad de representación en la dimensión 2(Dim2), donde presenta un cos² de \(0.76\). Este patrón indica que su contribución se distribuye principalmente hacia este eje, resultando en un vector claramente diferenciado en el gráfico. Variables con colores más fríos reflejan una representación parcial o baja, indicando que una parte de su variabilidad depende de dimensiones adicionales más allá de las dos principales. Este análisis permite identificar de manera visual la complementariedad entre las variables que construyen (Dim1) y aquellas que aportan distintivamente a (Dim2), enriqueciendo la interpretación global del modelo.
Las coordenadas individuales muestran cómo se distribuyen los registros del conjunto de datos en el espacio definido por las dos dimensiones principales. En la dimensión 1(Dim1), algunos individuos presentan valores negativos pronunciados como los registros (1, 5 y 7), lo que sugiere que comparten características asociadas con niveles bajos en las variables que más influyen a este componente. Por el contrario, registros como el (15, 19 y 20) exhiben valores positivos altos, representando perfiles opuestos y posiblemente más favorecedores en términos de uso, antigüedad o precio. En la dimensión 2(Dim2), destacan individuos como el (4, 3 y 19), que se proyectan de manera positiva, mostrando comportamientos diferenciados respecto al kilometraje anual. Por otro lado, registros como el (8, 11 y 14) se proyectan negativamente en esta dimensión, reflejando perfiles distintos en relación con esta variable. Estas coordenadas permiten identificar grupos de individuos con comportamientos similares y detectar patrones que contribuyen a la comprensión multidimensional del conjunto de datos.
fviz_pca_var(PCA(vehicle_price_prediction_modificado_MUESTREADO20K_ETL[,-c(1,2,4,5,6,11,12)], scale.unit = T, graph = F),col.var="#3B83BD", repel = T, col.circle = "#CDCDCD", ggtheme = theme_bw())
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## ℹ The deprecated feature was likely used in the ggpubr package.
## Please report the issue at <https://github.com/kassambara/ggpubr/issues>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
## ℹ Please use tidy evaluation idioms with `aes()`.
## ℹ See also `vignette("ggplot2-in-packages")` for more information.
## ℹ The deprecated feature was likely used in the factoextra package.
## Please report the issue at <https://github.com/kassambara/factoextra/issues>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
(get_pca_var(PCA(vehicle_price_prediction_modificado_MUESTREADO20K_ETL[,-c(1,2,4,5,6,11,12)], ncp = 5, scale.unit = TRUE, graph = F)))$cos2
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## kilometraje 0.8448288 0.07367161 3.649505e-05 0.05396555 2.749750e-02
## cant_propietarios 0.5292770 0.13360382 2.695560e-01 0.06739729 1.658768e-04
## antiguedad_vehiculo 0.7864674 0.09026943 2.028337e-03 0.10152732 1.970747e-02
## kilometraje_anual 0.1921791 0.76942972 1.569981e-02 0.01397614 8.715198e-03
## precio 0.6257611 0.01651188 2.534662e-01 0.10423973 2.111985e-05
fviz_pca_var(PCA(vehicle_price_prediction_modificado_MUESTREADO20K_ETL[,-c(1,2,4,5,6,11,12)], ncp = 5, scale.unit = TRUE, graph = F), col.var="cos2", gradient.cols=c("#00AFBB","#E7B800","#FC4E07"), repel = TRUE)
head((PCA(vehicle_price_prediction_modificado_MUESTREADO20K_ETL[,-c(1,2,4,5,6,11,12)], ncp = 5, scale.unit = TRUE, graph = F))$ind$coord, n = 23L)
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## 1 -2.9885593 -0.6439590 -1.02221922 -0.26357471 -0.512910572
## 2 -0.3559620 0.2203184 -1.04430563 -0.01552121 0.056717977
## 3 1.9995718 1.3687996 -0.22017108 -0.26800124 -0.221391807
## 4 -1.7324783 2.4323698 -0.25931943 -0.42282232 0.565354503
## 5 -3.4335027 -0.8134123 -0.54671977 0.21427486 -0.600400726
## 6 -0.9626471 0.2547214 -0.25319592 0.63538226 0.082057861
## 7 -2.3365104 -1.3135935 0.58372128 0.46634789 -0.135775419
## 8 1.3011388 -1.3964842 0.70656794 1.18169952 0.460538636
## 9 -1.9089958 0.9157192 -0.76158165 -0.13354432 0.105204478
## 10 1.0030109 -0.4110688 0.32972386 -0.41813967 -0.029154220
## 11 0.8858730 -0.9926864 0.21143619 -0.27168782 0.085752227
## 12 -0.3641176 0.3090336 0.40375865 -0.70946941 0.008146841
## 13 -0.6885553 -0.2267846 0.06772581 -1.11749848 -0.074277137
## 14 0.6880992 -0.7979359 0.05314280 -0.85188762 -0.017475836
## 15 3.9395361 -0.3278491 -0.33350917 1.26332302 -0.158258622
## 16 -2.3754259 1.1918650 0.04705684 0.48369728 0.159472403
## 17 -1.6371942 0.2208996 -0.34152906 -0.10711355 -0.006130197
## 18 -1.5513544 0.7647061 0.62794549 -0.38959403 0.100861889
## 19 2.9392124 1.4337508 0.80379875 0.77458460 -0.527445715
## 20 3.7427049 -0.7409900 -0.28118181 1.45673514 0.082198934
## 21 -2.3305783 -0.3888566 -0.47895794 -0.46894017 -0.270329244
## 22 1.3512690 1.1303789 0.35434010 0.21005078 -0.156106998
## 23 2.4701779 -0.4583225 -0.27211059 0.05714113 -0.049370791
El análisis se realiza aplicando un Análisis de Componentes Principales (ACP) con el objetivo de identificar la estructura interna de las variables estudiadas y determinar su contribución dentro de los ejes principales. Para ello se emplean diferentes salidas estadísticas: la matriz de correlaciones, el círculo de correlaciones, la gráfica de calidad de representación (cos²) y las coordenadas individuales. Cada uno de estos elementos permite evaluar la relación entre variables, su aporte a los componentes principales y el grado de representación en el plano factorial. Con base en estas salidas, se desarrolla el análisis del comportamiento de las variables dentro de los dos primeros componentes del ACP, que concentran la mayor proporción de información del sistema.
Los autores (Díaz Morales & Morales Rivera, 2012) señalan que la interpretación de los resultados está estrechamente ligada al cálculo de elementos como coordenadas, contribuciones y cosenos cuadrados. Por lo tanto, es esencial que las variables estén bien conceptualizadas y contextualizadas para facilitar su comprensión. En este sentido, analizar la contribución de cada variable a una componente ayuda a interpretar los resultados, mostrando cómo cada una influye en la definición de las componentes generadas. Este análisis se lleva a cabo en esta sección para determinar el aporte de cada variable en la construcción de las componentes.
Basado en las variables cuantitativas del conjunto de datos descrito en la sección 1.2, se requiere determinar las contribuciones de cada variable en la construcción de las componentes.
La navegación a través de las pestañas facilita la visualización de las contribuciones de las variables del conjunto de datos en forma de representaciones numéricas y gráficas, permitiendo comprender cómo cada variable influye en la construcción de las componentes. Esto permite analizar la proporción de variabilidad que cada variable aporta a la variabilidad total de la componente con la que está asociada.
La Matriz de Contribuciones muestra cómo cada variable contribuye a la retención de variabilidad en la construcción de cada componente. Los diagramas de barras, que se visualizan en las pestañas desde Contribuciones a D1 hasta Contribuciones a D5, ilustran las contribuciones específicas de las variables para explicar la variabilidad en cada componente. Cada gráfico incluye una línea que indica la contribución media, lo que facilita la identificación de las variables que tienen mayor impacto en la explicación de la variabilidad de los componentes.
En Contribuciones a D1 se visualiza que las variables por encima de la contribución media: kilometraje,antiguedad_vehiculo y precio , los cente el \(76,05%\) de la variabilidad del componente 1.
En Contribuciones a D2 se visualiza que las variables por encima de la contribución media: kilometraje_anual que retiene aproximadamente el \(70,98%\) de la variabilidad del componente 2.
En Contribuciones a D3 se visualiza que las variables por encima de la contribución media: cant_propietarios y precio que retienen aproximadamente el \(96,68%\) de la variabilidad del componente 3.
En Contribuciones a D4 se visualiza que la variable por encima de la contribución media: precio* y antiguedad_vehiculo** que retienen aproximadamente el \(60,43%\) de la variabilidad del componenete 4.
En Contribuciones a D5 se visualiza que las variables por encima de la contribución media: kilometraje y antiguedad_vehiculo que retienen aproximadamenteel \(84,1%\) de la variabilidad del componente 5.
(get_pca_var(PCA(vehicle_price_prediction_modificado_MUESTREADO20K_ETL[,-c(1,2,4,5,6,11,12)], ncp = 5, scale.unit = TRUE, graph = F)))$contrib
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## kilometraje 28.364110 6.799495 0.00674851 15.820756 49.00889073
## cant_propietarios 17.769838 12.330917 49.84514529 19.758456 0.29564285
## antiguedad_vehiculo 26.404696 8.331385 0.37507149 29.764153 35.12469469
## kilometraje_anual 6.452182 71.014244 2.90314150 4.097302 15.53312974
## precio 21.009173 1.523958 46.86989321 30.559333 0.03764199
fviz_contrib(PCA(vehicle_price_prediction_modificado_MUESTREADO20K_ETL[,-c(1,2,4,5,6,11,12)], ncp = 6, scale.unit = TRUE, graph = F), choice = "var", axes = 1, top = 10)
fviz_contrib(PCA(vehicle_price_prediction_modificado_MUESTREADO20K_ETL[,-c(1,2,4,5,6,11,12)], ncp = 6, scale.unit = TRUE, graph = F), choice = "var", axes = 2, top = 10)
fviz_contrib(PCA(vehicle_price_prediction_modificado_MUESTREADO20K_ETL[,-c(1,2,4,5,6,11,12)], ncp = 6, scale.unit = TRUE, graph = F), choice = "var", axes = 3, top = 10)
fviz_contrib(PCA(vehicle_price_prediction_modificado_MUESTREADO20K_ETL[,-c(1,2,4,5,6,11,12)], ncp = 6, scale.unit = TRUE, graph = F), choice = "var", axes = 4, top = 10)
fviz_contrib(PCA(vehicle_price_prediction_modificado_MUESTREADO20K_ETL[,-c(1,2,4,5,6,11,12)], ncp = 6, scale.unit = TRUE, graph = F), choice = "var", axes = 5, top = 10)
Representar los registros en un espacio de dimensiones reducidas permite situarlos en un plano de factores, lo que facilita su análisis e interpretación. Las variables reducidas se corresponden con las componentes principales, que se utilizan como ejes en el plano y cuyos valores son los puntajes de las componentes. La distancia entre los puntos representados por estos puntajes es clave para identificar similitudes entre los perfiles de las observaciones. No obstante, las similitudes pueden aparecer solo en algunas variables y no en todas. Así, se busca que las distancias en el espacio de alta dimensión se conserven en el espacio reducido, manteniendo la estructura de las relaciones entre los datos. Según (Díaz Morales & Morales Rivera, 2012).
El biplot correspondiente al tipo de combustible (eléctrico, gasolina y diésel) presenta una diferenciación más evidente en comparación con la transmisión. Los vehículos eléctricos tienden a agruparse en zonas asociadas a menor antigüedad y menor kilometraje acumulado, lo cual es consistente con su adopción más reciente en el mercado. Por otro lado, los vehículos diésel y gasolina muestran una mayor dispersión, especialmente en regiones relacionadas con altos niveles de kilometraje y antigüedad.
La orientación de las variables sugiere que el tipo de combustible está relacionado con patrones específicos de uso y depreciación, lo que permite inferir que esta variable categórica contribuye de forma moderada a la diferenciación de las observaciones en el espacio de componentes principales.
En el biplot asociado al tipo de transmisión (automática y manual), se observa una mayor superposición entre ambos grupos en el plano de las dos primeras componentes principales. Aunque existen ligeras tendencias de separación en algunas regiones del espacio factorial, la dispersión general indica que el tipo de transmisión no es un factor dominante en la variabilidad capturada por Dim.1 y Dim.2.
Las variables numéricas mantienen la misma orientación estructural que en el análisis general, lo que confirma la estabilidad del modelo. Sin embargo, la ausencia de una separación marcada sugiere que las diferencias entre vehículos automáticos y manuales no explican de manera significativa los patrones principales asociados al desgaste, uso y precio del vehículo.
El biplot correspondiente a la gama vehicular (alta, media y baja) muestra una estructura clara en el plano factorial. La Dimensión 1, que concentra la mayor proporción de varianza, está fuertemente asociada a variables relacionadas con el uso acumulado y la depreciación, como el kilometraje y la antigüedad del vehículo, mientras que el precio se proyecta en sentido opuesto, reflejando su relación inversa con dichas variables.
Se observa que los vehículos de gama alta tienden a concentrarse en zonas asociadas a menores niveles de desgaste relativo y valores más altos de precio, mientras que los de gama baja se distribuyen hacia regiones donde predominan mayores valores de kilometraje y antigüedad. La gama media presenta una dispersión intermedia, lo cual indica una transición gradual entre ambos extremos. Esta representación evidencia que la gama vehicular es una variable categórica con capacidad para generar agrupaciones interpretables dentro del espacio reducido.
vehiculos_muestreado <- vehicle_price_prediction_modificado_MUESTREADO20K_ETL[
sample(1:nrow(vehicle_price_prediction_modificado_MUESTREADO20K_ETL), 100),
-c(1,4,6,11,12)]
vehiculos_muestreado$tipo_de_combustible <- factor(vehiculos_muestreado$tipo_de_combustible,
levels = unique(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$tipo_de_combustible),
labels = unique(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$tipo_de_combustible))
fviz_pca_biplot(PCA(vehiculos_muestreado[,], ncp = 5, scale.unit = TRUE, graph = FALSE, quali.sup = "tipo_de_combustible"), axes = c(1,2), repel = TRUE, habillage = "tipo_de_combustible")
set.seed(780729)
vehiculos_muestreado2 <- vehicle_price_prediction_modificado_MUESTREADO20K_ETL[sample(1:nrow(vehicle_price_prediction_modificado_MUESTREADO20K_ETL), 200), -c(1,5,6,11,12)]
vehiculos_muestreado2$transmision <- factor(vehiculos_muestreado2$transmision)
fviz_pca_biplot(PCA(vehiculos_muestreado2[,], ncp = 5, scale.unit = TRUE, graph = FALSE, quali.sup = "transmision"), axes = c(1,2), repel = TRUE, habillage = "transmision")
set.seed(780729)
vehiculos_muestreado3 <- vehicle_price_prediction_modificado_MUESTREADO20K_ETL[sample(1:nrow(vehicle_price_prediction_modificado_MUESTREADO20K_ETL), 150), -c(1,4,5,6,11)]
vehiculos_muestreado3$gama_vehicular <- trimws(vehiculos_muestreado3$gama_vehicular)
vehiculos_muestreado3$gama_vehicular <- as.factor(vehiculos_muestreado3$gama_vehicular)
idx_gama <- which(names(vehiculos_muestreado3) == "gama_vehicular")
fviz_pca_biplot(PCA(vehiculos_muestreado3, ncp = 5, scale.unit = TRUE, graph = FALSE, quali.sup = idx_gama), axes = c(1,2), repel = TRUE, habillage = "gama_vehicular")
pca_result <- PCA(vehicle_price_prediction_modificado_MUESTREADO20K_ETL[, -c(1,4,5,6,11,12)], ncp = 5, scale.unit = TRUE, graph = FALSE)
res.coord <- pca_result$ind$coord
head(res.coord)
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## 1 -3.5230020 -0.72943069 -0.9779092 -0.49157509 0.60974655
## 2 -0.3877686 0.16962087 -1.0510735 -0.03636391 -0.06886444
## 3 1.8479242 1.59830110 -0.1969783 -0.34053882 0.23511225
## 4 -2.3406778 2.34766463 -0.2970047 -0.14085476 -0.66287489
## 5 -3.8935266 -0.98622682 -0.5392726 0.03766639 0.72343052
## 6 -0.9069173 0.07518764 -0.3198987 0.74232252 -0.07216449
Se busca profundizar en el análisis multivariado de las variables cualitativas del conjunto de datos mediante técnicas de Análisis de Correspondencias Simples (ACS) y Múltiples (ACM). Los objetivos son: construir tablas de contingencia para identificar asociaciones entre categorías; generar la tabla disyuntiva completa necesaria para el ACM; evaluar la calidad de representación de las modalidades en los planos factoriales; analizar las contribuciones de cada categoría a la formación de las dimensiones; e interpretar los patrones de relación entre atributos vinculados a características técnicas y comerciales de los vehículos usados. Esto permitirá caracterizar la estructura cualitativa del conjunto de datos y fortalecer la comprensión de las asociaciones presentes entre las diferentes modalidades categórica.
Según (Aldás & Uriel, 2017),el análisis de correspondencias simple (ACS) tiene como propósito reducir la dimensionalidad de las relaciones entre categorías de dos variables categóricas, representándolas en un espacio multidimensional. Este método permite analizar gráficamente las distancias entre las categorías de las variables, facilitando la interpretación de tablas de contingencia. El número máximo de dimensiones necesarias para explicar dichas relaciones corresponde a uno menos el número de categorías de la variable con menor cantidad de niveles.
Asimismo, el ACS, basado en tablas de contingencia, puede ampliarse para incluir más de dos variables categóricas, lo que se conoce como Análisis de correspondencias múltiples (ACM). Este enfoque utiliza una tabla disyuntiva completa, permitiendo explorar y representar relaciones más complejas entre múltiples variables categóricas.
addmargins(table(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$transmision, vehicle_price_prediction_modificado_MUESTREADO20K_ETL$tipo_de_combustible))
##
## Diesel Electric Gasoline Sum
## automatico 3081 3634 3125 9840
## manual 3204 3559 3195 9958
## Sum 6285 7193 6320 19798
addmargins(table(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$transmision, vehicle_price_prediction_modificado_MUESTREADO20K_ETL$marca_vehiculo))
##
## Acura Audi BMW Cadillac Chevrolet Chrysler Dodge Ford GMC
## automatico 390 372 399 410 404 388 378 401 355
## manual 404 362 417 381 366 390 400 407 375
## Sum 794 734 816 791 770 778 778 808 730
##
## Honda Hyundai Jeep Kia Land Rover Lexus Mazda Mercedes-Benz
## automatico 382 386 397 419 377 421 383 368
## manual 427 377 439 417 423 404 394 395
## Sum 809 763 836 836 800 825 777 763
##
## Nissan Porsche Ram Subaru Tesla Toyota Volkswagen Volvo Sum
## automatico 405 380 403 398 428 385 420 391 9840
## manual 394 389 392 417 396 403 398 391 9958
## Sum 799 769 795 815 824 788 818 782 19798
addmargins(table(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$tipo_de_combustible,vehicle_price_prediction_modificado_MUESTREADO20K_ETL$color_exterior))
##
## Black Blue Gray Red Silver White Sum
## Diesel 1041 1064 1054 1044 1045 1037 6285
## Electric 1183 1221 1203 1207 1220 1159 7193
## Gasoline 1043 1000 1080 1081 1028 1088 6320
## Sum 3267 3285 3337 3332 3293 3284 19798
addmargins(prop.table(table(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$transmision, vehicle_price_prediction_modificado_MUESTREADO20K_ETL$tipo_de_combustible))*100)
##
## Diesel Electric Gasoline Sum
## automatico 15.56218 18.35539 15.78442 49.70199
## manual 16.18345 17.97656 16.13799 50.29801
## Sum 31.74563 36.33195 31.92242 100.00000
addmargins(prop.table(table(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$gama_vehicular, vehicle_price_prediction_modificado_MUESTREADO20K_ETL$transmision))*100)
##
## automatico manual Sum
## gama alta 21.886049 22.229518 44.115567
## gama baja 5.904637 5.970300 11.874937
## gama media 21.911304 22.098192 44.009496
## Sum 49.701990 50.298010 100.000000
round(addmargins(prop.table(table(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$marca_vehiculo, vehicle_price_prediction_modificado_MUESTREADO20K_ETL$gama_vehicular), 1)*100, 2), 2)
##
## gama alta gama baja gama media Sum
## Acura 100 0 0 100
## Audi 100 0 0 100
## BMW 100 0 0 100
## Cadillac 100 0 0 100
## Chevrolet 0 0 100 100
## Chrysler 0 100 0 100
## Dodge 0 100 0 100
## Ford 0 0 100 100
## GMC 0 0 100 100
## Honda 0 0 100 100
## Hyundai 0 0 100 100
## Jeep 100 0 0 100
## Kia 0 0 100 100
## Land Rover 100 0 0 100
## Lexus 100 0 0 100
## Mazda 0 0 100 100
## Mercedes-Benz 100 0 0 100
## Nissan 0 0 100 100
## Porsche 100 0 0 100
## Ram 0 100 0 100
## Subaru 0 0 100 100
## Tesla 100 0 0 100
## Toyota 0 0 100 100
## Volkswagen 0 0 100 100
## Volvo 100 0 0 100
round(addmargins(prop.table(table(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$gama_vehicular, vehicle_price_prediction_modificado_MUESTREADO20K_ETL$transmision), 2)*100, 1), 2)
##
## automatico manual
## gama alta 44.03 44.20
## gama baja 11.88 11.87
## gama media 44.09 43.93
## Sum 100.00 100.00
round(addmargins(prop.table(table(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$gama_vehicular, vehicle_price_prediction_modificado_MUESTREADO20K_ETL$rango_antiguedad), 2)*100, 1), 2)
##
## De 1 a 5 anhos De 11 a 15 anhos De 16 a 20 anhos De 21 a 25 anhos
## gama alta 43.61 43.20 39.53 72.73
## gama baja 11.42 12.33 13.02 9.09
## gama media 44.97 44.47 47.44 18.18
## Sum 100.00 100.00 100.00 100.00
##
## De 6 a 10 anhos
## gama alta 45.01
## gama baja 11.92
## gama media 43.06
## Sum 100.00
plotct(table(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$transmision, vehicle_price_prediction_modificado_MUESTREADO20K_ETL$tipo_de_combustible),"row")
plotct(table(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$transmision, vehicle_price_prediction_modificado_MUESTREADO20K_ETL$tipo_de_combustible),"col")
plotct(table(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$gama_vehicular, vehicle_price_prediction_modificado_MUESTREADO20K_ETL$transmision),"row")
plotct(table(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$gama_vehicular, vehicle_price_prediction_modificado_MUESTREADO20K_ETL$transmision),"col")
plotct(table(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$marca_vehiculo, vehicle_price_prediction_modificado_MUESTREADO20K_ETL$rango_antiguedad),"row")
plotct(table(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$marca_vehiculo, vehicle_price_prediction_modificado_MUESTREADO20K_ETL$rango_antiguedad),"col")
chisq.test(table(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$transmision, vehicle_price_prediction_modificado_MUESTREADO20K_ETL$tipo_de_combustible))
##
## Pearson's Chi-squared test
##
## data: table(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$transmision, vehicle_price_prediction_modificado_MUESTREADO20K_ETL$tipo_de_combustible)
## X-squared = 3.2613, df = 2, p-value = 0.1958
chisq.test(table(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$tipo_de_combustible, vehicle_price_prediction_modificado_MUESTREADO20K_ETL$gama_vehicular))
##
## Pearson's Chi-squared test
##
## data: table(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$tipo_de_combustible, vehicle_price_prediction_modificado_MUESTREADO20K_ETL$gama_vehicular)
## X-squared = 55.736, df = 4, p-value = 2.278e-11
chisq.test(table(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$gama_vehicular,vehicle_price_prediction_modificado_MUESTREADO20K_ETL$transmision))
##
## Pearson's Chi-squared test
##
## data: table(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$gama_vehicular, vehicle_price_prediction_modificado_MUESTREADO20K_ETL$transmision)
## X-squared = 0.05513, df = 2, p-value = 0.9728
chisq.test(table(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$transmision,vehicle_price_prediction_modificado_MUESTREADO20K_ETL$tipo_de_combustible))$observed
##
## Diesel Electric Gasoline
## automatico 3081 3634 3125
## manual 3204 3559 3195
chisq.test(table(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$transmision,vehicle_price_prediction_modificado_MUESTREADO20K_ETL$tipo_de_combustible))$expected
##
## Diesel Electric Gasoline
## automatico 3123.77 3575.064 3141.166
## manual 3161.23 3617.936 3178.834
chisq.test(table(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$transmision,vehicle_price_prediction_modificado_MUESTREADO20K_ETL$tipo_de_combustible))$residuals
##
## Diesel Electric Gasoline
## automatico -0.7652450 0.9856839 -0.2884371
## manual 0.7606975 -0.9798264 0.2867230
chisq.test(table(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$transmision,vehicle_price_prediction_modificado_MUESTREADO20K_ETL$tipo_de_combustible))$stdres
##
## Diesel Electric Gasoline
## automatico -1.3060502 1.7418128 -0.4929168
## manual 1.3060502 -1.7418128 0.4929168
chisq.test(table(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$transmision,vehicle_price_prediction_modificado_MUESTREADO20K_ETL$tipo_de_combustible))$residuals^2/chisq.test(table(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$transmision,vehicle_price_prediction_modificado_MUESTREADO20K_ETL$tipo_de_combustible))$statistic*100
##
## Diesel Electric Gasoline
## automatico 17.956033 29.790971 2.551006
## manual 17.743258 29.437955 2.520777
CA(table(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$transmision,vehicle_price_prediction_modificado_MUESTREADO20K_ETL$tipo_de_combustible), graph = FALSE)$eig
## eigenvalue percentage of variance cumulative percentage of variance
## dim 1 0.0001647287 100 100
CA(table(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$transmision,vehicle_price_prediction_modificado_MUESTREADO20K_ETL$tipo_de_combustible), graph = FALSE)$col
## $coord
## [,1]
## Diesel 0.013610449
## Electric -0.016387293
## Gasoline 0.005115842
##
## $contrib
## [,1]
## Diesel 35.699290
## Electric 59.228926
## Gasoline 5.071784
##
## $cos2
## [,1]
## Diesel 1
## Electric 1
## Gasoline 1
##
## $inertia
## [1] 5.880698e-05 9.756705e-05 8.354684e-06
CA(table(vehicle_price_prediction_modificado_MUESTREADO20K_ETL$transmision,vehicle_price_prediction_modificado_MUESTREADO20K_ETL$tipo_de_combustible), graph = FALSE)$row
## $coord
## automatico manual
## -0.0129114 0.0127584
##
## $contrib
## automatico manual
## 50.29801 49.70199
##
## $cos2
## automatico manual
## 1 1
##
## $inertia
## [1] 8.285527e-05 8.187345e-05
PENDIENTE
vehiculos_ACM <- vehicle_price_prediction_modificado_MUESTREADO20K_ETL[, c("marca_vehiculo","transmision", "tipo_de_combustible", "color_exterior", "rango_antiguedad", "gama_vehicular")]
vehiculos_ACM <- data.frame(lapply(vehiculos_ACM, factor))
suppressWarnings({res.acm <- MCA(vehiculos_ACM, grap = FALSE)})
set.seed(780729)
muestra_ind <- sample(rownames(res.acm$ind$coord), 200)
fviz_mca_biplot(res.acm, select.ind = list(name = muestra_ind), repel = TRUE, col.var = "#E7B800", addEllipses = TRUE, ellipse.level = 0.95)
PENDIENTE TEXTO
fviz_mca_var(res.acm, col.var ="cos2", gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"), repel = TRUE)
res.acm$var$cos2
## Dim 1 Dim 2 Dim 3 Dim 4
## Acura 5.035770e-02 8.869520e-04 8.793168e-03 5.060634e-04
## Audi 4.636672e-02 8.061675e-04 8.779201e-03 1.219769e-03
## BMW 5.155014e-02 9.101888e-04 1.055862e-02 7.694385e-04
## Cadillac 5.086842e-02 8.775054e-04 4.187430e-03 5.403148e-02
## Chevrolet 2.523497e-02 2.605493e-02 1.801036e-05 4.906790e-02
## Chrysler 5.915618e-02 2.430087e-01 2.858645e-03 2.000727e-03
## Dodge 6.067688e-02 2.435206e-01 3.236511e-04 7.968393e-03
## Ford 2.671172e-02 2.752083e-02 3.300120e-05 3.373976e-03
## GMC 2.385769e-02 2.457759e-02 4.099932e-06 4.534821e-03
## Honda 2.665728e-02 2.757816e-02 2.103184e-04 2.044526e-03
## Hyundai 2.483697e-02 2.586272e-02 7.289379e-05 2.249876e-02
## Jeep 5.264103e-02 9.418291e-04 1.291851e-02 1.806727e-02
## Kia 2.732602e-02 2.843147e-02 1.502554e-03 2.029010e-03
## Land Rover 5.179248e-02 8.910049e-04 1.972656e-03 4.129108e-02
## Lexus 5.225140e-02 9.430511e-04 1.188993e-02 2.299563e-03
## Mazda 2.506911e-02 2.634737e-02 1.400428e-03 3.576074e-04
## Mercedes-Benz 4.782750e-02 8.225865e-04 1.119905e-02 2.875776e-04
## Nissan 2.671071e-02 2.709664e-02 9.657051e-04 4.833067e-02
## Porsche 4.879477e-02 8.860352e-04 1.042043e-02 2.706600e-02
## Ram 6.136268e-02 2.486253e-01 9.358202e-05 1.855290e-02
## Subaru 2.673484e-02 2.784471e-02 1.137248e-04 1.303284e-02
## Tesla 6.846202e-02 8.601103e-04 5.688112e-01 1.192872e-03
## Toyota 2.614932e-02 2.676839e-02 2.491262e-04 2.567959e-03
## Volkswagen 2.644588e-02 2.797965e-02 1.333813e-03 4.144482e-03
## Volvo 4.985862e-02 8.803242e-04 6.575406e-03 6.291525e-02
## automatico 1.690556e-06 1.242999e-06 4.779801e-03 1.333779e-01
## manual 1.690556e-06 1.242999e-06 4.779801e-03 1.333779e-01
## Diesel 2.989273e-03 4.785014e-05 1.653804e-01 4.070690e-02
## Electric 1.281773e-02 2.005006e-05 6.199589e-01 2.396941e-04
## Gasoline 3.870262e-03 5.232462e-06 1.650547e-01 4.727756e-02
## Black 1.120794e-03 3.523465e-04 3.979895e-04 5.932554e-02
## Blue 3.502890e-04 8.147275e-05 1.025043e-03 6.509398e-02
## Gray 2.575701e-05 4.164688e-04 8.225308e-04 6.886595e-02
## Red 1.576704e-05 6.223926e-05 1.959001e-04 8.361682e-02
## Silver 9.609405e-05 9.180134e-05 2.985201e-04 4.260215e-02
## White 1.953976e-04 1.062182e-04 6.908157e-04 2.815173e-02
## De 1 a 5 anhos 8.886399e-05 6.705460e-04 5.553504e-04 5.854461e-05
## De 11 a 15 anhos 4.027563e-04 3.764817e-05 8.460948e-04 9.612648e-02
## De 16 a 20 anhos 6.825132e-04 2.253890e-06 1.571853e-03 4.814513e-02
## De 21 a 25 anhos 7.098615e-04 7.426594e-05 8.719183e-04 2.865472e-02
## De 6 a 10 anhos 9.745105e-04 3.600648e-04 1.276039e-04 8.913576e-02
## gama alta 9.786008e-01 1.666721e-02 3.147693e-03 5.285276e-06
## gama baja 1.974671e-01 8.011929e-01 7.386926e-04 4.759523e-06
## gama media 4.898686e-01 5.075851e-01 1.475072e-03 7.705888e-07
## Dim 5
## Acura 3.571619e-03
## Audi 2.115206e-02
## BMW 1.357393e-01
## Cadillac 1.653676e-02
## Chevrolet 4.296741e-03
## Chrysler 1.429842e-02
## Dodge 3.719678e-03
## Ford 1.176186e-03
## GMC 4.129635e-02
## Honda 1.214813e-02
## Hyundai 1.611443e-02
## Jeep 4.098400e-04
## Kia 9.150360e-04
## Land Rover 5.477063e-03
## Lexus 2.645775e-02
## Mazda 3.921421e-03
## Mercedes-Benz 2.493642e-02
## Nissan 6.658063e-05
## Porsche 1.604159e-03
## Ram 2.895645e-03
## Subaru 1.968382e-02
## Tesla 1.058218e-03
## Toyota 6.777681e-02
## Volkswagen 8.948485e-03
## Volvo 3.636847e-03
## automatico 2.343221e-02
## manual 2.343221e-02
## Diesel 1.962264e-02
## Electric 7.705978e-04
## Gasoline 1.237299e-02
## Black 3.307959e-02
## Blue 2.409383e-01
## Gray 4.010198e-04
## Red 1.427748e-01
## Silver 3.460726e-02
## White 7.391335e-03
## De 1 a 5 anhos 1.318635e-01
## De 11 a 15 anhos 4.934305e-03
## De 16 a 20 anhos 1.261499e-02
## De 21 a 25 anhos 4.444456e-02
## De 6 a 10 anhos 1.031195e-01
## gama alta 8.406437e-06
## gama baja 6.409971e-06
## gama media 1.563015e-06
fviz_contrib(res.acm, choice = "var", axes = 1, top = 15)
fviz_contrib(res.acm, choice = "var", axes = 2, top = 15)
fviz_contrib(res.acm, choice = "var", axes = 3, top = 15)
fviz_contrib(res.acm, choice = "var", axes = 4, top = 15)
fviz_contrib(res.acm, choice = "var", axes = 5, top = 15)
fviz_mca_var(res.acm, col.var ="contrib", gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"), repel = TRUE)
En esta cuarta etapa del estudio se presentarán cálculos, visualizaciones e interpretaciones, utilizando el conjunto de datos procesado en las fases previas (1, 2 y 3). El enfoque se centrará en el análisis de conglomerados, abarcando tanto su versión jerárquica mediante dendrogramas como la no jerárquica con K-medias.
campo_clasificador <- vehicle_price_prediction_modificado_MUESTREADO20K_ETL[, -c(1,4,5,6,11,12)]
campo_clasificador_esc <- scale(campo_clasificador)
head(campo_clasificador_esc)
## anho_de_fabricacion kilometraje cant_propietarios antiguedad_vehiculo
## [1,] 1.9493739 -1.5136906 -1.6102856 -1.7349445
## [2,] 0.1440377 -0.1865822 -0.9608705 -0.1573987
## [3,] -0.3717727 1.4684015 0.3379595 0.3684499
## [4,] 1.4335635 -0.8544935 -1.6102856 -1.4720202
## [5,] 1.9493739 -1.5396230 -1.6102856 -1.7349445
## [6,] 0.1440377 -0.2530595 -0.9608705 -0.1573987
## kilometraje_anual precio
## [1,] -1.62471972 0.4348379
## [2,] -0.05719441 -0.5320587
## [3,] 1.59083973 -1.0506963
## [4,] 1.87386055 0.6940463
## [5,] -1.93071944 1.2058375
## [6,] -0.16927859 0.6521578
set.seed(780729)
muestra_disim <- campo_clasificador[sample(1:nrow(campo_clasificador), 50), ]
muestra_disim_esc <- scale(muestra_disim)
matriz_disim_muestra <- dist(muestra_disim_esc)
fviz_dist(matriz_disim_muestra)
arbol_single <- hclust(matriz_disim_muestra, method = "single")
alturas <- arbol_single$height
media_alt <- mean(alturas)
sd_alt <- sd(alturas)
k <- 1.25
punto_corte <- media_alt + k * sd_alt
punto_corte
## [1] 1.482305
num_clusters <- sum(alturas > punto_corte) + 1
num_clusters
## [1] 6
plot(arbol_single, hang = -1, cex = 0.8)
abline(h = punto_corte, col = "red", lwd = 2)
arbol_complete <- hclust(matriz_disim_muestra, method = "complete")
alturas <- arbol_complete$height
media_alt <- mean(alturas)
sd_alt <- sd(alturas)
k <- 1.25
punto_corte <- media_alt + k * sd_alt
punto_corte
## [1] 3.977752
num_clusters <- sum(alturas > punto_corte) + 1
num_clusters
## [1] 7
plot(arbol_complete, hang = -1, cex = 0.8)
abline(h = punto_corte, col = "red", lwd = 2)
arbol_average <- hclust(matriz_disim_muestra, method = "average")
alturas <- arbol_average$height
media_alt <- mean(alturas)
sd_alt <- sd(alturas)
k <- 1.25 # Valor utilizado en C3
punto_corte <- media_alt + k * sd_alt
punto_corte
## [1] 2.615416
num_clusters <- sum(alturas > punto_corte) + 1
num_clusters
## [1] 5
plot(arbol_average, hang = -1, cex = 0.8)
abline(h = punto_corte, col = "red", lwd = 2)
arbol_single <- hclust(matriz_disim_muestra, method = "single")
alturas <- arbol_single$height
media_alt <- mean(alturas)
sd_alt <- sd(alturas)
k <- 1.25
punto_corte <- media_alt + k * sd_alt
num_clusters <- sum(alturas > punto_corte) + 1
num_clusters
## [1] 6
plot(arbol_single, hang = -1, cex = 0.8)
abline(h = punto_corte, col = "red", lwd = 2)
arbol_complete <- hclust(matriz_disim_muestra, method = "complete")
alturas <- arbol_complete$height
media_alt <- mean(alturas)
sd_alt <- sd(alturas)
k <- 1.25
punto_corte <- media_alt + k * sd_alt
num_clusters <- sum(alturas > punto_corte) + 1
num_clusters
## [1] 7
plot(arbol_complete, hang = -1, cex = 0.8)
abline(h = punto_corte, col = "red", lwd = 2)
arbol_average <- hclust(matriz_disim_muestra, method = "average")
alturas <- arbol_average$height
media_alt <- mean(alturas)
sd_alt <- sd(alturas)
k <- 1.25
punto_corte <- media_alt + k * sd_alt
num_clusters <- sum(alturas > punto_corte) + 1
num_clusters
## [1] 5
plot(arbol_average, hang = -1, cex = 0.8)
abline(h = punto_corte, col = "red", lwd = 2)
(planteamiento y desarrollo)
fviz_nbclust(muestra_disim_esc, kmeans, method = "wss") + geom_vline(xintercept = 3, linetype = 2)
fviz_nbclust(muestra_disim_esc, kmeans, method = "silhouette")
fviz_nbclust(muestra_disim_esc, kmeans, method = "gap_stat")
suppressWarnings(NbClust(data = muestra_disim_esc, diss = NULL, distance = "euclidean", min.nc = 2, max.nc = 10, method = "kmeans")$Best.nc)
## *** : The Hubert index is a graphical method of determining the number of clusters.
## In the plot of Hubert index, we seek a significant knee that corresponds to a
## significant increase of the value of the measure i.e the significant peak in Hubert
## index second differences plot.
##
## *** : The D index is a graphical method of determining the number of clusters.
## In the plot of D index, we seek a significant knee (the significant peak in Dindex
## second differences plot) that corresponds to a significant increase of the value of
## the measure.
##
## *******************************************************************
## * Among all indices:
## * 10 proposed 2 as the best number of clusters
## * 2 proposed 3 as the best number of clusters
## * 1 proposed 5 as the best number of clusters
## * 3 proposed 6 as the best number of clusters
## * 4 proposed 7 as the best number of clusters
## * 1 proposed 9 as the best number of clusters
## * 3 proposed 10 as the best number of clusters
##
## ***** Conclusion *****
##
## * According to the majority rule, the best number of clusters is 2
##
##
## *******************************************************************
## KL CH Hartigan CCC Scott Marriot TrCovW
## Number_clusters 2.0000 2.0000 7.000 10.0000 6.0000 6.0 3.0000
## Value_Index 8.5543 39.3773 5.632 -0.8642 81.4951 231267.1 454.7494
## TraceW Friedman Rubin Cindex DB Silhouette Duda
## Number_clusters 7.0000 9.0000 7.0000 6.0000 10.0000 2.0000 2.0000
## Value_Index 9.0311 733.6085 -0.3649 0.3057 0.9794 0.3571 0.8559
## PseudoT2 Beale Ratkowsky Ball PtBiserial Frey McClain
## Number_clusters 2.0000 2.0000 2.0000 3.0000 2.0000 2.0000 2.0000
## Value_Index 4.5439 0.6205 0.4447 36.1691 0.5426 1.4285 0.6455
## Dunn Hubert SDindex Dindex SDbw
## Number_clusters 7.0000 0 5.0000 0 10.000
## Value_Index 0.2698 0 1.4572 0 0.205
set.seed(780729)
print(kmeans(muestra_disim_esc, 3, nstart = 25))
## K-means clustering with 3 clusters of sizes 17, 13, 20
##
## Cluster means:
## anho_de_fabricacion kilometraje cant_propietarios antiguedad_vehiculo
## 1 1.0527782 -0.991557575 -0.9516427 -1.0539870
## 2 -0.9626618 1.283701458 0.9338126 0.9722892
## 3 -0.2691313 0.008417991 0.2019181 0.2639010
## kilometraje_anual precio
## 1 -0.3845563 0.781076380
## 2 0.6723867 -1.012802831
## 3 -0.1101785 -0.005593083
##
## Clustering vector:
## [1] 3 3 3 3 2 3 1 3 1 3 3 1 2 2 3 1 3 2 1 3 1 1 3 2 1 1 2 2 2 3 3 1 1 1 3 2 1 2
## [39] 3 1 3 1 3 2 3 2 3 2 1 1
##
## Within cluster sum of squares by cluster:
## [1] 45.33382 31.85847 53.87605
## (between_SS / total_SS = 55.4 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
set.seed(780729)
print(kmeans(muestra_disim_esc, 4, nstart = 25))
## K-means clustering with 4 clusters of sizes 18, 12, 11, 9
##
## Cluster means:
## anho_de_fabricacion kilometraje cant_propietarios antiguedad_vehiculo
## 1 0.4784556 -0.28029973 -0.7056937 -0.4997015
## 2 -0.9643870 1.32587144 0.9259680 0.9740513
## 3 -0.6972946 0.07071651 0.9166972 0.7012370
## 4 1.1811872 -1.29366041 -0.9436444 -1.1563996
## kilometraje_anual precio
## 1 0.3589002 0.21686402
## 2 0.7258692 -1.08050995
## 3 -0.4745193 0.09417451
## 4 -1.1056579 0.89184971
##
## Clustering vector:
## [1] 1 1 1 3 3 3 4 1 4 1 3 1 2 2 1 1 1 2 4 3 4 1 3 2 4 1 2 2 2 1 3 1 1 1 1 2 1 2
## [39] 3 4 3 4 3 2 1 2 3 2 4 4
##
## Within cluster sum of squares by cluster:
## [1] 40.66154 30.40914 17.42986 20.61837
## (between_SS / total_SS = 62.9 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
fviz_cluster(kmeans(muestra_disim_esc, 3, nstart = 25), data = muestra_disim_esc, palette = c("#2E9FDF", "#00AFBB", "#E7B800", "#E7B801"), ellipse.type = "euclid", star.plot = TRUE, repel = TRUE, ggtheme = theme_minimal()
)