Bioconductor 分析芯片數(shù)據(jù)教程


這是我在 The Bioinformatics Knowledgeblog 上看到的一篇教程吹菱,原文在這里威鹿,教程條理清晰姐浮,對我理解芯片數(shù)據(jù)分析流程幫助很大珠增,就把它翻譯了過來超歌。


介紹

芯片數(shù)據(jù)分析流程有些復雜砍艾,但使用 R 和 Bioconductor 包進行分析就簡單多了蒂教。本教程將一步一步的展示如何安裝 RBioconductor,通過 GEO 數(shù)據(jù)庫下載芯片數(shù)據(jù)脆荷, 對數(shù)據(jù)進行標準化凝垛,然后對數(shù)據(jù)進行質(zhì)控檢查,最后查找差異表達的基因蜓谋。教程示例安裝的各種依賴包和運行命令均是是在 Ubuntu 環(huán)境中運行的(版本: Ubuntu 10.04梦皮, R 2.121),教程的示例代碼和圖片在這里


安裝 R 和 Bioconductor 包

打開命令終端桃焕,先安裝 R 和 Bioconductor 的依賴包剑肯,然后安裝 R.

$ sudo apt-get install r-base-core libxml2-dev libcurl4-openssl-dev curl
$ R

之后在 R 環(huán)境中安裝 Bioconductor 包

> # 下載 Bioconductor 的安裝程序
> source("http://bioconductor.org/biocLite.R")
> # 安裝 Bioconductor 的核心包
> biocLite()
> # 安裝 GEO 包
> biocLite("GEOquery")

如果你沒有管理員權(quán)限,你需要將這些包安裝到你個人庫目錄中观堂。安裝 Bioconductor 需要一段時間让网,GEOquery 包也需要安裝,GEOquery 是 NCBI 存儲標準化的轉(zhuǎn)錄組數(shù)據(jù)的基因表達綜合數(shù)據(jù)庫 GEO 的接口程序师痕。


下載芯片數(shù)據(jù)

本教程中我們使用 Dr Andrew Browning 發(fā)表的數(shù)據(jù)集 GSE20986溃睹。HUVECs(人臍靜脈內(nèi)皮細胞)是從人胎兒臍帶血中提取出來的,通常用來研究內(nèi)皮細胞的病理生理機制胰坟。這個實驗設(shè)計中因篇,從捐獻者的眼組織中提取的虹膜、視網(wǎng)膜笔横、脈絡(luò)膜微血管內(nèi)皮細胞用來和 HUVEC 細胞進行比對竞滓,以便考查 HUVEC 細胞能否替代其他細胞作為研究眼科疾病的樣本。 GEO 頁面同時也包含了關(guān)于本實驗研究的其他信息吹缔。對于每組樣本有三次測量商佑,樣品分成四組 iris, retina, HUVEC, choroidal 。

實驗平臺是 GPL570 -- GEO 數(shù)據(jù)庫對人類轉(zhuǎn)錄組芯片 Affymetrix Human Genome U133 Plus 2.0 Array 的縮寫涛菠。通過 GSM 鏈接 GSM524662莉御,我們可以得到各個芯片的更多實驗條件信息撇吞。同一個實驗設(shè)計中的不同芯片的實驗條件應(yīng)該是相同的。不同細胞系的提取條件礁叔,細胞生長條件牍颈,RNA 提取程序,RNA 處理程序琅关,RNA 與探針雜交條件煮岁,用哪種儀器掃描芯片,這些數(shù)據(jù)都以符合 MIAME 標準的形式存儲著涣易。

對于每一個芯片画机,數(shù)據(jù)表中存儲著探針組和對應(yīng)探針組標準化之后的基因表達量值。表頭中提供了表達量值標準化所用的算法新症。本教程中使用 GC-RMA 算法進行數(shù)據(jù)標準化步氏,關(guān)于 GC-RMA 算法的詳細細節(jié)可以參考這篇文獻

首先徒爹,我們從 GEO 數(shù)據(jù)庫下載原始數(shù)據(jù)荚醒,導入 GEOquery 包,用它下載原始數(shù)據(jù)隆嗅,下載的原始數(shù)據(jù)約 53MB界阁。

> library(GEOquery)
> getGEOSuppFiles("GSE20986")

下載完成后,打開文件管理器胖喳,在啟動 R 程序的文件夾里可以看到當前文件夾下生成了一個 GSE20986 文件夾泡躯,可以直接查看文件夾里的內(nèi)容:

$ ls GSE20986/
filelist.txt GSE20986_RAW.tar

GSE20986_RAW.tar 文件是壓縮打包的 CEL(Affymetrix array 數(shù)據(jù)原始格式)文件。先解包數(shù)據(jù)丽焊,再解壓數(shù)據(jù)较剃。這些操作可以直接在 R 命令終端中進行:

> untar("GSE20986/GSE20986_RAW.tar", exdir="data")
> cels <- list.files("data/", pattern = "[gz]")
> sapply(paste("data", cels, sep="/"), gunzip)
> cels

芯片實驗信息整理

在對數(shù)據(jù)進行分析之前,我們需要先整理好實驗設(shè)計信息粹懒。這其實就是一個文本文件重付,包含芯片名字、此芯片上雜交的樣本名字凫乖。為了方便在 R 中 使用 simpleaffy 包讀取實驗信息文本文件确垫,需要先編輯好格式:

$ ls -1 data/*.CEL > data/phenodata.txt

將這個文本文件用編輯器打開,現(xiàn)在其中只有一列 CEL 文件名帽芽,最終的實驗信息文本需要包含三列數(shù)據(jù)(用 tab 分隔)删掀,分別是 Name, FileName, Target。本教程中 Name 和 FileName 這兩欄是相同的导街,當然 Name 這一欄可以用更加容易理解的名字代替披泪。

Target 這一欄數(shù)據(jù)是芯片上的樣本標簽,例如 iris, retina, HUVEC, choroidal搬瑰,這些標簽定義了那些數(shù)據(jù)是生物學重復以便后面的分析款票。

這個實驗信息文本文件最終格式是這樣的:

Name FileName Target
GSM524662.CEL GSM524662.CEL iris
GSM524663.CEL GSM524663.CEL retina
GSM524664.CEL GSM524664.CEL retina
GSM524665.CEL GSM524665.CEL iris
GSM524666.CEL GSM524666.CEL retina
GSM524667.CEL GSM524667.CEL iris
GSM524668.CEL GSM524668.CEL choroid
GSM524669.CEL GSM524669.CEL choroid
GSM524670.CEL GSM524670.CEL choroid
GSM524671.CEL GSM524671.CEL huvec
GSM524672.CEL GSM524672.CEL huvec
GSM524673.CEL GSM524673.CEL huvec

注意:每欄之間是使用 Tab 進行分隔的控硼,而不是空格!


載入數(shù)據(jù)并對其進行標準化

需要先安裝 simpleaffy 包艾少,simpleaffy 包提供了處理 CEL 數(shù)據(jù)的程序卡乾,可以對 CEL 數(shù)據(jù)進行標準化同時導入實驗信息(即前一步中整理好的實驗信息文本文件內(nèi)容),導入數(shù)據(jù)到 R 變量 celfiles 中:

> biocLite("simpleaffy")
> library(simpleaffy)
> celfiles <- read.affy(covdesc="phenodata.txt", path="data")

你可以通過輸入 ‘celfiles’ 來確定數(shù)據(jù)導入成功并添加芯片注釋(第一次輸入 ‘celfiles’ 的時候會進行注釋):

> celfiles
AffyBatch object
size of arrays=1164x1164 features (12 kb)
cdf=HG-U133_Plus_2 (54675 affyids)
number of samples=12
number of genes=54675
annotation=hgu133plus2
notes=

現(xiàn)在我們需要對數(shù)據(jù)進行標準化缚够,使用 GC-RMA 算法對 GEO 數(shù)據(jù)庫中的數(shù)據(jù)進行標準化幔妨,第一次運行的時候需要下載一些其他的必要文件:

> celfiles.gcrma <- gcrma(celfiles)
Adjusting for optical effect............Done.
Computing affinitiesLoading required package: AnnotationDbi
.Done.
Adjusting for non-specific binding............Done.
Normalizing
Calculating Expression

如果你想看標準化之后的數(shù)據(jù),輸入 celfiles.gcrma谍椅, 你會發(fā)現(xiàn)提示已經(jīng)不是 AffyBatch object 了误堡,而是 ExpressionSet object,是已經(jīng)標準化了的數(shù)據(jù):

> celfiles.gcrma
ExpressionSet (storageMode: lockedEnvironment)
assayData: 54675 features, 12 samples
element names: exprs
protocolData
sampleNames: GSM524662.CEL GSM524663.CEL ... GSM524673.CEL (12 total)
varLabels: ScanDate
varMetadata: labelDescription
phenoData
sampleNames: GSM524662.CEL GSM524663.CEL ... GSM524673.CEL (12 total)
varLabels: sample FileName Target
varMetadata: labelDescription
featureData: none
experimentData: use 'experimentData(object)'
Annotation: hgu133plus2

數(shù)據(jù)質(zhì)量控制

再進行下一步的數(shù)據(jù)分析之前雏吭,我們有必要對數(shù)據(jù)質(zhì)量進行檢查锁施,確保沒有其他的問題。首先思恐,可以通過對標準化之前和之后的數(shù)據(jù)畫箱線圖來檢查 GC-RMA 標準化的效果:

> # 載入色彩包
> library(RColorBrewer)
> # 設(shè)置調(diào)色板
> cols <- brewer.pal(8, "Set1")
> # 對標準化之前的探針信號強度做箱線圖
> boxplot(celfiles, col=cols)
> # 對標準化之后的探針信號強度做箱線圖沾谜,需要先安裝 affyPLM 包,以便解析 celfiles.gcrma 數(shù)據(jù)
> biocLite("affyPLM")
> library(affyPLM)
> boxplot(celfiles.gcrma, col=cols)
> # 標準化前后的箱線圖會有些變化
> # 但是密度曲線圖看起來更直觀一些
> # 對標準化之前的數(shù)據(jù)做密度曲線圖
> hist(celfiles, col=cols)
> # 對標準化之后的數(shù)據(jù)做密度曲線圖
> hist(celfiles.gcrma, col=cols)

數(shù)據(jù)標準化之前的箱線圖

標準化之前的箱線圖
標準化之前的箱線圖

數(shù)據(jù)標準化之后的箱線圖
標準化之后的箱線圖
標準化之后的箱線圖

數(shù)據(jù)標準化之前的密度曲線圖
標準化之前的密度曲線圖
標準化之前的密度曲線圖

數(shù)據(jù)標準化之后的密度曲線圖
標準化之后的密度曲線圖
標準化之后的密度曲線圖

通過這些圖我們可以看出這12張芯片數(shù)據(jù)之間差異不大胀莹,標準化處理將所有芯片信號強度標準化到具有類似分布特征的區(qū)間內(nèi)。為了更詳細地了解芯片探針信號強度婚温,我們可以使用 affyPLM 對單個芯片 CEL 數(shù)據(jù)進行可視化描焰。

> # 從 CEL 文件讀取探針信號強度:
> celfiles.qc <- fitPLM(celfiles)
> # 對芯片 GSM24662.CEL 信號進行可視化:
> image(celfiles.qc, which=1, add.legend=TRUE)
> # 對芯片 GSM524665.CEL 進行可視化
> # 這張芯片數(shù)據(jù)有些人為誤差
> image(celfiles.qc, which=4, add.legend=TRUE)
> # affyPLM 包還可以畫箱線圖
> # RLE (Relative Log Expression 相對表達量取對數(shù)) 圖中
> # 所有的值都應(yīng)該接近于零。 GSM524665.CEL 芯片數(shù)據(jù)由于有人為誤差而例外栅螟。
> RLE(celfiles.qc, main="RLE")
> # 也可以用 NUSE (Normalised Unscaled Standard Errors)作圖比較.
> # 對于絕大部分基因荆秦,標準差的中位數(shù)應(yīng)該是1。
> # 芯片 GSM524665.CEL 在這個圖中力图,同樣是一個例外
> NUSE(celfiles.qc, main="NUSE")

標準的芯片 AffyPLM 信號圖


標準的芯片 AffyPLM 信號圖
標準的芯片 AffyPLM 信號圖

存在人工誤差的芯片 AffyPLM 信號圖


存在人工誤差的芯片 AffyPLM 信號圖
存在人工誤差的芯片 AffyPLM 信號圖

CEL 數(shù)據(jù)的 RLE 圖
RLE (Relative Log Expression) 圖
RLE (Relative Log Expression) 圖

CEL 數(shù)據(jù)的 NUSE 圖


NUSE (Normalised Unscaled Standard Errors) 圖
NUSE (Normalised Unscaled Standard Errors) 圖

我們還可以通過層次聚類來查看樣本之間的關(guān)系:
> eset <- exprs(celfiles.gcrma)
> distance <- dist(t(eset),method="maximum")
> clusters <- hclust(distance)
> plot(clusters)

CEL 數(shù)據(jù)的層次聚類圖


層次聚類圖
層次聚類圖

圖形顯示步绸,與其他眼組織相比 HUVEC 樣品是單獨的一組,表現(xiàn)出組織類型聚集的一些特征吃媒,另外 GSM524665.CEL 數(shù)據(jù)在此圖中并不顯示為異常值瓤介。


數(shù)據(jù)過濾

現(xiàn)在我們可以對數(shù)據(jù)進行分析了,分析的第一步就是要過濾掉數(shù)據(jù)中的無用數(shù)據(jù)赘那,例如作為內(nèi)參的探針數(shù)據(jù)刑桑,基因表達無明顯變化的數(shù)據(jù)(在差異表達統(tǒng)計時也會被過濾掉),信號值與背景信號差不多的探針數(shù)據(jù)募舟。
下面的 nsFilter 參數(shù)是為了不刪除沒有 Entrez Gene ID 的位點祠斧,保留有重復 Entrez Gene ID 的位點:

> celfiles.filtered <- nsFilter(celfiles.gcrma, require.entrez=FALSE, remove.dupEntrez=FALSE)
> # 哪些位點被過濾掉了?為什么拱礁?
> celfiles.filtered$filter.log
$numLowVar
[1] 27307
 
$feature.exclude
[1] 62

我們可以看出有 27307 個探針位點因為無明顯表達差異(LowVar)被過濾掉琢锋,有 62 個探針位點因為是內(nèi)參而被過濾掉辕漂。


查找有表達差異的探針位點

現(xiàn)在有了過濾之后的數(shù)據(jù),我們就可以用 limma 包進行差異表達分析了吴超。首先钮热,我們要提取樣本的信息:

> samples <- celfiles.gcrma$Target
> # 檢查數(shù)據(jù)的分組信息
> samples
[1] "iris" "retina" "retina" "iris" "retina" "iris" "choroid"
[8] "choroid" "choroid" "huvec" "huvec" "huvec"
> # 將分組數(shù)據(jù)轉(zhuǎn)換為因子類型變量
> samples <- as.factor(samples)
> # 檢查轉(zhuǎn)換的因子變量
> samples
[1] iris retina retina iris retina iris choroid choroid choroid
[10] huvec huvec huvec
Levels: choroid huvec iris retina
> # 設(shè)置實驗分組
> design <- model.matrix(~0 + samples)
> colnames(design) <- c("choroid", "huvec", "iris", "retina")
> # 檢查實驗分組
> design
choroid huvec iris retina
1 0 0 1 0
2 0 0 0 1
3 0 0 0 1
4 0 0 1 0
5 0 0 0 1
6 0 0 1 0
7 1 0 0 0
8 1 0 0 0
9 1 0 0 0
10 0 1 0 0
11 0 1 0 0
12 0 1 0 0
attr(,"assign")
[1] 1 1 1 1
attr(,"contrasts")
attr(,"contrasts")$samples
[1] "contr.treatment"

現(xiàn)在我們將芯片數(shù)據(jù)進行了標準化和過濾,也有樣品分組和實驗分組信息烛芬,可以將數(shù)據(jù)導入 limma 包進行差異表達分析了:

> library(limma)
> # 將線性模型擬合到過濾之后的表達數(shù)據(jù)集上
> fit <- lmFit(exprs(celfiles.filtered$eset), design)
> # 建立對比矩陣以比較組織和細胞系
> contrast.matrix <- makeContrasts(huvec_choroid = huvec - choroid, huvec_retina = huvec - retina, huvec_iris <- huvec - iris, levels=design)
> # 檢查對比矩陣
> contrast.matrix
Contrasts
Levels huvec_choroid huvec_retina huvec_iris
choroid -1 0 0
huvec 1 1 1
iris 0 0 -1
retina 0 -1 0
> # 現(xiàn)在將對比矩陣與線性模型擬合隧期,比較不同細胞系的表達數(shù)據(jù)
> huvec_fits <- contrasts.fit(fit, contrast.matrix)
> # 使用經(jīng)驗貝葉斯算法計算差異表達基因的顯著性
> huvec_ebFit <- eBayes(huvec_fits)
> # 返回對應(yīng)比對矩陣 top 10 的結(jié)果
> # coef=1 是 huvec_choroid 比對矩陣, coef=2 是 huvec_retina 比對矩陣
> topTable(huvec_ebFit, number=10, coef=1)
ID logFC AveExpr t P.Value adj.P.Val
6147 204779_s_at 7.367947 4.171874 72.77016 3.290669e-15 8.985500e-11
7292 207016_s_at 6.934796 4.027229 57.37259 3.712060e-14 5.068076e-10
8741 209631_s_at 5.193313 4.003541 51.22423 1.177337e-13 1.071612e-09
26309 242809_at 6.433514 4.167462 48.52518 2.042404e-13 1.394247e-09
6828 205893_at 4.480463 3.544350 40.59376 1.253534e-12 6.845801e-09
20232 227377_at 3.670688 3.209217 36.03427 4.200854e-12 1.911809e-08
6222 204882_at -5.351976 6.512018 -34.70239 6.154318e-12 2.400711e-08
27051 38149_at -5.051906 6.482418 -31.44098 1.672263e-11 5.282592e-08
6663 205576_at 6.586372 4.139236 31.31584 1.741131e-11 5.282592e-08
6589 205453_at 3.623706 3.210306 30.72793 2.109110e-11 5.759136e-08
B
6147 20.25563
7292 19.44681
8741 18.96282
26309 18.70767
6828 17.75331
20232 17.01960
6222 16.77196
27051 16.08854
6663 16.05990
6589 15.92277

分析結(jié)果的各列數(shù)據(jù)含義

  • 第一列是探針組在表達矩陣中的行號;
  • 第二列“ID” 是探針組的 AffymatrixID赘娄;
  • 第三列“l(fā)ogFC”是兩組表達值之間以2為底對數(shù)化的的變化倍數(shù)(Fold change, FC)仆潮,由于基因表達矩陣本身已經(jīng)取了對數(shù),這里實際上只是兩組基因表達值均值之差遣臼;
  • 第四列“AveExpr”是該探針組所在所有樣品中的平均表達值性置;
  • 第五列“t”是貝葉斯調(diào)整后的兩組表達值間 T 檢驗中的 t 值;
  • 第六列“P.Value”是貝葉斯檢驗得到的 P 值揍堰;
  • 第七列“adj.P.Val”是調(diào)整后的 P 值鹏浅;
  • 第八列“B”是經(jīng)驗貝葉斯得到的標準差的對數(shù)化值。

如果要設(shè)置一個倍數(shù)變化閾值屏歹,并查看不同閾值返回了多少基因隐砸,可以使用 topTable 的 lfc 參數(shù),參數(shù)設(shè)置為 5,4,3,2 時返回的基因個數(shù):

> nrow(topTable(huvec_ebFit, coef=1, number=10000, lfc=5))
[1] 88
> nrow(topTable(huvec_ebFit, coef=1, number=10000, lfc=4))
[1] 194
> nrow(topTable(huvec_ebFit, coef=1, number=10000, lfc=3))
[1] 386
> nrow(topTable(huvec_ebFit, coef=1, number=10000, lfc=2))
[1] 1016
> # 提取表達量倍數(shù)變化超過 4 的探針列表
> probeset.list <- topTable(huvec_ebFit, coef=1, number=10000, lfc=4)

注釋差異分析結(jié)果的基因 ID

為了將探針集注釋上基因 ID 我們需要先安裝一些數(shù)據(jù)庫的包和注釋的包蝙眶,之后可以提取 topTable 中的探針 ID 并注釋上基因 ID:

> biocLite("hgu133plus2.db")
> library(hgu133plus2.db)
> library(annotate)
> gene.symbols <- getSYMBOL(probeset.list$ID, "hgu133plus2")
> results <- cbind(probeset.list, gene.symbols)
> head(results)
ID logFC AveExpr t P.Value adj.P.Val
6147 204779_s_at 7.367947 4.171874 72.77016 3.290669e-15 8.985500e-11
7292 207016_s_at 6.934796 4.027229 57.37259 3.712060e-14 5.068076e-10
8741 209631_s_at 5.193313 4.003541 51.22423 1.177337e-13 1.071612e-09
26309 242809_at 6.433514 4.167462 48.52518 2.042404e-13 1.394247e-09
6828 205893_at 4.480463 3.544350 40.59376 1.253534e-12 6.845801e-09
6222 204882_at -5.351976 6.512018 -34.70239 6.154318e-12 2.400711e-08
B gene.symbols
6147 20.25563 HOXB7
7292 19.44681 ALDH1A2
8741 18.96282 GPR37
26309 18.70767 IL1RL1
6828 17.75331 NLGN1
6222 16.77196 ARHGAP25
> write.table(results, "results.txt", sep="\t", quote=FALSE)

還有后續(xù)的 Simon Cockell 的分析差異表達的生物學意義教程季希,即 GO,kegg 等注釋幽纷,以及 Colin Gillespie 的差異表達分析可視化之火山圖教程式塌。


最后附上教程中的代碼,請在確保你的文件夾中有已經(jīng)編輯好的 phenodata.txt 文件之后再運行:

> # download the BioC installation routines
> source("http://bioconductor.org/biocLite.R")
> # install the core packages
> biocLite()
> # install the GEO libraries
> biocLite("GEOquery")
> library(GEOquery)
> getGEOSuppFiles("GSE20986")
> untar("GSE20986/GSE20986_RAW.tar", exdir="data")
> cels <- list.files("data/", pattern = "[gz]")
> sapply(paste("data", cels, sep="/"), gunzip)
> cels
> library(simpleaffy)
> celfiles<-read.affy(covdesc="phenodata.txt", path="data")
> celfiles
> celfiles.gcrma<-gcrma(celfiles)
> celfiles.gcrma
> # load colour libraries
> library(RColorBrewer)
> # set colour palette
> cols <- brewer.pal(8, "Set1")
> # plot a boxplot of unnormalised intensity values
> boxplot(celfiles, col=cols)
> # plot a boxplot of normalised intensity values, affyPLM required to interrogate celfiles.gcrma
> library(affyPLM)
> boxplot(celfiles.gcrma, col=cols)
> # the boxplots are somewhat skewed by the normalisation algorithm
> # and it is often more informative to look at density plots
> # Plot a density vs log intensity histogram for the unnormalised data
> hist(celfiles, col=cols)
> # Plot a density vs log intensity histogram for the normalised data
> hist(celfiles.gcrma, col=cols)
> # Perform probe-level metric calculations on the CEL files:
> celfiles.qc <- fitPLM(celfiles)
> # Create an image of GSM24662.CEL:
> image(celfiles.qc, which=1, add.legend=TRUE)
> # Create an image of GSM524665.CEL
> # There is a spatial artifact present
> image(celfiles.qc, which=4, add.legend=TRUE)
> # affyPLM also provides more informative boxplots
> # RLE (Relative Log Expression) plots should have
> # values close to zero.  GSM524665.CEL is an outlier
> RLE(celfiles.qc, main="RLE")
> # We can also use NUSE (Normalised Unscaled Standard Errors).
> # The median standard error should be 1 for most genes.
> # GSM524665.CEL appears to be an outlier on this plot too
> NUSE(celfiles.qc, main="NUSE")
> eset <- exprs(celfiles.gcrma)
> distance <- dist(t(eset),method="maximum")
> clusters <- hclust(distance)
> plot(clusters)
> celfiles.filtered <- nsFilter(celfiles.gcrma, require.entrez=FALSE, remove.dupEntrez=FALSE)
> # What got removed and why?
> celfiles.filtered$filter.log
> samples <- celfiles.gcrma$Target
> # check the results of this
> samples
> # convert into factors
> samples<- as.factor(samples)
> # check factors have been assigned
> samples
> # set up the experimental design
> design = model.matrix(~0 + samples)
> colnames(design) <- c("choroid", "huvec", "iris", "retina")
> # inspect the experiment design
> design
> library(limma)
> # fit the linear model to the filtered expression set
> fit <- lmFit(exprs(celfiles.filtered$eset), design)
> # set up a contrast matrix to compare tissues v cell line
> contrast.matrix <- makeContrasts(huvec_choroid = huvec - choroid, huvec_retina = huvec - retina, huvec_iris = huvec - iris, levels=design)
> # check the contrast matrix
> contrast.matrix
> # Now the contrast matrix is combined with the per-probeset linear model fit.
> huvec_fits <- contrasts.fit(fit, contrast.matrix)
> huvec_ebFit <- eBayes(huvec_fits)
> # return the top 10 results for any given contrast
> # coef=1 is huvec_choroid, coef=2 is huvec_retina
> topTable(huvec_ebFit, number=10, coef=1)
> nrow(topTable(huvec_ebFit, coef=1, number=10000, lfc=5))
> nrow(topTable(huvec_ebFit, coef=1, number=10000, lfc=4))
> nrow(topTable(huvec_ebFit, coef=1, number=10000, lfc=3))
> nrow(topTable(huvec_ebFit, coef=1, number=10000, lfc=2))
> # Get a list for probesets with a four fold change or more
> probeset.list <- topTable(huvec_ebFit, coef=1, number=10000, lfc=4)
> biocLite("hgu133plus2.db")
> library(hgu133plus2.db)
> library(annotate)
> gene.symbols <- getSYMBOL(probeset.list$ID, "hgu133plus2")
> results <- cbind(probeset.list, gene.symbols)
> write.table(results, "results.txt", sep="\t", quote=FALSE)

工具善其事友浸,必先利其器峰尝。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市收恢,隨后出現(xiàn)的幾起案子武学,更是在濱河造成了極大的恐慌,老刑警劉巖派诬,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劳淆,死亡現(xiàn)場離奇詭異,居然都是意外死亡默赂,警方通過查閱死者的電腦和手機沛鸵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人曲掰,你說我怎么就攤上這事疾捍。” “怎么了栏妖?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵乱豆,是天一觀的道長。 經(jīng)常有香客問我吊趾,道長宛裕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任论泛,我火速辦了婚禮揩尸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘屁奏。我一直安慰自己岩榆,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布坟瓢。 她就那樣靜靜地躺著勇边,像睡著了一般。 火紅的嫁衣襯著肌膚如雪折联。 梳的紋絲不亂的頭發(fā)上粒褒,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音崭庸,去河邊找鬼怀浆。 笑死,一個胖子當著我的面吹牛怕享,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播镰踏,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼函筋,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了奠伪?” 一聲冷哼從身側(cè)響起跌帐,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绊率,沒想到半個月后谨敛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡滤否,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年脸狸,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡炊甲,死狀恐怖泥彤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情卿啡,我是刑警寧澤吟吝,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站颈娜,受9級特大地震影響剑逃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜官辽,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一蛹磺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧野崇,春花似錦称开、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至扶镀,卻和暖如春蕴侣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背臭觉。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工昆雀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蝠筑。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓狞膘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親什乙。 傳聞我的和親對象是個殘疾皇子挽封,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

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