iDrug: Integration of drug repositioning and drug-target prediction via cross-network embedding (Huiyuan Chen, Feixiong Cheng & Jing Li, PLOS Computational Biology 2020) predicts drug–disease and drug–target links with a cross-network matrix factorization. This project rebuilds the model, ports the authors' MATLAB solver line-by-line, and implements five baseline methods from their papers — then benchmarks everything on the authors' released CTD + DrugBank matrices (1,321 × 3,966; 946 × 3,610; 469 shared drugs) and their smaller Gottlieb gold-standard dataset. Every number on this page regenerates from the committed scripts, and the figure atlas below draws all of it in 110 live charts.
5-fold CV per task domain: each fold masks 1/5 of the known links during training and tests on those plus an equal number of uniformly sampled unknown pairs. Mean ± s.d. across the five folds, one run per domain (seed 0). Settings are the paper's pair-prediction values: ranks 90/70, α = β = γ = 0.001, w = 0.3, up to 200 iterations. My iDrug uses a shared rank 90 in both domains (a documented difference).
| Drug–disease | Drug–target | |||
|---|---|---|---|---|
| Method | AUROC | AUPR | AUROC | AUPR |
…
The scenario the paper cares about most: a drug (or disease/target) with no known links in the task domain. The held-out drug still exists in the other domain, so the cross-network bridge can act. Metric: precision@k (P@5/10/15), averaged over all held-out rows of the five folds.
| Drug–disease | Drug–target | |||||
|---|---|---|---|---|---|---|
| New drug — P@ | 5 | 10 | 15 | 5 | 10 | 15 |
| Drug–disease | Drug–target | |||||
|---|---|---|---|---|---|---|
| New disease / target — P@ | 5 | 10 | 15 | 5 | 10 | 15 |
…
Sweeps of the drug–disease AUPR on CTD + DrugBank with my iDrug (… iterations, 5-fold, seed 0). The β = 0 row is the pure single-domain ablation, so these charts show exactly what the cross-network term contributes on real biology rather than synthetic graphs.
Everything on this page is produced by the scripts committed in the repo — plain NumPy, one CPU core, no GPU and no deep-learning frameworks. Model, data, protocols and baselines are documented below. To regenerate: python run_real_all.py --mat iDrug → python make_site_data.py → this page (see Run it).
iDrug predicts drug–disease and drug–target links by factorizing the two association matrices —
drug–disease A₁ ≈ U₁V₁ᵀ and drug–target A₂ ≈ U₂V₂ᵀ — with a cross-domain consistency term coupling the
drug factors over the shared anchor drugs (paper Eq. 1–3, multiplicative updates, up to 200 iterations).
The coupling lets each domain borrow signal from the other — the effect the cold-start experiments
stress-test. My idrug() uses one shared rank (90) in both domains, and the cross-domain
weight w rather than w² — documented differences from the paper's code.
idrug-official is a line-by-line port of the authors' MATLAB solver
iDrug.m, run at their documented main(70, 70, 0.3, 0.01, 0.01, 0.01, 1, '2', 20)
settings in Experiment 4 (my P@20 = 0.280 vs their printed 0.23).
The data is the authors' own release (clone github.com/Case-esaC/iDrug; ~290 MB, not shipped in this repo): CTD + DrugBank — drug–disease 1,321 × 3,966 with 111,481 links, drug–target 946 × 3,610 with 10,234 links, 469 shared anchor drugs — and the Gottlieb gold standard (PREDICT-style) — 593 × 313 with 1,933 links, 593 × 1,011 with 3,427 links, all 593 drugs shared. No synthetic data feeds any number or figure on this page.
5-fold CV per domain: each fold hides 1/5 of the known links during training and scores them against an equal number of uniformly sampled unknown pairs. Metrics: AUROC and AUPR, computed per fold and reported as mean ± s.d. over the five folds. Settings follow the paper's pair-prediction values: ranks 90/70, α = β = γ = 0.001, w = 0.3, up to 200 iterations, seed 0, one run per domain.
The scenario the paper cares about most: hold out every link of a fold of drugs (new drug) — or of diseases/targets (new column) — so the row is empty in the task domain, while the drug still exists in the other domain and the cross-network bridge can act. Metric: precision@5/10/15, averaged over all held-out rows of the five folds.
Stress tests on the bridge between domains: withhold a fraction of anchor drugs and/or of other-domain links and re-measure pair-prediction AUPR; sweep the α × β regularization grid and the cross-domain weight w; and run the paper's hypergeometric enrichment test. The atlas's section C plots these real-data sweeps.
Five published baselines, re-implemented from their papers with default hyperparameters and no tuning: GRMF (graph-regularized matrix factorization), RLS-Kron (Kronecker-product regularized least squares), a simplified bi-random walk standing in for MBiRW, similarity-kNN, and a popularity (degree) baseline. TL-HGBI is not implemented. Progression and settings are described in each experiment section; treat every baseline number as a floor of unknown height.
The authors' README documents a new-drug example: main(70, 70, 0.3, 0.01, 0.01, 0.01, 1, '2', 20), reported output precision: 0.23 at k = 20. I ran my line-by-line port of their solver at exactly those settings (rank 70/70, α = β = γ = 0.01, w = 0.3, up to 200 iterations) through my cold-start protocol — same data, same metric spirit (P@20 over held-out drugs), not their exact split code.
…
This is an independent, CPU-only reproduction. All credit for the iDrug model, the datasets, and the original results belongs to the authors — if you use the model or data, cite their paper, not this page.
PLOS Computational Biology 16(7): e1008040 · published July 15, 2020 · received November 22, 2019 · accepted June 10, 2020 · open access (CC BY 4.0) · editor: Avner Schlessinger (Icahn School of Medicine at Mount Sinai)
Authors' code, MATLAB solver and datasets: github.com/Case-esaC/iDrug ↗
Plain text — Chen H, Cheng F, Li J (2020) iDrug: Integration of drug repositioning and drug-target prediction via cross-network embedding. PLoS Comput Biol 16(7): e1008040. https://doi.org/10.1371/journal.pcbi.1008040
@article{chen2020idrug,
author = {Chen, Huiyuan and Cheng, Feixiong
and Li, Jing},
title = {iDrug: Integration of drug repositioning
and drug-target prediction via
cross-network embedding},
journal = {PLOS Computational Biology},
year = {2020},
volume = {16},
number = {7},
pages = {e1008040},
doi = {10.1371/journal.pcbi.1008040}
}
This page is unaffiliated with the authors and with PLOS. The baseline methods (PREDICT, MBiRW, GRMF, RLS-Kron) are re-implementations from their own papers — details in the repo README.
# 1 · install (numpy, scipy, pandas, scikit-learn — that's all) pip install -r requirements.txt # 2 · get the authors' real data (their repo is ~290 MB; not shipped here) git clone --depth 1 https://github.com/Case-esaC/iDrug iDrug # 3 · the benchmark + sweeps behind this page → results_real.json, sweeps_real.json python run_real_all.py --mat iDrug # full run, hours on one CPU core python run_real_all.py --mat iDrug --quick # 2-fold, 3-iteration smoke test # 4 · rebuild the data file behind this website, then open docs/index.html python make_site_data.py # 5 · the same script also runs on the CSV layout (data/README.md) python run_real.py --mat iDrug --official --rank 90 --r2 70 --w 0.3 \ --alpha 0.001 --beta 0.001 --gamma 0.001 --folds 5 --reps 1
The synthetic generators (gen_datasets.py, run_all.py) remain in the repo as fast pipeline tests — sizes match the paper, but nothing synthetic feeds this page.
| Dataset | Drug–disease | Drug–target | Shared drugs | Source |
|---|---|---|---|---|
| CTD + DrugBank | 1,321 × 3,966 · 111,481 links | 946 × 3,610 · 10,234 links | 469 | authors' .mat release (paper Table 1 scale) |
| Gottlieb gold | 593 × 313 · 1,933 links | 593 × 1,011 · 3,427 links | 593 | authors' goldDataset/ (PREDICT-style) |
| synthetic × 3 | up to 1,321 × 3,966 · 111k links | up to 946 × 3,610 · 10k links | up to 593 | this repo, for testing only — never shown here |
Real-data loading is handled by loaders.load_mat() — it reads the authors' MATLAB files directly, including the gold dataset's headerless CSV variants. The five-CSV layout (for swapping in your own data) is documented in data/README.md.