芯片数据分析步骤6 探针注释
注释探针
注释探针的原因 为了防止非特异性组合造成的干扰,芯片制造商经常使用多个探针来检测同一基因的表达。因此,芯片制造商不会使用基因名作为探针的名称,而是使用自己定义的探针名称。为了合并重复探针,我们必须首先注明探针,,然后合并重复探针。后续分析,如,只能分析基因,所以也需要注释探针。
注释探针的方法
1 使用芯片制造商的注释信息注释
这种方法是金标准,但也是最不常用的方法。为什么?你可以在芯片制造商的网站上搜索。操作界面非常好user-unfriendly,我已经很久没有找到我想要的注释信息了。更不用说下载并注释手头的芯片数据了。
2 使用 GPL 文件注释
这种方法比较常见,操作简单,可以手动下载GPL也可以使用信息GEOquery包下载GPL信息。唯一的问题是信息。GPL文件一般比较大,下载不太方便,需要有一定的R语言基础才能注释。
以下示例如何使用GPL文件注释探针。
首先,找到您想要分析的芯片数据信息。这里使用的是GEO数据库GSE49382的芯片数据。
点开GSE可以看到49382页面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文件中的探针注释信息。
#提取探针注释信息,保留第一列和第四列 genename <- Table(gpl515)[,c(1,4)]
注意,下载gse382是一个list格式文件不能直接使用exprs函数提取表示矩阵。应使用代码exprs(gse382[[1]])提取表达矩阵。
注意,表达矩阵是Matrix对象,我们接下来要用的merge函数不能对Matrix因此,表达矩阵应首先转换为data.frame对象。否则会报错。Error in fix.by(by.x, x) : 'by必须指定唯一有效的列。
注意表达矩阵不包括探针ID,探针的ID表示矩阵rownames存在。红框标记在下图中。因此,我们应该首先给出表达矩阵探针ID才能使用信息merge函数合并表示矩阵和genename。
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
phenoData
sampleNames: 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和表达矩阵
library(hgu95av2.db) #加载芯片注释包
columns(hgu95av2.db) #查看芯片注释包提供的注释信息
probe2symbol <- toTable(hgu95av2SYMBOL) #提取注释信息,这里选择GENESYMBOL进行注释。也可以选择其他ID进行注释,详情请见注释包的技术支持文档。
exprSet <- as.data.frame(exprs(ALL)) #提取表达矩阵,转换为data.frame对象
head(exprSet) #查看表达矩阵
可以看到,表达矩阵exprSet
的rownames
就是探针名,而缺少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
————————————————
原文链接:https://blog.csdn.net/tommyhechina/article/details/80409983
> library(ALL)
> data(ALL)
> show(ALL)
ExpressionSet (storageMode: lockedEnvironment)
assayData: 12625 features, 128 samples
element names: exprs
protocolData: none
phenoData
sampleNames: 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
library(hgu95av2.db) #加载芯片注释包
columns(hgu95av2.db) #查看芯片注释包提供的注释信息
probe2symbol <- toTable(hgu95av2SYMBOL) #提取注释信息,这里选择GENESYMBOL进行注释。也可以选择其他ID进行注释,详情请见注释包的技术支持文档。
exprSet <- as.data.frame(exprs(ALL)) #提取表达矩阵,转换为data.frame对象
head(exprSet) #查看表达矩阵
exprSet
的rownames
就是探针名,而缺少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
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)
Symbol <- getSYMBOL(probeset, "hgu95av2.db")
> 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"
Symbol <- as.character(lookUp(probeset, "hgu95av2", "SYMBOL"))