在統計上用來區分兩群族有無差異,常用的方法是 t-test 之類的方法, t-test 的原理是用觀察兩群樣本的分布來作判定是否有差異,而為了顯現族群的分布,適當的取樣是必需的(至少上百個sample), 但是microarray 實驗,通常沒有多少人可以拿出三五百萬來作一個實驗, 所以 limma 就被發展出來, 用以補足Microarray 傳統上 t-test 統計方法上的不足, limma 是一個線性的模型的方法概念上有點像ANOVA,不過原理我就不詳述了,而在應用上,目前我也只知道 R 上有 package, limma, 而且還出了 GUI 的界面,讓不會寫R 的使用者可以用選單的方法, raw data (.gpr or .cel) 餵進去, p-value 跑出來, 算是很成熟的演算法了. 不過也許太過 user freindly 了,反而讓我很傷腦筋. 最近我接了一個任務,要作一組分析,客戶指定要用 limma 來挑基因,不過,不是從 raw data 開始,我拿到的是一組已經處理過的數據(tab delimited text table), 可是 limma 可沒支援這種半生不熟的data 格式, 所以我花了一點時間,想了一個方法騙過 limma, 從中間插入.如果你也有相同的問題,希望我的方法,對你有幫助:
load limma 的 package
>library(limma)
接下來,讀取 data file,格式像這樣
S1 S2 S3 ... S7
gene1 1 2 2 ... 1
gene3 2 3 1 ... 0
以 Tab 分開. s1-s7是sample name
>raw <- read.table (file="c:/yourdata.txt",sep="\t",row.names=1,header=T)
然後把他假裝成 marray 產生的物件 ExpresssionSet, limma就可以把資料吃進去了!
> eset<-new("ExpressionSet",exprs=as.matrix(raw))
接下來就一樣了,先設定實驗設計模型, 然後套入linear model 及 contrast model
>design <- model.matrix (~-1+factor(c(1,1,1,1,2,2,2,2))
>colnames(design) <- c("test","control")
> fit <- lmFit(eset,design=design)
>contrast.matrix <-makeContrasts(test-control, levels=design)
>fit2<-contrasts.fit(fit,contrast.matrix)
然後用 empirical Bayes smoothing 的方法,求 p-values
>P <- eBayes(fit2)
這個就是你要的啦!
>P$p.value
##ReadMore##
load limma 的 package
>library(limma)
接下來,讀取 data file,格式像這樣
S1 S2 S3 ... S7
gene1 1 2 2 ... 1
gene3 2 3 1 ... 0
以 Tab 分開. s1-s7是sample name
>raw <- read.table (file="c:/yourdata.txt",sep="\t",row.names=1,header=T)
然後把他假裝成 marray 產生的物件 ExpresssionSet, limma就可以把資料吃進去了!
> eset<-new("ExpressionSet",exprs=as.matrix(raw))
接下來就一樣了,先設定實驗設計模型, 然後套入linear model 及 contrast model
>design <- model.matrix (~-1+factor(c(1,1,1,1,2,2,2,2))
>colnames(design) <- c("test","control")
> fit <- lmFit(eset,design=design)
>contrast.matrix <-makeContrasts(test-control, levels=design)
>fit2<-contrasts.fit(fit,contrast.matrix)
然後用 empirical Bayes smoothing 的方法,求 p-values
>P <- eBayes(fit2)
這個就是你要的啦!
>P$p.value
##ReadMore##
可以請問一下
回覆刪除quantile normalization的流程嗎?
是把.cel中的pm值取出來做排序再取mean
然後把mean放入原本的位置嗎?
可以請問一下
回覆刪除因為我現在發現了一個問題
如果我要把mean放回每個array中
可是有二個一樣的rank要怎麼放
如
array.1=1,2,2,4
mean=m1,m2,m3,m4
放回時…
array.1=m1,m2,m2,m3
or
array.1=m1,m3,m3,m4
還是別的
因為我是用r寫
所以在rank中的ties.method要寫成什麼呢?
我有測試…好像都不對…
不知道要如何解決…
如果方便的話…
是否有教我一下
他的擺法
謝謝
板主回覆:
回覆刪除是的, 因此所有 array 間的差異會被平均掉,只剩 Ranking order, Quantile normalization 是很暴力的方法,不過,超好用!
可以請問一下 我好像遇到處理相同檔案格式的問題
回覆刪除當我輸入
eset<-new("ExpressionSet",exprs=as.matrix(raw))
它跟我說
錯誤在getClass(Class, where = topenv(parent.frame())) :
"ExpressionSet" is not a defined class
請問這是什麼問題
感謝
看起來是他不認識 ExpressionSet 這個 Class, 他定義在Biobase 中, 通常執行R是會自動載入, 如果沒有,您可以用 library("Biobase") 把他加入!
回覆刪除請問一下為什麼算出來的 p value有兩個?? 結果如下:
回覆刪除MAP1D 1.393595e-05 1.793687e-08
NPAS1 2.126797e-06 4.343194e-10
MFAP3 8.151126e-04 9.757330e-01
可以再說明清楚一點嗎? ex. your R script.
刪除文中
回覆刪除P <- eBayes(fit)
fit 應為fit2
感謝指正,己經改過了!
刪除現在在用TCGA的DATA在分析,想請問一下做完quantile normalization(between microarray normalization)將不同病人的表現量資料分布拉齊後,還需要做within microarray normalization嗎?
回覆刪除通常 single-channel (e.g. Affymetrix) 只要作做一次 between array normalization, Signal 就可以直接上統計分析了。dual-channel 的就要看前端數值處理的流程了。
刪除想請問一下前輩,就是我設FDR = 0.05找到的DE genes,有五千多個,然後為了要建後續的蛋白質交互作用網路,我需要找co-express gene,於是我取前10%最顯著的基因群(500多個)去算PCC,回傳的matrix給我的PCC落在0.6~0.9,而且大部分都是0.8~0.9,個人覺得有點高得嚇人,然而我也取不顯著的五百個基因群去算PCC,發現落在0.05~0.5。主要是算出來的PCC高得有點讓人無法相信,但是又確認過quantile normalization沒做錯(用了preprocessCore跟limma裡面的都是回傳一樣的matrix)。想請問前輩看法??PCC這麼高是否有問題
回覆刪除PCC是指 Pearson correlation coefficient 嗎? 如果是的話我覺得還蠻有可能,主要還是看你的用來做分析的樣品的狀態,如果你是用Treat vs Control group 比的話,你的顯著基因在這兩個群組本來就高低的關係, 你用PCC 來看這群基因當然一定是highly correlation,你如果用的是Time cours, Stages, dosage dependent...系列型的Data, 會有比較好的效果,不過,個人覺得看R值來分群不太準,你可以用K-mean or SOM 來分,比較容找到co-expressed genes.
刪除lucas大大您好:
回覆刪除昨天繼續爬了一下文,http://blog.sciencenet.cn/blog-295006-403640.html
發現除了通常大家還會去挑logFC,普遍來說是挑>1.5還是>2呢? 我挑>1.5同時又顯著的畫出來的PCC matrix range :0.3~0.9了。
只是有一個問題是,上述網址文中的絕對表現值會挑>10,可是TCGA的mRNA express microarray的表現量都蠻低的,想請問lucas前輩是不是通常只要挑顯著性ANDlogFC做為判斷DE gene的依據呢?
用FC 來選基因有很大的問題,是 signal 的fold change 不代表 mRNA conc. 的fold change, 他會嚴重受到 probe design 的影響,我們通常只有在統計方法無法使用是才用FC選,FC >? 當然越高越好,表示表現差明顯,用1.5 or 2 也是可以的,反正是自由心証的數字,最後結果可以用就好.
刪除