network

community

Descripción

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.

network.community { algorithm="LOUVAIN" | "LABELPROPAGATION", deterministic=TRUE | FALSE, direction="DIRECTED" | "UNDIRECTED", display={...}, distributed=TRUE | FALSE, fix="variable-name", graph=integer, indexOffset=integer, labelUpdateMode="ASYNCHRONOUS" | "SYNCHRONOUS", linkRemovalRatio=integer, links={...}, linksVar={...}, logFreqTime=integer, logLevel="AGGRESSIVE" | "BASIC" | "MODERATE" | "NONE", maxIters=integer, multiLinks=TRUE | FALSE, nodes={...}, nodesVar={...}, nThreads=integer, outCommLinks={...}, outCommunity={...}, outGraphList={...}, outLevel={...}, outLinks={...}, outNodes={...}, outOverlap={...}, outputTables={...}, recursive={...}, resolutionList={double-1, double-2, ...}, selfLinks=TRUE | FALSE, standardizedLabels=TRUE | FALSE, standardizedLabelsOut=TRUE | FALSE, tolerance=double, warmStart="variable-name" }
Parámetros
ParámetroDescripción
algorithmEspecifica 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.
deterministicCuando 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.
directionEspecifica si se debe considerar el grafo de entrada como dirigido ('DIRECTED') o no dirigido ('UNDIRECTED').
displayEspecifica una lista de tablas de resultados para enviar al cliente para su visualización.
distributedCuando se establece en True, utiliza un grafo distribuido, lo que permite el procesamiento en paralelo en múltiples nodos para grafos muy grandes.
fixEspecifica la variable que define grupos de nodos que deben permanecer juntos en la misma comunidad durante la detección.
graphEspecifica el grafo en memoria a utilizar. Este es un identificador numérico para un grafo previamente cargado.
indexOffsetEspecifica el desplazamiento del índice para los identificadores en el log y las tablas de resultados. Por defecto es 0.
labelUpdateModeEspecifica 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').
linkRemovalRatioEspecifica el porcentaje de enlaces de bajo peso que se eliminarán alrededor de la vecindad de cada nodo para acelerar el cálculo.
linksEspecifica la tabla de datos de entrada que contiene la información de los enlaces del grafo.
linksVarEspecifica los nombres de las variables de datos para la tabla de enlaces.
logFreqTimeControla la frecuencia (en segundos) para mostrar los logs de iteración para algoritmos computacionalmente intensivos.
logLevelControla la cantidad de información que se muestra en el log de SAS (NONE, BASIC, MODERATE, AGGRESSIVE).
maxItersEspecifica el número máximo de iteraciones que el algoritmo puede ejecutar.
multiLinksCuando se establece en True, incluye múltiples enlaces entre los mismos dos nodos si existen en el grafo de entrada.
nodesEspecifica la tabla de datos de entrada que contiene la información de los nodos del grafo.
nodesVarEspecifica los nombres de las variables de datos para la tabla de nodos.
nThreadsEspecifica el número máximo de hilos a utilizar para el procesamiento multihilo.
outCommLinksEspecifica la tabla de datos de salida para describir los enlaces entre cada comunidad.
outCommunityEspecifica la tabla de datos de salida que contendrá las propiedades de cada comunidad (por ejemplo, número de nodos, densidad).
outGraphListEspecifica la tabla de datos de salida que contendrá información de resumen sobre los grafos en memoria.
outLevelEspecifica la tabla de datos de salida que contendrá la información de la comunidad en diferentes niveles de resolución.
outLinksEspecifica la tabla de datos de salida que contendrá la información de los enlaces del grafo junto con los resultados de los algoritmos.
outNodesEspecifica la tabla de datos de salida que contendrá la información de los nodos del grafo junto con los resultados de los algoritmos.
outOverlapEspecifica la tabla de datos de salida para describir la intensidad de la pertenencia de cada nodo a múltiples comunidades.
outputTablesLista los nombres de las tablas de resultados para guardar como tablas CAS en el servidor.
recursiveDescompone las comunidades grandes en otras más pequeñas hasta que se cumplan las condiciones especificadas (maxCommSize, maxDiameter).
resolutionListEspecifica una lista de valores de resolución para el algoritmo de Louvain, lo que permite la detección de comunidades a diferentes escalas.
selfLinksCuando se establece en True, incluye los auto-enlaces (un enlace de un nodo a sí mismo) al leer un grafo de entrada.
standardizedLabelsCuando se establece en True, especifica que los datos del grafo de entrada están en un formato estandarizado.
standardizedLabelsOutCuando se establece en True, solicita que los datos del grafo de salida incluyan un formato estandarizado.
toleranceEspecifica 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.
warmStartEspecifica la variable que define los identificadores de comunidad iniciales para iniciar la detección de comunidades desde un estado predefinido.
Creación de Datos de Muestra

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.

¡Copiado!
1DATA mycas.myLinks;
2 INFILE DATALINES delimiter=',';
3 INPUT from $ to $ weight;
4 DATALINES;
5A,B,1
6A,C,1
7A,D,1
8B,C,1
9B,D,1
10C,D,1
11E,F,1
12E,G,1
13F,G,1
14H,I,1
15H,J,1
16H,K,1
17H,L,1
18I,J,1
19I,K,1
20I,L,1
21J,K,1
22J,L,1
23K,L,1
24A,H,0.1
25;
26RUN;

Ejemplos

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'.

Código SAS® / CAS Código en espera de validación por la comunidad
¡Copiado!
1PROC CAS;
2 LOADACTIONSET 'network';
3 ACTION network.community /
4 links={name='myLinks'}
5 outNodes={name='myNodesOut', replace=true};
6RUN;
7QUIT;
Resultado :
Una tabla 'mycas.myNodesOut' que contiene los nodos del grafo y una nueva columna 'community' que indica el ID de la comunidad a la que pertenece cada nodo. Se espera que los nodos A-D y H-L formen comunidades distintas.

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.

Código SAS® / CAS Código en espera de validación por la comunidad
¡Copiado!
1PROC 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};
11RUN;
12QUIT;
Resultado :
Se generan múltiples tablas de salida. 'myNodesOut_lp' contiene las asignaciones de comunidad para cada nodo. 'myCommLinks' muestra los enlaces agregados entre las comunidades detectadas. 'myComm' proporciona estadísticas para cada comunidad (número de nodos, densidad, etc.). 'myLevel' muestra los resultados para cada nivel de resolución especificado, permitiendo un análisis multinivel de la estructura de la comunidad.

FAQ

¿Cuál es el propósito de la acción `community` en el conjunto de acciones `network`?
¿Qué algoritmos de detección de comunidades soporta la acción `community`?
¿Cómo se puede especificar si el grafo es dirigido o no dirigido?
¿Qué hace el parámetro `resolutionList`?
¿Es posible ejecutar la detección de comunidades de forma distribuida?
¿Cuáles son las tablas de salida principales que genera la acción `community`?