单细胞转录组基因表达模式聚类-Mfuzz包 2022-12-06

适用条件和背景

Mfuzz包最初是为了研究具有时间序列特征的转录组和蛋白组数据中基因或蛋白表达的时间趋势的一个工具包,能将具有相似表达模式的基因或蛋白进行软聚类,从而可以了解不同组别的基因集或蛋白集在生物学上的动态模式与功能的联系。简而言之,Mfuzz包可以对一个表达矩阵的基因进行聚类,然后可以看到不同组别的基因集或蛋白集在具有时间维度的样本上的表达动态变化。事实上,这个包可以不限于仅具有时间特征的样本,只要具有一定顺序特征的样本,理论上都可以使用,例如,具有空间顺序特征的样本。


安装Mfuzz

使用BiocManager::install安装

BiocManager::install('Mfuzz')
library(Mfuzz)

主函数plot_mfuzz

既然这个包是一开始是用于转录组数据的,那么也能用于单细胞转录组数据。分析思路,这里用的平均表达量矩阵作为输入,然后进行标准化,使用函数mfuzz进行软聚类,mfuzz.plot和mfuzz.plot2是自带的可视化函数。我写了一个函数,以下是函数参数介绍:

  • obj, Seurat 对象;
    -assay, 计算平均表达量的assay,默认为 'RNA';
  • mode='knn', 填补缺失值的模式,默认为‘knn’,还可以选‘mean’和‘wknn’等
  • nclusters, 可指定的聚类数目,默认为NULL,若为NULL则根据有多少个样本组别就聚成多少个clusters
  • prefix, 输出文件前缀,默认为'out'
  • gene.use, 指定聚类的基因集,默认为NULL,将使用高变基因
  • nfeatures, FindVariableFeatures函数指定的基因数,默认为3000
  • group.by, 细胞组别,默认为'ident'
plot_mfuzz <- function(obj,assay='RNA',mode='knn',nclusters=NULL,prefix='out',gene.use=NULL,nfeatures=3000,group.by='ident'){
library(Mfuzz)
if (is.null(gene.use)) {
obj <- FindVariableFeatures(obj,nfeatures=nfeatures)
gene.use <- VariableFeatures(obj)
}
ave <- AverageExpression(obj,group.by = group.by,assays=c(assay),features=gene.use)
ingene <- ave$RNA
gene_tpm <- data.matrix(ingene)
eset <- new("ExpressionSet",exprs = gene_tpm)
gene.r <- filter.NA(eset, thres=0.25)
#gene.f <- fill.NA(gene.r,mode="mean")
gene.f <- fill.NA(gene.r,mode=mode)
#gene.f <- fill.NA(gene.r,mode="wknn")
tmp <- filter.std(gene.f,min.std=0)
gene.s <- standardise(tmp)

if (is.null(nclusters)) {
nclusters=length(colnames(gene_tpm))
}
print(paste0('nclusters is:',nclusters))
c <- nclusters
m <- mestimate(gene.s)
cl <- mfuzz(gene.s, c = c, m = m)
saveRDS(cl,paste0(prefix,'.rds'))
write.table(cl$cluster,"output.txt",quote=F,row.names=T,col.names=F,sep="\t")

nrow <- ceiling(nclusters/3)

pdf(paste0(prefix,'.pdf'),18,ceiling(nclusters/6)*10)
mfuzz.plot(gene.s,cl,mfrow=c(nrow,3),new.window= FALSE)
#mfuzz.plot(gene.s,cl,mfrow=c(2,3),new.window= FALSE,time.labels=as.vector(colnames(gene_tpm)))
mfuzz.plot2(gene.s,cl,mfrow=c(nrow,3),time.labels=colnames(gene_tpm),x11 = FALSE)
dev.off()
}

使用示例

这里使用pbmc_3k数据集

library(Seurat)
library(SeuratData)
data("pbmc3k")
obj <- pbmc3k.final

运行上述函数:

plot_mfuzz(obj,assay='RNA',mode='knn',nclusters=NULL,prefix='out',gene.use=NULL,nfeatures=3000,group.by='ident')
#简化版
plot_mfuzz(obj)

结果说明

一共会生成3个文件:

1.output.txt

左边是基因名,右边是这个基因所属的类别,因为使用的组别把细胞分成了9组,所以默认把基因分成9类:

PPBP    8
LYZ     1
S100A9  1
IGLL5   6
GNLY    5
FTL     4
PF4     8
FTH1    4
GNG11   8
S100A8  1
FCER1A  7
HLA-DRA 7
CD74    7
CLU     8
NKG7    5
GZMB    5
CST3    7
CCL4    5
C1QA    4
HLA-DPB1        7
2.out.pdf

里面有两张图,一张是使用默认的x轴标签:


图1

另一张是自定义的标签:


图2
3.out.rds

mfuzz函数运行得到的对象,可以使用readRDS读入:

cl <- readRDS('out.rds')
#查看每类基因数目
cl$size
# 查看每类基因ID
cl$cluster[cl$cluster == 1]

总结与讨论

以上就是Mfuzz在单细胞转录组数据的应用,以此为模板,应该可以用到很多其它场景。在使用的过程中发现一个问题,自定义x周坐标时,标签显示不完整,目前找不到办法,可能只能手动调了,如果有大神知道解决办法欢迎评论区留言。

########参考博客
https://www.yisu.com/zixun/658715.html
https://cloud.tencent.com/developer/article/1845577

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

推荐阅读更多精彩内容