SCENT (Single Cell ENTropy) estimates differentiation potency of single cells from scRNA-Seq data using signaling entropy on protein interaction networks.
This package implements:
library(SCENT)
library(ggplot2)
# Load the built-in PPI network
data(net13Jun12.m)
cat("PPI network:", nrow(net13Jun12.m), "genes,",
sum(net13Jun12.m)/2, "interactions\n")
#> PPI network: 8434 genes, 303600 interactionsset.seed(42)
# Simulate expression matrix (genes x cells)
n_genes <- 5500
n_cells <- 100
exp_matrix <- matrix(
rpois(n_genes * n_cells, lambda = 5),
nrow = n_genes,
ncol = n_cells
)
rownames(exp_matrix) <- head(rownames(net13Jun12.m), n_genes)
colnames(exp_matrix) <- paste0("Cell_", 1:n_cells)
cat("Expression matrix:", nrow(exp_matrix), "genes x",
ncol(exp_matrix), "cells\n")
#> Expression matrix: 5500 genes x 100 cells# Step 1: Integrate expression with PPI network
integ <- DoIntegPPI(exp_matrix, net13Jun12.m)
cat("Integrated:", nrow(integ$expMC), "genes in maximal component\n")
#> Integrated: 5497 genes in maximal component
# Step 2: Compute Signaling Entropy Rate
sr_result <- CompSRana(integ, local = FALSE)
cat("SR scores range:", round(range(sr_result$SR), 4), "\n")
#> SR scores range: 0.8891 0.9016# Correlation between SR and CCAT
cor_value <- cor(sr_result$SR, ccat_scores)
cat("SR-CCAT correlation: r =", round(cor_value, 3), "\n")
#> SR-CCAT correlation: r = 0.856
# Visualization
df <- data.frame(
SR = sr_result$SR,
CCAT = ccat_scores,
Cell = colnames(exp_matrix)
)
ggplot(df, aes(x = CCAT, y = SR)) +
geom_point(alpha = 0.6, color = "#3498db", size = 2) +
geom_smooth(method = "lm", color = "#e74c3c", se = FALSE) +
labs(
title = "SR vs CCAT Correlation",
subtitle = paste("Pearson r =", round(cor_value, 3)),
x = "CCAT Score",
y = "Signaling Entropy Rate (SR)"
) +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", size = 14),
plot.subtitle = element_text(color = "gray40")
)| Scenario | Recommended Method |
|---|---|
| Quick screening | CCAT |
| Publication-quality results | SR |
| Large datasets (>10,000 cells) | CCAT first, then SR on subset |
| Time-sensitive analysis | CCAT |
sessionInfo()
#> R version 4.6.0 (2026-04-24)
#> Platform: x86_64-pc-linux-gnu
#> Running under: Ubuntu 24.04.4 LTS
#>
#> Matrix products: default
#> BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3
#> LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so; LAPACK version 3.12.0
#>
#> locale:
#> [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
#> [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
#> [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
#> [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
#> [9] LC_ADDRESS=C LC_TELEPHONE=C
#> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
#>
#> time zone: Etc/UTC
#> tzcode source: system (glibc)
#>
#> attached base packages:
#> [1] stats graphics grDevices utils datasets methods base
#>
#> other attached packages:
#> [1] Matrix_1.7-5 ggplot2_4.0.3 SCENT_2.0.0 rmarkdown_2.31
#>
#> loaded via a namespace (and not attached):
#> [1] gtable_0.3.6 jsonlite_2.0.0 dplyr_1.2.1 compiler_4.6.0
#> [5] tidyselect_1.2.1 Rcpp_1.1.1-1.1 jquerylib_0.1.4 splines_4.6.0
#> [9] scales_1.4.0 yaml_2.3.12 fastmap_1.2.0 lattice_0.22-9
#> [13] R6_2.6.1 labeling_0.4.3 generics_0.1.4 igraph_2.3.2
#> [17] knitr_1.51 tibble_3.3.1 maketools_1.3.2 bslib_0.11.0
#> [21] pillar_1.11.1 RColorBrewer_1.1-3 rlang_1.2.0 cachem_1.1.0
#> [25] xfun_0.59 sass_0.4.10 sys_3.4.3 S7_0.2.2
#> [29] otel_0.2.0 cli_3.6.6 mgcv_1.9-4 withr_3.0.3
#> [33] magrittr_2.0.5 digest_0.6.39 grid_4.6.0 nlme_3.1-169
#> [37] lifecycle_1.0.5 vctrs_0.7.3 evaluate_1.0.5 glue_1.8.1
#> [41] farver_2.1.2 buildtools_1.0.0 tools_4.6.0 pkgconfig_2.0.3
#> [45] htmltools_0.5.9