La acción `community` del conjunto de acciones `network` se utiliza para detectar comunidades en un grafo. La detección de comunidades es una técnica fundamental en el análisis de redes para identificar grupos de nodos que están densamente conectados internamente y escasamente conectados con otros grupos. Esta acción implementa dos algoritmos principales: Louvain y Propagación de Etiquetas (Label Propagation), permitiendo a los analistas descubrir la estructura modular de redes complejas.
| Parámetro | Descripción |
|---|---|
| algorithm | Especifica el algoritmo a utilizar para la detección de comunidades. 'LOUVAIN' es un método popular basado en la optimización de la modularidad. 'LABELPROPAGATION' es un algoritmo rápido que propaga etiquetas a través de la red. |
| deterministic | Cuando se establece en True, asegura que cada ejecución (con la misma configuración de máquina y parámetros) produzca el mismo resultado final, garantizando la reproducibilidad. |
| direction | Especifica si se debe considerar el grafo de entrada como dirigido ('DIRECTED') o no dirigido ('UNDIRECTED'). |
| display | Especifica una lista de tablas de resultados para enviar al cliente para su visualización. |
| distributed | Cuando se establece en True, utiliza un grafo distribuido, lo que permite el procesamiento en paralelo en múltiples nodos para grafos muy grandes. |
| fix | Especifica la variable que define grupos de nodos que deben permanecer juntos en la misma comunidad durante la detección. |
| graph | Especifica el grafo en memoria a utilizar. Este es un identificador numérico para un grafo previamente cargado. |
| indexOffset | Especifica el desplazamiento del índice para los identificadores en el log y las tablas de resultados. Por defecto es 0. |
| labelUpdateMode | Especifica si los nodos actualizan sus etiquetas según las etiquetas de sus vecinos en la iteración actual ('ASYNCHRONOUS') o en la iteración anterior ('SYNCHRONOUS'). |
| linkRemovalRatio | Especifica el porcentaje de enlaces de bajo peso que se eliminarán alrededor de la vecindad de cada nodo para acelerar el cálculo. |
| links | Especifica la tabla de datos de entrada que contiene la información de los enlaces del grafo. |
| linksVar | Especifica los nombres de las variables de datos para la tabla de enlaces. |
| logFreqTime | Controla la frecuencia (en segundos) para mostrar los logs de iteración para algoritmos computacionalmente intensivos. |
| logLevel | Controla la cantidad de información que se muestra en el log de SAS (NONE, BASIC, MODERATE, AGGRESSIVE). |
| maxIters | Especifica el número máximo de iteraciones que el algoritmo puede ejecutar. |
| multiLinks | Cuando se establece en True, incluye múltiples enlaces entre los mismos dos nodos si existen en el grafo de entrada. |
| nodes | Especifica la tabla de datos de entrada que contiene la información de los nodos del grafo. |
| nodesVar | Especifica los nombres de las variables de datos para la tabla de nodos. |
| nThreads | Especifica el número máximo de hilos a utilizar para el procesamiento multihilo. |
| outCommLinks | Especifica la tabla de datos de salida para describir los enlaces entre cada comunidad. |
| outCommunity | Especifica la tabla de datos de salida que contendrá las propiedades de cada comunidad (por ejemplo, número de nodos, densidad). |
| outGraphList | Especifica la tabla de datos de salida que contendrá información de resumen sobre los grafos en memoria. |
| outLevel | Especifica la tabla de datos de salida que contendrá la información de la comunidad en diferentes niveles de resolución. |
| outLinks | Especifica la tabla de datos de salida que contendrá la información de los enlaces del grafo junto con los resultados de los algoritmos. |
| outNodes | Especifica la tabla de datos de salida que contendrá la información de los nodos del grafo junto con los resultados de los algoritmos. |
| outOverlap | Especifica la tabla de datos de salida para describir la intensidad de la pertenencia de cada nodo a múltiples comunidades. |
| outputTables | Lista los nombres de las tablas de resultados para guardar como tablas CAS en el servidor. |
| recursive | Descompone las comunidades grandes en otras más pequeñas hasta que se cumplan las condiciones especificadas (maxCommSize, maxDiameter). |
| resolutionList | Especifica una lista de valores de resolución para el algoritmo de Louvain, lo que permite la detección de comunidades a diferentes escalas. |
| selfLinks | Cuando se establece en True, incluye los auto-enlaces (un enlace de un nodo a sí mismo) al leer un grafo de entrada. |
| standardizedLabels | Cuando se establece en True, especifica que los datos del grafo de entrada están en un formato estandarizado. |
| standardizedLabelsOut | Cuando se establece en True, solicita que los datos del grafo de salida incluyan un formato estandarizado. |
| tolerance | Especifica el valor de tolerancia para detener las iteraciones. El algoritmo se detiene cuando la mejora de la modularidad o el cambio de etiquetas es menor que este valor. |
| warmStart | Especifica la variable que define los identificadores de comunidad iniciales para iniciar la detección de comunidades desde un estado predefinido. |
Este código crea una tabla de enlaces ('myLinks') que representa un grafo simple. Los nodos están etiquetados de 'A' a 'L', y los pesos de los enlaces indican la fuerza de la conexión entre ellos.
| 1 | DATA mycas.myLinks; |
| 2 | INFILE DATALINES delimiter=','; |
| 3 | INPUT from $ to $ weight; |
| 4 | DATALINES; |
| 5 | A,B,1 |
| 6 | A,C,1 |
| 7 | A,D,1 |
| 8 | B,C,1 |
| 9 | B,D,1 |
| 10 | C,D,1 |
| 11 | E,F,1 |
| 12 | E,G,1 |
| 13 | F,G,1 |
| 14 | H,I,1 |
| 15 | H,J,1 |
| 16 | H,K,1 |
| 17 | H,L,1 |
| 18 | I,J,1 |
| 19 | I,K,1 |
| 20 | I,L,1 |
| 21 | J,K,1 |
| 22 | J,L,1 |
| 23 | K,L,1 |
| 24 | A,H,0.1 |
| 25 | ; |
| 26 | RUN; |
Este ejemplo ejecuta la detección de comunidades en el grafo definido en 'mycas.myLinks' utilizando el algoritmo de Louvain. Los resultados, que asignan cada nodo a una comunidad, se guardan en la tabla 'mycas.myNodesOut'.
| 1 | PROC CAS; |
| 2 | LOADACTIONSET 'network'; |
| 3 | ACTION network.community / |
| 4 | links={name='myLinks'} |
| 5 | outNodes={name='myNodesOut', replace=true}; |
| 6 | RUN; |
| 7 | QUIT; |
Este ejemplo utiliza el algoritmo de propagación de etiquetas ('LABELPROPAGATION') y explora diferentes granularidades de comunidad especificando una lista de resoluciones. Las tablas de salida 'mycas.myCommLinks' y 'mycas.myComm' describen los enlaces entre comunidades y las propiedades de cada comunidad, respectivamente.
| 1 | PROC CAS; |
| 2 | LOADACTIONSET 'network'; |
| 3 | ACTION network.community / |
| 4 | links={name='myLinks'} |
| 5 | algorithm='LABELPROPAGATION' |
| 6 | resolutionList={0.5, 1.0, 1.5} |
| 7 | outNodes={name='myNodesOut_lp', replace=true} |
| 8 | outCommLinks={name='myCommLinks', replace=true} |
| 9 | outCommunity={name='myComm', replace=true} |
| 10 | outLevel={name='myLevel', replace=true}; |
| 11 | RUN; |
| 12 | QUIT; |