Tengo un conjunto de datos bastante grande (200.000 filas x 85 columnas) y estoy intentando evaluar la tendencia de los clústeres antes de realizar cualquier análisis de clústeres. He tomado un subconjunto de mis datos para poder ejecutarlo en R ( 6000 filas x 85 cols) y estoy obteniendo un valor estadístico de Hopkins muy bajo 0,05. Sigo leyendo información contradictoria sobre los valores de Hopkins. Algunos dicen que por encima de 0,5 es un conjunto de datos "agrupables", mientras que cualquier cosa por debajo de 0,5 no lo es y se distribuye uniformemente. Otros dicen que todo lo que esté por encima o por debajo de 0,5 son datos "agrupables". Principalmente estoy tratando de evaluar si debería incluso intentar realizar análisis de cluster basados en la tendencia de cluster, es decir, la estadística de Hopkins que estoy obteniendo con mi conjunto de datos. Gracias por adelantado.
Respuestas
¿Demasiados anuncios?También me ha confundido esta información contradictoria sobre las estadísticas de Hopkins.
En http://www.sthda.com/english/articles/29-cluster-validation-essentials/95-assessing-clustering-tendency-essentials/ se dice que
Podemos realizar la prueba estadística de Hopkins de forma iterativa, utilizando 0,5 como el umbral para rechazar la hipótesis alternativa. Es decir, si H < 0,5, entonces es poco probable que D tenga conglomerados estadísticamente significativos.
Dicho de otro modo, si el valor de la estadística Hopkins se acerca a 1, entonces podemos rechazar la hipótesis nula y concluir que el conjunto de datos D es un dato significativamente agrupable.
Y también hay un ejemplo en iris conjunto de datos utilizando get_clust_tendency() que muestra que para el conjunto de datos altamente agrupables el estadístico Hopkins es 0,818, pero para el conjunto de datos aleatorios 0,466. Sin embargo, si se repite su análisis, se obtendría realmente 0,182 para el conjunto de datos agrupables y 0,534 para el conjunto de datos aleatorios.
Esto sugiere que el get_clust_tendency() se ha cambiado la función utilizada (¿cuándo? ¿por qué?), es decir, ahora la estadística de Hopkins se calcula como $1-H$ donde (definición de Wikipedia)
$ H=\frac{\sum_{i=1}^m{u_i^d}}{\sum_{i=1}^m{u_i^d}+\sum_{i=1}^m{w_i^d}} \, $ ,
$u_i$ - distancias del vecino más cercano de los puntos de muestra generados uniformemente a los datos de muestra de un conjunto de datos dado,
$w_i$ - distancias del vecino más cercano dentro de los datos de la muestra de un conjunto de datos dado.
Así, para los conjuntos de datos agrupables, la estadística de Hopkins se acerca a 0 si se calcula con get_clust_tendency() del paquete factoextra.
Hopkins es una prueba bastante extrema para distribuciones uniformes.
Es ingenuo suponer que los datos se agruparán, sólo porque tienen una tendencia - la prueba es sobre todo útil para detectar datos uniformes .
El problema es que no implica una multimodal distribución. Una gaussiana simple tendrá una "tendencia de agrupación" según la prueba de Hopkins. Pero realizar un análisis de conglomerados en una sola gaussiana no tiene sentido. El mejor resultado es "todo es el mismo cluster". Sólo se ha comprobado que una gaussiana no es uniforme.
Sin embargo, yo esperaría un pequeño para indicar que los datos parecen uniformes al menos en la normalización actual. Si Hopkins indica una distribución uniforme, entonces está claro que puedes parar, probablemente hay alguna columna mala que está arruinando el análisis. Pero con los argumentos anteriores, la interpretación más sensata es utilizar el estadístico opuesto 1-H e interpretarlo como una "desviación normalizada de los datos uniformes".
Basado en el código fuente para get_clust_tendency() parece que la respuesta de Iden es correcta y para algunas versiones del paquete factoextra, la estadística de hopkin puede ser calculada como (1-H) .
Compruebe el código del get_clust_tendency() en tu versión de factoextra, si ves que la estadística de hopkin se calcula como...
hopkins_stat = sum(minq)/(sum(minp) + sum(minq))
entonces este es el (1-H) versión.
Contrariamente a la explicación dada en Evaluación de la tendencia a la agrupación ,
sum(minq)
es en realidad la suma de las distancias de los vecinos más cercanos para los puntos reales, no los artificiales.
Con respecto a la fórmula de la respuesta de Iden
$$ H=\frac{\sum_{i=1}^m{u_i^d}}{\sum_{i=1}^m{u_i^d}+\sum_{i=1}^m{w_i^d}} \ $$
El get_clust_tendency() puede estar regresando
$$ H=\frac{\sum_{i=1}^m{w_i^d}}{\sum_{i=1}^m{u_i^d}+\sum_{i=1}^m{w_i^d}} \ $$
En la versión más reciente del paquete factoextra esto parece haberse corregido, véase la línea de código 110 en el código fuente donde
hopkins_stat = sum(minp)/(sum(minp) + sum(minq))
En realidad, como ya se ha mencionado en las respuestas anteriores, es una cuestión de cómo se ha calculado la estadística de Hopkins. La literatura tiene información clara sobre el valor esperado. Por ejemplo, Lawson y Jurs (1990) y Banerjee y Dave (2004) explican que se pueden esperar 3 resultados diferentes 1) H = 0,5 (el conjunto de datos no revela ninguna estructura de agrupación) " en la fórmula, W siempre se refiere a los datos reales, y está en el denominador) 2) H cercano a 1,0, una evidencia significativa de que los datos podrían ser agrupables. 3) H está cerca de 0, en este caso la prueba es indecisa (los datos no están agrupados ni son aleatorios)
basándose en la información anterior, puede encontrar que: get_cluster_tendency(df, n, ..) proporciona el cálculo de la escritura, mientras que hopkins(df, ..) proporciona un resultado inverso al que se podría haber calculado en base a 1-H. ¡Saludos!