生物医学网络科学Biomedical Network Science
网络分析流程与 NetworkX 实践06 / 16

常见计算陷阱

阅读
约 3 分钟

很多错误不会让程序报错,只会悄悄改变数值。下面五类问题在生物医学网络中最常见,代码示例“五个常见计算陷阱”给出了每一类的可手算演示。

自环

蛋白质同源二聚化、基因的自调控会在数据中表现为自环。在无向简单图中,一个自环使该节点的度加 2(NetworkX 的约定),并可能影响聚集系数、模块度等的计算。示例中三角形加一条悬挂边的小图里,节点 3 的度从 3 变为 5。自环有生物学意义(如网络基序:自调控与前馈环中的负自调控),但大多数拓扑指标的定义假设没有自环。做法是:用 nx.number_of_selfloops 检查,把自环作为节点属性另行记录,然后 G.remove_edges_from(nx.selfloop_edges(G))。

重边

同一对蛋白可能被多项实验、多种证据分别报告。用 nx.Graph(M) 把多重图直接转为简单图时,重边被合并,只保留其中一条边的属性,而不是自动求和。示例中 A–B 被报告两次(权重 1 与 2),直接转换得到权重 2,显式求和得到 3。应当根据问题选定聚合规则(证据条数、权重求和、取最大、组合置信度),并在方法中写明。STRING 的综合得分(combined score)就是按其自身规则整合多个证据通道的结果,不应再与单个通道的分数混用。

孤立点

孤立点改变平均度、密度,并使所有基于路径的全局指标报错或失去意义。示例中 5 节点的路径图加上 3 个孤立点后,平均度从 1.6 降到 1.0,密度从 0.40 降到 0.14,平均最短路径直接报错。孤立点从哪里来本身就是信息:可能是阈值过高、标识符映射失败,也可能是该基因确实缺乏已知相互作用(研究偏倚)。应当报告孤立点数目及其可能来源,再决定是否去除。

有向性

调控、信号与代谢网络的方向有明确的生物学含义。把有向图无向化会改变几乎所有中心性:示例中调控链 TF1 → TF2 → TF3 → TF4 的 PageRank 在有向图中沿方向递增(末端 TF4 最高),无向化后变成首尾对称。有向图的连通性分“弱连通”(忽略方向连通)与“强连通”(双向可达),该示例弱连通而不强连通。特征向量中心性在无环有向图上没有有意义的非零解,PageRank 通过随机跳转避免了这一问题;有向图的聚集系数、同配性也都有专门的定义。

权重是相似度还是距离

这是最隐蔽也最常见的错误。最短路径、接近中心性和介数中心性把 weight 当作距离(越大越远),而共表达相关、STRING 置信度、纤维束数目都是相似度或强度(越大越近)。示例中 A–B、B–C 为强相关(r=0.9r=0.9),A–C 为弱相关(r=0.2r=0.2):若直接把 rr 作为 weight,算法认为 A→C 的直接弱边“最短”,B 的介数为 0;把 rr 转换为距离后,最短路径改走 A–B–C,B 的介数为 1。

两种常用的转换(见 Opsahl 等 2010 与 Rubinov 2010):

dij=1wij或dij=−log⁡wij(0<wij≤1).d_{ij}=\frac{1}{w_{ij}}\qquad\text{或}\qquad d_{ij}=-\log w_{ij}\quad(0<w_{ij}\le 1).

倒数变换常用于脑网络的连接长度;负对数变换把路径长度对应为沿途相似度(或概率)的乘积,在 ww 可解释为置信概率时更自然。相反,模块度、加权度(强度)、加权聚集系数把权重当作强度,不需要转换。同一份分析中往往两种用法并存,最好在图中分别存储两个属性(如 weight 与 distance),并在每次调用时显式指定。

其他需要留意的默认行为:betweenness_centrality 默认归一化(normalized=True),不同论文的数值因此不能直接比较;权重为 0 或负数时 Dijkstra 类算法不适用,带负权(负相关)的网络需要先决定是取绝对值、只保留正边,还是使用带符号网络的专门方法;对浮点权重,NetworkX 文档提示介数的结果可能受舍入影响,必要时可将权重放大取整。模块度对负权边也没有标准定义,带符号的相关网络应使用专门推广(如 BCT 中的带符号模块度)。