多个探针对应同一个基因到底该如何取舍

前些天我发现了乳腺癌领域的PAM50算法原理探索,在:PAM50的概念及分子分型算法原理 ,其实并不难,然后我注意到他们在 挑选50个基因的时候,提到了多个探针对应同一个基因到底该如何取舍

原文是:For probesets that map to identical Entrez gene names, select the one with highest IQR (for Affy, select mean for Agilent),也就是四分位间距IQR,这个概念主要是在boxplot图表里面显示出来。当然了,不同芯片平台也是有一些细微的差别。

其实没有标准答案的问题

三五年前我的博客:多个探针对应一个基因,取平均值或者最大值 就讨论过这个问题,很多人参与留言:
一代Array探针可以这么做,RNA seq会出现一个gene symbol对应多个isform的数据,(有点类似array的这种情况吧。)我问过俩老师:
  • 一个md Anderson 的老师说他们用最长的CCDS的那个transcript作为这个基因的代表
  • 另一个ucla的老师说他们是将所有的isform表达量加起来作为这个基因的表达量。
因为芯片技术已经被时代抛弃,ngs技术本来就有读成的局限性,不管是谁再问我这样的问题,我都是回答,并没有标准答案。但是我们给出的代码是值得学习的:

我的代码的进化历史

具体详见;[多个探针对应同一个基因取最大值的代码进化历史]() ,首先是使用split结合 sapply,然后是使用by函数,最后是使用duplicated和order函数。

## 制作好 ids和exprSet,分别是探针注释信息和表达矩阵
identical(ids$probe_id,rownames(exprSet))
dat=exprSet
ids$median=apply(dat,1,median) 
#ids新建median这一列,列名为median,同时对dat这个矩阵按行操作,取每一行的中位数,将结果给到median这一列的每一行
ids=ids[order(ids$symbol,ids$median,decreasing = T),]
#对ids$symbol按照ids$median中位数从大到小排列的顺序排序,将对应的行赋值为一个新的ids
ids=ids[!duplicated(ids$symbol),]
#将symbol这一列取取出重复项,'!'为否,即取出不重复的项,去除重复的gene ,保留每个基因最大表达量结果s
dat=dat[ids$probe_id,] 
#新的ids取出probe_id这一列,将dat按照取出的这一列中的每一行组成一个新的dat
rownames(dat)=ids$symbol
#把ids的symbol这一列中的每一行给dat作为dat的行名
dat[1:4,1:4]  
#保留每个基因ID第一次出现的信息
dim(dat)

比如,如果你下载CCLE数据库的一千多个细胞系的RNA-seq的counts矩阵,如下:

>   a1=read.table('~/Downloads/CCLE_RNAseq_genes_counts_20180929.gct.gz',skip = 2,header = T)
>   dim(a1)
[1] 56202  1021
>   a1[1:4,1:4] 
   Name Description X22RV1_PROSTATE X2313287_STOMACH
1 ENSG00000223972.4  DDX11L1  12 8
2 ENSG00000227232.4   WASH7P   1340  821
3 ENSG00000243485.2  MIR1302-11   4 1
4 ENSG00000237613.2  FAM138A   6 3

如果你需要把它变成基因名字的表达矩阵,也会遇到一些基因名字重合的问题。

dat=a1[, 3:10]  # 随便取几个细胞系,第1,2列是基因名字
rownames(dat)=a1$Name
ids=a1[,1:2] # 第1,2列是基因名字
head(ids)
colnames(ids)=c('probe_id','symbol')

dat[1:4,1:4]   
dat=dat[ids$probe_id,]

ids$median=apply(dat,1,median) #ids新建median这一列,列名为median,同时对dat这个矩阵按行操作,取每一行的中位数,将结果给到median这一列的每一行
ids=ids[order(ids$symbol,ids$median,decreasing = T),]#对ids$symbol按照ids$median中位数从大到小排列的顺序排序,将对应的行赋值为一个新的ids
ids=ids[!duplicated(ids$symbol),]#将symbol这一列取取出重复项,'!'为否,即取出不重复的项,去除重复的gene ,保留每个基因最大表达量结果s
dat=dat[ids$probe_id,] #新的ids取出probe_id这一列,将dat按照取出的这一列中的每一行组成一个新的dat
rownames(dat)=ids$symbol#把ids的symbol这一列中的每一行给dat作为dat的行名
dat[1:4,1:4]  #保留每个基因ID第一次出现的信息

这个代码非常好用,你一定要学习哦!

文末友情宣传

强烈建议你推荐我们生信技能树给身边的博士后以及年轻生物学PI,帮助他们多一点数据认知,让科研更上一个台阶:
推荐阅读

(0)

相关推荐

  • R语言GEO数据处理(四)

    # 3. id转换 ----------------------------------------------------------------- ##方法一:使用R包转换 index = gse ...

  • Probe id 如何转换为gene symbol?

    之前有很多人问我们,有时候没有DataSet full SOFT file文件,只有图二的界面,该怎么办呢? 我们可以下载Series Matrix File(s),然后进行分析 但是这样得到的仅有p ...

  • 多个探针对应同一个基因取最大表达量探针极简代码

    这个需求实在是太常见了,很多时候我们下载的表达矩阵,都是基因的探针ID作为行名来标记,如下: 这个变量是 dat,一个表达矩阵, 所以需要对探针进行注释,并且筛选. 首先看看注释的结果: 很明显可以看 ...

  • 多个探针对应同一个基因取最大值的代码进化历史

    我的GEO芯片数据分析教程本来就是为粉丝写的,基本上就是生信菜鸟团QQ群的诸位问什么,我就临时搜索整理讲解那个知识点,非常融洽,目录如下: 第一讲:GEO,表达芯片与R 第二讲:从GEO下载数据得到表 ...

  • 说法分析——所谓的秃头基因到底是否存在?

    现在开始,美国的家庭在节日到来只是,不再选择购买袜子.优惠券或俗气的毛衣,而是开始给彼此一个更令人兴奋的节日礼物--DNA检测试剂工具包.该工具包除了评估你的家族遗传历史外,还测试了不同基因的存在,从 ...

  • 卫媪的遗传基因到底多么优秀?

    身驻汉宫凡49年.在皇后位38年的卫子夫,其父史无记载,母亲史称卫媪."媪"在古汉语中的含义是老妇,"卫媪"就是卫家老太太的意思.也就是说,卫子夫的母亲,史家既 ...

  • 导致遗传性乳腺癌的关键基因到底有哪些?你能答全吗?

    2020 年中国女性癌症新发病例数前五的癌症分别是乳腺癌.肺癌.结直肠癌.甲状腺癌.胃癌.在大洋彼岸的美国,乳腺癌的发病也同样值得关切.据美国癌症协会公布的数据可见,美国 2020 年新增乳腺癌患者 ...

  • 同一个东西到底可以有多少种不同的标价?

    一个人喜欢去哪里购物,其实就是一种习惯. 有人习惯去超市,有人习惯去小摊,还有人习惯去二手市场. 同样,在网络上购物,每个人也都有每个人的习惯. 有人习惯去所谓正规的电商平台,比如某宝某东,还有某夕. ...

  • 不同物种的同一个基因的对应关系

    我们都知道不同的物种在进化过程中其实共享很多基因的,尤其是哺乳动物,同一个基因虽然在不同的物种序列不完全一样,位于的染色体也不一样,发挥的功能可能也稍微有点区别,但是他们的相似性非常高!根据相似性就可 ...

  • 多个探针对应一个基因,取平均值或者最大值

    这么简单的问题,总是有人问,而且总是有人不搜索就到处问,本来我是很生气的,后来想一想,应该是我们没有教会大家搜索,也不能全部怪新手. 以前我都是建议大家取最大表达值探针来作为基因的表达量,其实最大值也 ...

  • 芯片的探针ID找到基因名-基于R语言-一文就够

    使用bioconductor注释包 如果该芯片平台有对应的bioconductor注释包,只有约90个常用的芯片有! 比如: library(hgu133a.db) ids=toTable(hgu13 ...