Real Signal, or Ghost?

A mutual-information permutation tester β€” the rigorous way to answer "is the hot hand real?", borrowed straight from a neuroscience lab.
Grounded in β€œINTENSE: Detecting and disentangling neuronal selectivity in calcium imaging data” (arXiv:2603.04622). INTENSE detects whether a neuron's activity is genuinely tied to a behavior by computing the mutual information (MI) between the two signals, then testing it against a null distribution built from circular-shift permutations β€” shifting one series by random offsets, recomputing MI each time, and seeing where the real MI lands. The paper also uses conditional MI to tell apart genuine direct coupling from associations that are really driven by a shared hidden cause. Below: the exact same machinery, run on synthetic "hot streak" time series instead of neurons.

1 Β· Pick a pair of time series

Direct coupling
The "real" hot hand
Two signals driven by the same underlying streaky state, tightly, with little noise. A genuine shared dependency.
Shared hidden cause
Confounded pair
Looks correlated on the chart. Both secretly ride the same slow hidden factor β€” but is that a real link, or a lurking third variable?
Independent
Pure noise
Two totally independent random series. Any "streak" you see in either one is pure coincidence.

2 Β· The two observed time series

Series A vs. Series B

Raw signals over time β€” this is all a naked eye gets to look at.
Series A Series B
Observed MI
–
Samples
–
Pair type
–

3 Β· Circular-shift permutation test

Null distribution of shuffled MI

Each shuffle circularly shifts Series B by a random offset, keeping its own structure but breaking any real alignment with A, then recomputes MI. The red line is where the real MI actually falls.
0 / 300 shuffles

p-value

Fraction of shuffles whose MI is β‰₯ the real observed MI. This settles as more shuffles run.
p-value
–
null mean MI
–
β€”

Peek behind the curtain: the hidden confound

A significant p-value proves A and B share real information β€” it does not prove A drives B directly. This is exactly why INTENSE adds a conditional-MI disentanglement step. Reveal the hidden variable C(t) that both A and B were actually built from, and watch the mutual information collapse once you control for it.
Hidden confound C(t)