Alterlab sna
Skill AlterLab-IEU/AlterLab-Academic-Skills/skills/social-science-workflow/alterlab-sna
Applies social-network-analysis method discipline to relational data — degree/betweenness/closeness/eigenvector centrality and PageRank, community detection (Louvain and greedy-modularity native in networkx, Leiden via igraph), and inferential network models (ERGM) — choosing the measure that matches the substantive question and the right dependence assumptions, then routing computation to the existing networkx (and igraph/R) tooling. Use when the request mentions social network analysis, centrality, key players/brokerage, community or cluster detection in a network, ERGM, or modeling ties between nodes. For general graph algorithms and plotting prefer alterlab-networkx; for graph neural networks prefer alterlab-torch-geometric. Part of the AlterLab Academic Skills suite.From its SKILL.md
npx -y skills add AlterLab-IEU/AlterLab-Academic-Skills --skill alterlab-snaAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
What its file declares
Copied from the file, not written here
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
5.4 KB, ~1.0k tokens by cl100k_base, as published. Nobody here has run it
Social Network Analysis — Match the Measure to the Question
Skill type: ANALYSIS MODULE. SNA treats the ties as the data. The discipline is not
running a centrality function — it is choosing the centrality that answers the substantive
question, respecting network dependence (ties are not independent observations), and using an
inferential model (ERGM) when you want to explain tie formation rather than describe it.
Computation is handed to alterlab-networkx.
Core Mission
THE TIE IS THE UNIT. PICK THE CENTRALITY THAT MATCHES THE QUESTION; TIES ARE NOT IID.
When to Use This Skill
- "Run a social network analysis / compute centrality on my network."
- "Who are the key players / brokers in this network?"
- "Detect communities / clusters in my network."
- "Fit an ERGM to explain why ties form."
Does NOT Trigger
| The request is really about… | Route to | Why not this skill |
|---|---|---|
| General graph algorithms / plotting / I/O | alterlab-networkx | This skill adds SNA method choice; networkx executes. |
| Graph neural networks / node embeddings for prediction | alterlab-torch-geometric | Deep learning on graphs, not SNA description/inference. |
| Whether a relational design is appropriate | alterlab-ssci-design-gate | Design routing, upstream. |
| Plain tabular statistics | alterlab-statistical-analysis | No network structure. |
Centrality — pick by the substantive claim (verified networkx 3.x)
| Question | Centrality | Call |
|---|---|---|
| Who has the most direct ties? | degree | nx.degree_centrality(G) |
| Who bridges otherwise-separate groups? | betweenness (brokerage) | nx.betweenness_centrality(G) |
| Who can reach everyone fastest? | closeness | nx.closeness_centrality(G) |
| Who is connected to well-connected others? | eigenvector / PageRank | nx.eigenvector_centrality(G) / nx.pagerank(G) |
Do not report "centrality" generically — name which one and why it matches the claim (a broker argument needs betweenness, not degree).
Community detection (verified)
nx.community.louvain_communities(G)— native in networkx 3.x (nopython-louvainneeded).nx.community.greedy_modularity_communities(G)— Clauset-Newman-Moore.nx.community.modularity(G, communities)— score a partition.- Leiden (Traag et al.) is not in networkx; it guarantees well-connected communities and is the
recommended improvement over Louvain — route to
python-igraph(ig.Graph.community_leiden(...)) orleidenalg. Use igraph for large graphs generally.
Inference: ERGM (no mature Python — use R statnet)
To explain tie formation (reciprocity, homophily, triadic closure) rather than describe it, use
an exponential random graph model. There is no mature Python ERGM package (pyERGM exists but is
young); the standard is R statnet/ergm via an R bridge:
library(ergm)
model <- ergm(net ~ edges + mutual + nodematch("group") + gwesp(0.5, fixed = TRUE))
summary(model)
Declare the R dependency; do not fabricate a Python ERGM API. Full algorithm-selection guidance,
the ERGM term glossary, and the dependence caveat: references/sna_methods.md.
The dependence caveat
Network ties violate the independence assumption of ordinary regression: you cannot regress an outcome on centrality and read the SE naively, because nodes are linked. Use permutation/QAP tests for dyadic hypotheses, or ERGM/latent-space models for tie-level inference. Flag this whenever a network measure is fed into a downstream test.
Output Template
NETWORK: <directed? weighted? n nodes, m edges; how ties were defined>
MEASURE: <named centrality/community algorithm + why it matches the question>
RESULT: <top nodes / partition + modularity; not just a number>
INFERENCE: <ERGM terms + fit, OR permutation/QAP test> — respect tie dependence
CLAIM SCOPE: descriptive (structure) vs inferential (tie-formation) — do not conflate
References
references/sna_methods.md— centrality selection, Louvain vs Leiden, ERGM terms + R bridge, QAP/permutation, large-graph tooling.
Part of the AlterLab Academic Skills suite.
What ships with it: 2 files
6.4 KB alongside SKILL.md
evals/
- evals.json2.8 KB
references/
- sna_methods.md3.6 KB