注释探针

注释探针的原因

为了防止非特异性结合造成的干扰,芯片厂商往往会使用多个探针检测同一个基因的表达。因此,芯片厂商不会使用基因名作为探针的名称,而是使用自己定义的探针名称。要合并重复探针,我们必须先对探针进行注释,确定每个探针对应检测哪个基因的表达,然后再合并重复探针。而后续分析如GSEA,只能对基因进行分析,因此也要求对探针进行注释。

注释探针的方法

1 使用芯片厂商的注释信息注释

这个方法是金标准,但也是最不常用的方法。为什么呢?你去芯片厂商的网站上搜索一下就知道了。操作界面非常的user-unfriendly,我找了半天都没找到我想要的注释信息。就更别提下载下来对手头的芯片数据进行注释了。

2 使用 GPL 文件注释

这个方法比较常见,操作起来很简单,既可以手动下载GPL信息,也可以用GEOquery包下载GPL信息。唯一的问题就是GPL文件一般比较大,下载下来不是很方便,还要求我们有一定的R语言基础才能进行注释。

以下用一个例子来演示如何使用GPL文件注释探针。

首先找到你想要分析的芯片数据的信息。这里使用的是GEO数据库GSE49382的芯片数据。

点开GSE49382的页面,可以看到GPL信息。用红框框出。是031058-Agilent ATH NAT array的芯片。我尝试去bioconductor里寻找相关的注释包,没找到。也就是说这个芯片不能用bioconductor进行注释,只能用GPL进行注释

点开GPL看看,可以看到GPL的注释信息。

注意到,第四列的”ORF”是我们需要的gene name信息。

下载数据。

library(GEOquery)
gse382<-getGEO('GSE49382',destdir =".")##根据GSE号来下载数据,下载_series_matrix.txt.gz
gpl515<-getGEO('GPL17515',destdir =".")  ##根据GPL号下载的是芯片设计的信息, soft文件

查看列名

> colnames(Table(gpl515))
[1] "ID"   "PROBE_ID" "SEQUENCE" "ORF"  "COL"
[6] "ROW"

可以看到第1列和第4列是我们需要保留的信息,其他列都需要舍弃。由于GPL文件中还包含有其他的一些关于实验纪录的信息,因此不能直接对GPL文件进行操作,需要使用Table函数提取GPL文件中的探针注释信息。

 #提取探针注释信息,保留第1列和第4列
genename <- Table(gpl515)[,c(1,4)]

注释探针只能对表达矩阵进行,因此我们需要先拿到表达矩阵。

注意到,下载的gse382是一个list格式的文件,因此不能直接使用exprs函数提取表达矩阵。应该使用代码exprs(gpl515[[1]])提取表达矩阵。

注意到,表达矩阵是Matrix对象,而我们接下来要用到的merge函数不能对Matrix对象使用,因此要先将表达矩阵转换为data.frame对象。否则会报错。Error in fix.by(by.x, x) : 'by'必需指定唯一有效的列

注意到,表达矩阵并未包含探针的ID,探针的ID作为表达矩阵的rownames存在。下图红框标出。因此我们要先赋予表达矩阵探针ID信息,才能使用merge函数合并表达矩阵和genename

我们可以使用如下代码正确合并表达矩阵和genename,并删除探针ID。

exprSet <- as.data.frame(exprs(gse382[[1]]))# 得到表达矩阵,行名为ID,需要转换
#转换ID为gene name
exprSet$ID <- rownames(exprSet)
express <- merge(x = genename, y = exprSet, by = "ID")
express$ID =NULL

express就是我们得到的注释了探针的表达矩阵。合并重复探针之后就可以进行差异基因筛选或是GSEA了。

3 使用 bioconductor 注释

这是最常用的方法,也是要重点介绍的方法。基本原理就是使用bioconductor中的对应的芯片注释包,提取其中注释的信息去注释我们自己的芯片数据。这有个前提,那就是bioconductor中已经收录了芯片的注释包。如果没有收录就不能使用这个方法,只能用GPL信息去注释探针。上文就是一个经典例子。

使用biconductor注释探针有两种方法,一种是自己从注释包中提取注释信息,然后用merge函数合并。另一种是使用annotate包的函数注释。两种方法的本质都是一样的,从芯片注释包中提取探针注释信息。下面分别讲解两种方法如何操作。

自行提取注释信息注释探针

这个方法需要事先下载芯片注释包。除了在网页上能够看到芯片种类,还可以使用show函数查看芯片种类。推荐使用show函数查看芯片信息。因为使用这个函数查看芯片信息的时候,如果没有下载对应的注释包的话会自动下载。免掉了自己上bioconductor查找下载注释包的麻烦。

下面的例子使用了ALL包的数据。

首先加载ALL数据。

> library(ALL)
> data(ALL)
> show(ALL)
ExpressionSet (storageMode: lockedEnvironment)
assayData: 12625 features, 128 samples element names: exprs
protocolData: none
phenoDatasampleNames: 01005 01010 ... LAL4 (128 total)varLabels: cod diagnosis ... date last seen (21 total)varMetadata: labelDescription
featureData: none
experimentData: use 'experimentData(object)'pubMedIds: 14684422 16243790
Annotation: hgu95av2

Annotation显示芯片种类为hgu95av2,对应的注释包为hgu95av2.db。运行以下代码得到探针注释信息probe2symbol和表达矩阵exprSet

library(hgu95av2.db) #加载芯片注释包
columns(hgu95av2.db) #查看芯片注释包提供的注释信息
probe2symbol <- toTable(hgu95av2SYMBOL) #提取注释信息,这里选择GENESYMBOL进行注释。也可以选择其他ID进行注释,详情请见注释包的技术支持文档。
exprSet <- as.data.frame(exprs(ALL)) #提取表达矩阵,转换为data.frame对象
head(exprSet) #查看表达矩阵

可以看到,表达矩阵exprSetrownames就是探针名,而缺少probe_id列。我们需要将包含探针信息的probe_id列加入表达矩阵exprSet中,然后用merge函数合并。代码如下。

exprSet$probe_id <- rownames(exprSet) #将行名转化为probe_id
exprSet_symbol <- merge(probe2symbol, exprSet, by = "probe_id") #合并探针注释和表达矩阵
dim(exprSet) #查看合并前的探针数目
dim(exprSet_symbol) #查看合并后的探针数目。可以见到除去了部分没有注释的探针。
exprSet_symbol$probe_id <- NULL #删掉不要的probe_id

使用 annotate 包注释

使用annotate包对探针进行注释比上述方法都要简单不少,只需要几步就可以完成。

下面的例子承接上文的ALL数据和注释包,依然是对探针进行GENESYMBOL注释。

library(annotate)
exprSet <- as.data.frame(exprs(ALL)) #提取表达矩阵,转换为data.frame对象
probeset <- rownames(exprSet) #提取行名为探针名
Symbol <- as.character(as.list(hgu95av2SYMBOL[probeset])) #提取探针对应的GENESYMBOL
exprSet_symbol <- cbind(Symbol,exprSet)

这样就得到了注释好的表达矩阵。

还可以使用annotate包提供的getSYMBOL函数提取GENESYMBOL信息或是使用lookUp函数提取注释信息。

getSYMBOL函数只能提取GENESYMBOL信息并对探针进行注释。而lookUp函数还可以提取ENTREZID等对探针进行注释。不过注意,getSYMBOL函数的返回值是character对象,因此可以直接使用exprSet_symbol <- cbind(Symbol,exprSet)命令进行注释。但lookUp函数返回值是list,需要先转换为character对象才能合并。

getSYMBOL函数的用法如下。

Symbol <- getSYMBOL(probeset, "hgu95av2.db")

其中hgu95av2是ALL数据使用的芯片,如果分析自己的芯片的话需要换成自己芯片的注释包。然后就可以直接合并了。

lookUp函数的用法如下。

先用columns命令查看hgu95av2包所能提供的注释信息。

> columns(hgu95av2.db)[1] "ACCNUM"   "ALIAS""ENSEMBL"  "ENSEMBLPROT" [5] "ENSEMBLTRANS" "ENTREZID" "ENZYME"   "EVIDENCE"[9] "EVIDENCEALL"  "GENENAME" "GO"   "GOALL"
[13] "IPI"  "MAP"  "OMIM" "ONTOLOGY"
[17] "ONTOLOGYALL"  "PATH" "PFAM" "PMID"
[21] "PROBEID"  "PROSITE"  "REFSEQ"   "SYMBOL"
[25] "UCSCKG"   "UNIGENE"  "UNIPROT"

可以看到hgu95av2.db包提供了27种注释方式。我们选用”SYMBOL”注释探针。如果想用其他注释就把”SYMBOL”换成其他就好了,如”ENTREZID”。

Symbol <- as.character(lookUp(probeset, "hgu95av2", "SYMBOL"))

lookUp函数的返回值转换成character对象,然后就可以直接合并了。

总结

本文一共给出了三种方法用于注释芯片(其实只有两种),但实际上用的最多的是第三种方法。只有当bioconductor没有提供对应的注释包的时候才会用第二种方法。

注释探针之后就能进行合并探针的操作了,合并之后才能进行后续的分析。过滤探针的操作可以在注释前也可以在注释后。findLargest函数可以在注释探针前就进行探针合并,但需要提供芯片注释包。

参考:

1、芯片探针注释基因ID或者symbol,并对每个基因挑选最大表达量探针

2、基因表达芯片数据分析——Agilent

3、Bioconductor系列之hgu95av2.db

芯片数据分析步骤6 探针注释相关推荐

  1. 【Bioinfo Blog 013】【R Code 011】——甲基化芯片数据分析(ChAMP包)

    目录 一.甲基化芯片检测 1.1 DNA甲基化 1.2 甲基化芯片原理 1.3 β值 1.4 分析需要考虑的问题 二.甲基化芯片数据分析 2.1 Pipeline 2.1.1 450K 2.1.2 E ...

  2. 高通量芯片数据分析:转录组芯片数据分析

    利用R的bioconductor包进行分析.由于安装的是R3.5以上版本所以实际用的是用biomanager指令,其他基本一样. 不同的包有各类坑,具体可以查阅bioconductor官网寻找解决办法 ...

  3. 数据挖掘学习笔记——GEO数据库:芯片数据分析

    数据挖掘 数据挖掘学习笔记--GEO数据库:芯片数据分析 文章目录 数据挖掘 一.芯片基础知识 1.1.背景 二.GEO数据库概述 2.1.基础简介 2.2.检索页面展示 三.GSE项目的三种下载方式 ...

  4. 比较两组数据的差异用什么图更直观_芯片数据分析中常见的一些图的作用

    今天给大家讲讲芯片数据分析中常见的一些图的作用,让大家伙儿知道它们在BB些啥. 箱式图(Box plot) 基因芯片的原始数据是需要进行标准化处理的,主要目的是消除由于实验技术(如荧光标记效率.扫描参 ...

  5. GEO芯片数据下载和探针ID转换(保姆级教程)

    GEO芯片数据下载和探针ID转换(保姆级教程) 一.问题描述 探针ID转换 数据是否预处理过 二.Rstudio的安装(建议阅读,避免后续转换时出错) 安装包的下载 安装步骤 三.(正文)芯片数据下载 ...

  6. 芯片数据分析笔记【05】 | 处理芯片数据的R包

    芯片数据分析笔记[01] | 基因芯片的基本原理 芯片数据分析笔记[02] | 芯片数据库 芯片数据分析笔记[03] | GEO数据库使用教程及在线数据分析工具 芯片数据分析笔记[04] | Arra ...

  7. sas 检测到开型代码语句的递归_对于标准答案的递归很多人都看不懂,其实就是一个深度优先的遍历。我写了段伪代码,将递归步骤还原并注释了一下,供大家参考,希望大家有所收获。...

    源自:7-5 Python之递归函数 对于标准答案的递归很多人都看不懂,其实就是一个深度优先的遍历.我写了段伪代码,将递归步骤还原并注释了一下,供大家参考,希望大家有所收获. #if条件不成立的省略 ...

  8. 用R和BioConductor进行基因芯片数据分析(四):芯片内归一化

    接前一篇: 用R和BioConductor进行基因芯片数据分析(三):计算median 归一化是从normalization翻译过来的.归一化的目的是使各次/组测量或各种实验条件下的测量可以相互比较, ...

  9. 运营数据分析步骤与方法解读

    现如今对于数据的利用越来越频繁,有用的数据往往是通过对于原始数据的整合分析之后得出的.运营数据分析就是对于数据分析的整体过程进行宏观的把控,那么,究竟什么是运营数据分析呢,运营数据分析的步骤和方法又是 ...

最新文章

  1. CSS 和 JS 动画哪个更快
  2. Linux防止SSH暴力破解
  3. python随机排列图片_python 随机打乱 图片和对应的标签方法
  4. 《当下的哲学》[法]阿兰.巴迪欧(作者)epub+mobi+azw3格式下载
  5. UVALive 7455 Linear Ecosystem (高斯消元)
  6. OpenGL 的渲染流水线
  7. django 1.8 官方文档翻译: 1-1-2 快速安装指南
  8. Python使用yagmail库实现发送邮件功能
  9. 如何为自己赢得更好的口碑
  10. Linux内核启动内核解压过程分析
  11. Java之父:詹姆斯·高斯林 (James Gosling)
  12. 主流机器视觉软件介绍
  13. 大事件后台管理系统——个人中心
  14. c 语言怎么实现可视化编程,自定义编程语言的实现
  15. PHP时间戳和日期相互转换
  16. java 生成一个随机整数,范围从 1 到 10;或 生成一个 0 或 1 的随机整数
  17. Verilog中Case语句
  18. 树莓派c语言编程点亮灯,树莓派点灯程序
  19. python表格数据_用python读取表格数据
  20. 【推荐】测试PC配置是否能满足某游戏的要求

热门文章

  1. Springboot+vue 体质测试数据分析#毕业设计
  2. jq事件绑定四种方式
  3. citus 系列6 - count(distinct xx) 加速 (use 估值插件 hll|hyperloglo
  4. Http 实现用户登录(mysql+html+request)
  5. BIM-建筑信息模型
  6. Biome-BGC 生态系统模型与应用
  7. C++之复合类型(一)
  8. python windows 消息通讯_在windows下使用python进行串口通讯的方法
  9. 火山引擎数智平台:CDP产品要能与多方联动
  10. android如何设置透明字体颜色,android TextView文字透明度跟背景透明度设置