| Title: | Identification of Pharmacological Subpopulations of Single Cells for Precision Medicine in Cancers |
|---|---|
| Description: | A computational framework for single-cell RNA-seq data that integrates pharmacogenomics profiles to uncover therapeutic heterogeneity within tumors at single-cell resolution. The tool prioritizes tailored drugs and provides insights into combination therapy regimens and drug toxicity in cancers. |
| Authors: | Zaoqu Liu [aut, cre] (ORCID: <https://orcid.org/0000-0002-0452-742X>), Peng Tian [aut, ctb], Jie Zheng [aut, ctb], Haiyun Wang [aut, ctb] |
| Maintainer: | Zaoqu Liu <[email protected]> |
| License: | MIT + file LICENSE |
| Version: | 1.0.6 |
| Built: | 2026-04-25 09:25:00 UTC |
| Source: | https://github.com/Zaoqu-Liu/scPharm |
TPM-normalized gene expression profiles for tumor cell lines from the Cell Model Passports database.
bulkdatabulkdata
A data frame with 37,004 genes (rows) and 1,387 cell lines (columns). Row names are gene symbols; column names are cell line identifiers.
Cell Model Passports https://cellmodelpassports.sanger.ac.uk/downloads
van der Meer D, et al. (2019). Cell Model Passports - a curated and standardised dataset of pre-clinical cancer models. Nucleic Acids Research.
Drug metadata including targets and signaling pathways from the GDSC2 project.
drug_infodrug_info
A data frame with 295 drugs and 4 variables:
GDSC drug identifier
Drug name
Known drug target(s)
Target signaling pathway
GDSC https://www.cancerrxgene.org/downloads/drug_data
Drug sensitivity data (IC50 and AUC) for cancer cell lines from the Genomics of Drug Sensitivity in Cancer (GDSC) project.
gdscdatagdscdata
A data frame with 196,344 observations and 19 variables including:
GDSC drug identifier
Drug name
Cell line identifier
COSMIC cell line ID
Sanger model ID
TCGA cancer type classification
Dataset source
Company identifier
NLME result ID
NLME curve ID
Natural log of IC50
Area under the dose-response curve
Root mean square error
Z-score
Maximum concentration tested
Minimum concentration tested
Known drug target
Target pathway
Web release version
GDSC https://www.cancerrxgene.org/downloads/drug_data
Yang W, et al. (2013). Genomics of Drug Sensitivity in Cancer (GDSC): a resource for therapeutic biomarker discovery in cancer cells. Nucleic Acids Research 41, D955-D961.
Identify potential drug combinations based on two strategies: (1) Compensation effects: drugs that target cells resistant to the primary drug (2) Booster effects: drugs that enhance sensitivity through different pathways
scPharmCombo(object, score, drug = NULL, topN = 1, drug_info = NULL)scPharmCombo(object, score, drug = NULL, topN = 1, drug_info = NULL)
object |
A Seurat object after running |
score |
Output from |
drug |
Name of the primary drug. If |
topN |
Number of top-ranked drugs to analyze. Default: 1. |
drug_info |
Drug information table. If |
Compensation effects: Identifies drugs where cells resistant to the primary drug show sensitivity. This suggests the combination could overcome resistance.
Booster effects: Identifies drugs targeting different pathways that show high sensitivity in cells already sensitive to the primary drug. This suggests synergistic enhancement.
A named list where each element corresponds to a primary drug and contains a data frame with:
Primary drug name
Combination drug ID
Combination drug name
Combination effect score
"compensation effects" or "booster effects"
## Not run: dr_scores <- scPharmDr(result) combos <- scPharmCombo(result, dr_scores, topN = 3) ## End(Not run)## Not run: dr_scores <- scPharmDr(result) combos <- scPharmCombo(result, dr_scores, topN = 3) ## End(Not run)
Calculate drug prioritization scores based on the ratio of sensitive and
resistant tumor cell populations identified by scPharmIdentify.
scPharmDr(object)scPharmDr(object)
object |
A Seurat object after running |
The Dr score is calculated as:
where S is the proportion of sensitive cells and R is the proportion of resistant cells among tumor cells. Higher scores indicate better drug candidates for the patient.
A data frame with the following columns:
GDSC drug identifier
Drug name
Proportion of sensitive tumor cells
Proportion of resistant tumor cells
Drug prioritization score
Drug ranking (1 = best)
## Not run: # After running scPharmIdentify dr_scores <- scPharmDr(result) head(dr_scores) ## End(Not run)## Not run: # After running scPharmIdentify dr_scores <- scPharmDr(result) head(dr_scores) ## End(Not run)
Calculate drug side effect scores based on the sensitivity of adjacent (normal) cells to drugs. Higher scores indicate greater potential for off-target toxicity.
scPharmDse(object)scPharmDse(object)
object |
A Seurat object after running |
The Dse score represents the proportion of adjacent (non-tumor) cells that are classified as sensitive to each drug. Drugs with high Dse scores may cause more side effects by affecting normal cells.
A data frame with the following columns:
GDSC drug identifier
Drug name
Side effect score (0-1, higher = more side effects)
## Not run: # After running scPharmIdentify with type="tissue" dse_scores <- scPharmDse(result) head(dse_scores) ## End(Not run)## Not run: # After running scPharmIdentify with type="tissue" dse_scores <- scPharmDse(result) head(dse_scores) ## End(Not run)
Generate a null distribution from healthy tissue cells and calculate thresholds for classifying sensitive and resistant cells.
scPharmGenNullDist( object, cancer, nmcs = 50, nfeatures = 200, cores = 1, features = NULL, slot = "data", layer = NULL, assay = "RNA", bulkdata = NULL, gdscdata = NULL )scPharmGenNullDist( object, cancer, nmcs = 50, nfeatures = 200, cores = 1, features = NULL, slot = "data", layer = NULL, assay = "RNA", bulkdata = NULL, gdscdata = NULL )
object |
A Seurat object containing cells from healthy/normal tissue. |
cancer |
TCGA cancer type(s) for context. A character string or vector.
Use |
nmcs |
Number of MCA components. Default: 50. |
nfeatures |
Number of genes for cell identity signature. Default: 200. |
cores |
Number of CPU cores. Default: 1. |
features |
Character vector of gene names to use. If |
slot |
Slot for Seurat V4. Default: |
layer |
Layer for Seurat V5. If |
assay |
Assay to use. Default: |
bulkdata |
Bulk RNA-seq data. If |
gdscdata |
GDSC data. If |
This function computes NES distributions from normal cells and uses a two-component Gaussian mixture model to determine thresholds. The thresholds are calculated as mean +/- 1 standard deviation of each component.
A list containing:
Numeric vector of NES values from normal cells
Threshold for sensitive cells (NES < threshold_s)
Threshold for resistant cells (NES > threshold_r)
## Not run: # Using healthy tissue cells thresholds <- scPharmGenNullDist(healthy_seurat, cancer = "BRCA") print(thresholds$threshold_s) print(thresholds$threshold_r) ## End(Not run)## Not run: # Using healthy tissue cells thresholds <- scPharmGenNullDist(healthy_seurat, cancer = "BRCA") print(thresholds$threshold_s) print(thresholds$threshold_r) ## End(Not run)
Classify single cells into drug-sensitive, drug-resistant, or other subpopulations based on pharmacogenomics profiles from the GDSC2 database.
scPharmIdentify( object, type, cancer, drug = NULL, nmcs = 50, nfeatures = 200, cores = 1, features = NULL, slot = "data", layer = NULL, assay = "RNA", threshold.s = -1.751302, threshold.r = 1.518551, tumor.cells = NULL, normal.cells = NULL, bulkdata = NULL, gdscdata = NULL )scPharmIdentify( object, type, cancer, drug = NULL, nmcs = 50, nfeatures = 200, cores = 1, features = NULL, slot = "data", layer = NULL, assay = "RNA", threshold.s = -1.751302, threshold.r = 1.518551, tumor.cells = NULL, normal.cells = NULL, bulkdata = NULL, gdscdata = NULL )
object |
A Seurat object containing single-cell RNA-seq data. |
type |
Data source type. Either |
cancer |
TCGA cancer type(s). A character string or vector specifying cancer
type(s) (e.g., |
drug |
Drug name to analyze. If |
nmcs |
Number of MCA components to compute. Default: 50. |
nfeatures |
Number of genes for cell identity signature. Default: 200. |
cores |
Number of CPU cores for parallel processing. Default: 1. |
features |
Character vector of gene names to use. If |
slot |
Slot name for Seurat V4 data access. Default: |
layer |
Layer name for Seurat V5 data access. If |
assay |
Assay to use. Default: |
threshold.s |
Threshold for labeling sensitive cells. Cells with NES below this value are classified as sensitive. Default: -1.751302. |
threshold.r |
Threshold for labeling resistant cells. Cells with NES above this value are classified as resistant. Default: 1.518551. |
tumor.cells |
Character vector of known tumor cell barcodes. If provided
when |
normal.cells |
Character vector of known normal cell barcodes. Used as reference for CNV analysis when provided. |
bulkdata |
Bulk RNA-seq data for cell lines. If |
gdscdata |
GDSC pharmacogenomics data. If |
The function performs the following steps:
For tissue samples: identifies tumor cells via CNV analysis (or uses provided annotations)
Computes Multiple Correspondence Analysis (MCA) for dimensionality reduction
Generates cell identity gene signatures
Correlates gene expression with drug response (AUC) across cell lines
Performs GSEA to score each cell's drug response profile
Classifies cells based on NES thresholds
A Seurat object with pharmacological annotations added to metadata:
Cell type: "tumor" or "adjacent"
Drug response: "sensitive", "resistant", or "other"
Normalized enrichment score for the drug
Tian P, Zheng J, et al. scPharm: identifying pharmacological subpopulations of single cells for precision medicine in cancers. 2023.
## Not run: # Basic usage result <- scPharmIdentify(seurat_obj, type = "tissue", cancer = "LUAD") # With known tumor cells result <- scPharmIdentify(seurat_obj, type = "tissue", cancer = "LUAD", tumor.cells = tumor_barcodes) # Specific drug analysis result <- scPharmIdentify(seurat_obj, type = "cellline", cancer = "BRCA", drug = "Erlotinib") ## End(Not run)## Not run: # Basic usage result <- scPharmIdentify(seurat_obj, type = "tissue", cancer = "LUAD") # With known tumor cells result <- scPharmIdentify(seurat_obj, type = "tissue", cancer = "LUAD", tumor.cells = tumor_barcodes) # Specific drug analysis result <- scPharmIdentify(seurat_obj, type = "cellline", cancer = "BRCA", drug = "Erlotinib") ## End(Not run)