GEO(Gene Expression Omnibus)数据库是一个公共的基因表达量数据库,它收录了来自不同平台的高通量基因表达数据,包括Affymetrix、Illumina和Agilent等。每个平台都有自己的文件格式和数据处理流程,以下是对这三个主要平台的简要介绍:
-
-
平台特点
:Affymetrix平台使用微阵列技术,每个探针对应一个特定的基因或转录本。
-
文件格式
:Affymetrix数据通常以
.CEL
文件格式存储,这是一种二进制格式,包含了原始的荧光强度值。
-
数据处理
:需要使用专门的软件(如Affymetrix Power Tools, dChip, or R/Bioconductor的
affy
包)来读取
.CEL
文件,并进行标准化和背景校正。
-
平台特点
:Illumina平台使用测序技术,可以提供单核苷酸多态性(SNP)和基因表达数据。
-
文件格式
:Illumina数据以
.idat
文件格式存储,这是原始的图像强度数据。
-
数据处理
:需要使用Illumina自己的软件(如GenomeStudio)或其他第三方工具(如R/Bioconductor的
illuminaio
包)来处理
.idat
文件,提取表达量数据,并进行标准化。
-
平台特点
:Agilent平台也使用微阵列技术,特点是可以灵活设计探针,适用于研究者自定义的基因集。
-
文件格式
:Agilent数据通常以
.txt
或
.csv
格式存储,包含了原始的荧光强度值。
-
数据处理
:可以使用Agilent自己的软件(如Feature Extraction Software)或R/Bioconductor的
limma
包等工具来处理这些文件。
处理这些平台的数据时,研究者需要了解各自平台的特点和数据处理流程,选择合适的工具和方法来进行分析。此外,由于不同平台之间的技术差异,直接比较不同平台的数据时需要格外小心,可能需要进行平台间的标准化或使用兼容的分析方法。
但是大部分情况下,我们偷懒会直接下载GEO数据库里面的作者上传的表达量矩阵,我们拿GSE13904举例说明,简单的代码如下所示:
library(AnnoProbe)
library(GEOquery)
getOption('timeout')
options(timeout=10000)
#获取并且检查表达量矩阵
##~~~gse编号需修改~~~
gse_number 'GSE13904'
dir.create(gse_number)
setwd( gse_number )
getwd()
list.files()
if(T){gset #gset = getGEO("GSE13904", destdir = '.', getGPL = F)
gset[[1]]
其实上面的代码就是远程读取:https://ftp.ncbi.nlm.nih.gov/geo/series/GSE13nnn/GSE13904/matrix/ 里面的文件:
-
https://ftp.ncbi.nlm.nih.gov/geo/series/GSE13nnn/GSE13904/matrix/GSE13904_series_matrix.txt.gz (2024-10-08 05:42 51M)
这个文件是作者上传的表达量矩阵,所以数据
预处理
取决于作者的想法!
有一些时候会出现一些奇怪的矩阵,比如这个GSE13904数据集 ,可以看到 :
> a=gset[[1]]
> dat=exprs(a) #a现在是一个对象,取a这个对象通过看说明书知道要用exprs这个函数
> dim(dat)#看一下dat这个矩阵的维度
[1] 54675 227
> dat[1:4,1:4] #查看dat这个矩阵的1至4行和1至4列,逗号前为行,逗号后为列
GSM350139 GSM350140 GSM350141 GSM350142
1007_s_at 1.3790160 1.0096979 1.0634007 1.0500925
1053_at 0.9159325 0.6084510 1.2112615 0.8101592
117_at 0.7658561 0.7135977 1.0033835 1.1766533
121_at 1.0137547 1.5091416 0.9252635 1.2368684
> range(dat)
[1] 0.0100 990.7652
# 每个样品的四分位数如下所示:
> apply(dat[,1:4], 2,fivenum)
GSM350139 GSM350140 GSM350141 GSM350142
[1,] 0.02240257 0.02496001 0.1536448 0.04565957
[2,] 0.87158622 0.76531896 0.8887694 0.87434662
[3,] 0.97803104 0.98077905 1.0041255 0.99884206
[4,] 1.08294430 1.16814570 1.1577705 1.12798295
[5,] 16.43987000 10.30501500 25.7737870 9.34895900
有点意思啊, 绝大部分样品都是中位值居然都是1附近,这个就不符合我们的认知。正常情况下,我们的表达量芯片得出来的矩阵里面的数字范围应该是0到15直接,大部分在5到8附近。
如果我们直接从这个GSE13904数据集里面的找到脓毒症和正常对照,这两个分组的样品,然后试试看做差异分析 :
pd=pData(a)
kp1=grepl('Sepsis',pd$title);table(kp1)
kp2=grepl('Control',pd$title);table(kp2)
pd=pd[kp1 | kp2,]
dat=dat[,kp1 | kp2]
library(stringr)
##~~~分组信息编号需修改~~~
group_list=ifelse(grepl('Control',pd$title ,ignore.case = T ),
"control","case")
table(group_list)
group_list "control","case"))
table(group_list)
会出现很诡异的 差异分析结果 :