利用AUC值表征基因集在细胞中的活跃程度

前言

今日份看文献《SCENIC: single-cell regulatory network inference and clustering》
发现SCENIC的最后一部分,计算基因集在每一个细胞中的活跃程度调用的是AUCell进行计算的

AUCell输入基因集的一个关键子集是否在每个细胞的表达基因中活跃

AUCell

该软件的地址为:传送门

AUCell根据单细胞的表达矩阵进行计算的,首先我们随机生成了单细胞表达矩阵

# 生成表达矩阵
exprMatrix <- matrix(rnorm(15*45),nrow=45)
colnames(exprMatrix) = c(paste("cell",rep(1:15),sep = '_'))
row.names(exprMatrix) = c(paste("gene",rep(1:45),sep = '_'))

# 设定基因集
genes_1 <- c("gene_1", "gene_2", "gene_3","gene_4", "gene_5", "gene_6")
genes_2 = c("gene_13", "gene_14", "gene_15","gene_10", "gene_11", "gene_12")
geneSets <- list(geneSet1=genes_1,geneSet2=genes_2)

# 读为data.table的对象
exprMat <- data.table::data.table(exprMat, keep.rownames=TRUE)
# 按照基因名进行排序
data.table::setkey(exprMat, "rn") # (reorders rows)
colsNam <- colnames(exprMat)[-1] # 1=row names
# 对每一个细胞的基因表达量分别排序,并且将表达量换作序数
exprMat[, (colsNam):=lapply(-.SD, data.table::frank, ties.method="random", na.last="keep"),
          .SDcols=colsNam]
    
# 重命名
rn <- exprMat$rn
exprMat <- as.matrix(exprMat[,-1])
rownames(exprMat) <- rn
names(dimnames(exprMat)) <- c("genes", "cells")

其中:


exprMat
  1. rn 列代表的是基因
  2. 每一个cell 中的数值代表某基因在某细胞中表达量排序的序号(表达量从高到低排序)

计算AUC

aucMaxRank=3
rankings = data.frame(exprMat)
row.names(rankings) = rankings[,1]
rankings = rankings[,-1]

# 定义计算AUC的函数
.AUC.geneSet <- .AUC.geneSet_norm
  
#### 1. Calculate the AUC for each gene set
gSetName <- NULL
aucMatrix <- sapply(names(geneSets), function(gSetName)
    .AUC.geneSet(geneSet=geneSets[[gSetName]], rankings=rankings,
                   aucMaxRank=aucMaxRank, gSetName=gSetName))
aucMatrix <- t(aucMatrix)

上述结果反应了之前定义geneSet在每一个细胞中的活性,值越高,活性越高

计算AUC的函数

我们以其中一个基因集为例:

# 过滤基因集
geneSet <- unique(geneSets$geneSet2)
nGenes <- length(geneSet)
geneSet <- geneSet[which(geneSet %in% rownames(rankings))]
missing <- nGenes-length(geneSet)

# 获取基因集中的基因在每个cell中表达量排序的序号
gSetRanks <- rankings[which(rownames(rankings) %in% geneSet),,drop=FALSE]
# 定义AUC的阈值
aucThreshold <- round(aucMaxRank)

# 计算最大的AUC值
## x_th 为1:nrow(gSetRanks)的序数
x_th <- 1:nrow(gSetRanks)
## 对序号进行排序,序号小的代表基因表达量高
x_th <- sort(x_th[x_th<aucThreshold])
## y_th为长度为x_th的序数
y_th <- seq_along(x_th)
maxAUC <- sum(diff(c(x_th, aucThreshold)) * y_th) 

# Apply by columns (i.e. to each ranking)
## 按列计算每一个cell的 AUC
auc <- apply(gSetRanks, 2, .auc, aucThreshold, maxAUC)


# 计算AUC的函数:
.auc <- function(oneRanking, aucThreshold, maxAUC)
{
  x <- unlist(oneRanking)
  # 选择满足阈值的基因序号
  x <- sort(x[x<aucThreshold])
  # y = 1,2,3 ...;作为纵坐标用于计算面积
  y <- seq_along(x)
  sum(diff(c(x, aucThreshold)) * y)/maxAUC
}

如何理解AUC值表征基因集在cell中的活性

不难发现,AUCell基于基因在cell中表达量的排序(序号)进行AUC的计算。序号小的代表该基因表达量高;反之序号大的代表该基因表达量低

假设我们给的基因集里面的基因个数都是5个基因,,AUC阈值是7,我们举如下几个例子:
[1]. cell 1中该基因集的序号为:4,5,6,7(紫色)
[2]. cell 2中该基因集的序号为:1,2,3,6,7 (绿色)
[3]. cell 1中该基因集的序号为:1,5,7 (黄色)



红色为最大的AUC值

显然绿色AUC值最大,黄色次之,紫色最小;由它们的序数我们也可以得知:紫色的序数靠后,说明基因表达量在该细胞中不算特别高;绿色的序数有三个都属于top3,所以AUC最大;黄色则次之

由此可见AUC的大小反应某基因集的基因在细胞中的表达量大小,AUC越大,该基因集的基因在该细胞中的表达量越大,故越活越

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,012评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,628评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,653评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,485评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,574评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,590评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,596评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,340评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,794评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,102评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,276评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,940评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,583评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,201评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,441评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,173评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,136评论 2 352

推荐阅读更多精彩内容