Tengo unos cuantos conjuntos de datos de "interacciones" entre pares de elementos de este tipo:
element1 element2 1
element2 element3 1
element4 element5 1
...
element505535 element4 2
donde el valor de la 3ª columna es la "fuerza" de la interacción. Casi todas estas fuerzas son "1". Una fuerza de 1 significa que esta interacción se observó una vez. Una fuerza de 2 significa 2x, etc. En realidad he ido un paso más allá y normalizado todos mis conjuntos de datos por el número total de interacciones observadas en el conjunto de datos para que los valores de interacción de los conjuntos de datos puedan ser comparados.
Cada archivo contiene entre 5 y 6 millones de interacciones y cada conjunto de datos está obviamente inframuestreado, ya que contiene ~500k elementos (lo que hace una matriz cuadrada de ~250 billones de posiciones).
Me gustaría agrupar estos conjuntos de datos para poder hacer afirmaciones sobre qué tipos de elementos tienden a agruparse con qué otros tipos de elementos. Obviamente, la robustez de la agrupación será un factor a tener en cuenta, pero esto se ve parcialmente mejorado por el hecho de que haré réplicas biológicas de los datos.
He probado algunos enfoques de agrupación "ingenuos" para ver qué podía hacer fácilmente con los datos. Soy plenamente consciente de que se trata de formas problemáticas de agrupación, ya sea porque no son robustas o porque dependen de que los datos estén muy submuestreados, pero esto es lo que he hecho:
-
Agrupar elementos siempre que haya al menos una interacción entre cada elemento del grupo y al menos otro elemento del grupo. Al hacer esto, todos los elementos acaban en un único clúster. Esto era importante hacerlo porque me indica que no hay pares de elementos que estén totalmente aislados del resto del grupo.
-
Encontrar "supercúmulos", es decir, cúmulos en los que cada miembro del cúmulo interactúa con todos los demás miembros del cúmulo (por ejemplo, un triángulo para un cúmulo de 3 y una caja con una X en medio para un cúmulo de 4, etc.). Esto produce casi exclusivamente clusters con 2 y 3 elementos después de que se haya analizado alrededor del 10% de los datos (esto aún está en marcha).
Me encantaría poder hacer algún tipo de agrupación jerárquica utilizando mis valores de "fuerza de interacción" como medida de distancia entre cada par de elementos (las interacciones no observadas tienen una fuerza de 0). ¿Alguien sabe de una manera de hacer HC en este tipo de datos grandes y dispersos, o sabe de un método de agrupación que podría ser más apropiado? Hasta ahora he utilizado R.