基因相关性图

匆匆过客 提交于 2020-02-11 20:15:45

原文献:Spatially and functionally distinct subclasses of breast cancer-associated fibroblasts revealed by single cell RNA sequencing

一、基因在任意癌症表达量相关性

1. 获取基因名

在这里插入图片描述
文献这个表中复制基因名

library(stringr)
vCAF='Esam, Gng11, Higd1b, Cox4i2, Cygb, Gja4, Eng'
vCAF=unlist(str_split(vCAF,', ') )
mCAF='Dcn, Col12a1, Mmp2, Lum, Mrc2, Bicc1, Lrrc15, Mfap5, Col3A1, Mmp14, Spon1, Pdgfrl, Serpinf1, Lrp1, Gfpt2, Ctsk, Cdh11, Itgbl1, Col6a2, Postn, Ccdc80, Lox, Vcan, Col1a1, Fbn1, Col1a2, Pdpn, Col6a1, Fstl1, Col5a2, Aebp1'
mCAF=unlist(str_split(mCAF,', ') )

在这里插入图片描述

基因名的开头大写,其余小写,说明是小鼠的基因名

2. 制作基因在癌症的表达矩阵

  • 下载
    从UCSC的XENA数据库下载癌症数据,下面为下载乳腺癌数据的两个链接

    GDC TCGA Breast Cancer (BRCA) (20 datasets)
    1)直接使用GenCode注释文件,不管是否是编码蛋白的基因都算作基因;
    2)基因名用的Ensemb
    3)使用了log2(count+1)
    4)60,489 基因 X 1217 样本
    在这里插入图片描述
    TCGA Breast Cancer (BRCA) (24 datasets)
    1)基因名用的SYMBOL
    2)使用了RSEM标准化表达量,log2(norm_count+1)
    3)20,531 基因 X 1218 样本

  • 导入

library(data.table)
a=fread('TCGA-BRCA.htseq_counts.tsv.gz',#fread类似于read.table,但更快和便捷
		data.table=F #读入为data.frame而不是data.table
		)

在这里插入图片描述

  • ID转换
#查看包内注释信息
library(org.Hs.eg.db) #癌症数据来自人类的,所以使用人类注释包
head(ls("package:org.Hs.eg.db"))
head(toTable(org.Hs.egENSEMBL))

在这里插入图片描述
和TCGA的Emsemble ID相比,没有小数点后面的部分,因此需要去除小数点后面的部分

#去除Emsemble ID的小数点
library(stringr)
esid=str_split(a$Ensembl_ID,'[.]', #以小数点作为分割符
			   simplify = T)[,1]   #返回一个矩阵并只取第一列
rownames(a)=esid

在这里插入图片描述

#ID转换
columns(org.Hs.eg.db) #查看可转换ID
e2s=select(org.Hs.eg.db,keys = esid,columns = c( "ENSEMBL" ,  "SYMBOL" ),keytype = 'ENSEMBL')

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
很大一部分的Ensemble ID是没有Symbol对应的,如果除去symbol为NA的值,最后只剩下25865个基因
在这里插入图片描述
有一对多的情况出现,看下多出来的SYMBOL是什么基因
在这里插入图片描述
发现多余的SYMBOL很多都是miRNA的SYMBOL,这不是我们想要的,可以将重复元素提取出来一个一个筛选或者使用grep函数把MIR的基因去除。因为我只需要知道我需要的基因的ENSEMBL ID,因此可以不用那么麻烦直接通过下述方法提取

# 基因变大写,然后挑出来存在于e2s的基因,防止基因名不存在
vCAF=toupper(vCAF);vCAF=vCAF[vCAF %in% e2s$SYMBOL]
mCAF=toupper(mCAF);mCAF=mCAF[mCAF %in% e2s$SYMBOL]
ng=e2s[match(c(vCAF,mCAF),e2s$SYMBOL),1] ## 得到匹配基因的Ensembl ID
mat=a[ng,] #获取表达矩阵
mat=mat[,-1] #去掉Ensembl ID列

在这里插入图片描述
在这里插入图片描述
一共38个基因

3. 绘制基因相关性热图

  • 原图
    在这里插入图片描述
    该图是用来比较多个基因相关性,所以得到多个基因的表达量然后做个热图就好

  • 计算基因相关性

M=cor(t(mat)) #对列进行操作
colnames(M)=c(vCAF,mCAF)
rownames(M)=c(vCAF,mCAF)

在这里插入图片描述

  • 绘图
#标准化
n=t(scale(t( M )))
n[n>2]=2
n[n< -2]= -2
pheatmap::pheatmap(n,cluster_rows = F,cluster_cols = F)

在这里插入图片描述
调下颜色和基因顺序就和原图差不多了

二、基因集在癌症的表现

1. 获取基因集

library(stringr)
#vCAF基因集
vCAF='Esam, Gng11, Higd1b, Cox4i2, Cygb, Gja4, Eng'
vCAF=unlist(str_split(vCAF,', '))
#mCAF基因集
mCAF='Dcn, Col12a1, Mmp2, Lum, Mrc2, Bicc1, Lrrc15, Mfap5, Col3A1, Mmp14, Spon1, Pdgfrl, Serpinf1, Lrp1, Gfpt2, Ctsk, Cdh11, Itgbl1, Col6a2, Postn, Ccdc80, Lox, Vcan, Col1a1, Fbn1, Col1a2, Pdpn, Col6a1, Fstl1, Col5a2, Aebp1'
mCAF=unlist(str_split(mCAF,', '))
#ECM基因集
ECM=c('COL1A1', 'COL1A2','COL3A1')
#Endothelial基因集
endothelial=c('CDH5', 'DIPK2B','TIE1')

Endothelial基因集中有一个奇怪的基因名CXorf36,按道理来说人类的基因名都应该是大写,所以到GenCard查询一下后发现这个基因目前叫DIPK2B

2. 制作基因集在癌症的表达矩阵

#读入数据
library(data.table)
a=fread("TCGA-BRCA.htseq_counts.tsv.gz" ,data.table=F)
#Ensembl ID切割
library(stringr)
esid=str_split(a$Ensembl_ID,'[.]',simplify = T)[,1]
#ID转换
library(org.Hs.eg.db)
e2s=select(org.Hs.eg.db,keys = esid,columns = c( "ENSEMBL" ,  "SYMBOL" ),keytype = 'ENSEMBL')
vCAF=toupper(vCAF);vCAF=vCAF[vCAF %in% e2s$SYMBOL]
mCAF=toupper(mCAF);mCAF=mCAF[mCAF %in% e2s$SYMBOL]
# 获得表达量
rownames(a)=esid
a=a[,-1]
##vCAF基因集
ng=e2s[match(vCAF,e2s$SYMBOL),1]
vCAF_value=colMeans(a[ng,]) #将均值作为基因表达量
##mCAF基因集
ng=e2s[match(mCAF,e2s$SYMBOL),1]
mCAF_value=colMeans(a[ng,])
##ECM基因集
ng=e2s[match(ECM,e2s$SYMBOL),1]
ECM_value=colMeans(a[ng,])
##endothelial基因集
ng=e2s[match(endothelial,e2s$SYMBOL),1] #存在NA值,发现CXorf36才是正确的symbol名
endothelial=c('CDH5', 'CXorf36','TIE1')
ng=e2s[match(endothelial,e2s$SYMBOL),1]
endothelial_value=colMeans(a[ng,])
#制作表达矩阵
dat=data.frame(vCAF_value=vCAF_value,
               mCAF_value=mCAF_value,
               ECM_value=ECM_value,
               endothelial_value=endothelial_value )

在这里插入图片描述

3. 绘图

  • 原图

    基因集有不同数量的基因,因此用散点图展现
library(ggpubr)
ggscatter(dat, x = "vCAF_value", y = "endothelial_value",
          color = 'black', shape = 21, size = 0.5, # Points color, shape and size
          add = "reg.line",  # Add regressin line
          add.params = list(color = "blue", fill = "lightgray"), # Customize reg. line
          conf.int = TRUE, # Add confidence interval
          cor.coef = TRUE,  
          cor.coeff.args = list(method = "pearson",  label.sep = "\n")
)

在这里插入图片描述

  1. 添加了p值和拟合线
  2. 绘制该图时使用了normal和tumor的数据,而原文献可能只使用了tumor数据,可能是导致相关系数不同的原因

三、多个基因集相关性热图

1. 获取基因集

一共7个基因集

library(stringr)
#vCAF基因集
vCAF='Esam, Gng11, Higd1b, Cox4i2, Cygb, Gja4, Eng'
vCAF=unlist(str_split(vCAF,', '))
#mCAF基因集
mCAF='Dcn, Col12a1, Mmp2, Lum, Mrc2, Bicc1, Lrrc15, Mfap5, Col3A1, Mmp14, Spon1, Pdgfrl, Serpinf1, Lrp1, Gfpt2, Ctsk, Cdh11, Itgbl1, Col6a2, Postn, Ccdc80, Lox, Vcan, Col1a1, Fbn1, Col1a2, Pdpn, Col6a1, Fstl1, Col5a2, Aebp1'
mCAF=unlist(str_split(mCAF,', '))
#ECM基因集
ECM=c('COL1A1', 'COL1A2','COL3A1')
# Endothelial基因集
endothelial=c('CDH5', 'CXorf36','TIE1')
#for ref32:proliferation 基因集
proliferation <- c("BAG1","ESR1","FOXA1","GPR160","NAT1","NAT1","MAPT","MLPH","PGR")
# for ref31: stroma-related 基因集
stroma <- c('DCN', 'CSPG2', 'CDH11', 'COL3A1', 'FAP', 'PEDF', 'FBN1', 'PDGFRL', 'CTSK', 'HTRA1', 'ASPN', 'SPARC', 'COL5A2', 'LOXL1', 'MMP2', 'SPON1', 'SFRP4', 'ITGBL1', 'CALD1', 'COPZ2', 'MFAP2', 'ANGPTL2', 'PLAU', 'COL1A2', 'LRRC17', 'C1QTNF3', 'SNAI2', 'PCOLCE', 'POSTN', 'ECM2', 'FBLN1', 'ADAM12', 'MMP11', 'AEBP1', 'PDGFRB', 'GAS1', 'COL6A3', 'RARRES2', 'COL6A1', 'TGFB3', 'NDN', 'C1R', 'LRP1', 'COL10A1', 'DPYSL3', 'OLFML2B', 'MMP14', 'DACT1', 'MGC3047', 'THBS2')
#for ref29: endothelial/microvasculature 基因集
microvasculature <- c('ARAP3','ADCY4','ESAM','ERG','SLC43A3','SOX7','PTPRB','PTPRM','AFAP1L1','MMRN2','TENC1','STARD9','COL4A3','LRRK1','PALD1','NPR3','ROBO4','NOTCH4','TIE1','RASIP1','ACVRL1','RAMP2','FAM110D','EGFL7','SMAD6','FGD5','ENG','CASKIN2','ACKR2','SLC9A3R2','CALCRL','HSPA12B','EPAS1','EHD4','LATS2','ICAM1','HBEGF','PLTP','C1orf54','CTTNBP2NL','MYO1B','SLCO2A1','KIFC1','EPHB4','SOX13','DRAM1','PECAM1','ENTPD1','ICAM2','CLDN5','SDPR','CDH5','GPR116','ELTD1','KDR','HILPDA','NPNT')

2. 制作基因集在癌症的表达矩阵

#读入数据
library(data.table)
a=fread("TCGA-BRCA.htseq_counts.tsv.gz" ,data.table=F)
#Ensembl ID切割
library(stringr)
esid=str_split(a$Ensembl_ID,'[.]',simplify = T)[,1]
#ID转换
library(org.Hs.eg.db)
e2s=select(org.Hs.eg.db,keys = esid,columns = c( "ENSEMBL" ,  "SYMBOL" ),keytype = 'ENSEMBL')
vCAF=toupper(vCAF);vCAF=vCAF[vCAF %in% e2s$SYMBOL]
mCAF=toupper(mCAF);mCAF=mCAF[mCAF %in% e2s$SYMBOL]
#获得表达量
rownames(a)=esid
a=a[,-1]
## vCAF
ng=e2s[match(vCAF,e2s$SYMBOL),1]
vCAF_value=colMeans(a[ng,])
## mCAF
ng=e2s[match(mCAF,e2s$SYMBOL),1]
mCAF_value=colMeans(a[ng,])
## ECM
ng=e2s[match(ECM,e2s$SYMBOL),1]
ECM_value=colMeans(a[ng,])
## Endothelial
ng=e2s[match(endothelial,e2s$SYMBOL),1]
endothelial_value=colMeans(a[ng,])
## proliferation(注意这里加上了检测基因名是否存在的代码)
ng=e2s[match(proliferation,e2s$SYMBOL),1];ng=ng[!is.na(ng)];ng
proliferation_value=colMeans(a[ng,])
## stroma
ng=e2s[match(stroma,e2s$SYMBOL),1];ng=ng[!is.na(ng)];ng
stroma_value=colMeans(a[ng,])
## microvasculature
ng=e2s[match(microvasculature,e2s$SYMBOL),1];ng=ng[!is.na(ng)];ng
microvasculature_value=colMeans(a[ng,])
#制作表达矩阵
dat=data.frame(vCAF=vCAF_value,
                 mCAF=mCAF_value,
                 ECM=ECM_value,
                 endothelial=endothelial_value,
                 microvasculature=microvasculature_value,
                 stroma=stroma_value,
                 proliferation=proliferation_value)

在这里插入图片描述

3. 绘图

  • 原图
    在这里插入图片描述
M=cor( dat) 
pheatmap::pheatmap(M)

在这里插入图片描述
在这里插入图片描述
从图中得知(同样也是作者想要证明的),vCAF和mCAF能够分开,并且它们各有特性。比如mCAF与ECM、stroma更像;而vCAF与microvasculature更像;另外vCAF和mCAF都与proliferation都不相关

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!