DESCRIPCION DE LA BASE ColorAdjetive DEL PAQUETE FactoClass

La base de datos “AdjectiveColor” presenta asociaciones entre colores y adjetivos, recopilada a partir de las respuestas de un grupo de estudiantes de la Universidad de Nanterre (Paris X). El conjunto de datos incluye once colores: azul (BLUE), rojo (RED), amarillo (YELL), blanco (WHIT), gris (GREY), rosa (PINK), marrón (BROW), morado (PURP), negro (BLAC), naranja (ORAN) y verde (GREE). Cada persona en el grupo describió cada color utilizando uno o más adjetivos, y la base de datos final contiene asociaciones de 89 adjetivos con estos once colores.

data(ColorAdjective)
str(ColorAdjective)
## 'data.frame':    89 obs. of  11 variables:
##  $ BLUE: int  0 0 0 0 1 0 0 0 0 0 ...
##  $ RED : int  0 3 4 0 0 0 0 4 0 0 ...
##  $ YELL: int  12 0 1 3 4 0 0 0 0 0 ...
##  $ WHIT: int  0 0 0 0 0 0 1 0 0 0 ...
##  $ GREY: int  0 0 0 0 0 0 3 0 0 7 ...
##  $ PINK: int  0 0 0 0 0 0 5 0 0 0 ...
##  $ BROW: int  0 0 0 0 0 4 0 0 0 2 ...
##  $ PURP: int  0 1 1 0 0 0 0 0 0 0 ...
##  $ BLAC: int  0 0 2 0 4 0 0 0 0 1 ...
##  $ ORAN: int  1 1 0 0 4 0 0 0 8 0 ...
##  $ GREE: int  4 0 0 0 0 0 0 0 0 0 ...

Ahora, con esta base nos disponemos a trabajar 3 secciones en este documento las cuales son:

Sección 1 Utilizando FactoClass:

Utilizaremos el paquete FactoClass para obtener y caracterizar una partición de los datos. Se emplearán todos los ejes principales del Análisis de Componentes Principales (ACS) previo de los adjetivos × colores. Cada decisión tomada durante el proceso se justificará. La partición resultante proporcionará información sobre la estructura subyacente de las asociaciones entre adjetivos y colores.

Sección 2 Utilizando mclust:

Utilizaremos el paquete mclust para obtener otra partición de los datos. Posteriormente, caracterizaremos esta partición utilizando la función cluster.carac del paquete FactoClass. Al igual que en el paso anterior, todas las decisiones tomadas se justificarán. Esta partición adicional permitirá explorar cómo un enfoque basado en mezclas de distribuciones finitas difiere en la identificación de patrones en comparación con el enfoque de FactoClass.

Sección 3 comparación de resultados entre ambos meetodos:

Se compararán las dos particiones obtenidas en los pasos anteriores. La comparación puede incluir la evaluación de la consistencia entre las particiones y la identificación de posibles similitudes o diferencias en la estructura subyacente de los datos. Esta etapa proporcionará una visión más completa de las asociaciones entre adjetivos y colores, explorando cómo diferentes enfoques de partición revelan patrones en los datos.

DESARROLLO Y RESULTADOS USANDO FactoClass

Para obtener y caracterizar una particion de la base usando FactoClass, procedemos a usar tambien el paquete dudi , con el fin de hacer un ACS , luego en base a esto tomaremos las decisiones más acertadas, teniendo en cuenta que se nos indica usar todos los ejes.

Ahora, como podemos observar en el gráfico de barras (barplot) y en la tabla anterior, confirmamos la sugerencia de utilizar todos los ejes en el análisis factorial. En total, disponemos de 10 ejes o, al menos, 9 de ellos donde se acumula el 95% de la inercia, lo cual indica una representación sustancial de la variabilidad en nuestros datos.

Al emplear la combinación de métodos factoriales para la clasificación, obtenemos un panorama más completo de la estructura subyacente en nuestro conjunto de datos. Esta integración nos permite no solo aprovechar la información contenida en los ejes principales, sino también considerar la contribución de los ejes secundarios en la formación de clusters significativos.

Este enfoque holístico, que incorpora tanto la información principal como secundaria, nos brinda una visión más robusta de las relaciones entre las variables y facilita la identificación de patrones sutiles que podrían no ser evidentes al considerar solo una parte de la estructura factorial.

El siguiente análisis revela la distribución de adjetivos en los clusters formados, proporcionando una comprensión más profunda de las asociaciones entre los colores y los términos descriptivos. Este enfoque integral se alinea con las recomendaciones de retener todos los ejes relevantes, y los resultados obtenidos respaldan la elección de esta estrategia en nuestro análisis exploratorio.

## The number of retained axes for factorial analysis is  2 
## 
## The number of axes for clustering is  10
## Look the histogram of 25 indexes 
## Partition in  3  clusters

En lo anterior, el análisis factorial ha retenido 2 ejes principales para representar la estructura de los datos, se están utilizando 10 ejes para la clasificación, y el proceso de clusterización ha sugerido la presencia de 3 clusters. Esta información puede ser valiosa para entender la distribución y agrupación de las asociaciones entre colores y adjetivos en tu conjunto de datos. Recuerda que estos resultados pueden ser interpretados en el contexto específico de tu investigación y de la naturaleza de tus datos.

La aplicación de la función FactoClass se llevó a cabo inicialmente sin imponer restricciones significativas, permitiendo una exploración completa de la estructura subyacente en el conjunto de datos. La visualización resultante, en forma de un gráfico de barras (barplot), proporcionó una representación gráfica de las asociaciones entre colores y adjetivos, sin imponer criterios predefinidos en cuanto al número de clusters.

Al realizar un corte transversal en este gráfico, específicamente a la altura de 0.3, se estableció un criterio para determinar el número adecuado de clusters. Este punto de corte sugiere que la estructura de los datos puede beneficiarse de la identificación de 7 clusters distintos.

En consecuencia, se procedió a aplicar nuevamente la función FactoClass, esta vez con la consideración de parámetros específicos para ajustar la clasificación según el criterio establecido. Se asignaron los parámetros necesarios para reflejar la preferencia por 7 clusters, lo que permitirá una partición más detallada y específica de las asociaciones entre los colores y los adjetivos.

FC.col1 <-FactoClass(ColorAdjective, nf = 10, nfcl = 7, k.clust = 7, dudi.coa, scanFC = FALSE)
## The number of retained axes for factorial analysis is  10 
## 
## The number of axes for clustering is  7
## Look the histogram of 25 indexes 
## Partition in  7  clusters

al especificar 10 ejes para el análisis factorial y 7 ejes para la clasificación, junto con la elección de 7 clusters, estás adoptando un enfoque más selectivo y ajustado para entender la variabilidad y las relaciones en tus datos. Este análisis más detallado puede proporcionar una visión más profunda de las asociaciones entre colores y adjetivos, permitiendo una clasificación más precisa en función de la complejidad de la estructura subyacente.

Ahora, teniendo el cluster hecho en objeto FC.col1 observamos como quedan clasificados los adjetivos en las 7 grupos con el siguiente codigo:

En el gráfico de barras previamente generado, se presenta una visualización clara del número de adjetivos asignados a cada uno de los clusters obtenidos mediante el análisis con la función FactoClass. Esta representación gráfica ofrece una perspectiva detallada sobre la distribución de los términos descriptivos entre los distintos grupos identificados. La altura de cada barra refleja la cantidad de adjetivos asociados a un cluster específico, brindando así una visión cuantitativa de la organización de los clusters en función de la naturaleza de los datos. Este enfoque visual permite una comprensión más precisa y accesible de la composición de cada cluster, facilitando la interpretación de patrones y relaciones entre los colores y los adjetivos dentro del contexto del análisis factorial y de clustering realizado.

FC.col1$clus.summ # summary of the clusters

La tabla resumen de clusters muestra información clave sobre cada grupo identificado mediante la aplicación de FactoClass. Los tamaños inicial y final de cada cluster indican cuántos elementos estaban inicialmente en cada grupo y cuántos quedaron después de la clasificación. La inercia inicial y final representan la variabilidad dentro de cada cluster antes y después de la clasificación, respectivamente. Una disminución en la inercia sugiere una agrupación más coherente. El peso inicial y final reflejan la contribución de cada cluster a la variabilidad total, y la distancia cuadrática media indica la dispersión de los elementos dentro de un cluster. En general, estos valores ofrecen insights sobre la calidad y coherencia de la clasificación, permitiéndote evaluar cómo la aplicación de FactoClass ha organizado efectivamente los datos en clusters más homogéneos.

y por ultimo podemos ver caracterizacion de la clasificacion por frecuencias de las variables activas como sigue:

# Filtrar solo las filas con Test.Value positivo para cada clase
positive_tests <- lapply(FC.col1$carac.frec, function(x) x[x$Test.Value > 0, ])

# Mostrar el resultado
positive_tests
## $`1`
##      Test.Value p.Value Class.Cat Cat.Class Global Weight
## YELL     15.514       0        67      63.8    9.1    100
## 
## $`2`
##      Test.Value p.Value Class.Cat Cat.Class Global Weight
## RED      18.611   0.000      85.0      65.9    9.1    100
## ORAN      2.503   0.012      19.1      16.3   10.0    110
## 
## $`3`
##      Test.Value p.Value Class.Cat Cat.Class Global Weight
## BLAC     12.268       0      89.9      24.2    9.0     99
## GREY     10.921       0      84.0      22.8    9.1    100
## PURP      8.680       0      74.0      20.1    9.1    100
## BROW      4.877       0      56.0      15.2    9.1    100
## 
## $`4`
##      Test.Value p.Value Class.Cat Cat.Class Global Weight
## PINK     17.548       0      79.2      66.7    8.8     96
## 
## $`5`
##      Test.Value p.Value Class.Cat Cat.Class Global Weight
## ORAN      16.03       0      63.6      70.7     10    110
## 
## $`6`
##      Test.Value p.Value Class.Cat Cat.Class Global Weight
## GREE     15.099   0.000      83.8      40.9    9.0     99
## BLUE      9.439   0.000      60.2      27.6    8.5     93
## BROW      2.816   0.005      29.0      14.3    9.1    100
## 
## $`7`
##      Test.Value p.Value Class.Cat Cat.Class Global Weight
## WHIT     13.400       0      52.0      65.8    9.1    100
## BLUE      6.229       0      26.9      31.6    8.5     93

La columna “Test.Value” muestra la medida de asociación entre cada color y su respectivo cluster. Valores positivos indican una asociación más fuerte, mientras que valores negativos sugieren una asociación más débil. La columna “p.Value” muestra la significancia estadística de esta asociación.

En términos de “Class.Cat” y “Cat.Class”, estas columnas proporcionan una clasificación categorizada de la relación entre cada color y su respectivo cluster, tanto a nivel global como dentro de cada cluster específico. La “Global Weight” indica el peso de cada color a nivel general en todas las categorías, y la “Weight” a nivel de cada cluster.

Por ejemplo, considerando el cluster 1, el color “YELL” (amarillo) tiene un “Test.Value” positivo de 15.514, lo que sugiere una fuerte asociación con este cluster. La “p.Value” es significativa (0.000), indicando que esta asociación es estadísticamente relevante. La columna “Class.Cat” muestra que el 67.0% de las veces, el amarillo se clasifica en este cluster, mientras que a nivel global, representa el 9.1% de todas las asociaciones.

plotFactoClass(FC.col1, axislabel = FALSE, Trow = FALSE )

FALTA HACER INTERPRETACION GENERAL DE RESULTADOS PARA ESTES ULTIMO PUNTO

DESARROLLO Y RESULTADOS USANDO MCLUST

Para obtener y caracterizar una particion de la base usando Mclust, a diferencia que con FactoClass no necesitamos usar tambien el paquete dudi. En base a esto podemos aplicar directamente la funcion de Mclust en la base y analizar los resultados del modelo que se obtiene luego de esto, así el siguiente codigo lo muestra.

mod1 <- Mclust(ColorAdjective, G = 7)
mod1
## 'Mclust' model object: (VII,7) 
## 
## Available components: 
##  [1] "call"           "data"           "modelName"      "n"             
##  [5] "d"              "G"              "BIC"            "loglik"        
##  [9] "df"             "bic"            "icl"            "hypvol"        
## [13] "parameters"     "z"              "classification" "uncertainty"

Hasta ahora, hemos utilizado la función Mclust para realizar el clustering considerando el número de particiones obtenido en el ejercicio anterior. El modelo actual, denotado como VII (modelo de mezcla de normales multivariadas con covarianza variable y número de componentes igual a 7), fue seleccionado automáticamente por la función durante el ajuste del modelo. Sin embargo, para evaluar si este modelo es la elección óptima para nuestro conjunto de datos, llevaremos a cabo un análisis comparativo mediante el criterio de información bayesiana (BIC). Realizaremos un gráfico de BIC para diferentes modelos y así determinar cuál proporciona la mejor ajuste a nuestros datos. Este enfoque nos permitirá validar la idoneidad del modelo VII y explorar otras posibles configuraciones de clustering.

plot( Mclust(ColorAdjective), what = c("BIC"), legendArgs = list(x = "topleft", ncol = 2, cex = 0.8, inset = 0.01)) 
abline(v = 6, col = "red", lty = 2)
abline(v = 7, col = "blue", lty = 2)

en este caso observamos que con respecto al criterio BIC el modelo de densidades normales que mejor ajusta es un EEV para el caso de 6 clusters, en el caso de 7 clusters como ya lo hemos fijado de los resultados con el metodo anterior confirmamos que el mejor modelo que se puede ajustar es el VII.

para la caracterización de usando la función cluster.carac{FactoClass}

# Crea un dataframe con la frecuencia de cada cluster
data_freq_mclust <- as.data.frame(table(mod1$classification))

# Renombra las columnas
colnames(data_freq_mclust) <- c("Cluster", "Frecuencia")

# Crea un gráfico de barras con degradado de color y frecuencia en cada barra
MclustP <- ggplot(data = data_freq_mclust, aes(x = factor(Cluster), y = Frecuencia, fill = Frecuencia)) +
  geom_bar(stat = "identity", color = "white") +
  scale_fill_gradient(low = "yellow", high = "orange") +  # Establece el degradado de color
  geom_text(aes(label = Frecuencia), vjust = -0.5, color = "black", size = 3) +  # Muestra la frecuencia en cada barra
  labs(title = "NUMERO DE ADJETIVOS POR CLUSTERS MCLUST", x = "Cluster", y = "Frecuencia")

MclustP

En el gráfico de barras previamente generado, se presenta una visualización clara del número de adjetivos asignados a cada uno de los clusters obtenidos mediante el análisis con la función Mclust. Esta representación gráfica ofrece una perspectiva detallada sobre la distribución de los términos descriptivos entre los distintos grupos identificados. La altura de cada barra refleja la cantidad de adjetivos asociados a un cluster específico, brindando así una visión cuantitativa de la organización de los clusters en función de la naturaleza de los datos. Este enfoque visual permite una comprensión más precisa y accesible de la composición de cada cluster, facilitando la interpretación de patrones y relaciones entre los colores y los adjetivos dentro del contexto del análisis factorial y de clustering realizado.

3. Compare las dos particiones obtenidas.

Ahora, para comparar los resultados obtenidos, vamos a crear la siguiente funcion:

# Crear un dataframe para comparar los resultados
Comp_clust <- data.frame(
  Adjetivo = names(FC.col1$cluster),
  FactoClass = as.character(FC.col1$cluster),
  Mclust = as.character(mod1$classification),
  Coincide = ifelse(FC.col1$cluster == mod1$classification, 1, 0), row.names = NULL
)

# Mostrar la tabla de comparación
head(Comp_clust)

Como vemos lo que hace es tomar cada adjetivo y el cluster al que fue clasificado y compara entre metodos, con lo que procede a crear una columna de comparacion que clasifica 1 si el cluster asignado coincide y 0 si es diferente. Lo que realmente nos interesa es la cantidad de adjetivos que coinciden en la clasificacion, por lo que procedemos a encontrar estos numero con el siguiente codigo:

# Calcular totales de clasificaciones iguales y diferentes
Totales <- data.frame(
  T_Iguales = sum(Comp_clust$Coincide == 1),
  T_Diferentes = sum(Comp_clust$Coincide == 0)
)

# Mostrar la tabla de totales
print(Totales)
##   T_Iguales T_Diferentes
## 1        45           44

Como podemos observar aproximadamente 45 de los 89 adjetivos fueron clasificados en el mismo cluster a partir de metodos diferentes, pero 44 de estos fueron clasificados de forma diferente, con lo cuaal podemos decir que obtenemos resultados muy diferentes a partir de los 2 metodos planteados, esto tambien se evidencia en los histogramas, fijandonos que el numero de adjetivos clasificados en el mismo cluster cambia drasticamente.

grid.arrange(FactoClassP, MclustP, nrow = 1)