Quick Start Guide

Introduction

SCENT (Single Cell ENTropy) estimates differentiation potency of single cells from scRNA-Seq data using signaling entropy on protein interaction networks.

This package implements:

  • SR (Signaling Entropy Rate): The gold-standard method for accurate potency estimation
  • CCAT (Correlation of Connectome And Transcriptome): A fast approximation (~100x faster)

Installation

# Install from GitHub
devtools::install_github("Zaoqu-Liu/SCENT")

Quick Example

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 interactions

Simulate Single-Cell Data

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

Method 1: CCAT (Fast)

# CCAT: ~0.1 seconds for 100 cells
ccat_scores <- CompCCAT(exp_matrix, net13Jun12.m)

cat("CCAT scores range:", round(range(ccat_scores), 4), "\n")
#> CCAT scores range: -0.0394 0.0345

Method 2: SR (Accurate)

# 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

Compare Methods

# 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")
  )

Interpretation

  • Higher SR/CCAT scores indicate higher differentiation potency (more stem-like)
  • Lower scores indicate more differentiated states

When to Use Each Method

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

Session Info

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