前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为什么不同癌症的lncRNA表达总数很不一样

为什么不同癌症的lncRNA表达总数很不一样

作者头像
生信技能树
发布2021-10-12 12:01:28
3190
发布2021-10-12 12:01:28
举报
文章被收录于专栏:生信技能树生信技能树

在前面的教程:居然有如此多种癌症(是时候开启pan-cancer数据挖掘模式),我们把全部的TCGA的33种癌症的表达量矩阵区拆分成为蛋白编码基因和非编码基因这两个不同的表达量矩阵,并且保存成为了rdata文件。

在不同癌症里面,蛋白质编码相关基因数量一直在一万八附近,而非编码基因数量跨度比较大,从一万二到两万七不等。因为非编码基因的组织病人特异性都很强,恰好最近看到了一个很有意思图可以说明这件事,如下所示:

这个图来源于文献:《Transcriptional landscape and clinical utility of enhancer RNAs for eRNA-targeted therapy in cance》,作者展现的是Enhancer RNA (eRNA) 的癌症特异性很强,其实eRNA就是非编码基因的一种。根据特异性可以分成成为3种:

  • 652 ubiquitous eRNAs expressed in ≥10 cancer types,
  • 3124 intermediately specific eRNAs that are expressed in 2–9 cancer types,
  • 5332 cancer- type-specific eRNAs that are expressed in only one cancer type

接下来我们就针对格式化好的非编码基因的表达量矩阵,进行如下所示的图表绘制!

step1: 批量读取前面的Rdata

代码语言:javascript
复制
rm(list=ls())
options(stringsAsFactors = F)
library(stringr)  
library(data.table)  

###### step1: 批量读取前面的Rdata  ###### 

fs=list.files('Rdata/',
              pattern = 'htseq_counts')
fs
# 首先加载每个癌症的表达量矩阵(提取非蛋白编码基因部分)
# 成为一个 list 
dat_list = lapply(fs, function(x){
  # x=fs[1]
  pro=gsub('.htseq_counts..Rdata','',x)
  print(pro)
  
  load(file =  file.path('Rdata/',x)) 
  
  dat=log2(edgeR::cpm(non_mat)+1)
  dat[1:4,1:4]
  return(dat)
})

step2: 区分基因

代码语言:javascript
复制

###### step2: 区分基因  ###### 
tmp=table(unlist(lapply(dat_list, rownames)))
all_genes=names(tmp) #[tmp==33]
length(all_genes)
ubiquitous_genes=names(tmp)[tmp==33]
length(ubiquitous_genes)
specific_genes =names(tmp)[tmp==1]
length(specific_genes)
intermediately_genes=setdiff(setdiff(all_genes,specific_genes),ubiquitous_genes)

# 在33个癌症都存在的非编码基因不到九千个
# 但是33个癌症总共涉及到31455个非编码基因
# 独特存在于33种癌症的仅仅是一个里面的是 2236个基因。

在33个癌症都存在的非编码基因不到九千个,但是33个癌症总共涉及到31455个非编码基因。独特存在于33种癌症的仅仅是一个里面的是 2236个基因。

step3: 计算各个基因在各个癌症的均值

代码语言:javascript
复制

# 但是突然间发现,下面的代码难度更高了:
sm = do.call(cbind,
        lapply(dat_list, function(x){
          m=rowMeans(x)
          ubiquitous_m=rep(0,length(ubiquitous_genes))
          specific_m=rep(0,length(specific_genes))
          intermediately_m=rep(0,length(intermediately_genes))
          
          cg=intersect(names(m),ubiquitous_genes)
          ubiquitous_m[match(cg,ubiquitous_genes)]=m[match(cg,names(m))]
          cg=intersect(names(m),specific_genes)
          specific_m[match(cg,specific_genes)]=m[match(cg,names(m))]
          cg=intersect(names(m),intermediately_genes)
          intermediately_m[match(cg,intermediately_genes)]=m[match(cg,names(m))]
           
          return(c(ubiquitous_m,intermediately_m,specific_m))
          })) 
colnames(sm)=gsub('TCGA-','',gsub('.htseq_counts..Rdata','',fs))
rownames(sm)=c(ubiquitous_genes,intermediately_genes,specific_genes)
pheatmap::pheatmap(sm)

出丑图如下所示:

勉强可以看到 (ubiquitous_genes,intermediately_genes,specific_genes ,下面我们进行初步美化看看:

step4: 美化

代码语言:javascript
复制

sm_bak=sm
sm=sm_bak
sm[sm>6]=6

df1=sm[ubiquitous_genes,]
df1=df1[order(rowMeans(df1),decreasing = T),]
p1=pheatmap(t(df1), 
            cluster_rows = F,
            cluster_cols = F,
            show_rownames = T,
            show_colnames = F)
p1


df2=sm[intermediately_genes,]
n_genes = apply(df2, 1, function(x) sum(x>0)) 
tmp_list= split(names(n_genes),n_genes)
lapply(tmp_list, length)
ordd=do.call(c,
        lapply(tmp_list, function(cg){
         # cg=tmp_list[[1]]
          ord=do.call(c,lapply(dat_list, function(x){
            cg[cg %in% rownames(x)]
          }))
          length(ord)
          return(unique(ord))
        }) )
length(ordd)
df2=df2[order( n_genes ,ordd,rowMeans(df2),decreasing = T),]
p2=pheatmap(t(df2), 
            cluster_rows = F,
            cluster_cols = F,
            show_rownames = T,
            show_colnames = F)
p2


df3=sm[specific_genes,] 
ord=do.call(c,lapply(dat_list, function(x){
  specific_genes[specific_genes %in% rownames(x)]
}))

p3=pheatmap(t(df3[ord,]),
         cluster_rows = F,
         cluster_cols = F,
         show_rownames = T,
         show_colnames = F)
p3

library(cowplot) 
plot_grid(p1$gtable,
          p2$gtable,
          p3$gtable,nrow = 1,
          labels=c('ubiquitous_genes',
                   'intermediately_genes',
                   'specific_genes') )

我也说不清楚这个是美化还是丑化了:

买家秀和卖家秀差距不是一点点啊!

同理可以应用于蛋白编码基因表达量矩阵

可以看到:

代码语言:javascript
复制
> length(all_genes)
[1] 19302
> ubiquitous_genes=names(tmp)[tmp==33]
> length(ubiquitous_genes)
[1] 16370
> specific_genes =names(tmp)[tmp==1]
> length(specific_genes)
[1] 123
> intermediately_genes=setdiff(setdiff(all_genes,specific_genes),ubiquitous_genes)
> length(intermediately_genes)
[1] 2809

几乎所有的基因都在全部的癌症内部有表达量,仅仅是123个基因具有癌症特异性,而且它的表达量肯定是超级低!

你能相信它们是蛋白编码基因吗?

这123个基因很有意思,或许是一个课题?

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-09-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • step1: 批量读取前面的Rdata
  • step2: 区分基因
  • step3: 计算各个基因在各个癌症的均值
  • step4: 美化
  • 同理可以应用于蛋白编码基因表达量矩阵
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档