生物医学网络科学Biomedical Network Science
Example01 / 10

从 ROI 时间序列估计功能连接矩阵

所属专题
脑连接组:结构与功能连接
下载
Notebook · .py

用皮尔逊相关得到 40×40 的功能连接矩阵 R,再做 Fisher z 变换(对角线先置 0,避免 artanh(1)=∞)。 输出:系统内与系统间的平均相关;热图中应呈现 4 个对角块,对应 4 个模拟功能系统。 系统间平均相关略大于 0,来自模拟中的全脑共同波动(类比真实数据中的全局信号)。

Output输出图

从 ROI 时间序列估计功能连接矩阵:输出图 1

Output文字输出

系统内平均 r = 0.346
系统间平均 r = 0.049
Fisher z 的取值范围: -0.15 ~ 0.69

Code代码

# 用皮尔逊相关得到 40×40 的功能连接矩阵 R,再做 Fisher z 变换(对角线先置 0,避免 artanh(1)=∞)。
# 输出:系统内与系统间的平均相关;热图中应呈现 4 个对角块,对应 4 个模拟功能系统。
# 系统间平均相关略大于 0,来自模拟中的全脑共同波动(类比真实数据中的全局信号)。
import numpy as np
import matplotlib.pyplot as plt

def simulate_bold(n_mod=4, per=10, T=200, seed=0):
    """模拟数据,仅用于演示方法。返回 (时间序列 N×T, 系统标签)。"""
    rng = np.random.default_rng(seed)
    labels = np.repeat(np.arange(n_mod), per)
    sys_sig = rng.standard_normal((n_mod, T))
    glob = rng.standard_normal(T)
    load = rng.uniform(0.4, 1.0, size=n_mod * per)   # 各脑区对本系统的载荷不同
    X = load[:, None] * sys_sig[labels] + 0.3 * glob + rng.standard_normal((n_mod * per, T))
    X[9] += 0.8 * sys_sig[1]                          # 脑区 9:跨系统连接枢纽
    return X, labels

X, labels = simulate_bold()
N = X.shape[0]

R = np.corrcoef(X)                 # 按行计算:每行一个脑区
R0 = R.copy()
np.fill_diagonal(R0, 0)
Z = np.arctanh(R0)                 # Fisher z,组水平统计通常在 z 上进行

same = labels[:, None] == labels[None, :]
off = ~np.eye(N, dtype=bool)
print("系统内平均 r =", round(R[same & off].mean(), 3))
print("系统间平均 r =", round(R[~same].mean(), 3))
print("Fisher z 的取值范围:", round(Z[off].min(), 2), "~", round(Z[off].max(), 2))

plt.imshow(R, cmap="RdBu_r", vmin=-1, vmax=1)
plt.colorbar(label="Pearson r")
plt.title("Simulated functional connectivity matrix")
plt.show()

Run在浏览器中运行

首次加载 Python 环境约需 20–40 秒;可以修改参数后重新运行。

从 ROI 时间序列估计功能连接矩阵