从 EBI ArrayExpress 获取芯片数据

要说寻找公共芯片测序数据大家都知道上 GEO 查找,其实 EBI 也有个叫 ArrayExpress 的网站(网址ArrayExpress < EMBL-EBI)托管了大量的芯片数据。同时还提供了同名 ArrayExpress R包在 Bioconductor 上,像 GEOquery 下载和整理来自 GEO 的芯片数据一样,下载和整理 ArrayExpress 上数据。

这篇教程用 E-MTAB-1940 数据集为例展示 ArrayExpress 数据操作过程,具体的代码解释看注释。

安装R包并导入

# 安装 ArrayExpress 包
BiocManager::install("ArrayExpress")

# 导入R包
library(ArrayExpress, quietly=TRUE)
library(tidyverse, quietly=TRUE)
library(affy, quietly=TRUE)

一键获取数据使用 ArrayExpress 函数。

# 一定要记得指定路径path, save参数表示运行结束后是否保留下载文件
eset <- ArrayExpress(accession="E-MTAB-1940", path=".", save=TRUE)

从我自身体验感觉这方式不好,下载速度太慢了。所以我自己去网站找到对应数据集,使用浏览器或者复制链接后在服务器用 wget 下载好。

使用 getAE 函数来下载数据,也可以用来读取手动下载好的本地数据。用 local=TRUE 表示读取本地下载好数据, sourcedir 是本地存储位置。

# 如果是下载数据,使用 type 参数控制下载哪些
#  默认 full 下载所有数据
# raw 下载原始数据
# processed 下载处理好数据
> ae <- getAE(accession="E-MTAB-1940", path=".", type="raw", local=TRUE, sourcedir=".")
Unpacking data files
Warning message:
In getAE(accession = "E-MTAB-1940", path = ".", type = "raw", local = TRUE,  :
  No processed data files found in directory .

> str(ae)
List of 8
 $ path            : chr "."
 $ rawFiles        : chr [1:86] "FR_196_U133_2.CEL" "FR_327_U133_2.CEL" "FRI_328GRI_b_U133_2.CEL" "FR_329_U133_2.CEL" ...
 $ rawArchive      : chr [1:6] "E-MTAB-1940.raw.1.zip" "E-MTAB-1940.raw.2.zip" "E-MTAB-1940.raw.3.zip" "E-MTAB-1940.raw.4.zip" ...
 $ processedFiles  : NULL
 $ processedArchive: chr(0) 
 $ sdrf            : chr "E-MTAB-1940.sdrf.txt"
 $ idf             : chr "E-MTAB-1940.idf.txt"
 $ adf             : chr "A-AFFY-44.adf.txt"

下载后用 ae2bioc 函数读取数据,用 methods 查看可用的方法。

> expr <- ae2bioc(ae)
> class(expr)
[1] "ExpressionFeatureSet"
attr(,"package")
[1] "oligoClasses"
> methods(class="ExpressionFeatureSet")
 [1] [                 [[                [[<-              $                
 [5] $<-               abstract          annotation        annotation<-     
 [9] assayData         assayData<-       backgroundCorrect bg               
[13] bg<-              bgSequence        boxplot           channel          
[17] channelNames      channelNames<-    classVersion      classVersion<-   
[21] coerce            combine           db                description      
[25] description<-     dim               dimnames          dimnames<-       
[29] dims              experimentData    experimentData<-  exprs            
[33] exprs<-           fData             fData<-           featureData      
[37] featureData<-     featureNames      featureNames<-    fvarLabels       
[41] fvarLabels<-      fvarMetadata      fvarMetadata<-    genomeBuild      
[45] geometry          getPlatformDesign getX              getY             
[49] hist              image             initialize        intensity        
[53] isCurrent         isVersioned       kind              manufacturer     
[57] MAplot            mm                mm<-              mmindex          
[61] mmSequence        normalize         notes             notes<-          
[65] paCalls           pData             pData<-           phenoData        
[69] phenoData<-       pm                pm<-              pmChr            
[73] pmindex           pmPosition        pmSequence        preproc          
[77] preproc<-         probeNames        probesetNames     protocolData     
[81] protocolData<-    pubMedIds         pubMedIds<-       rma              
[85] runDate           sampleNames       sampleNames<-     selectChannels   
[89] show              storageMode       storageMode<-     updateObject     
[93] updateObjectTo    varLabels         varLabels<-       varMetadata      
[97] varMetadata<-

rma 进行 RMA normalize得到ExpressionSet对象。

> rmae <- rma(expr)
Background correcting
Normalizing
Calculating Expression

像处理GEO芯片数据的 GEOquery 一样用 exprs 函数取得表达矩阵, pData 取得其他实验信息。

> probe_expr <- exprs(rmae) %>% as_tibble(rownames="probe_id")
> head(probe_expr, n=2)
# A tibble: 2 x 87
  probe_id FR_196_U133_2.C… FR_327_U133_2.C… FRI_328GRI_b_U1… FR_329_U133_2.C…
  <chr>               <dbl>            <dbl>            <dbl>            <dbl>
1 1007_s_…             9.99            10.3             10.4              9.92
2 1053_at              5.65             6.33             6.22             5.76
# … with 82 more variables: FR_46_U133_2.CEL <dbl>, FRI_47BEN_U133_2.CEL <dbl>,
# 省略后续输出

pdata <- pData(rmae) %>% as_tibble()

芯片可能以后用得会越来越少,但是如果有人经常进行这些数据挖掘的,可以更深入去学习,想要的建议把 affy 包的文档读一遍。像刚刚用到 rma 就是来自于 affy 包。


欢迎关注我的微信公众号 Hello BioInfo

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,783评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,360评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,942评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,507评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,324评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,299评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,685评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,358评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,652评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,704评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,465评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,318评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,711评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,991评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,265评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,661评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,864评论 2 335

推荐阅读更多精彩内容