Lesson 13 of 20 · 9 min
STRING: Protein Interaction Networks
By the end of this lesson you will be able to pull a protein's interaction network out of STRING, read the confidence score on every edge, and say exactly what "these two proteins are associated" does — and does not — mean. That last part is where most people go wrong, so we will spend real time on it.
In the previous lesson on KEGG and Reactome you met the pathway map: an ordered picture of who acts on whom, with arrows for direction and reactions. STRING answers a different question. It does not draw the reaction. It draws the association — a weighted line saying "these two proteins tend to work together" — and it does so for known and predicted partners alike. Knowing the difference between a map and a network is the whole point of this lesson.
What STRING actually stores
STRING — the name stands for Search Tool for the Retrieval of Interacting Genes/proteins, currently version 12.5 at string-db.org — is a derived database. It invents no experiments of its own. Instead it aggregates evidence from many primary sources and turns each aggregate into one number: an edge between two proteins, weighted by how confident STRING is that a functional association exists.
"Functional association" is deliberately broad. It means the two proteins participate in the same process — they might bind directly, sit in the same complex, or simply be switched on together — without STRING claiming which. A pathway map commits to a mechanism; a STRING edge commits only to relatedness. That looseness is a feature: it lets STRING include predicted partners that no one has ever pipetted together.
The confidence score, 0 to 1000
Every edge carries a combined score — an integer from 0 to 1000 that estimates the probability the association is real, where 900 means STRING is ~90% sure. Four thresholds are conventional:
| Score | Tier | Reading |
|---|---|---|
≥ 900 | highest | trust it |
≥ 700 | high | solid default |
≥ 400 | medium | plausible, verify |
≥ 150 | low | speculative |
The score is combined, not additive. STRING treats each evidence type as an independent vote and merges them probabilistically, so an edge with several weak signals can still clear a high threshold if those signals are truly independent. The practical upshot: always set a threshold before you read a network. The default ≥ 400 already hides a swarm of low-confidence lines you would otherwise mistake for biology.
The evidence channels
The combined score is built from separate channels, each a distinct kind of evidence. You can see, and filter on, every channel individually:
- Experiments — biochemical or biophysical assays (two-hybrid, affinity capture) imported from primary interaction databases.
- Databases — curated pathway and complex knowledge from sources like Reactome and KEGG.
- Text-mining — co-mention of the two proteins across the abstracts of PubMed.
- Co-expression — the two genes rise and fall together across many transcriptomic datasets.
- Neighborhood, gene fusion, co-occurrence — genomic-context signals, most informative in bacteria.
Only three of these — experiments, databases, and text-mining — can support a claim of physical interaction. The rest tell you proteins are functionally linked, not that they touch.
The trap that catches everyone: a high combined score does not mean two proteins physically bind. If the score is driven mostly by the text-mining channel, all you really know is that papers mention both proteins in the same breath — which happens for competitors, for members of the same disease, for anything topical. Try it yourself: open a high-scoring edge in STRING, click it, and read the per-channel breakdown before you believe it. An edge held up by text-mining alone is a hypothesis, not a finding.
The BRCA1–BARD1 edge
Make it concrete with our thread. BRCA1 (UniProt P38398, Ensembl gene ENSG00000012048) is a tumour-suppressor E3 ubiquitin ligase, and its closest STRING partner is BARD1. This edge is about as good as STRING edges get: its combined score sits in the highest tier because three independent channels all fire. Experiments show the two proteins pulled down together; curated databases record their complex; the literature co-mentions them constantly.
Here the network view and the structure view finally agree. The BRCA1 and BARD1 RING domains form a real heterodimer, solved by NMR as PDB 1JM7, and BRCA1's own BRCT repeats sit in PDB 1JNX — you met both in the PDB lesson. So the STRING edge is not merely co-mention: there is a 3D structure of these two proteins holding hands. That is the ideal case — every channel and the atoms agree.
Pulling the network with the API
STRING exposes a plain REST API at string-db.org/api, no key required. The interaction_partners method returns a protein's neighbours with per-channel and combined scores. Human is NCBI taxon 9606:
import requests
url = "https://string-db.org/api/tsv/interaction_partners"
params = {
"identifiers": "BRCA1", # STRING resolves the symbol
"species": 9606, # Homo sapiens
"required_score": 700, # high-confidence tier only
"limit": 10,
}
resp = requests.get(url, params=params, timeout=30)
for line in resp.text.strip().splitlines()[1:]:
cols = line.split("\t")
partner, score = cols[3], cols[5] # partner symbol, combined score
print(f"{partner}\t{score}")
# BARD1, BRCA2, TP53, RAD51 ... each with its combined scoreTwo habits will save you. First, resolve your names with the get_string_ids method before a big query, so BRCA1 maps cleanly to STRING's internal protein ID rather than matching the wrong species. Second, always pass required_score — without it you get every flimsy edge STRING knows. To take the returned network further, load it into Cytoscape; our PPI network analysis walkthrough picks up exactly there.
You can now read a STRING network for what it is: a weighted map of association, scored 0–1000, assembled from channels you can inspect one at a time. It is not a pathway and not a proof of binding — but for asking "what does BRCA1 work with?", nothing gets you a defensible first answer faster.