✦ Day 17 · Network Electrophysiology

Functional Connectivity
Coherence, PLV & PLI

Disentangle true neural communication across distant brain regions from false volume conduction artifacts using phase synchronization metrics.

🔗 Functional Connectivity 🤙 Volume Conduction 🔄 Phase Locking Value (PLV) 🛡 Phase Lag Index (wPLI) 🐍 mne_connectivity

Brain function arises from distributed networks communicating via synchronized oscillations. Functional Connectivity measures statistical dependencies between distant EEG channels. However, sensor-level EEG suffers severely from volume conduction (a single subcortical or cortical source projecting instantaneously to multiple scalp electrodes). Selecting the right connectivity metric is essential to separate true neural interaction from artificial volume conduction.


1

Comparing Connectivity Metrics
Coherence vs. PLV vs. PLI / wPLI

Understanding what each metric measures and its vulnerability to false positives:

Phase Locking Value (PLV)

Measures consistency of phase difference across trials regardless of amplitude.
Pitfall: Highly vulnerable to volume conduction (detects 0-lag false positives).

Phase Lag Index (PLI / wPLI)

Measures asymmetry of phase distribution; discards 0-lag (instantaneous) synchronization.
Advantage: Robust against volume conduction and spatial leakage.

Cohen’s Rule of Thumb (ANTS Ch. 26): If analyzing sensor-level scalp EEG, always prefer weighted Phase Lag Index (wPLI) or imaginary coherence to prevent volume conduction artifacts from spoofing fake brain networks.


2

MNE Connectivity Pipeline
mne_connectivity Workflow

Python
from mne_connectivity import spectral_connectivity_epochs

# Compute phase-based connectivity across epochs
indices = ([0, 0], [1, 2])  # Compare ch0-ch1 and ch0-ch2

con = spectral_connectivity_epochs(
    epochs,
    method=['plv', 'wpli'],
    mode='multitaper',
    sfreq=epochs.info['sfreq'],
    fmin=8, fmax=13,
    faverage=True
)

print(f"PLV matrix shape: {con[0].get_data().shape}")
print(f"wPLI matrix shape: {con[1].get_data().shape}")