SCI都在使用的单基因免疫浸润还不会吗?小花手把手教你学会!(二)

小花在上篇文章说明了单基因的免疫浸润,就是对分析某个基因与免疫细胞的相关性,这种分析方法虽然不常见,但是也是在高分文章中经常见到一小部分,其实还有一种方式,小伙伴的基因太多不知道如何放,或者想把基因当作一个整体该如何分析呢?小花这里有一种方法,就是把我们基因聚类。不同的组进行分析,每个组包括相应的基因。小伙伴是不是很新奇,来看看如何去绘制吧!

原理其实很简单,小花之间教过大家一致性聚类,那么我们就用一致性聚类结果去分析,

我们先把基因聚类,这里我们需要用到一些包,没有的小伙伴去下载一下

#install.packages(“BiocManager”)

#BiocManager::install(‘ConsensusClusterPlus’)

library(tidyverse)

library(ConsensusClusterPlus)

这里示例数据还是和上一篇一样来看看:

exp <- read.table(“CESC_fpkm_mRNA_01A.txt”,sep = “\t”,row.names = 1,check.names = F,stringsAsFactors = F,header = T)

下面我们去选择要聚类的基因,并且做一些处理

d=as.matrix(exp)

gene <- c(“MMP9″,”CCND1″,”STAT1″,”AR”,”AKR1C3″,”GSTP1″,”PGR”) #这里小花随机几个基因去展示

d <- d[gene,]

mads=apply(d,1,mad)

d=d[rev(order(mads))[1:7],] #注意下这里的7是基因个数

d = sweep(d,1, apply(d,1,median,na.rm=T))

title=(“JULEI”) ##文件夹输出图片的位置,名字小伙伴可以按照自己想法去写

set.seed(1) #小花发现设不设置种子都一样

results = ConsensusClusterPlus(d,maxK=9,reps=50,pItem=0.8,pFeature=1,

title=title,clusterAlg=”hc”,distance=”pearson”,seed=1,plot=”pdf”)

results[[2]][[“consensusMatrix”]][1:5,1:5]

results[[2]][[“consensusTree”]]

results[[2]][[“consensusClass”]][1:5]

icl = calcICL(results,title=title,plot=”pdf”) ##画另一组图片

group<-results[[2]][[“consensusClass”]]

group<-as.data.frame(group)

group$group <- factor(group$group,levels=c(1,2))

save(group,file = “group_AY.Rda”)#我们保存一下聚类的分组信息,下次就是直接打开使用了

先看看结果

再看一下可视化的结果图

小花这里选择K=2的情况去展示,

聚类结果的解读,小花这里不多赘述了,小伙伴可以看看往期小花介绍的。

这里小花设置一下配色

后续为了好看,哈哈

#配色

# 安装并加载colorspace包

#install.packages(“colorspace”)

library(colorspace)

# choosing HCL-based color palettes

# 查看所有的颜色画板

hcl_palettes(plot = TRUE)

然后我们就对聚类分组进行热图的可视化,毕竟我们要展示分组的信息的:

# 绘制ConsensusClusterPlus后的热图

library(pheatmap)

group <- group %>%

rownames_to_column(“sample”)

annotation <- group %>% arrange(group) %>% column_to_rownames(“sample”)

a <- group %>% arrange(group) %>% mutate(sample=substring(.$sample,1,12))

b <- t(exp_gene) %>%

as.data.frame() %>%

rownames_to_column(“sample”) %>%

mutate(sample=substring(.$sample,1,12))

c <- inner_join(a,b,”sample”) %>% .[,-2] %>% column_to_rownames(“sample”) %>% t(.)

pheatmap(c,annotation = annotation,

cluster_cols = F,fontsize=5,fontsize_row=5,

scale=”row”,show_colnames=F,

fontsize_col=3)

bk <- c(seq(-5,-0.1,by=0.01),seq(0,5,by=0.01))

pheatmap(c,annotation = annotation,

annotation_colors = list(group = c(“1″ =”#8B1C62”,”2″= “#EE9572″)),

cluster_cols = F,fontsize=10,fontsize_row=10,

scale=”row”,show_colnames=F,cluster_row = F,

color = c(colorRampPalette(colors = c(“#551A8B”,”white”))(length(bk)/2),colorRampPalette(colors = c(“white”,”#CD3700″))(length(bk)/2)),

#legend_breaks=seq(-3,3,1),

fontsize_col=3)

dev.off()

这样看来,聚类一组的高表达基因在聚类二组是低表达。那么我们就该对着两组进行免疫分析了,接下来我们进入正题,

#cluster分组CIBERSORT

setwd(“”)#可以设置一下分组

library(tidyverse)

我们这里用的免疫浸润的结果是上期小花介绍过的,小伙伴没有的可以去看上期文章,《SCI都在使用的单基因免疫浸润还不会吗?小花手把手教你学会!(一)》

a <- read.table(“CIBERSORT-Results.txt”, sep = “\t”,row.names = 1,check.names = F,header = T)

a <- a[,1:22]

identical(rownames(a),rownames(group))

b <- group

class(b$group)

a$group <- b$group

a <- a %>% rownames_to_column(“sample”)

library(ggsci)

library(tidyr)

library(ggpubr)

#install.packages(“ggsci”)

#install.packages(“tidyr”)

#install.packages(“ggpubr”)

b <- gather(a,key=CIBERSORT,value = Proportion,-c(group,sample))

ggboxplot(b, x = “CIBERSORT”, y = “Proportion”,

fill = “group”, palette = “lancet”)+

stat_compare_means(aes(group = group),

method = “wilcox.test”,

label = “p.signif”,

symnum.args=list(cutpoints = c(0, 0.001, 0.01, 0.05, 1),

symbols = c(“***”, “**”, “*”, “ns”)))+

theme(text = element_text(size=10),

axis.text.x = element_text(angle=45, hjust=1))

dev.off()

我们用小提琴图展示一下信息,这个图就是展示了不同组在不同免疫细胞中的占比,也就是正常的免疫浸润分析,

下面我们介绍最后一种免疫浸润的方式,聚类的ssgsea,之前小花专门介绍过一期ssGSEA,单样本的免疫浸润,这次我们使用聚类后的结果去绘制,来看看如何绘制的

ssGSEA

setwd(“ssGSEA_AY”)

#BiocManager::install(‘GSVA’)

library(tidyverse)

library(data.table)

#library(GSVA)

#BiocManager::install(“GSVA”)

#BiocManager::install(“DelayedArray”)

#library(DelayedArray)

library(GSVA)

#准备细胞marker

cellMarker <- data.table::fread(“cellMarker.csv”,data.table = F)

colnames(cellMarker)[2] <- “celltype”

#将cellMarker文件列名的第2个修改为celltype

type <- split(cellMarker,cellMarker$celltype)

#将cellMarker文件以celltype为分组拆分成list数据格式

#处理data.tables列表通常比使用group by参数按组对单个data.table进行操作要慢得多

cellMarker <- lapply(type, function(x){

dd = x$Metagene

unique(dd)

})

#将list中每个celltype中的基因进行合并

save(cellMarker,file = “cellMarker_ssGSEA.Rdata”)#保存中间文件

#load(“immune_infiltration//cellMarker_ssGSEA.Rdata”)

##表达量矩阵的准备

###行是基因,列是样本

expr <- data.table::fread(“CESC_fpkm_mRNA_01A.txt”,data.table = F) #读取表达文件

rownames(expr) <- expr[,1] #将第一列作为行名

expr <- expr[,-1] #去除第一列

expr <- as.matrix(expr) #将expr转换为矩阵格式

# 下面就是使用ssGSEA量化免疫浸润

gsva_data <- gsva(expr,cellMarker, method = “ssgsea”)

a <- gsva_data %>% t() %>% as.data.frame()

identical(rownames(a),rownames(group))

a$group <- group$group

a <- a %>% rownames_to_column(“sample”)

write.table(a,”ssGSEA.txt”,sep = “\t”,row.names = T,col.names = NA,quote = F)

library(ggsci)

library(tidyr)

library(ggpubr)

b <- gather(a,key=ssGSEA,value = Expression,-c(group,sample))

ggboxplot(b, x = “ssGSEA”, y = “Expression”,

fill = “group”, palette = “lancet”)+

stat_compare_means(aes(group = group),

method = “wilcox.test”,

label = “p.signif”,

symnum.args=list(cutpoints = c(0, 0.001, 0.01, 0.05, 1),

symbols = c(“***”, “**”, “*”, “ns”)))+

theme(text = element_text(size=10),

axis.text.x = element_text(angle=45, hjust=1))

dev.off()

好了,到这里小花就讲解完成了,小伙伴有没有学会呢,快去拿你的数据去分析吧,但是小伙伴要理解图中的含义,不要盲目去做!