幾種常用的差異分析方法簡介

幾種常用的差異分析方法簡介

如今在生物學研究中,差異分析越來越普遍,也有許多做差異分析的方法可供選擇。但是在實際應用中,大多數人不知道該使用哪種方法來處理自己的數據,所以今天我就來介紹下目前幾種常用的差異分析方法及其適用場景。

1.方差分析、T檢驗、卡方檢驗、秩和檢驗


preview
  • 其實核心的區別在于:數據類型不一樣。如果是定類和定類,此時應該使用卡方分析;如果是定類和定量,此時應該使用方差或者T檢驗。
  • 方差和T檢驗的區別在于,對于T檢驗的X來講,其只能為2個類別比如男和女。如果X為3個類別比如本科以下,本科,本科以上;此時只能使用方差分析。

進一步細分

preview

T檢驗


t檢驗(student t檢驗)是應用t分布的特征,將t作為檢驗的統計量來進行統計推斷方法。它對樣本要求較小(例如n<30)。

主要用途:

  • 樣本均數與總體均數的差異比較
  • 兩樣本均數的差異比較

單樣本t檢驗

單樣本t檢驗主要用于判斷樣本均數與總體均數是否存在顯著差異。
適用條件

已知一個總體均數
已知一個樣本均數及該樣本標準差
樣本正態分布或近似正態總體

實際應用中,當數據量足夠大時,對樣本正態分布要求不再嚴格。只要數據分布不是嚴重偏態,一般來說單樣本t檢驗都是適用的。

R語言中可以用t.test函數進行t檢驗

從某小學六年級抽取10名學生,其身高(單位:cm),是否認為該學校六年級平均身高130cm?

#生成數據
x <- c(130,120,130,110,130,135,129,124,130,134)
#t檢驗
t.test(x,mu = 130)

    One Sample t-test

data:  x
t = -1.1884, df = 9, p-value =
0.2651
alternative hypothesis: true mean is not equal to 130
95 percent confidence interval:
 121.8702 132.5298
sample estimates:
mean of x 
    127.2 
#結果顯示,P=0.2651>0.05。在統計學上說明樣本均數與總體均數沒有差別。

獨立樣本t檢驗

獨立樣本t檢驗主要檢驗兩個樣本均數及其所代表的總體之間差異是否顯著。

適用條件

  • 獨立性,各觀察值之間相關獨立
  • 正態性,各樣本均來自正態分布的總體
  • 方差齊性,各樣本所在總體的方差相等

方差齊性可以用car包leveneTest函數檢驗

leveneTest(y=,group =)

其中,y是兩組樣本組成的數據,group是兩組樣本的分組情況。

方差齊性檢驗之后,才可進行獨立樣本t檢驗。

用t.test(A,B,var.equal=TRUE,paired=FALSE)

A、B為數據集,var.equal=TRUE為方差齊性。paired=FALSE非配對樣本。

示例:

(虛構)有兩組學生(每組10人),一組采用傳統教育,一組采用素質教育。一學期后,兩組學生語文成績(滿分100)如下。問兩組學生成績之間差別是否顯著。

A <- c(85,84,95,73,77,65,85,93,90,91)
B <- c(87,96,77,80,79,96,93,82,84,86)
#方差齊性檢驗
#合并數據
y <- c(A,B)
#數據分組標簽
group=as.factor(c(rep(1,10),rep(2,10)))
#載入car包
library(car)
#方差齊性檢驗
leveneTest(y=y,group = group)
#結果顯示,P=0.5505>0.05。說明方差齊性。
Levene's Test for Homogeneity of Variance (center = median)
      Df F value Pr(>F)
group  1  0.3703 0.5505
      18  
#獨立樣本t檢驗
t.test(A,B,paired = FALSE)
#結果顯示P=0.5639。說明兩者沒有區別。
    Welch Two Sample t-test

data:  A and B
t = -0.589, df = 16.463, p-value = 0.5639
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -10.100024   5.700024
sample estimates:
mean of x mean of y 
     83.8      86.0 

配對樣本t檢驗

配對樣本t檢驗同樣檢驗兩個樣本均數及其所代表的總體之間差異是否顯著。

獨立樣本t檢驗與配對樣本t檢驗同屬于雙樣本t檢驗,不同點在于配對樣本t檢驗要求兩個樣本之間存在某些配對關系。

常見配對關系

同一樣本兩種不同處理方法的檢驗結果
同一樣本前后時間點的檢驗結果

適用條件

正態性

示例

有20名女性分為10對,試吃兩種藥。經過一段時間后,藥效如下。問兩種藥是否有區別

#生成數據
drug1 <- c(4.4,5,5.8,4.6,4.9,4.8,6,5.9,4.3,5.1)
drug2 <- c(6.2,5.2,5.5,5,4.4,5.4,5,6.4,5.8,6.2)
#配對樣本t檢驗
t.test(drug1,drug2,paired = TRUE)
#結果顯示,P=0.1575>0.05,不能說兩者存在顯著差別。
    Paired t-test

data:  drug1 and drug2
t = -1.5417, df = 9, p-value = 0.1575
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -1.0609306  0.2009306
sample estimates:
mean of the differences 
                  -0.43 

方差檢驗


方差分析(analysis of variance ,ANOVA)就是通過檢驗各總體的均值是否相等來判斷分類型自變量對數值型因變量是否有顯著影響。

示例

我們使用的是R里內置的“npk”數據集,該數據集由24行和5列數據組成,第一列代表區組(共6個),N、P和K分別代表氮、磷和鉀元素的使用情況,yield代表豌豆產量,該數據集主要是用來研究不同肥料對豌豆產量的影響。

fit <- aov(yield ~ N, data=npk)
fit <- aov(yield ~ N + block, data=npk)

卡方檢驗


卡方檢驗就是統計樣本的實際觀測值與理論推斷值之間的偏離程度,實際觀測值與理論推斷值之間的偏離程度就決定卡方值的大小,卡方值越大,越不符合;卡方值越小,偏差越小,越趨于符合,若兩個值完全相等時,卡方值就為0,表明理論值完全符合。

適用條件

1.所有的理論數T≥5并且總樣本量n≥40,用Pearson卡方進行檢驗.
2.如果理論數T<5但T≥1,并且n≥40,用連續性校正的卡方進行檢驗.
3.如果有理論數T<1或n<40,則用Fisher’s檢驗.

示例

判斷5種品牌啤酒的愛好者有無顯著差異:

img
x<-c(210,312,170,85,223)
chisq.test(x)
img
x<-matrix(c(46,18,6,8),ncol=2,nrow=2)
chisq.test(x)
chisq.test(x)$expected ###查看理論值
fisher.test(x)  ##進行fisher檢驗

秩和檢驗


秩和檢驗是對原假設的非參數檢驗,在不需要假設兩個樣本空間都為正態分布的情況下,測試它們的分布是否完全相同。

library(stats)
data("mtcars")
wilcox.test(mpg~am,data = mtcars)

幾種常用的R包

目前常用差異分析的R包有edgeR、limma、DESeq2

img
img

三種包的區別:

          1.limma包做差異分析要求數據滿足正態分布或近似正態分布,如基因芯片、TPM格式的高通量測序數據。
          2.通常認為Count數據不符合正態分布而服從泊松分布。對于count數據來說,用limma包做差異分析,誤差較大
          3.DESeq2、和 EdgeR都是基于count,然后兩個都是NB(negative binomial)但是在估計dispersion parameter的方法上面不一樣。
          4.limma,edgeR,DESeq2三大包基本是做轉錄組差異分析的金標準,大多數轉錄組的文章都是用這三個R包進行差異分析。
          5.edgeR差異分析速度快,得到的基因數目比較多,假陽性高(實際不差異,結果差異)。DESeq2差異分析速度慢,得到的基因數目比較少,假陰性高(實際差異,結果不差異)。
          6.需要注意的是制作分組信息的因子向量是,因子水平的前后順序,在R的很多模型中,默認將因子向量的第一個水平看作對照組

如果數據量大并且要求比較conservative的話可以所有方法都用下,然后取并集。

數據預處理


library("edgeR")
expr = read.csv("mRNA_exprSet.csv",sep = ',',header=T)  
head(expr)
expr = avereps(expr[,-1],ID = expr$X) # 對重復基因名取平均表達量,然后將基因名作為行名
expr = expr[rowMeans(expr)>1,] # 去除低表達的基因
library(stringr)
tumor <- colnames(expr)[as.integer(substr(colnames(expr),14,15)) < 10]
normal <- colnames(expr)[as.integer(substr(colnames(expr),14,15)) >= 10]

tumor_sample <- expr[,tumor]
normal_sample <- expr[,normal]

exprSet_by_group <- cbind(tumor_sample,normal_sample)
group_list <- c(rep('tumor',ncol(tumor_sample)),rep('normal',ncol(normal_sample)))

edgeR


對于edgeR的分析流程而言,我們需要輸入的數據包括:

  1. 表達矩陣(counts
  2. 分組信息(group
  3. 擬合信息(design):指明如何根據樣本的分組進行建模

edgeR默認使用 trimmed mean of M-values (TMM) 計算文庫的scale factor進行normalization,以最大程度地縮小樣本間基因表達量的log-fold change。這是因為TMM 法認為樣本間大部分的基因都沒有發生差異表達,而那些真正差異表達的基因并不會受到normalization的嚴重影響。如此一來,便將那些由于測序引起的差異表達基因的表達量給校正了,消除了一部分的假陽性。

data = exprSet_by_group
group_list = factor(group_list)
design <- model.matrix(~0+group_list)
rownames(design) = colnames(data)
colnames(design) <- levels(group_list)
DGElist <- DGEList( counts = data, group = group_list)
## Counts per Million or Reads per Kilobase per Million
keep_gene <- rowSums( cpm(DGElist) > 1 ) >= 2 ## 自定義
table(keep_gene)
DGElist <- DGElist[ keep_gene, , keep.lib.sizes = FALSE ]

DGElist <- calcNormFactors( DGElist )
DGElist <- estimateGLMCommonDisp(DGElist, design)##為所有基因都計算同樣的dispersion
DGElist <- estimateGLMTrendedDisp(DGElist, design)##根據不同基因的均值--方差之間的關系來計算dispersion,并擬合一個trended model
DGElist <- estimateGLMTagwiseDisp(DGElist, design)##計算每個基因的dispersion,并利用經驗性貝葉斯方法(empirical bayes)壓縮至Trend Didspersion。個人認為這一項相當于GLM中每個基因的beta值
#####################負二項式廣義對數線性模型
fit <- glmFit(DGElist, design)
results <- glmLRT(fit, contrast = c(-1, 1)) 
####################類似然負二項式廣義對數線性模型
fit <- glmQLFit(dge, design, robust = TRUE)        #擬合模型
lrt <- glmQLFTest(fit) 

nrDEG_edgeR <- topTags(results, n = nrow(DGElist))
nrDEG_edgeR <- as.data.frame(nrDEG_edgeR)
head(nrDEG_edgeR)

padj = 0.01 # 自定義
foldChange= 2 # 自定義
nrDEG_edgeR_signif  = nrDEG_edgeR[(nrDEG_edgeR$FDR < padj & 
                       (nrDEG_edgeR$logFC>foldChange | nrDEG_edgeR$logFC<(-foldChange))),]
nrDEG_edgeR_signif = nrDEG_edgeR_signif[order(nrDEG_edgeR_signif$logFC),]

如果沒有生物學重復

img
library(edgeR)
##跟DESeq2一樣,導入數據,預處理(用了cpm函數)
exprSet<- read.table(file = "test.txt", sep = "\t", header = TRUE, row.names = 1, stringsAsFactors = FALSE)
group_list <- factor(c(rep("Contral",1),rep("Treat",1)))

##設置分組信息,并做TMM標準化
exprSet <- DGEList(counts = exprSet, group = group_list)
bcv = 0.4  #設置BCV值
et <- exactTest(exprSet, dispersion=bcv^2)
write.csv(topTags(et, n = nrow(exprSet$counts)), 'result.csv', quote = FALSE)   #輸出主要結果

limma,DEseq2的代碼實現可以在https://blog.csdn.net/weixin_43700050/article/details/98085127找到。

在這里插入圖片描述

參考:

1.http://www.lxweimin.com/p/bb0bd72bc428.

2.https://zhuanlan.zhihu.com/p/57756620.

3.https://blog.csdn.net/weixin_43700050/article/details/98085127.

4.https://blog.csdn.net/u010608296/article/details/114135253?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control&dist_request_id=1328761.11124.16172439205851981&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control.edgeR/limma/DESeq2

5.http://www.lxweimin.com/p/17ae5bee7bb0

6.http://www.lxweimin.com/p/517167c50a5f

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內容