omics.co.in logo omics.co.in

12: Network Biology, Protein-Protein Interactions & Graph Theory

Tested Stacks: GATK 4.6.1 Samtools 1.21 Nextflow 24.10 Seurat v5.1 Python 3.12
Prerequisites: Basic Linux CLI & Sequencing Formats
📚 Chapter 12 of 13 0% Course Completed

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.

Scale-Free Networks & Biological Robustness

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 chr1 or 1; divergent naming causes silent alignment drops.
Was this guide helpful to your research?
Help us maintain 100% accurate, peer-reviewed bioinformatics standards.
📝 Propose Edit on GitHub ↗