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

重尾度分布与 Jeong 式统计

所属专题
生物分子网络与拓扑特征
下载
Notebook · .py

比较 1500 节点的 BA 网络(模拟 PPI)与同节点数、同边数的 ER 随机网络: (a) 画度的互补累积分布(CCDF)双对数图;(b) 仿照 Jeong 等(2001)统计度 ≤ 5 与度 > 15 的节点比例。 输出解读:BA 网络的 CCDF 呈长尾,存在度很大的枢纽;ER 网络几乎没有度 > 15 的节点。 注意:CCDF 近似直线不等于证明了幂律,严格判断需最大似然拟合与替代分布比较。

Output输出图

重尾度分布与 Jeong 式统计:输出图 1

Output文字输出

BA:度 ≤ 5 的比例 = 0.857,度 > 15 的比例 = 0.025,最大度 = 105
ER:度 ≤ 5 的比例 = 0.790,度 > 15 的比例 = 0.000,最大度 = 14

Code代码

# 比较 1500 节点的 BA 网络(模拟 PPI)与同节点数、同边数的 ER 随机网络:
# (a) 画度的互补累积分布(CCDF)双对数图;(b) 仿照 Jeong 等(2001)统计度 ≤ 5 与度 > 15 的节点比例。
# 输出解读:BA 网络的 CCDF 呈长尾,存在度很大的枢纽;ER 网络几乎没有度 > 15 的节点。
# 注意:CCDF 近似直线不等于证明了幂律,严格判断需最大似然拟合与替代分布比较。
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt

G_ba = nx.barabasi_albert_graph(1500, 2, seed=1)   # 模拟数据,仅用于演示方法
G_er = nx.gnm_random_graph(1500, G_ba.number_of_edges(), seed=1)

def ccdf(G):
    """返回 (ks, P):ks 为排序后的不同度值,P[i] = 度 >= ks[i] 的节点比例。"""
    deg = np.array([d for _, d in G.degree()])
    ks = np.unique(deg)
    P = np.array([np.mean(deg >= k) for k in ks])
    return ks, P

for name, G in [("BA", G_ba), ("ER", G_er)]:
    deg = np.array([d for _, d in G.degree()])
    print(f"{name}:度 ≤ 5 的比例 = {np.mean(deg <= 5):.3f},度 > 15 的比例 = {np.mean(deg > 15):.3f},最大度 = {deg.max()}")
    ks, P = ccdf(G)
    plt.loglog(ks, P, "o", ms=3, label=name)
plt.xlabel("k"); plt.ylabel("P(K ≥ k)"); plt.legend(); plt.title("CCDF of degree (simulated)")
plt.show()

Run在浏览器中运行

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

重尾度分布与 Jeong 式统计