Is Spider-Man an accident?

Testing the Marvel network against three kinds of "nothing special going on here," then growing a network that tries to build its own Marvel.

Setting up the question

↑

Week 1 found a heavily skewed network: 303 characters, mean in-degree 5.89, and one hub — Spider-Man, cited by 106 others, almost double the runner-up (Hulk, 64). Is a hub that size just what falls out of scattering 1,784 links across 303 nodes — or does it take something more deliberate, an actual rich-get-richer mechanism?

No new data this week: everything below runs on the same 303 nodes and 1,784 directed edges from data/week1, computed live in your browser, across four questions. Could pure chance produce this? What survives once every character's link count is frozen and only who connects to whom is randomized? Can a growth model that favors the well-connected reproduce it — and where does it break? And what does this shape mean for an individual hero's own connections?

Could chance alone produce this?

↑

Could Spider-Man's 106 in-links just be chance? The simplest null model says every possible directed pair of characters is equally, independently likely to link: an Erdős–Rényi (ER) random graph with the same 303 nodes and 1,784 edges as the real network. If scattering that many edges at random can produce a hub that size, an ER draw should occasionally come close.

It doesn't. Across 300 offline ER draws, the biggest hub's in-degree ranged from 11 to 18 (mean 13.9, standard deviation 1.2) — Spider-Man's 106 is about 6× larger than the largest draw, and roughly 74 standard deviations above the mean. Draw your own random network below and see where its biggest hub lands.

Each draw independently places 1,784 directed edges among 303 nodes at random (no self-loops, no repeats) and plots the resulting in-degree CCDF against the real network's.

Computed live from the raw Week 1 data in your browser. ER only tests "edges placed with no preference at all" — it says nothing about whether the real distribution is a power law (that needs proper maximum-likelihood fitting, done separately below). It just shows that independent random linking doesn't produce whatever shape the real in-degree distribution has.

What survives once degree is held fixed?

↑

ER throws away how many links each character has, too — a strong null, maybe too strong. The tighter question: keep everyone's exact in- and out-degree fixed, scramble only who links to whom. Does the network still look distinctive?

The shuffle keeps every character's degree the same but changes who connects to whom: repeatedly take a chain a→b, b→c, c→d and rewire it to a→c, c→b, b→d. Two statistics, defined precisely:

Offline, across 300 shuffles (3,000 swaps each): clustering's null mean was 0.180 (sd 0.009) — the real value sits about 14 standard deviations above it, beyond all 300 shuffles (empirical p ≈ 0). Reciprocity's null mean was 0.069 (sd 0.007) — the real value sits about 44 standard deviations above that, again beyond every shuffle. Degree alone doesn't explain this network's triangle-heavy structure or its mutual-citation rate.

The chart below starts pre-populated with shuffles, so the null distribution is visible immediately — pick a statistic, or run more yourself.

Each shuffle is a fresh copy of the real network, swapped from scratch (not a running chain), matching the offline method above but with fewer swaps per realization for responsiveness. 40 run automatically on load; use the button for more.

Same degree sequence. Different connections. The shuffle test asks whether the observed structure is unusual once degree is controlled for. Computed live in your browser.
Two things worth flagging. The distinction: ER above asks "what if edges had no constraint at all?" — this shuffle asks the narrower "what if the exact degree sequence stayed fixed, and only the wiring changed?" The caveat: this swap preserves each node's directed in-degree and out-degree exactly — that's what it's built to do. It does not guarantee the undirected-projection degree stays fixed, since a swap can turn a reciprocal pair into a one-way link (or back), changing how many distinct neighbors a node has. That makes it the right null for reciprocity and directed structure, but a slightly looser one for the clustering number than a true undirected-degree-preserving shuffle would be — we're flagging that, not hiding it.

One more thing we checked offline but didn't add as a control: does the 9-character island Week 1 found ever reconnect to the giant component under this shuffle? Across all 300 realizations, the giant component stayed exactly 277 nodes, every time (standard deviation 0) — not by chance, but by construction: a swap only ever rewires edges along an existing directed walk (a→b→c→d), which can never cross between two components with no edges between them. This null can't even ask whether the island would reconnect — the component split is invariant by construction, not by result. That's why it isn't offered as a third toggle above: a histogram with zero variance wouldn't be testing anything.

Growing a network that favors the popular

↑

Preferential attachment: grow to 303 nodes one at a time, and give each newcomer m outgoing links to existing characters — chosen with probability proportional to how many in-links they already have. It's the classic rich-get-richer mechanism, in its directed citation-network form (the Price model), which fits our directed network better than the usual undirected Barabási–Albert setup. Out-degree is exactly m for every non-seed node by construction (the growth ingredient); in-degree accumulates by preference (the rich-get-richer ingredient).

This is a generative hypothesis tested against the data — not a claim about how the Wikipedia article network actually got written.

At m=6 (6×303 ≈ 1,818 edges, close to the real 1,784), 50 offline trials all produced a bigger hub than Spider-Man: max in-degree 116–166 (mean 141) against the real 106 — preferential attachment doesn't just reproduce a big hub here, it overshoots. Lowering m brings the hub down (m=3: 70–137, mean 99, much closer; m=2: 44–125, mean 79) but pulls the edge count further from 1,784 — no single m matches both density and hub size. And at every m, every trial: one connected component, zero isolates — versus the real network's 17 isolates and a 9-character island. A model where everyone who joins immediately attaches can't produce someone nobody ever mentions.

Move the slider and regenerate to see for yourself.

Grows a fresh directed preferential-attachment network to n=303 nodes with the chosen m, then plots its in-degree CCDF against the real network's.

Computed live in your browser. The prose above quotes 50 offline trials per m; this is a single live sample, so expect it near those ranges rather than exactly on the mean.

A Marvel universe born all at once

Preferential attachment depends on history: characters arrive one at a time, and each newcomer is more likely to connect to whoever's already popular, so an early lead can snowball into a hub like Spider-Man. But what if the Marvel universe was born all at once?

If all 303 characters existed simultaneously, there'd be no established popularity for a newcomer to follow — everyone would start with the same shot at new connections. That's the counterfactual below: a second model, same 303 characters and roughly the same edge budget, that links nodes uniformly at random instead of preferring the well-connected. It's not a claim about how Marvel's Wikipedia network actually came to exist — it's a way of asking how much of the hub structure could come from history alone.

Sequential growth adds one character at a time, wiring each newcomer's m links proportional to how connected existing characters already are (the same rule as above). Big Bang creates all 303 at once and wires the same m links per character uniformly at random — no regard for who's already connected. Switch models or click "New universe" for a fresh run; node size shows degree, and the largest hub is highlighted in gold. Hover a node (mouse only) for its name and degree.

Hover a node to see who occupies it and how connected it is in this run.

Computed live in your browser, positions included: a small force-directed layout (nodes repel, edges pull connected characters together) settles fresh each run, so a hub shows up both as a bigger node and as something others cluster around. Positions aren't comparable run-to-run or model-to-model — only the overall pattern is. Character names are borrowed from the real dataset just so hovering means something; the degree shown is this simulation's, not that character's real Wikipedia in-degree. This is a counterfactual model for illustration, not a reconstruction of how Marvel's network was actually written.

Run each model a few times at the same m. Big Bang spreads connections fairly evenly — most nodes end up a similar, modest size, and the largest hub barely varies run to run. Sequential growth, at that same m, reliably produces one or two stand-out characters, because whoever gets ahead early keeps attracting a disproportionate share of new links. That's the mechanism in miniature: Spider-Man's 106 real in-links aren't just abstract "popularity" — in a growing network, being popular early is itself an advantage that compounds. In a universe born all at once, there's no "early" for that advantage to attach to.

None of this shows preferential attachment is what actually produced the real Wikipedia network — the CCDF comparison above already found PA, at the edge-matched m, reliably overshoots Spider-Man's real in-degree. What it does show is why network history can matter: a heavy-tailed degree distribution is consistent with a growth-plus-preference story, but consistent isn't proof — this counterfactual just isolates what history specifically contributes.

Are your friends more popular than you?

↑

Definitions: on the undirected projection (same one used for clustering above), a character's degree is their number of distinct neighbors, and their average neighbor degree is the mean degree of those neighbors. Network-wide, ⟨k⟩ = 9.465, while the edge-weighted mean neighbor degree ⟨k²⟩⁄⟨k⟩ = 22.08 — more than double. That gap is the friendship paradox. It's worth stating plainly that ⟨k²⟩⁄⟨k⟩ is a pure function of the degree sequence, so it's mathematically guaranteed to survive a degree-preserving shuffle — not something this page needs to test.

What isn't guaranteed is what it looks like character by character. Of the 286 connected characters, 250 (87.4%) have neighbors who are on average more connected than they are; the other 36 (12.6%) out-rank their average neighbor. Only two are never out-popularitied by any neighbor at all: Spider-Man, and, inside the isolated Morituri island, Radian.

Search for a hero below to see their own numbers.

Each dot is one connected character (own degree vs. average neighbor degree, log-log). The dashed diagonal marks equality: above it, your neighbors out-rank you on average; below it, you out-rank them. Click a dot or search a name.

No hero selected yet — click a dot or find one above.

Computed live from the raw Week 1 data files in your browser. The 17 fully isolated characters have no neighbors to compare against and are excluded here.

Is the degree distribution random, scale-free, or neither?

↑

We plotted the in-degree CCDF P(K ≥ k) on the frozen Week 1 snapshot (303 characters, 1,784 directed links) against two nulls: an ER random graph, whose in-degree is exactly Poisson with λ = 1,784/303 ≈ 5.89, and a 200-seed ensemble of Barabási–Albert graphs (N = 303, m = 3 — mean degree 5.94, matching ours), shown with a 5–95% band. A discrete power-law fit (Clauset–Shalizi–Newman MLE, via the powerlaw package) then summarizes the tail: exponent α̂ with its standard error, and a self-selected cutoff k̂min.

CCDF of Marvel in-degree on log-log axes against an exact Poisson ER null and a 200-seed Barabási–Albert ensemble with a 5–95% band
In-degree CCDF (blue) vs. the Poisson ER null (gray) and the BA ensemble (orange, 5–95% band, 200 seeds). Poisson exits the chart by k ≈ 18; Spider-Man's 106 nearly doubles the heaviest BA hub (77).
CCDF of the Marvel in-degree tail with the fitted discrete power law
The fit: α̂ = 2.22 ± 0.12 above k̂min = 5. It tracks the mid-tail; past k ≈ 20 the real curve bends below the line.

Not random. Under ER, a character with in-degree 20 or more should essentially never exist — expected count 0.0012, real count 21. A degree of 106 is 1 × 10−91 off the Poisson scale: the gray curve exits the chart by k ≈ 18, while the real network still has 22 characters beyond it.

Heavier than BA. From k ≈ 7 on, the real CCDF runs above the BA ensemble's 95% band and stays there; the fitted exponent (α̂ = 2.22) sits well below BA's theoretical 3.0 (smaller exponent = heavier tail), and Spider-Man's 106 clears BA's ensemble max of 77. Forced to choose between random and BA: BA, easily — it just understates Marvel's skew.

Neither, strictly. The power law describes the tail, not the whole network: only 112 of the 245 cited characters sit in the fitted region, and a network this small carries wide uncertainty on α̂. "Scale-free-looking tail" is as far as this data goes.

What we can't conclude (for this question):

What the models get right, and what they miss

↑

Pulling the four sections together:

So: no, Spider-Man isn't an accident of scale or density. Something like rich-get-richer growth fits the real hub structure far better than any random baseline — but that's a hypothesis this data is consistent with, not something these four tests prove happened, and even its best-fitting version can't explain the 17 characters nobody bothered to link to.

📎 Reproducing this: the offline numbers above come from analysis/build_week2.py, run against the same frozen data/week1/ that Week 1 uses, writing data/week2/week2_summary.json. Every interactive figure recomputes its own live version of the same algorithm in your browser — nothing here is hand-typed separately from the code that produced it.
← Back to all weeks