12: Network Biology, Protein-Protein Interactions & Graph Theory
Chapter 12: Network Biology, Protein-Protein Interactions & Graph Theory
Genes and proteins do not operate as isolated entities; they execute cellular functions through complex, interconnected molecular networks. Network Biology applies graph theory to analyze biological systems, mapping protein-protein interactions (PPI), transcriptional regulatory networks, and metabolic flux cascades.
Unlike random Erdös-Rényi graphs, biological networks exhibit a Scale-Free topology where the node degree distribution \(P(k)\) follows a power law:
P(k) ∼ k-γ (typically 2 < γ < 3)
Most proteins have very few interactions, while a small minority of essential "hub proteins" (e.g. TP53, MYC, UBC) possess hundreds of connections. This architecture confers tremendous robustness against random mutations, while creating acute vulnerability to targeted attacks against hub nodes (the centrality-lethality rule).
1. Key Topological Centrality Metrics
- Degree Centrality: Total number of direct interaction partners connected to a node.
- Betweenness Centrality: The fraction of all shortest paths between all pairs of nodes that traverse through node \(v\). High betweenness nodes act as biological bottlenecks or information bridges between functional modules.
- Clustering Coefficient: The ratio of edges between a node's immediate neighbors to the maximum possible edges between them, quantifying local modularity.
2. Querying STRING Database Programmatically with Python
import urllib.request
import json
# Query STRING API for physical and functional interaction partners of human TP53
genes = ["TP53", "MDM2", "ATM", "CHEK2", "CDKN1A", "BAX"]
string_api_url = "https://string-db.org/api/json/network"
params = f"?identifiers={'%0d'.join(genes)}&species=9606&required_score=700"
with urllib.request.urlopen(string_api_url + params) as resp:
interactions = json.loads(resp.read().decode())
print(f"Retrieved {len(interactions)} high-confidence PPI edges:")
for edge in interactions[:5]:
print(f" {edge['preferredName_A']} <---> {edge['preferredName_B']} | Confidence Score: {edge['score']}")Common Pitfalls & Troubleshooting Checklist
- Java Heap Exhaustion (GATK / Picard): If processes terminate with
java.lang.OutOfMemoryError, set your environment variable explicitly:export _JAVA_OPTIONS="-Xmx16g -Djava.io.tmpdir=/tmp". - Index Timestamp Mismatch: If tools complain that a BAM index is missing or out of date, regenerate with
samtools index -@ 4 sample.bam. - Conda Channel Conflicts: Avoid ABI incompatibilities between bioconda and conda-forge by setting strict priority:
conda config --set channel_priority strict. - Chromosome Naming Contamination: Always verify whether reference FASTA headers use
chr1or1; divergent naming causes silent alignment drops.