GEOquery 下載 GEO 數(shù)據(jù)

前言

NCBI Gene Expression Omnibus(基因表達(dá)綜合數(shù)據(jù)庫(kù),GEO)公開(kāi)了很多高通量基因組學(xué)數(shù)據(jù)集榨汤。盡管名字很好聽(tīng),但這個(gè)數(shù)據(jù)庫(kù)并不是專門(mén)針對(duì)基因表達(dá)數(shù)據(jù)的怎茫。

NCBI GEO

NCBI GEO 是以樣本的形式組織起來(lái)的收壕,這些樣本被歸入 series。對(duì)于較大的實(shí)驗(yàn)轨蛤,有 SubSeriesSuperSeries 兩種

一個(gè) SuperSeries 就是一篇論文的所有實(shí)驗(yàn)蜜宪,一個(gè) SuperSeries 可以分解為不同技術(shù)的 SubSeries

舉個(gè)例子祥山,看看 SuperSeries GSE19486圃验。在這篇論文中,他們使用了 2 個(gè)不同的平臺(tái)(這是個(gè)奇怪的名字缝呕,平臺(tái)是一種技術(shù)和物種的組合)

他們對(duì)兩種不同的因子(NFkB-IIPol II)進(jìn)行 RNA-seqChIP-seq澳窑。這導(dǎo)致 4 個(gè)子系列(2 個(gè)用于 RNA-seq2 個(gè)用于 ChIP-seq

一個(gè)更簡(jiǎn)單的例子供常,如 GSE994摊聋,使用 Affymetrix 微陣列比較來(lái)自當(dāng)前和以前吸煙者的樣本

提交給 NCBI GEO 的數(shù)據(jù)既可以是 "raw",也可以是 "proceseed"栈暇。我們暫且把重點(diǎn)放在基因表達(dá)數(shù)據(jù)上麻裁。"proceseed" 的數(shù)據(jù)是經(jīng)過(guò)標(biāo)準(zhǔn)化和量化的,通常是在基因水平上,以基因?qū)?yīng)樣本的矩陣形式提供煎源。

"raw" 數(shù)據(jù)可以是任何東西色迂,從測(cè)序讀數(shù)到微陣列圖像文件。甚至可以有不同狀態(tài)的 "raw" 數(shù)據(jù)薪夕,例如對(duì)于一個(gè) RNA-seq 數(shù)據(jù)集脚草,可能包含:

  • FASTQ 文件(原始 read
  • BAM 文件(比對(duì) read
  • 基因樣本表達(dá)矩陣(非標(biāo)準(zhǔn)化)
  • 基因樣本表達(dá)矩陣(標(biāo)準(zhǔn)化)

所以赫悄,什么是 "raw"原献,什么是 "proceseed",可能非常依賴于背景信息埂淮。

在某些情況下姑隅,該領(lǐng)域有一個(gè)共識(shí)。對(duì)于 Affymetrix 基因表達(dá)芯片來(lái)說(shuō)倔撞,"raw" 文件是所謂的 CEL 文件(Affymetrix 發(fā)明的一種文件格式)讲仰,"proceseed" 數(shù)據(jù)是經(jīng)過(guò)歸一化和量化的數(shù)據(jù),在探針集層面進(jìn)行了匯總痪蝇。

最后,GEOSeries 標(biāo)識(shí)符(如 GSE19486)和樣本標(biāo)識(shí)符(GSM486297)躏啰。用戶幾乎總是對(duì)一個(gè)給定 Series 中的所有樣品感興趣给僵,所以系列標(biāo)識(shí)符毫捣,也叫 accession number

Platforms(平臺(tái))

平臺(tái)記錄了陣列上的元素列表(如 cDNA蔓同、寡核苷酸探針組蹲诀、ORF斑粱、抗體)或該實(shí)驗(yàn)中可能被檢測(cè)和量化的元素列表(如 SAGE 標(biāo)簽、肽)则北。

每個(gè)平臺(tái)記錄都有一個(gè)唯一的 GEO accession numberGPLxxx)披粟。一個(gè)平臺(tái)可以包含多個(gè)提交者提交的樣品守屉。

Samples(樣本)

一份樣品記錄描述了處理單個(gè)樣品的條件、所涉及的操作以及從中獲得的每種元素的豐度測(cè)量滨巴。

每個(gè)樣品記錄都有一個(gè)唯一的 GEO accession number(GSMxxx)恭取。一個(gè)樣品只能屬于一個(gè)平臺(tái),但是可以被加入多個(gè)系列

Series(系列)

系列記錄定義了一組相關(guān)的樣品耗跛,這些樣品是如何相關(guān)的调塌,以及它們是否排序或如何排序的惠猿。

系列記錄提供了整體實(shí)驗(yàn)的關(guān)注點(diǎn)和描述信息偶妖。還可以包含所提取的數(shù)據(jù)的描述趾访、簡(jiǎn)要結(jié)論或分析腹缩。

每個(gè)系列記錄都有一個(gè)唯一的 GEO accession numberGSExxx)。系列記錄有幾種不同的格式润讥,均由 GEOquery 獨(dú)立處理楚殿。

小而新的 GSEMatrix 文件的解析速度相當(dāng)快竿痰;GEOquery 使用一個(gè)參數(shù)來(lái)選擇是否使用 GSEMatrix 文件

Datasets(數(shù)據(jù)集)

GEO 數(shù)據(jù)集(GDSxxx)是 GEO 樣本數(shù)據(jù)的精選集。一個(gè) GDS 記錄代表了一個(gè)在生物學(xué)和統(tǒng)計(jì)學(xué)上可比較的 GEO 樣本的集合影涉,并構(gòu)成了 GEO 數(shù)據(jù)可視化和分析工具的基礎(chǔ)蟹倾。

GDS 內(nèi)的樣本來(lái)自同一個(gè)平臺(tái),它們共享一組共同的探針集培慌。

假設(shè) GDS 內(nèi)每個(gè)樣品的測(cè)量值是以同樣方式計(jì)算的吵护,即考慮背景處理和歸一化等因素表鳍。

GEOquery

今天我們的重點(diǎn)并不是要介紹上面的內(nèi)容进胯,而是要和大家聊聊該怎么用 R 來(lái)下載 GEO 的數(shù)據(jù)胁镐。

我們使用的是 GEOquery 包盯漂,下來(lái)就來(lái)詳細(xì)介紹一下

安裝

Bioconductor 安裝

if (!requireNamespace("BiocManager", quietly=TRUE))
    install.packages("BiocManager")
BiocManager::install("GEOquery")

GitHub 安裝

library(devtools)
install_github('GEOquery','seandavi')

使用

1 GEOquery 入門(mén)

GEO 中獲取數(shù)據(jù)真的很容易就缆。只需要一個(gè)命令: getGEO竭宰。這一個(gè)函數(shù)對(duì)其輸入進(jìn)行解釋切揭,以確定如何從 GEO 中獲取數(shù)據(jù)锁摔,然后將數(shù)據(jù)解析成有用的 R 數(shù)據(jù)結(jié)構(gòu)谐腰。

用法很簡(jiǎn)單十气。首先加載 GEOquery 庫(kù)

library(GEOquery)

現(xiàn)在砸西,我們可以自由訪問(wèn)任何 GEO accession number。請(qǐng)注意竟闪,在下文中炼蛤,我使用了一個(gè)與 GEOquery 包一起打包的文件理朋。

一般來(lái)說(shuō)嗽上,你只要傳入正確的 GEO accession 就行兽愤,正如代碼注釋中所指出的那樣

# 更常用的方式是傳入 GEO accession浅萧,從 GEO 數(shù)據(jù)庫(kù)中下載數(shù)據(jù):
# gds <- getGEO("GDS507")
gds <- getGEO(filename=system.file("extdata/GDS507.soft.gz",package="GEOquery"))

現(xiàn)在洼畅,gds 包含了 R 數(shù)據(jù)結(jié)構(gòu)(GDS 類),表示 GEOGDS507 條目徘郭。

您會(huì)注意到用于存儲(chǔ)下載的文件名被輸出到屏幕上(但沒(méi)有保存到任何地方)残揉,以便以后調(diào)用 getGEO(filename=...) 時(shí)使用冲甘。

# 更常用的方式是直接傳入 GSM 號(hào)江醇,從數(shù)據(jù)庫(kù)中下載:
# gds <- getGEO("GSM11805")
gsm <- getGEO(filename=system.file("extdata/GSM11805.txt.gz",package="GEOquery"))
1.1 getGEO
  1. 描述

該函數(shù)是 GEOquery 包中主要的用戶級(jí)函數(shù)陶夜。它引導(dǎo)下載(如果沒(méi)有指定文件名)并將 GEO SOFT 格式文件解析為 R 數(shù)據(jù)結(jié)構(gòu)条辟,該結(jié)構(gòu)是專門(mén)設(shè)計(jì)的羽嫡,便于訪問(wèn) GEO SOFT 格式的每個(gè)重要部分杭棵。

  1. 使用
getGEO(GEO = NULL, filename = NULL, destdir = tempdir(),
       GSElimits = NULL, GSEMatrix = TRUE, 
       AnnotGPL = FALSE, getGPL = TRUE,
       parseCharacteristics = TRUE)
  1. 參數(shù)
image.png

2 GEOquery 數(shù)據(jù)結(jié)構(gòu)

GEOquery 的數(shù)據(jù)結(jié)構(gòu)其實(shí)有兩種形式魂爪。第一種滓侍,由 GDS撩笆、GPLGSM 組成浇衬,它們的行為都是相似的耘擂,訪問(wèn)器對(duì)每一種都有相似的作用醉冤。

第四種 GEOquery 數(shù)據(jù)結(jié)構(gòu) GSE篙悯,是由 GSMGPL 對(duì)象組合而成的復(fù)合數(shù)據(jù)類型鸽照。我先把前三個(gè)一起解釋一下矮燎。

2.1 GDS诞外、GSM 和 GPL 類

這些類中的每一個(gè)類都由一個(gè)元數(shù)據(jù)頭(與 SOFT 格式頭部信息幾乎一致)和一個(gè) GEODataTable 組成峡谊。

GEODataTable 有兩個(gè)簡(jiǎn)單的部分: ColumnsTableColumns 部分是對(duì) Table 部分的列的描述正什。此外埠忘,每個(gè)類還有一個(gè) show 方法莹妒。

例如旨怠,對(duì)于上面的 gsm鉴腻,查看元數(shù)據(jù)

> head(Meta(gsm))
$channel_count
[1] "1"

$comment
[1] "Raw data provided as supplementary file"

$contact_address
[1] "715 Albany Street, E613B"

$contact_city
[1] "Boston"

$contact_country
[1] "USA"

$contact_department
[1] "Genetics and Genomics"

查看與 GSM 相關(guān)的數(shù)據(jù)

> Table(gsm)[1:5,]
          ID_REF  VALUE ABS_CALL
1 AFFX-BioB-5_at  953.9        P
2 AFFX-BioB-M_at 2982.8        P
3 AFFX-BioB-3_at 1657.9        P
4 AFFX-BioC-5_at 2652.7        P
5 AFFX-BioC-3_at 2019.5        P

查看列描述

> Columns(gsm)
    Column                                                                Description
1   ID_REF                                                                           
2    VALUE                         MAS 5.0 Statistical Algorithm (mean scaled to 500)
3 ABS_CALL MAS 5.0 Absent, Marginal, Present call  with Alpha1 = 0.05, Alpha2 = 0.065

GPL 類的行為與 GSM 類完全相同爽哎。然而课锌,GDS 類的 Columns 方法保存了更多的信息渺贤。

> Columns(gds)[,1:3]
     sample disease.state individual
1  GSM11815           RCC        035
2  GSM11832           RCC        023
3  GSM12069           RCC        001
4  GSM12083           RCC        005
5  GSM12101           RCC        011
6  GSM12106           RCC        032
7  GSM12274           RCC          2
8  GSM12299           RCC          3
9  GSM12412           RCC          4
10 GSM11810        normal        035
11 GSM11827        normal        023
12 GSM12078        normal        001
13 GSM12099        normal        005
14 GSM12269        normal          1
15 GSM12287        normal          2
16 GSM12301        normal          3
17 GSM12448        normal          4
2.2 GSE 類

GSEGEO 中最容易混淆的。一個(gè) GSE 條目可以代表在任意數(shù)量的平臺(tái)上運(yùn)行的任意數(shù)量的樣本固棚。

GSE 類和其他類一樣此洲,有一個(gè)元數(shù)據(jù)部分黍翎,但是它沒(méi)有 GEODataTable匣掸。

相反,它包含了兩個(gè)列表霎匈,可以使用 GPLListGSMList 方法進(jìn)行訪問(wèn)铛嘱,這兩個(gè)列表分別是 GPLGSM 對(duì)象的列表墨吓。

舉個(gè)例子帖烘,我們從本地讀取 soft 文件

gse <- getGEO(filename=system.file("extdata/GSE781_family.soft.gz",package="GEOquery"))

查看元數(shù)據(jù)

> head(Meta(gse))
$contact_address
[1] "715 Albany Street, E613B"

$contact_city
[1] "Boston"

$contact_country
[1] "USA"

$contact_department
[1] "Genetics and Genomics"

$contact_email
[1] "mlenburg@bu.edu"

$contact_fax
[1] "617-414-1646"

獲取 GSE 中包含的所有 GSM 對(duì)象的名稱

> names(GSMList(gse))
 [1] "GSM11805" "GSM11810" "GSM11814" "GSM11815" "GSM11823" "GSM11827" "GSM11830" "GSM11832" "GSM12067"
[10] "GSM12069" "GSM12075" "GSM12078" "GSM12079" "GSM12083" "GSM12098" "GSM12099" "GSM12100" "GSM12101"
[19] "GSM12105" "GSM12106" "GSM12268" "GSM12269" "GSM12270" "GSM12274" "GSM12283" "GSM12287" "GSM12298"
[28] "GSM12299" "GSM12300" "GSM12301" "GSM12399" "GSM12412" "GSM12444" "GSM12448"

獲得列表中的第一個(gè) GSM 對(duì)象

> GSMList(gse)[[1]]
An object of class "GSM"
channel_count 
[1] "1"
comment 
[1] "Raw data provided as supplementary file"
contact_address 
[1] "715 Albany Street, E613B"
contact_city 
[1] "Boston"
contact_country 
[1] "USA"
contact_department 
[1] "Genetics and Genomics"
contact_email 
[1] "mlenburg@bu.edu"
...
****** Column Descriptions ******
    Column                                                                Description
1   ID_REF                                                                           
2    VALUE                         MAS 5.0 Statistical Algorithm (mean scaled to 500)
3 ABS_CALL MAS 5.0 Absent, Marginal, Present call  with Alpha1 = 0.05, Alpha2 = 0.065
****** Data Table ******
          ID_REF  VALUE ABS_CALL
1 AFFX-BioB-5_at  953.9        P
2 AFFX-BioB-M_at 2982.8        P
3 AFFX-BioB-3_at 1657.9        P
4 AFFX-BioC-5_at 2652.7        P
5 AFFX-BioC-3_at 2019.5        P
22278 more rows ...

獲取所有 GPL 名稱

> names(GPLList(gse))
[1] "GPL96" "GPL97"

3 轉(zhuǎn)換為表達(dá)譜

GEO 數(shù)據(jù)集與 limmaMAList 數(shù)據(jù)結(jié)構(gòu)和 BiobaseExpressionSet 數(shù)據(jù)結(jié)構(gòu)非常相似

存在兩個(gè)函數(shù) GDS2MAGDS2eSet式矫,能夠?qū)?GEOquery 數(shù)據(jù)結(jié)構(gòu)分別轉(zhuǎn)換為 MAListExpressionSet

3.1 獲取 GSE Series Matrix

除了解析較大的 soft 文件采转,我們也可以直接獲取處理后的 Series matrix 文件氏义。

getGEO 能夠快速解析該類型的文件惯悠,解析返回的數(shù)據(jù)結(jié)構(gòu)是 ExpressionSet 的列表

gset <- getGEO("GSE11675",destdir = './')

顯示文件結(jié)構(gòu)信息

> show(gset)
$GSE11675_series_matrix.txt.gz
ExpressionSet (storageMode: lockedEnvironment)
assayData: 12625 features, 6 samples 
  element names: exprs 
protocolData: none
phenoData
  sampleNames: GSM296630 GSM296635 ... GSM296639 (6 total)
  varLabels: title geo_accession ... data_row_count (34 total)
  varMetadata: labelDescription
featureData
  featureNames: 1000_at 1001_at ... AFFX-YEL024w/RIP1_at (12625 total)
  fvarLabels: ID GB_ACC ... Gene Ontology Molecular Function (16 total)
  fvarMetadata: Column Description labelDescription
experimentData: use 'experimentData(object)'
  pubMedIds: 19855080 
Annotation: GPL8300 

使用 Biobase 包的函數(shù)克婶,獲取樣本的表型數(shù)據(jù)

> show(pData(phenoData(gset[[1]]))[, 1:5])
                  title geo_accession                status submission_date last_update_date
GSM296630     Lin-CD34-     GSM296630 Public on Jan 05 2010     Jun 04 2008      Jan 05 2010
GSM296635 CML Lin-CD34-     GSM296635 Public on Jan 05 2010     Jun 04 2008      Jan 05 2010
GSM296636 CML Lin-CD34+     GSM296636 Public on Jan 05 2010     Jun 04 2008      Jan 05 2010
GSM296637     Lin-CD34+     GSM296637 Public on Jan 05 2010     Jun 04 2008      Jan 05 2010
GSM296638     Lin+CD34+     GSM296638 Public on Jan 05 2010     Jun 04 2008      Jan 05 2010
GSM296639 CML Lin+CD34+     GSM296639 Public on Jan 05 2010     Jun 04 2008      Jan 05 2010

使用 exprs 獲取處理后的表達(dá)譜數(shù)據(jù)

> head(exprs(gset[[1]]))
          GSM296630 GSM296635 GSM296636 GSM296637  GSM296638 GSM296639
1000_at   103.88700  138.0500 133.32200 242.86600  175.73400 165.28400
1001_at     3.39447   31.1682  98.97760  69.78960   56.16700 101.31200
1002_f_at  10.56290    3.4511   1.63724   5.92232    3.26876   3.33937
1003_s_at   8.42204   20.7501  18.65330  12.75090    5.53738   6.18855
1004_at     5.55025   14.6198  17.52940  14.25250   16.76820  16.43160
1005_at   802.71900  846.3760 761.27500 911.98200 2650.83000 801.71700
3.2 將 GDS 轉(zhuǎn)換為 ExpressionSet

對(duì)于上面的 gds 對(duì)象,我們可以簡(jiǎn)單地進(jìn)行轉(zhuǎn)換

eset <- GDS2eSet(gds,do.log2=TRUE)

現(xiàn)在筋岛,eset 是一個(gè) ExpressionSet 類型睁宰,它包含了 GEO 數(shù)據(jù)集信息柒傻,以及樣本信息

> eset
ExpressionSet (storageMode: lockedEnvironment)
assayData: 22645 features, 17 samples 
  element names: exprs 
protocolData: none
phenoData
  sampleNames: GSM11815 GSM11832 ... GSM12448 (17 total)
  varLabels: sample disease.state individual description
  varMetadata: labelDescription
featureData
  featureNames: 200000_s_at 200001_at ... AFFX-TrpnX-M_at (22645 total)
  fvarLabels: ID Gene title ... GO:Component ID (21 total)
  fvarMetadata: Column labelDescription
experimentData: use 'experimentData(object)'
  pubMedIds: 14641932 
Annotation:  

獲取樣本信息

> pData(eset)[,1:3]
           sample disease.state individual
GSM11815 GSM11815           RCC        035
GSM11832 GSM11832           RCC        023
GSM12069 GSM12069           RCC        001
GSM12083 GSM12083           RCC        005
GSM12101 GSM12101           RCC        011
GSM12106 GSM12106           RCC        032
GSM12274 GSM12274           RCC          2
GSM12299 GSM12299           RCC          3
GSM12412 GSM12412           RCC          4
GSM11810 GSM11810        normal        035
GSM11827 GSM11827        normal        023
GSM12078 GSM12078        normal        001
GSM12099 GSM12099        normal        005
GSM12269 GSM12269        normal          1
GSM12287 GSM12287        normal          2
GSM12301 GSM12301        normal          3
GSM12448 GSM12448        normal          4
3.3 將 GDS 轉(zhuǎn)換為 MAList

由于 ExpressionSet 沒(méi)有包含基因信息青柄,所以沒(méi)有檢索到任何注釋信息(也稱為平臺(tái)信息)

不過(guò)致开,要獲得這些信息也很容易双戳。首先拣技,我們需要知道這個(gè) GDS 使用的是什么平臺(tái)膏斤。然后莫辨,再調(diào)用 getGEO 就可以得到我們需要的信息沮榜。

先獲取 GDS 的平臺(tái)

> Meta(gds)$platform
[1] "GPL97"

再使用 getGEO 獲取該平臺(tái)的信息

gpl <- getGEO(filename=system.file("extdata/GPL97.annot.gz",package="GEOquery"))

gpl 變量現(xiàn)在包含了來(lái)自 GEOGPL97 的信息蟆融。

ExpressionSet 不同的是型酥,limma MAList 是存儲(chǔ)了基因的注釋信息弥喉,我們可以在調(diào)用 GDS2MA 時(shí)將我們新創(chuàng)建的 GPL 結(jié)構(gòu)對(duì)象 gpl 傳入進(jìn)去

MA <- GDS2MA(gds,GPL=gpl)

查看 MA 類型信息

> class(MA)
[1] "MAList"
attr(,"package")
[1] "limma"

MAMAList 類型由境,不僅包含數(shù)據(jù)虏杰,還包含與 GDS507 相關(guān)的樣本信息和基因信息

3.4 將 GSE 轉(zhuǎn)換為 ExpressionSet

首先嘹屯,請(qǐng)確保使用 3.1 的方法是無(wú)法滿足分析需求的州弟。因?yàn)樵摲椒焖偾液?jiǎn)便婆翔。

如果確實(shí)無(wú)法滿足分析需求啃奴,那么可以使用下面的方法

GSE 對(duì)象轉(zhuǎn)換為 ExpressionSet 對(duì)象需要一點(diǎn)點(diǎn) R 基礎(chǔ)數(shù)據(jù)操作最蕾,因?yàn)?GSE 的底層 GSMGPL 對(duì)象中可以存儲(chǔ)各種數(shù)據(jù)瘟则。

首先醋拧,我們需要確保所有的 GSM 都來(lái)自同一個(gè)平臺(tái)丹壕。

> gsmplatforms <- lapply(GSMList(gse),function(x) {Meta(x)$platform_id})
> head(gsmplatforms)
$GSM11805
[1] "GPL96"

$GSM11810
[1] "GPL97"

$GSM11814
[1] "GPL96"

$GSM11815
[1] "GPL97"

$GSM11823
[1] "GPL96"

$GSM11827
[1] "GPL97"

這個(gè)例子包含兩個(gè)平臺(tái) GPL96GPL97菌赖。我們可以對(duì) GSMlist 的結(jié)果進(jìn)行過(guò)濾琉用,提取出 GPL96 的樣本

> gsmlist <- Filter(function(gsm) {Meta(gsm)$platform_id=='GPL96'},GSMList(gse))
> length(gsmlist)
[1] 17

現(xiàn)在我們想知道哪一列數(shù)據(jù)是我們想要的,我們可以先查看某一個(gè) GSMTable 的前幾行信息

> head(Table(gsmlist[[1]]))
           ID_REF  VALUE ABS_CALL
1  AFFX-BioB-5_at  953.9        P
2  AFFX-BioB-M_at 2982.8        P
3  AFFX-BioB-3_at 1657.9        P
4  AFFX-BioC-5_at 2652.7        P
5  AFFX-BioC-3_at 2019.5        P
6 AFFX-BioDn-5_at 3531.5        P

然后獲取對(duì)應(yīng)的列描述信息

> head(Columns(gsmlist[[1]]))
    Column                                                                Description
1   ID_REF                                                                           
2    VALUE                         MAS 5.0 Statistical Algorithm (mean scaled to 500)
3 ABS_CALL MAS 5.0 Absent, Marginal, Present call  with Alpha1 = 0.05, Alpha2 = 0.065

現(xiàn)在辕羽,我們知道了 VALUE 列是我們想要的,然后使用下面的代碼來(lái)將這些數(shù)據(jù)轉(zhuǎn)換為矩陣形式

# 先獲取探針集
probesets <- Table(GPLList(gse)[[1]])$ID
# 將每個(gè)樣本的 VALUE 列按列拼接起來(lái)
data.matrix <- do.call('cbind',
                        lapply(gsmlist,function(x) {
                        tab <- Table(x)
                        # 我們使用 match 保證每列的探針順序一致
                        mymatch <- match(probesets,tab$ID_REF)
                        return(tab$VALUE[mymatch])
                        })
                      )
data.matrix <- apply(data.matrix,2,function(x) {as.numeric(as.character(x))})
data.matrix <- log2(data.matrix)

查看結(jié)果

> head(data.matrix)
      GSM11805  GSM11814  GSM11823  GSM11830  GSM12067  GSM12075  GSM12079  GSM12098  GSM12100
[1,] 10.926963 11.105254 11.275019 11.438636 11.424376 11.222795 11.469845 10.823367 10.835971
[2,]  5.749534  7.908092  7.093814  7.514122  7.901470  6.407693  5.165912  6.556123  8.207014
[3,]  7.066089  7.750205  7.244126  7.962896  7.337176  6.569856  7.477354  7.708739  7.428779
[4,] 12.660353 12.479755 12.215897 11.458355 11.397568 12.529870 12.240046 12.336534 11.762839
[5,]  6.195741  6.061776  6.565293  6.583459  6.877744  6.652486  3.981853  5.501439  6.247928
[6,]  9.251956  9.480790  8.774458  9.878817  9.321252  9.275892  9.802355  9.046578  9.414474
      GSM12105  GSM12268  GSM12270  GSM12283  GSM12298  GSM12300  GSM12399  GSM12444
[1,] 10.810893 11.062653 10.323055 11.181028 11.566387 11.078151 11.535178 11.105450
[2,]  6.816344  6.563768  7.353147  5.770829  6.912889  4.812498  7.471675  7.488644
[3,]  7.754888  7.126188  8.742815  7.339850  7.602142  7.383704  7.432959  7.381110
[4,] 11.237509 12.412490 11.213408 12.678380 12.232901 12.090939 11.421802 12.172834
[5,]  6.017922  6.525129  6.683696  5.918863  5.837943  6.281698  5.419539  5.469235
[6,]  9.030115  9.252665  9.631359  8.656782  8.920948  8.629357  9.526695  9.494656

最后垄惧,我們將其轉(zhuǎn)換為 ExpressionSet 對(duì)象

require(Biobase)
# 構(gòu)建 ExpressionSet 對(duì)象
rownames(data.matrix) <- probesets
colnames(data.matrix) <- names(gsmlist)
pdata <- data.frame(samples=names(gsmlist))
rownames(pdata) <- names(gsmlist)
pheno <- as(pdata,"AnnotatedDataFrame")
eset2 <- new('ExpressionSet',exprs=data.matrix,phenoData=pheno)

查看對(duì)象

> eset2
ExpressionSet (storageMode: lockedEnvironment)
assayData: 22283 features, 17 samples 
  element names: exprs 
protocolData: none
phenoData
  sampleNames: GSM11805 GSM11814 ... GSM12444 (17 total)
  varLabels: samples
  varMetadata: labelDescription
featureData: none
experimentData: use 'experimentData(object)'
Annotation: 

4 獲取原始數(shù)據(jù)

NCBI GEO 會(huì)保存有一些原始數(shù)據(jù)刁愿,如 .CEL.CDF 等文件到逊。有時(shí)我們想快速的獲取這個(gè)文件滤钱,可以使用 getGEOSuppFiles 函數(shù)

getGEOSuppFiles 函數(shù)接受一個(gè) GEO accession number,然后下載與其相關(guān)的所有原始數(shù)據(jù)脑题。

默認(rèn)情況下件缸,該函數(shù)會(huì)在當(dāng)前工作目錄下創(chuàng)建一個(gè)文件夾來(lái)存儲(chǔ)這些數(shù)據(jù)。

getGEOSuppFiles('GSE11675')

獲取下載的原始文件的信息

> eList <- getGEOSuppFiles('GSE11675', fetch_files = FALSE)
> eList
             fname                                                                               url
1 GSE11675_RAW.tar https://ftp.ncbi.nlm.nih.gov/geo/series/GSE11nnn/GSE11675/suppl//GSE11675_RAW.tar

下載的原始文件中包含 .CEL.CDF 文件叔遂,我們可以使用 affyoligo 包進(jìn)行分析他炊。有空我們?cè)僭敿?xì)介紹其用法

5 使用示例

GEOquery 對(duì)于快速收集大量數(shù)據(jù)來(lái)說(shuō)是相當(dāng)強(qiáng)大的,下面展示一個(gè)例子

5.1 獲取給定平臺(tái)的所有 Series

有時(shí)我們想對(duì)某個(gè)平臺(tái)的所有 GSE 數(shù)據(jù)進(jìn)行數(shù)據(jù)挖掘已艰,使用 GEOquery 可以讓這一切變得非常簡(jiǎn)單痊末。

但在使用之前,我們需要對(duì) GPL 記錄有一些了解哩掺。

gpl97 <- getGEO('GPL97')
info <- Meta(gpl97)

獲取 title

> info$title
[1] "[HG-U133B] Affymetrix Human Genome U133B Array"

獲取 Series ID

> head(info$series_id)
[1] "GSE362" "GSE473" "GSE620" "GSE674" "GSE781" "GSE907"

> length(info$series_id)
[1] 165

獲取樣本號(hào)

> head(info$sample_id)
[1] "GSM3922" "GSM3924" "GSM3926" "GSM3928" "GSM3930" "GSM3932"

> length(info$sample_id)
[1] 7917

該平臺(tái)共包含了 165 個(gè) Series凿叠,樣本總量為 7917。獲取到了這些信息嚼吞,就可以進(jìn)行批量下載了盒件。

我們以下載前 5 個(gè)樣本為例,進(jìn)行說(shuō)明

> gsmids <- Meta(gpl97)$sample_id
> gsmlist <- sapply(gsmids[1:5], getGEO)
> names(gsmlist)
[1] "GSM3922" "GSM3924" "GSM3926" "GSM3928" "GSM3930"
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末舱禽,一起剝皮案震驚了整個(gè)濱河市炒刁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌呢蔫,老刑警劉巖切心,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異片吊,居然都是意外死亡绽昏,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)俏脊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)全谤,“玉大人,你說(shuō)我怎么就攤上這事爷贫∪先唬” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵漫萄,是天一觀的道長(zhǎng)卷员。 經(jīng)常有香客問(wèn)我,道長(zhǎng)腾务,這世上最難降的妖魔是什么毕骡? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上未巫,老公的妹妹穿的比我還像新娘窿撬。我一直安慰自己,他們只是感情好叙凡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布劈伴。 她就那樣靜靜地躺著,像睡著了一般握爷。 火紅的嫁衣襯著肌膚如雪跛璧。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天饼拍,我揣著相機(jī)與錄音赡模,去河邊找鬼。 笑死师抄,一個(gè)胖子當(dāng)著我的面吹牛漓柑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播叨吮,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼辆布,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了茶鉴?” 一聲冷哼從身側(cè)響起锋玲,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎涵叮,沒(méi)想到半個(gè)月后惭蹂,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡割粮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年盾碗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舀瓢。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡廷雅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出京髓,到底是詐尸還是另有隱情航缀,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布堰怨,位于F島的核電站芥玉,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏备图。R本人自食惡果不足惜飞傀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一皇型、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧砸烦,春花似錦、人聲如沸绞吁。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)家破。三九已至颜说,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間汰聋,已是汗流浹背门粪。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留烹困,地道東北人玄妈。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像髓梅,于是被迫代替她去往敵國(guó)和親拟蜻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容