real CTD + DrugBank data NumPy · CPU-only independent re-implementation 110-figure atlas

iDrug, re-implemented from scratch — benchmarked on the authors' real data

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.

8
methods benchmarked — iDrug, a line-by-line port of the official solver, GRMF, RLS-Kron, bi-random walk, similarity-kNN, popularity
111,481
real drug–disease interactions (CTD), plus 10,234 drug–target pairs (DrugBank)
469
shared (anchor) drugs bridging the two domains — partial overlap, as in the paper
110
figures in the atlas — all rendered in-browser from the real-data JSONs, none synthetic
Experiment 1 · pair prediction

Hide 1/5 of the known links, rank everything else

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–diseaseDrug–target
MethodAUROCAUPRAUROCAUPR
iDrug (mine / official port) and its β = 0 ablation “GRMF-style” published baselines (my implementations) trivial baselines green = best per column

…

Experiment 2 · cold start

New drug / new disease — every link of a held-out row is hidden

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–diseaseDrug–target
New drug — P@5101551015
Drug–diseaseDrug–target
New disease / target — P@5101551015

…

Experiment 3 · robustness

How the cross-network weight and the sparsity dial behave on real data

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.

Cross-network weight β

…

Unobserved-cell weight w

…

α × β grid — AUPR

Green = the best corner of the grid. The paper's settings are α = 0.001 (shown, β = 0.001).

Degrading the bridge structure

X-axis: fraction kept of anchor links (left) and of the other domain's edges (right). Dashed line = β = 0 ablation for the same experiment.
Methodology

Methodology — how every number here is computed

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).

The model — iDrug

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).

Data — the authors' released matrices

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.

Pair-prediction protocol

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.

Cold-start protocol

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.

Robustness and sweeps

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.

Baselines

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 figure atlas

A · Pair prediction — 40 figures

B · Cold start — 40 figures

C · Real-data sweeps — 11 figures

D · Profiles, variability, dataset anatomy, paper check — 14 figures

E · Composite views — 5 figures

Experiment 4 · paper check

Run the official solver at the authors' documented settings

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.

…
P@20, port of authors' iDrug.m, their documented settings
0.23
the value printed in the authors' README for the same configuration

…

The paper

What this page reproduces

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.

iDrug: Integration of drug repositioning and drug-target prediction via cross-network embedding

Huiyuan Chen1, Feixiong Cheng2,3,4, Jing Li1,4,*

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)

1Department of Computer and Data Sciences, Case Western Reserve University, Cleveland, Ohio, USA
2Genomic Medicine Institute, Lerner Research Institute, Cleveland Clinic, Cleveland, Ohio, USA
3Department of Molecular Medicine, Cleveland Clinic Lerner College of Medicine, Case Western Reserve University, Cleveland, Ohio, USA
4Case Comprehensive Cancer Center, Case Western Reserve University School of Medicine, Cleveland, Ohio, USA
*Corresponding author: jingli@cwru.edu

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

Cite it — BibTeX

@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.

Reproduce

Everything on this page, from a clean clone

# 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.

Datasets

What the numbers were computed on

DatasetDrug–diseaseDrug–targetShared drugsSource
CTD + DrugBank1,321 × 3,966 · 111,481 links946 × 3,610 · 10,234 links469authors' .mat release (paper Table 1 scale)
Gottlieb gold593 × 313 · 1,933 links593 × 1,011 · 3,427 links593authors' goldDataset/ (PREDICT-style)
synthetic × 3up to 1,321 × 3,966 · 111k linksup to 946 × 3,610 · 10k linksup to 593this 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.