我們將微生物群落組成研究分為兩個主要部分:(1)分類多樣性、OTUS和類群的假設檢驗;(2)類群間差異分析。第一個成分主要屬于單變量群落分析。第二個成分可以進一步分為各種多變量技術,如聚類和排序,以及多變量差異分析的假設檢驗。
8.1 兩組間的差異性比較
在我們的vdr?/?小鼠研究中,目的之一是測試兩組(vdr?/?小鼠和野生型小鼠)在糞便和盲腸部位的差異。第6章利用糞便樣品計算了香農多樣性。這里,為了說明單變量群落分析,將使用各種測試統計數據比較計算出的香農多樣性。
①Two-Sample Welch’s t-Test
T統計量是由William Sealy Gosset在1908年提出的。兩樣本t檢驗用于檢驗兩總體均值相等。當測試統計數據服從正態分布時,它最常用。如果兩組具有相同的方差,則t統計量可按如下方式計算
首先,加載和轉置數據集。
> abund_table=read.csv("VdrGenusCounts.csv",row.names=1, check.names=FALSE)
> abund_table<-t(abund_table)
為了將數據集中的分組信息直接合并到比較中,我們需要進行數據管理。在數據集中,樣本ID和組信息是字符條紋。我們首先從那里提取它們。
> grouping<-data.frame(row.names=rownames(abund_table),t(as.data.frame (strsplit(rownames(abund_table),"_"))))
> grouping$Location <- with(grouping, ifelse(X3%in%"drySt-28F", "Fecal","Cecal"))
> grouping$Group <- with(grouping,ifelse(as.factor(X2)%in% c(11,12,13,14,15),c("Vdr-/-"), c("WT")))
> grouping <- grouping[,c(4,5)]
> grouping
Location? Group
5_15_drySt-28F? ? Fecal Vdr-/-
20_12_CeSt-28F? ? Cecal Vdr-/-
1_11_drySt-28F? ? Fecal Vdr-/-
2_12_drySt-28F? ? Fecal Vdr-/-
3_13_drySt-28F? ? Fecal Vdr-/-
4_14_drySt-28F? Fecal Vdr-/-
7_22_drySt-28F? ? Fecal? ? WT
8_23_drySt-28F? ? Fecal? ? WT
9_24_drySt-28F? ? Fecal? ? WT
19_11_CeSt-28F? ? Cecal Vdr-/-
21_13_CeSt-28F? ? Cecal Vdr-/-
22_14_CeSt-28F? ? Cecal Vdr-/-
23_15_CeSt-28F? ? Cecal Vdr-/-
25_22_CeSt-28F? ? Cecal? ? WT
26_23_CeSt-28F? ? Cecal? ? WT
27_24_CeSt-28F? ? Cecal? ? WT
第6章計算了香農多樣性。為了方便起見,這里重復一遍。
> library(vegan)
> H<-diversity(abund_table, "shannon")
制作了香農多樣性的數據框。
> df_H<-data.frame(sample=names(H),value=H,measure=rep("Shannon",length(H)))
然后,我們將數據框多樣性和分組相結合,形成一個新的數據框。
> df_G <-cbind(df_H, grouping)
> rownames(df_G)<-NULL
> df_G
sample value measure Location? Group
1? 5_15_drySt-28F 2.461 Shannon? ? Fecal Vdr-/-
2? 20_12_CeSt-28F 2.340 Shannon? ? Cecal Vdr-/-
3? 1_11_drySt-28F 2.228 Shannon? ? Fecal Vdr-/-
4? 2_12_drySt-28F 2.734 Shannon? ? Fecal Vdr-/-
5? 3_13_drySt-28F 2.077 Shannon? ? Fecal Vdr-/-
6? 4_14_drySt-28F 2.467 Shannon? ? Fecal Vdr-/-
7? 7_22_drySt-28F 1.777 Shannon? ? Fecal? ? WT
8? 8_23_drySt-28F 2.000 Shannon? ? Fecal? ? WT
9? 9_24_drySt-28F 1.972 Shannon? ? Fecal? ? WT
10 19_11_CeSt-28F 1.345 Shannon? Cecal Vdr-/-
11 21_13_CeSt-28F 2.016 Shannon? ? Cecal Vdr-/-
12 22_14_CeSt-28F 1.955 Shannon? ? Cecal Vdr-/-
13 23_15_CeSt-28F 1.614 Shannon? ? Cecal Vdr-/-
14 25_22_CeSt-28F 1.959 Shannon? ? Cecal? ? WT
15 26_23_CeSt-28F 2.271 Shannon? ? Cecal? ? WT
16 27_24_CeSt-28F 2.002 Shannon? ? Cecal? ? WT
接下來,我們將新數據框中的糞便數據子集提出
> Fecal_G<- subset(df_G, Location=="Fecal")
> Fecal_G
sample value measure Location? Group
1 5_15_drySt-28F 2.461 Shannon? ? Fecal Vdr-/-
3 1_11_drySt-28F 2.228 Shannon? ? Fecal Vdr-/-
4 2_12_drySt-28F 2.734 Shannon? ? Fecal Vdr-/-
5 3_13_drySt-28F 2.077 Shannon? ? Fecal Vdr-/-
6 4_14_drySt-28F 2.467 Shannon? ? Fecal Vdr-/-
7 7_22_drySt-28F 1.777 Shannon? ? Fecal? ? WT
8 8_23_drySt-28F 2.000 Shannon? ? Fecal? ? WT
9 9_24_drySt-28F 1.972 Shannon? ? Fecal? ? WT
現在數據已經準備好進行統計分析了。在進行假設檢驗之前,讓我們使用ggplot2包中的函數gglot()和plyr包中的ddply()函數來研究Shannon多樣性值的分布。
> library(ggplot2)
我們使用facet_grid將繪圖拆分成兩個面板。
> p<-ggplot(Fecal_G, aes(x=value))+
+? geom_histogram(color="black", fill="black")+
+? facet_grid(Group * .)
plyr包用于計算每個組的平均香農多樣性值。
> library(plyr)
> mu <- ddply(Fecal_G, "Group", summarise, grp.mean=mean(value))
> head(mu)
Group grp.mean
1 Vdr-/-? 2.393
2? ? WT? ? 1.916
將平均線添加到繪圖中。
> p+geom_vline(data=mu, aes(xintercept=grp.mean, color="red"),
+? linetype="dashed")
該分布(圖8.1)顯示VDR基因敲除導致更高的分集,因為該組的直方圖相對于WT組向右移動(更高的分集值)。為了檢驗香農多樣性無差異的零假設,使用Welch的t檢驗,結果是p值=0.01(t=3.6,df=5.9)。因此,我們拒絕無差異的零假設,而支持香農多樣性在兩組中不同的替代方案。
> fit_t <- t.test(value ~ Group, data=Fecal_G)
> fit_t
Welch Two Sample t-test
data:? value by Group
t = 3.6, df = 5.9, p-value = 0.01
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
0.1518 0.8026
sample estimates:
mean in group Vdr-/- mean in group WT
2.393? ? ? ? ? ? ? ? 1.916
② Wilcoxon Rank Sum Test(Wilcoxon秩和檢驗)
Wilcoxon秩和檢驗等價于Mann和Whitney(1947)提出的Mann-Whitney U檢驗。它是兩樣本t檢驗的一種非參數替代,它使用兩個獨立樣本數據的秩來檢驗零假設:兩個獨立樣本來自具有相同分布的總體(即,兩個總體相同)。與t-檢驗不同的是,Wilcoxon秩和檢驗不需要正態分布的假設,并且幾乎與t-檢驗一樣有效。因此,它在微生物組研究中得到了廣泛的應用。執行Wilcoxon秩和檢驗以求出檢驗統計量的值需要三個主要步驟:
步驟1. 給所有的觀察值分配排名,最小值的排名為1。如果值是平分的,則分配平局中涉及的排名的平均值。
步驟2. 對兩個樣本中任何一個樣本的秩進行求和。可以確定另一樣本中的秩和,因為所有秩的和等于N(N+1)/2,其中N是觀察的總數。如果兩個測試總體具有相同的分布,則秩R的平均值為? ? ? ? ? ? ? ? ? ? ?,標準偏差為? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?。當秩和R遠離均值時,Wilcoxon秩和檢驗拒絕兩個總體具有相同分布的假設。隨著兩個樣本量的增加,秩和統計量變得近似正常。我們可以通過標準化秩和來形成統計量。
步驟3.使用以下公式計算z檢驗統計量的值:
R?編號為n1的樣本的秩和;n1? ?找到秩和R的樣本大小(如樣本1);n2 另一個樣本大小(如樣本2)。
以下代碼用于進行Wilcoxon秩和檢驗。
> fit_w <- wilcox.test(value * Group, data=Fecal_G)
> fit_w
Wilcoxon rank sum test
data: value by Group
W = 15, p-value = 0.04
alternative hypothesis: true location shift is not equal to 0
圖8.1顯示樣本大小較小時分布是不對稱的。Wilcoxon秩和檢驗可能更合適,但由Wilcoxon秩和檢驗給出的p=0.04與Welcht檢驗在0.05顯著性水平上p=0.01得出的結論相同。
8.2 Comparisons of a Taxon of Interest Between Two Groups
①用Wilcoxon秩和檢驗比較相對豐度
當我們分析微生物組豐度數據時,從樣品中OTUs的豐度或類群的豐度來推斷生態系統的總豐度是不合適的。取而代之的是,我們可以利用樣本中的相對豐度來推斷其在生態系統中的分類單元的相對豐度。其背后的原因是它存在一個組成約束:樣本和中的所有微生物相對豐度為1,這導致組成數據駐留在單純形(Aitchison 1982,1986)而不是歐幾里德空間。因此,通常將數據標準化到一個共同的尺度,以便于跨組的分類單元豐度的比較。方法是將分類單元計數除以讀取總次數100,以將豐度轉換為樣本中讀取的百分比,將數據縮放為“每100次讀取的分類單元數量”。當我們選擇一個特定的單個分類單元進行跨組測試時,重要的是要確保指定的分類單元是基于假設或理論的,以減少夸大假陽性率的機會(即,在不應該拒絕零假設的時候拒絕它)。小鼠體內的VDR顯著影響β多樣性,并持續影響單個細菌分類群,如副細菌分類群(Wang等人。2016)。在本節中,我們使用糞便樣本說明Wilcoxon秩和檢驗來比較VDR小鼠數據集中的細菌類桿菌。
首先,檢查每個樣本的總豐度。
> apply(abund_table,1, sum)
5_15_drySt-28F 20_12_CeSt-28F 1_11_drySt-28F 2_12_drySt-28F 3_13_drySt-28F 4_14_drySt-28F 7_22_drySt-28F 8_23_drySt-28F 9_24_drySt-28F 19_11_CeSt-28F
1853? ? ? ? ? ? ? ? ? ? ? ? 3239? ? ? ? ? ? ? ? ? ? ? ? ? ?6211? ? ? ? ? ? ? ? ?5115? ? ? ? ? ? ? ?6016? ? ? ? ? ? ? ? ? ? ? ? ?2343? ? ? ? ? ? ? ? 2262? ? ? ? ? ? ? ? 7255? ? ? ? ? ? ? ? ? ? ?5502? ? ? ? ? ? ? ? ?5067
21_13_CeSt-28F 22_14_CeSt-28F 23_15_CeSt-28F 25_22_CeSt-28F 26_23_CeSt-28F? 27_24_CeSt-28F
2397? ? ? ? ? ? ? ? ? ? ? 3788? ? ? ? ? ? ? ? ? ? ? ? ? 9264? ? ? ? ? ? ? ? ? ?2072? ? ? ? ? ? ? ? ? ? 6903? ? ? ? ? ? ? ? ? ? ? ? ? ?6327
然后,通過將每個值除以樣本總豐度來計算相對豐度。
> relative_abund_table<-decostand(abund_table, method = "total")
檢查每個樣品的總豐度,使上述計算正確。
> apply(relative_abund_table, 1, sum)
5_15_drySt-28F 20_12_CeSt-28F 1_11_drySt-28F 2_12_drySt-28F 3_13_drySt-28F? 4_14_drySt-28F 7_22_drySt-28F 8_23_drySt-28F 9_24_drySt-28F 19_11_CeSt-28F
1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1? ? ? ? ? ? ? ? ? ? ? ? ? ? 1? ? ? ? ? ? ? ? ? ? ? ? ? ?1? ? ? ? ? ? ? ?1? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1? ? ? ? ? ? ? ? ? ? ? ? ? 1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1? ? ? ? ? ? ? ? ? ? 1? ? ? ? ? ? ? ? ? ? ? ? 1
21_13_CeSt-28F 22_14_CeSt-28F 23_15_CeSt-28F 25_22_CeSt-28F 26_23_CeSt-28F? ? 27_24_CeSt-28F
1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1? ? ? ? ? ? ? ? ? 1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1
請看一下轉換后的數據。
> relative_abund_table[1:16,1:8]
? ? ? ? ? ? ? ? ? ? ? ? Tannerella Lactococcus Lactobacillus Lactobacillus::Lactococcus
5_15_drySt-28F? 0.256881? ? 0.17593? ? ? 0.05073? ? ? ? ? ? ? ? ? 0.0005397
20_12_CeSt-28F? 0.020685? ? 0.22754? ? ? 0.18432? ? ? ? ? ? ? ? ? 0.0037048
1_11_drySt-28F? 0.088392? ? 0.36983? ? ? 0.06988? ? ? ? ? ? ? ? ? 0.0040251
2_12_drySt-28F? 0.113001? ? 0.10714? ? ? 0.14057? ? ? ? ? ? ? ? ? 0.0009775
3_13_drySt-28F? 0.165559? ? 0.39528? ? ? 0.05352? ? ? ? ? ? ? ? ? 0.0028258
4_14_drySt-28F? 0.172429? ? 0.20102? 0.08749? ? ? ? ? ? ? ? ? 0.0004268
7_22_drySt-28F? 0.141026? ? 0.38992? ? ? 0.28470? ? ? ? ? ? ? ? ? 0.0057471
8_23_drySt-28F? 0.072502? ? 0.27195? ? ? 0.32254? ? ? ? ? ? ? ? ? 0.0020675
9_24_drySt-28F? 0.077063? ? 0.41948? ? ? 0.18175? ? ? 0.0025445
19_11_CeSt-28F? 0.000000? ? 0.08328? ? ? 0.06513? ? ? ? ? ? ? ? ? 0.0013815
21_13_CeSt-28F? 0.002503? ? 0.07217? ? ? 0.26658? ? ? ? ? ? ? ? ? 0.0000000
22_14_CeSt-28F? 0.005280? ? 0.15312? ? ? 0.16711? ? ? ? ? ? ? ? ? 0.0007920
23_15_CeSt-28F? 0.003994? ? 0.52537? ? ? 0.19635? ? ? ? ? ? ? ? ? 0.0026986
25_22_CeSt-28F? 0.018340? ? 0.34122? ? ? 0.30164? ? ? ? ? ? ? ? ? 0.0043436
26_23_CeSt-28F? 0.011734? ? 0.20339? ? ? 0.19716? ? ? ? ? ? ? ? ? 0.0014486
27_24_CeSt-28F? 0.037142? ? 0.30235? ? ? 0.05769? ? ? ? ? ? ? ? ? 0.0020547
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Parasutterella Helicobacter Prevotella Bacteroides
5_15_drySt-28F? ? ? 0.0005397? ? 0.048030? 0.0652995? ? 0.147329
20_12_CeSt-28F? ? ? 0.0000000? ? 0.000000? 0.0021612? 0.010497
1_11_drySt-28F? ? ? 0.0001610? ? 0.000000? 0.0465303? ? 0.154242
2_12_drySt-28F? ? ? 0.0007820? ? 0.002542? 0.0193548? ? 0.073705
3_13_drySt-28F? ? ? 0.0003324? ? 0.003989? 0.0556848? ? 0.087434
4_14_drySt-28F? ? ? 0.0000000? ? 0.013658? 0.0610329? ? 0.085361
7_22_drySt-28F? ? ? 0.0000000? ? 0.001326? 0.0490716? ? 0.038019
8_23_drySt-28F? ? ? 0.0016540? ? 0.000000? 0.0122674? ? 0.058442
9_24_drySt-28F? ? ? 0.0001818? ? 0.000000? 0.0152672? ? 0.036714
19_11_CeSt-28F 0.0000000 0.000000 0.0000000 0.000000
21_13_CeSt-28F? ? ? 0.0000000? ? 0.000000? 0.0004172? ? 0.002086
22_14_CeSt-28F 0.0000000 0.000000 0.0007920 0.005280
23_15_CeSt-28F? ? ? 0.0002159? ? 0.000000? 0.0010794? ? 0.003346
25_22_CeSt-28F? ? ? 0.0000000? 0.000000? 0.0033784? ? 0.009170
26_23_CeSt-28F? ? ? 0.0002897? ? 0.000000? 0.0007243? ? 0.006664
27_24_CeSt-28F? ? ? 0.0000000? ? 0.000000? 0.0039513? ? 0.019282
我們感興趣的細菌類桿菌在第8欄。讓我們對這個細菌進行分類。
> (Bacteroides <-relative_abund_table[,8])
5_15_drySt-28F 20_12_CeSt-28F 1_11_drySt-28F 2_12_drySt-28F 3_13_drySt-28F??4_14_drySt-28F 7_22_drySt-28F 8_23_drySt-28F 9_24_drySt-28F 19_11_CeSt-28F
0.147329? ? ? ? ? ? ? ?0.010497? ? ? ? ? ? ? ?0.154242? ? ? ? ? ? ? ? ? 0.073705? ? ? 0.087434? ? ? ?0.085361? ? ? ? ? ? ? 0.038019? ? ? ? ? ? ? ? 0.058442? ? ? ? ? ? ? ? 0.036714? ? ? 0.000000
21_13_CeSt-28F 22_14_CeSt-28F 23_15_CeSt-28F 25_22_CeSt-28F 26_23_CeSt-28F?27_24_CeSt-28F
0.002086? ? ? ? ? ? ? ? ? 0.005280? ? ? ? ? ? ?0.003346? ? ? ? ? ? ? ? ?0.009170? ? ? ? ? ? ?0.006664? ? ? ? ? ? ? ? ?0.019282
現在,將類桿菌和分組數據框組合在一起,并對糞便樣本進行子集以供以后使用。
Bacteroides Location Group
1? 0.14732866? ? Fecal Vdr-/-
3? 0.15424247? ? Fecal Vdr-/-
4? 0.07370479? ? Fecal Vdr-/-
5? 0.08743351? ? Fecal Vdr-/-
6? 0.08536065? ? Fecal Vdr-/-
7? 0.03801945? ? Fecal? ? WT
8? 0.05844245? ? Fecal? ? WT
9? 0.03671392? ? Fecal? ? WT
boxlot()函數用于生成帶有組的簡單類桿菌箱線圖(圖8.2)。
Bacteroides Location Group
1? 0.14733? ? Fecal Vdr-/-
3? ? 0.15424? ? Fecal Vdr-/-
4? ? 0.07370? ? Fecal Vdr-/-
5? ? 0.08743? ? Fecal Vdr-/-
6? ? 0.08536? ? Fecal Vdr-/-
7? ? 0.03802? ? Fecal? ? WT
8? ? 0.05844? ? Fecal? ? WT
9? ? 0.03671? ? Fecal? ? WT
> boxplot(Bacteroides * Group,data=Fecal_Bacteroides_G, col=rainbow(2),main="Bacteroides in Vdr WT/KO mice")
以下代碼用于使用函數ggplot()生成箱線圖(圖8.3)。
> ggplot(Fecal_Bacteroides_G, aes(x=Group, y=Bacteroides,col=factor(Group)))+ geom_boxplot(notch=FALSE)
> ggplot(Fecal_Bacteroides_G, aes(x=Group, y=Bacteroides)) +
geom_boxplot(outlier.colour="red", outlier.shape=8, outlier.size=4) +
layer(stat_params = list(binwidth = 2))
箱線圖顯示野生型(WT,n=3)和VDR基因敲除小鼠(KO,n=5)的類群(Bacteriodes)。
> fit_w_b=wilcox.test(Bacteroides*Group,data=Fecal_Bacteroides_G)
> fit_w_b
Wilcoxon rank sum test
data: Bacteroides by Group
W = 15, p-value = 0.04
alternative hypothesis: true location shift is not equal to 0
上述Wolcoxon檢驗表明,Vdr?/?小鼠和WT小鼠的Bacteriodes相對豐度有統計學意義。我們可以得出結論,VDR基因敲除富集了Bacteriodes。
②有無紫杉醇的卡方檢驗比較(Chi-Square Test)
卡方檢驗,也被寫成X2 test,通常被用作皮爾遜卡方檢驗的縮寫,被提出,并由卡爾皮爾遜在1900年(皮爾遜1900)首次研究其性質。X2test應用于分類數據集,以檢驗觀察到的頻率分布是否與聲稱或理論分布不同(t擬合優度),并調查列聯表中的行變量和列變量是否彼此獨立(獨立性檢驗)。擬合優度的測試統計量如下所示:
作為經驗法則,它要求所有預期的細胞計數等于或超過5,以提供對卡方分布的充分近似(Wackerly等人。2002),盡管Cochran(1952)指出,在某些情況下,該值可能低至1。在本節中,我們使用盲腸樣本說明X2test來比較VDR小鼠數據集中的細菌Parabacteroides。為了說明X2檢驗,我們將Parabacteroides的豐度計數數據轉換為二進制變量。如果樣本中沒有分類單元,則豐度表中的Parabacteroides分類單元的計數數據將轉換為0,或者如果樣本中存在分類單元,則轉換為1。表8.1匯總了轉換后的數據。
首先,查看豐富的數據來鑒定細菌副細菌,并對該細菌進行亞群劃分。
> abund_table[1:16,1:27]
> (Parabacteroides <- abund_table[,27])
然后,將子集數據與分組數據框合并。
> Parabacteroides_G <-cbind(Parabacteroides, grouping)
> rownames(Parabacteroides_G)<-NULL
由于組合數據框既包括糞便樣本又包括盲腸樣本,因此讓我們從該數據框中將盲腸數據子集提出。
> Cecal_Parabacteroides_G <- subset(Parabacteroides_G, Location=="Cecal")
> Cecal_Parabacteroides_G
Parabacteroides Location? Group
2? ? ? ? ? ? ? ? 0? ? Cecal Vdr-/-
10? ? ? ? ? ? ? 0? ? Cecal Vdr-/-
11? ? ? ? ? ? ? 1? ? Cecal Vdr-/-
12? ? ? ? ? ? ? 4? ? Cecal Vdr-/-
13? ? ? ? ? ? ? 15? ? Cecal Vdr-/-
14? ? ? ? ? ? ? 5? ? Cecal? ? WT
15? ? ? ? ? ? ? 4? Cecal? ? WT
16? ? ? ? ? ? ? 6? ? Cecal? ? WT
重新編碼用于卡方檢驗的二進制變量“Present”。
> Cecal_Parabacteroides_G$Present <- ifelse((Cecal_Parabacteroides_G$Parabacteroides > 0), "Present","Absent")
> Cecal_Parabacteroides_G
Parabacteroides Location? Group Present
2? ? ? ? ? ? ? ? 0? ? Cecal Vdr-/-? Absent
10? ? ? ? ? ? ? 0? ? Cecal Vdr-/-? Absent
11? ? ? ? ? ? ? 1? ? Cecal Vdr-/- Present
12? ? ? ? ? ? ? 4? ? Cecal Vdr-/- Present
13? ? ? ? ? ? ? 15? ? Cecal Vdr-/- Present
14? ? ? ? ? ? ? 5? ? Cecal? ? WT Present
15? ? ? ? ? ? ? 4? ? Cecal? ? WT Present
16? ? ? ? ? ? ? 6? ? Cecal? ? WT Present
以下代碼用于進行卡方檢驗。
> library(MASS)
> tbl = table(Cecal_Parabacteroides_G$Group, Cecal_Parabacteroides_G$Present)
> tbl? ? ? ? ? ? ? ?
Absent Present
Vdr-/-? 2? ? ? 3
WT? ? ? ? ? 0? ? ? 3
> chisq.test(tbl)
Pearson's Chi-squared test with Yates' continuity correction
data:? tbl
X-squared = 0.18, df = 1, p-value = 0.7
Warning message:
In chisq.test(tbl) : Chi-squared approximation may be incorrect
表8.1顯示了這些比率的分布-5個vdr?/?盲腸樣本中有3個(60%)有Parabacteroides,而3個野生型樣本中有3個(100%)有Parabacteroides。對兩組發病率無差異的零假設進行卡方檢驗,P值為0.7(X-平方=0.18,df=1),不能排除兩組發病率無差異的零假設,得出兩組發病率無差異的結論。請注意,由于樣本量較小,輸出中會出現一條警告消息。通常,如果列聯表中的單元格值很小(例如<5),卡方檢驗可能不正確,則應用Fisher精確檢驗。
> fisher.test(tbl)
Fisher’s Exact Test for Count Data
data: tbl
p-value = 0.5
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
0.109? Inf
sample estimates:
odds ratio
Inf
Fisher‘s精確檢驗結果也不顯著,p值為0.5,與卡方檢驗結果一致。然而,這項測試很難在無限的置信區間內得出結論。
8.3 Comparisons Among More than Two Groups Using ANOVA( 兩組以上組間比較的方差分析)
①One-Way ANOVA(單因素方差分析)
方差分析(ANOVA)是由羅納德·費希爾(Ronald Fisher,1918)于1918年提出的,1925年費舍爾的著作“研究人員的統計方法”出版后,方差分析變得廣為人知。方差分析將兩樣本t-test推廣到兩組以上。方差分析的零假設是:比較組的所有均值相等。使用方差分析的分析依賴于基礎數據的正態性假設。然而,大多數微生物群落組成數據,特別是多變量數據并不是正態分布的,因此,本書僅使用方差分析比較α多樣性測度的單變量分析。對于多變量群落組成數據,要么采用非參數形式的方差分析,要么采用其他合適的統計方法。檢驗統計量的形成是通過傳統的平方和分割(方差分割)來實現的。樣本方差的定義方程為
總偏差因素比較采用F檢驗。F值是通過將處理之間的方差除以處理內的方差來獲得的。下面給出了單因素方差分析中的F檢驗統計量
為了說明方差分析在微生物群落組成研究中的作用,我們使用了我們的VDR?/?小鼠數據。本研究的一個假設是VDR狀態和腸道位置對腸道細菌群落沒有影響。我們使用方差分析來分析 Chao 1α多樣性測定來解決這一假設。復制了第6章中使用的代碼下面的Chao 1豐富度測定。結果在一個數據框中。合并用于方差分析檢驗的組信息。下面的代碼構成了一個chao1豐富性的數據框,并將組信息添加到該數據框中。
> CH=estimateR(abund_table)[2,]
> df_CH <-data.frame(sample=names(CH),value=CH,measure=rep("Chao1",length(CH)))
> df_CH_G <-cbind(df_CH, grouping)
> rownames(df_G)<-NULL
> df_CH_G
sample? value measure Location? Group
5_15_drySt-28F 5_15_drySt-28F? 94.75? Chao1? ? Fecal Vdr-/-
20_12_CeSt-28F 20_12_CeSt-28F? 59.80? Chao1? ? Cecal Vdr-/-
1_11_drySt-28F 1_11_drySt-28F? 77.00? Chao1? ? Fecal Vdr-/-
2_12_drySt-28F 2_12_drySt-28F 103.27? Chao1? ? Fecal Vdr-/-
3_13_drySt-28F 3_13_drySt-28F? 85.67? Chao1? ? Fecal Vdr-/-
4_14_drySt-28F 4_14_drySt-28F? 55.14? Chao1? ? Fecal Vdr-/-
7_22_drySt-28F 7_22_drySt-28F? 62.75? Chao1? ? Fecal? WT
8_23_drySt-28F 8_23_drySt-28F? 67.67? Chao1? ? Fecal? ? WT
9_24_drySt-28F 9_24_drySt-28F? 80.50? Chao1? ? Fecal? ? WT
19_11_CeSt-28F 19_11_CeSt-28F? 52.17? Chao1? ? Cecal Vdr-/-
21_13_CeSt-28F 21_13_CeSt-28F? 55.00? Chao1? ? Cecal Vdr-/-
22_14_CeSt-28F 22_14_CeSt-28F? 59.00? Chao1? ? Cecal Vdr-/-
23_15_CeSt-28F 23_15_CeSt-28F? 60.88? Chao1? ? Cecal Vdr-/-
25_22_CeSt-28F 25_22_CeSt-28F? 51.00? Chao1? ? Cecal? ? WT
26_23_CeSt-28F 26_23_CeSt-28F 112.86? Chao1? ? Cecal? ? WT
27_24_CeSt-28F 27_24_CeSt-28F? 78.06? Chao1? ? Cecal? ? WT
新的四個級別的組是通過位置和組的交互作用生成的。
> df_CH_G$Group4<- with(df_CH_G, interaction(Location,Group))
> df_CH_G
sample? value measure Location? Group? ? ? Group4
5_15_drySt-28F 5_15_drySt-28F? 94.75? Chao1? ? Fecal Vdr-/- Fecal.Vdr-/-
20_12_CeSt-28F 20_12_CeSt-28F? 59.80? Chao1? ? Cecal Vdr-/- Cecal.Vdr-/-
1_11_drySt-28F 1_11_drySt-28F? 77.00? Chao1? ? Fecal Vdr-/- Fecal.Vdr-/-
2_12_drySt-28F 2_12_drySt-28F 103.27? Chao1? ? Fecal Vdr-/- Fecal.Vdr-/-
3_13_drySt-28F 3_13_drySt-28F? 85.67? Chao1? ? Fecal Vdr-/- Fecal.Vdr-/-
4_14_drySt-28F 4_14_drySt-28F? 55.14? Chao1? ? Fecal Vdr-/- Fecal.Vdr-/-
7_22_drySt-28F 7_22_drySt-28F? 62.75? Chao1? ? Fecal? ? WT? ? Fecal.WT
8_23_drySt-28F 8_23_drySt-28F? 67.67? Chao1? ? Fecal? ? WT? ? Fecal.WT
9_24_drySt-28F 9_24_drySt-28F? 80.50? Chao1? ? Fecal? ? WT? ? Fecal.WT
19_11_CeSt-28F 19_11_CeSt-28F? 52.17? Chao1? ? Cecal Vdr-/- Cecal.Vdr-/-
21_13_CeSt-28F 21_13_CeSt-28F? 55.00? Chao1? ? Cecal Vdr-/- Cecal.Vdr-/-
22_14_CeSt-28F 22_14_CeSt-28F? 59.00? Chao1? ? Cecal Vdr-/- Cecal.Vdr-/-
23_15_CeSt-28F 23_15_CeSt-28F? 60.88? Chao1? ? Cecal Vdr-/- Cecal.Vdr-/-
25_22_CeSt-28F 25_22_CeSt-28F? 51.00? Chao1? ? Cecal? ? WT? ? Cecal.WT
26_23_CeSt-28F 26_23_CeSt-28F 112.86? Chao1? ? Cecal? ? WT? ? Cecal.WT
27_24_CeSt-28F 27_24_CeSt-28F? 78.06? Chao1? ? Cecal? ? WT? ? Cecal.WT
使用boxplot()探索Chao1指數(圖8.4)。
> boxplot(value*Group4, data=df_CH_G, col=rainbow(4), main="Chao1 index")
下面的ggplot()生成高質量的框圖以供發表使用(圖8.5)。
> p <- ggplot(df_CH_G, aes(x=Group4, y=value),col=rainbow(4), main="Chao1 index") + geom_boxplot()
> p + coord_flip()> ggplot(df_CH_G, aes(x=Group4, y=value,col=factor(Group4))) +
?+ geom_boxplot(notch=FALSE)
除了目視檢查底層數據的正態性外,還可以測試方差的均勻性。Sokal和Rohlf(2011)描述了三個這樣的檢驗:Bartlett的同質性檢驗、Hartley的Fmaxtest和log-anova檢驗,或SchefféBox檢驗。為了繼續使用方差分析進行驗證,我們必須首先檢驗方差的均勻性。軟件R提供兩個測試:Bartlett測試和Fligner-Killeen測試。為了說明方差的均勻性檢驗,我們使用了來自糞便和盲腸位置的Vdr?/?和WT小鼠數據的Chao 1豐富度度量。零假設(H0)是四組中的所有方差都是相同的。我們從Bartlett測驗開始。為了方便處理Bartlett檢驗,我們使用dplyr包中select()函數來選擇相關的group and Chao 1值列。
> library(dplyr)
> df_CH_G4 <- select(df_CH_G, Group4,value)
> df_CH_G4
Group4? value
5_15_drySt-28F Fecal.Vdr-/-? 94.75
20_12_CeSt-28F Cecal.Vdr-/-? 59.80
1_11_drySt-28F Fecal.Vdr-/-? 77.00
2_12_drySt-28F Fecal.Vdr-/- 103.27
3_13_drySt-28F Fecal.Vdr-/-? 85.67
4_14_drySt-28F Fecal.Vdr-/-? 55.14
7_22_drySt-28F? ? Fecal.WT? 62.75
8_23_drySt-28F? ? Fecal.WT? 67.67
9_24_drySt-28F? ? Fecal.WT? 80.50
19_11_CeSt-28F Cecal.Vdr-/-? 52.17
21_13_CeSt-28F Cecal.Vdr-/-? 55.00
22_14_CeSt-28F Cecal.Vdr-/-? 59.00
23_15_CeSt-28F Cecal.Vdr-/-? 60.88
25_22_CeSt-28F? ? Cecal.WT? 51.00
26_23_CeSt-28F? ? Cecal.WT 112.86
27_24_CeSt-28F? ? Cecal.WT? 78.06
下面的R代碼執行方差的同質性的Bartlett 檢驗:
> bartlett.test(df_CH_G4, Group4)
Bartlett test of homogeneity of variances
data: df_CH_G4
Bartlett’s K-squared = 62, df = 1, p-value = 3e-15
> qchisq(0.95, 1)
?[1] 3.841
該函數給出了統計檢驗的K平方值和p值。它表明,在5%的水平上可以拒絕零假設。或者,我們可以將Bartlett的K平方與卡方表格的值進行比較,在qchisq()函數中使用相同級別的α和自由度。如果X平方>Bartlett‘sK平方,我們接受零假設H0(方差齊性),否則拒絕零假設。因為卡方小于Bartlett的K平方,所以我們拒絕零假設H0,并得出方差不相同的結論。我們現在使用Fligner-Killeen檢驗來檢驗同方差。如下所示的語法非常相似。
> fligner.test(df_CH_G4, Group4)
Fligner-Killeen test of homogeneity of variances
data: df_CH_G4
Fligner-Killeen:med chi-squared = 21, df = 1, p-value = 6e-06
結論與Bartlett檢驗相似:方差不同。然而,為了說明的目的,我們繼續對數據進行方差分析,而不考慮方差的齊性檢驗結果。以下R碼符合該模型:
> fit = lm(formula = value*Group4,data=df_CH_G)
然后對方差分析模型進行了分析
> anova (fit)
Analysis of Variance Table
Response: value
Df Sum Sq Mean Sq F value Pr(>F)
Group4? ? 3? 1926? ? 642? ? 2.19? 0.14
Residuals 12? 3513? ? 293? ? ?
或者只使用以下簡潔的R代碼:函數aov()嵌套在summary()函數中。
> summary(aov(value~Group4, data=df_CH_G))
Df Sum Sq Mean Sq F value Pr(>F)
Group4? ? ? 3? 1926? ? 642? ? 2.19? 0.14
Residuals? 12? 3513? ? 293
您可能還想使用下面的R代碼輸出截取結果。
> aov_fit <- aov(value*Group4,data=df_CH_G)
> summary(aov_fit, intercept=T)
該函數的輸出是一個經典的方差分析表。
Df Sum Sq Mean Sq F value Pr(>F)
(Intercept)? 1? 83450? 83450? 285.08? 1e-09 ***
Group4? ? ? 3? 1926? ? 642? ? 2.19? 0.14? ?
Residuals? 12? 3513? ? 293? ? ? ? ? ? ? ? ?
---
Signif. codes:? 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
當p值>0.05時,我們接受零假設H0:這四個均值沒有什么不同。您還可以將計算的F值與表格中的F值進行比較:
> qf(0.95, 12, 3)
[1] 8.745
因為列表的F值大于計算的F值,所以我們接受零點假設。方差分析的結果有點亂七八糟。您可以使用broom包來獲得整齊、信息更豐富的表格。
> library(broom)
> tidy(aov_fit)
term df sumsq meansq statistic p.value
1? ? Group4? 3? 1926? 641.9? ? 2.193? 0.1418
2 Residuals 12? 3513? 292.7? ? ? ? NA? ? ? NA
> augment(aov_fit)
? ? ? .rownames? ? ? ? ? ? ?value? ? ? Group4? ? ? ? ?.fitted? ?.se.fit? ? ?.resid? ? ? ? .hat? ?.sigma? ? ?.cooksd? ? ? ?.std.resid
1? ? 5_15_drySt-28F? ? 94.75? ? ?Fecal.Vdr-/-? ? 83.17? ? 7.651? 11.584? ? 0.2000? 17.44? ? 0.0358109? ? ?? 0.7570
2? ? 20_12_CeSt-28F? ?59.80? ? ?Cecal.Vdr-/-? ? 57.37? ?7.651? ?2.432? ? ?0.2000? ?17.85? ?0.0015781? ??? ?0.1589
3? ? 1_11_drySt-28F? ? ?77.00? ? ?Fecal.Vdr-/-? ? 83.17? ?7.651? ?-6.166? ? 0.2000? ?17.75? ?0.0101485? ? ?? -0.4030
4? ? 2_12_drySt-28F? ?103.27? ? ?Fecal.Vdr-/-? ? 83.17? ?7.651? ?20.106? ?0.2000? ?16.53? ?0.1078934? ? ? ?1.3139
5? ? 3_13_drySt-28F? ? 85.67? ? ? Fecal.Vdr-/-? ? 83.17? 7.651? ? 2.500? ? ?0.2000? ? 17.85? 0.0016683? ? ? ?0.1634
6? ? 4_14_drySt-28F? ? 55.14? ? ? Fecal.Vdr-/-? ? ?83.17? 7.651? -28.024? ?0.2000? ? 15.17? 0.2095941? ? ?-1.8313
7? ? 7_22_drySt-28F? ? 62.75? ? ? Fecal.WT? ? ? ? 70.31? ?9.878? ?-7.556? ?0.3333? ? ?17.65? ?0.0365658? ?- 0.5409
8? ? 8_23_drySt-28F? ? 67.67? ? ? Fecal.WT? ? ? ?70.31? ?9.878? ?-2.639? ? 0.3333? ? ?17.84? ?0.0044605? ? -0.1889
9? ? 9_24_drySt-28F? ? 80.50? ? ? Fecal.WT? ? ? 70.31? ? 9.878? ? 10.194? ?0.3333? ? 17.47? ?0.0665687? ? 0.7298
10? 19_11_CeSt-28F? ?52.17? ? ?Cecal.Vdr-/-? ? 57.37? ?7.651? ? -5.202? ?0.2000? ? ?17.78? ?0.0072213? ?-0.3399
11? 21_13_CeSt-28F? ?55.00? ? ?Cecal.Vdr-/-? ?57.37? ? 7.651? ? -2.368? ?0.2000? ? ? 17.85? ?0.0014970? ?-0.1548
12? 22_14_CeSt-28F? 59.00? ? ? Cecal.Vdr-/-? ? 57.37? ? 7.651? ?1.632? ?0.2000? ? ? 17.86? ?0.0007105? ? ?0.1066
13? 23_15_CeSt-28F? 60.88? ? ?Cecal.Vdr-/-? ? 57.37? ? 7.651? ? 3.507? 0.2000? ? ? ?17.83? ?0.0032819? ? ?0.2292
14? 25_22_CeSt-28F? 51.00? ? ? Cecal.WT? ? ? ?80.64? ?9.878? ?-29.639 0.3333? ? ? 14.13? ? 0.5626776? ??-2.1217
15? 26_23_CeSt-28F? 112.86? ? Cecal.WT? ? ? 80.64? ? ?9.878? ?32.218? 0.3333? ? ? 13.33? ? 0.6648948? ??2.3063
16? 27_24_CeSt-28F? 78.06? ? ?Cecal.WT? ? ? ?80.64? ? 9.878? ? -2.580? ?0.3333? ? ? 17.84? ? 0.0042631? ?-0.1847
> glance(aov_fit)
? ?r.squared? ?adj.r.squared? ?sigma? statistic? ?p.value? ?df? ?logLik? ? AIC? ? ?BIC? ? ?deviance? ??df.residual
1? ? 0.3541? ? ? ? 0.1926? ? ? ? ?17.11? ? 2.193? ? 0.1418? ? 4? ? -65.84? ?141.7? ?145.5? ? 3513? ? ? ? ? ?12
②兩兩比較和Tukey多重比較
方差分析的結果給出了組間差異的總體檢驗(在這種情況下,4個組分別使用糞便、盲腸、Vdr?/?和WT組合)。我們的目的也是測試與Chao-1豐富度相關的每對差異。下面的步驟是為了說明R中的成對t檢驗和Tukey的即席多重比較的能力。讓我們對所有四組進行未經調整的成對t檢驗。對于此測試,R中的默認設置是使用Holm方法作為后期調整p值,因此要獲得未調整的p值,您需要指定p.adjust=“None”。R的默認值是假設方差齊次,因此不需要指定池。Sd=T。如果您的數據具有不等的方差,則需要使用pool.sd=F。
> #Pairwise tests of mean differences
> pairwise.t.test(df_CH_G$value, df_CH_G$Group4,p.adjust="none",pool.sd=T)
Pairwise comparisons using t tests with pooled SD
data:? df_CH_G$value and df_CH_G$Group4
Cecal.Vdr-/- Fecal.Vdr-/- Cecal.WT
Fecal.Vdr-/- 0.03? ? ? ? -? -
Cecal.WT? ? 0.09? ? ? 0.84? ? ? ? -
Fecal.WT? ? 0.32? ? ? ? 0.32? ? ? ? 0.47? ?
P value adjustment method: none
如果我們不對p值進行任何調整,則糞便vdr?/?和盲腸vdr?/?之間存在統計學差異,盲腸wt和盲腸vdr?/?之間在統計學上略有差異。這些不同之處在上面的框圖中可見一斑。正如我們注意到的,p.adjust()函數嵌套在pairwise.t.test()函數中。這是一個基本且非常有用的R函數。它可以用來控制家族I型誤差。P.adjust()函數可以嵌套在其他函數中,也可以獨立調用。在獨立調用中,語法如下:p.adjust(p, method = p.adjust.methods, n = length(p))。?其中,p=p值的數值向量,method=校正方法,n=比較次數,必須至少是長度(P)。調整方式包括c(“Bonferroni”、“Holm”、“Hochberg”、“Hommel”、“BH”、“by”、“FDR”、“None”)。其中“bonferroni”是將p值乘以比較次數的Bonferroni校正;“Holm”、“Hochberg”、“Hommel”、“BH”、“by”、“FDR”是指Holm(1979)、Hochberg(1988)、Hommel(1988)、Benjamini和Hochberg(1995)以及Benjamini和Yekutieli(2001)的別名,而“FDR”是指Holm(1979)、Hochberg(1988)、Hommel(1988)和Benjamini and Yekutieli(2001)的別名。它們是不那么保守的修正。
> #conservative Bonferroni adjustment
> pairwise.t.test(df_CH_G$value, df_CH_G$Group4, p.adjust="bonferroni", pool. sd = T)
Pairwise comparisons using t tests with pooled SD
data:? df_CH_G$value and df_CH_G$Group4
Cecal.Vdr-/- Fecal.Vdr-/- Cecal.WT
Fecal.Vdr-/- 0.2? ? ? ? ? -? -
Cecal.WT? ? 0.5? ? ? ? ? 1.0? ? ? ? ? -
Fecal.WT? ? 1.0? ? ? 1.0? ? ? ? ? 1.0? ?
P value adjustment method: bonferroni
> #Holm method
> pairwise.t.test(df_CH_G$value, df_CH_G$Group4, p.adjust="holm",pool.sd = T)
Pairwise comparisons using t tests with pooled SD
data:? df_CH_G$value and df_CH_G$Group4
? ? ? ? ? ? ? ? ? ? Cecal.Vdr-/- Fecal.Vdr-/- Cecal.WT
Fecal.Vdr-/- 0.2 - -
Cecal.WT? ? 0.4? ? ? ? ? 1.0? ? ? ? ? -
Fecal.WT? ? 1.0? ? ? ? ? 1.0? ? ? ? ? 1.0
P value adjustment method: holm
> #Benjamini & Hochberg(BH)
> pairwise.t.test(df_CH_G$value, df_CH_G$Group4, p.adjust="BH", pool.sd = T)
Pairwise comparisons using t tests with pooled SD
data:? df_CH_G$value and df_CH_G$Group4
Cecal.Vdr-/- Fecal.Vdr-/- Cecal.WT
Fecal.Vdr-/- 0.2? ? ? ? ? -? -
Cecal.WT? ? 0.3? ? ? ? ? 0.8? ? ? ? ? -
Fecal.WT? ? 0.5? ? ? ? ? 0.5? ? ? ? ? 0.6? ?
P value adjustment method: BH
> #Benjamini & Yekutieli
> pairwise.t.test(df_CH_G$value, df_CH_G$Group4, p.adjust="BY", pool.sd = T)
Pairwise comparisons using t tests with pooled SD
data:? df_CH_G$value and df_CH_G$Group4
Cecal.Vdr-/- Fecal.Vdr-/- Cecal.WT
Fecal.Vdr-/- 0.5? ? ? ? ? -? -
Cecal.WT? ? 0.6? ? ? ? ? 1.0? ? ? ? ? -
Fecal.WT? ? 1.0? ? ? ? ? 1.0? ? ? ? ? 1.0? ?
P value adjustment method: BY
上述所有四個調整都沒有給出兩兩比較的顯著差異。保守的Bonferroni和Benjamini&Yekutieli調整最大p值。用Benjamini&Hochberg方法比較也不顯著,但調整后的p值較小。在這種情況下,Benjamini&Hochberg方法更為強大。Benjamini&Hochberg(BH)和Benjamini&Yekutieli(BY)方法都用于調整“錯誤發現率”。實際上,這并不是對家庭錯誤的真正控制。錯誤發現率方法得到相同的結果:所有的配對比較都沒有顯著差異。接下來,讓我們展示如何使用TukeyHSD()函數對平均值進行Tukey多重比較,并獲得它們的置信區間。調用此函數的方式類似于Summary()函數。它將原始方差分析計算中的變量作為其參數之一(圖8.6)。
> #Tukey multiple comparisons of means
> TukeyHSD(aov_fit, conf.level=.95)
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = value ~ Group4, data = df_CH_G)
$Group4
diff? ? lwr? upr? p adj
Fecal.Vdr-/--Cecal.Vdr-/-? 25.798? -6.328 57.92 0.1334
Cecal.WT-Cecal.Vdr-/-? 23.270 -13.825 60.37 0.2935
Fecal.WT-Cecal.Vdr-/-? 12.937 -24.159 50.03 0.7328
Cecal.WT-Fecal.Vdr-/-? -2.528 -39.624 34.57 0.9969
Fecal.WT-Fecal.Vdr-/-? -12.861 -49.957 24.23 0.7362
Fecal.WT-Cecal.WT? ? ? ? -10.333 -51.807 31.14 0.8792
> plot(TukeyHSD(aov(df_CH_G$value~df_CH_G$Group4), conf.level=.95))
此圖表示所有可能的成對測試和p值,以及95%的置信區間。可以根據您的選擇更改默認的95%置信級別。由于所有置信線均為0,因此對于此示例,使用Tukey多重比較進行調整后沒有顯著不同的項。
8.4 Comparisons Among More than Two Groups Using Kruskal-Wallis Test( 使用Kruskal-Wallis檢驗對兩組以上人群進行比較)
①?Kruskal-Wallis Test
以William Kruskal和W.Allen? Wallis命名的Kruskal-Wallis檢驗或單因素秩和方差分析是檢驗樣本是否來自同一分布的非參數方法。Kruskal-Wallis檢驗的參數等價性是單向方差分析。它將Mann-Whitney U檢驗擴展到兩組以上。Kruskal-Wallis檢驗的零假設是各組的平均等級相同。與類似的單因素方差分析不同,非參數Kruskal-Wallis檢驗不假定基礎數據為正態分布。它已被廣泛應用于微生物組的研究。例如,測序后的微生物組數據不是正態分布的,并且包含一些很強的異常值。因此,使用秩而不是實際值是合適的,以避免測試受到異常值的存在或非正態分布的影響。測試統計需要四個主要步驟:
步驟1.將所有組中的所有數據一起按升序排列在單個序列中,即忽略組成員身份從1到N進行排序。
步驟2.通過平均排名位置來分配任何并列的值。
步驟3.總結不同的等級,例如R1R2R3…。對于每個不同的組。
步驟4.應用以下公式計算測試統計量:
Kruskal-Wallis檢驗統計量近似為卡方分布,如果n值“大”,k?為1個自由度。當每個數值大于或等于5時,該近似通常被認為是足夠的。
②Compare Diversities Among Groups(比較不同群體之間的差異)
Kruskal-Wallis檢驗或Kruskal-Wallis單因素方差分析用于比較數據不服從正態分布的多組。該檢驗類似于兩個樣本的Wilcoxon秩和檢驗。我們首先使用我們的VDR?/?鼠標數據來說明此測試。
> library(dplyr)
> Data <- mutate(df_CH_G, Group = factor(df_CH_G$Group4, levels=unique (df_CH_G$Group4)))
獲取描述性統計信息
> library(FSA)
> Summarize(value ~ Group4, data = df_CH_G)
Group4 n? mean? ? sd? min? ? Q1 median? ? Q3? ? max
1 Cecal.Vdr-/- 5 57.37? 3.659 52.17 55.00? 59.00 59.80? 60.88
2 Fecal.Vdr-/- 5 83.17 18.494 55.14 77.00? 85.67 94.75 103.27
3? ? Cecal.WT 3 80.64 31.009 51.00 64.53? 78.06 95.46 112.86
4? ? Fecal.WT 3 70.31? 9.165 62.75 65.21? 67.67 74.08? 80.50
按組生成直方圖 (Fig. 8.7)。
> #Individual plots in panel of 2 columns and 2 rows
> library(lattice)
> histogram(* value|Group4, data=df_CH_G,layout=c(2,2))
直方圖顯示,在這種情況下,組之間的值分布是不同的。現在,我們使用kruskal.test()函數進行Kruskal-Wallis檢驗來比較中值的差異。
> #kruskal wallis test of Chao 1 richness
> kruskal.test(value * Group4, data = df_CH_G)
Kruskal-Wallis rank sum test
data: value by Group4
Kruskal-Wallis chi-squared = 5.2, df = 3, p-value = 0.2
檢驗統計值為5.2,p值大于0.05,也低于卡方表法:
> qchisq(0.950, 3)
[1] 7.815
因此,我們接受零假設H0:在5%顯著水平上,4組的中位數在統計上是相等的。一般情況下,如果Kruskal-Wallis檢驗有意義,則進一步進行事后分析,以找出哪些組的水平彼此不同。在這種情況下,Kruskal-Wallis測試并不重要。為了說明這一點,我們進行了兩個事后檢驗:Nemenyi檢驗和Dunn檢驗。與方差分析類似,我們可以選擇調整p值的方法來控制家族錯誤率或控制錯誤發現率。當您在R或RStudio中輸入?p.adjust時,它會顯示一個指向文檔“調整多個比較的P值”的鏈接。您可以通過此鏈接查看調整方法的詳細信息。
多重比較的Nemenyi檢驗:Nemenyi測試通過DescTools包中的Nemenyi Test()函數執行。我們首先加載DescTools包并調用函數Nemenyi Test()。這個調整p值的方法應該是“tukey”、“ChiSq”之一。這里我們選擇Tukey方法。
> library(DescTools)
> #Tukey method for adjusting p-values
> Test_N = NemenyiTest(x = df_CH_G$value,
+? ? ? ? ? ? ? ? ? g = df_CH_G$Group4,
+? ? ? ? ? ? ? ? ? dist="tukey")
> Test_N
Nemenyi's test of multiple comparisons for independent samples (tukey)?
mean.rank.diff? pval? ?
Fecal.Vdr-/--Cecal.Vdr-/-? 6.6000 0.1254? ?
Cecal.WT-Cecal.Vdr-/-? 4.7333 0.5237? ?
Fecal.WT-Cecal.Vdr-/-? 5.0667 0.4636? ?
Cecal.WT-Fecal.Vdr-/-? -1.8667 0.9501? ?
Fecal.WT-Fecal.Vdr-/-? -1.5333 0.9713? ?
Fecal.WT-Cecal.WT? ? ? ? ? ? ? ? 0.3333 0.9998? ?
---
Signif. codes:? 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Nemenyi‘s檢驗表明,采用Tukey調整法,在糞便和盲腸VDR基因敲除樣本中,不同地點和不同基因型的CHO1多樣性的平均秩差異不顯著。然而,當兩組的觀察次數不相等時,Nemenyi檢驗是不合適的,而Dunn檢驗是合適的(Zar 2010)。我們運行Dunn檢驗,如下所示。
多重比較的Dunn檢驗:最流行的后Kruskal-Wallis檢驗是Dunn檢驗。我們可以使用FSA包中的dunnTest()函數執行Dunn測試。下面,我們調用函數dunnTest()并使用Benjamini和Hochberg方法調整p值。
> library(FSA)
> # “bh” suggests Benjamini and Hochberg? method for adjusting p-values
> Test_N = dunnTest(df_CH_G$value ~ df_CH_G$Group4,data=df_CH_G, method="bh")
> Test_N
Dunn (1964) Kruskal-Wallis multiple comparison
p-values adjusted with the Benjamini-Hochberg method.
Comparison? ? ? ? Z P.unadj? P.adj
1? ? Cecal.Vdr-/- - Cecal.WT -1.36136 0.17340 0.3468
2 Cecal.Vdr-/- - Fecal.Vdr-/- -2.19190 0.02839 0.1703
3? ? Cecal.WT - Fecal.Vdr-/- -0.53688 0.59135 0.8870
4? ? Cecal.Vdr-/- - Fecal.WT -1.45723 0.14505 0.4352
5? ? ? ? Cecal.WT - Fecal.WT -0.08575 0.93167 0.9317
6? ? Fecal.Vdr-/- - Fecal.WT? 0.44100 0.65921 0.7911
Dunn檢驗表明,盲腸和糞便中VdR?/?樣品的CHO1多樣性差異有統計學意義。但是,用Benjamini-Hochberg方法調整多重比較p值后,樣本中的位置和基因型之間沒有統計學意義。
③ Find Significant Taxa Among Groups(在群組中找到重要的分類群)
在本節中,我們使用Kruskal-Wallis檢驗來說明如何在組之間尋找重要的分類群。假設我們想知道在來自糞便和盲腸的Vdr、?/?和WT小鼠樣本中是否存在任何重要的分類群。我們使用Kruskal-Wallis測試對數據集中的248個分類(細菌)中的每一個進行測試。首先,對豐富的數據進行歸一化,并將數據制成數據框。一種標準化方法是使用對數變換。
> data<-log((abund_table+1)/(rowSums(abund_table)+dim(abund_table) [2]))
> df<-as.data.frame(data)
另一種歸一化方法是將當量計數轉換為相對豐度。
> df <- as.data.frame(abund_table/rowSums(abund_table))
然后,使用kruskal.test()函數和迭代R函數執行248個測試(每個測試針對一個細菌)。Kruskal.test()函數有幾個關鍵組件:代碼為“for(i in 1:Dim(Df)[2])”的所有分類群(柱)的測試都是循環進行的。·對于每個循環,使用代碼“kw_test<-kruskal.test(df[,i],g=Group4)”運行Kruskal-Wallis測試。·結果存儲在數據框中,每個樣本一行,KW測試的每個p值一列。·報告cat函數為“cat(Paste(”Kruskal-Wallis test for“,Names(Df)[i],”“,i,”/“,dim(Df)[2],”;p-value=“,kw_test$p.value,”\n“,sep=”“)”的測試次數
> KW_table <- data.frame()
> for (i in 1:dim(df)[2]) {
+? #run KW test for each bacterium
+? KW_test <- kruskal.test(df[,i], g=df_CH_G$Group4)
+? # Store the result in the data frame
+? KW_table <- rbind(KW_table,
+? data.frame(id=names(df)[i],
+? p.value=KW_test$p.value
+ )? )
+? # Report number of bacteria tested
+ cat(paste("Kruskal-Wallis test for ",names(df)[i]," ", i, "/",
+? dim(df)[2], "; p-value=", KW_test$p.value,"\n", sep=""))
+ }
檢查數據框表以確保函數工作正常:
> #Check the data frame table
> head(kW_table)
id? p.value
1? ? ? ? ? ? ? ? Tannerella 0.005289
2? ? ? ? ? ? ? ? Lactococcus 0.407302
3? ? ? ? ? ? ? Lactobacillus 0.058626
4 Lactobacillus::Lactococcus 0.476355
5? ? ? ? ? ? Parasutterella 0.120519
6? ? ? ? ? ? ? Helicobacter 0.140053
④多重測試與E值、FWER和FDR
文獻中存在幾種不同類型的多重測試校正。其中,Bonferroni修正較為保守。修正的方法很簡單,就是用阿爾法除以測試次數。我們已經說明了使用Bonferroni,Holm,Tukey方法和兩種版本的方法調整成兩個版本的“假發現率”的p值調整,在第二節中使用ANOVA進行配對比較和檢驗。8.3.2,Kruskal-Wallis檢驗在Sect.Kruskal-Wallis檢驗中的帖子。8.4.2.。在本節中,我們介紹一般的多重測試修正:E值、系列誤差率(FWER)和FDR。
E-value:E值是您進行多次測試時偶然出現的錯誤陽性的預期數量。您可以簡單地將p值與對其執行測試的分類群數相乘就可以得到它:E-value = p-value X the number of tests(測試次數)。請注意,在E值上,基本校正是使用原始α,即來自測試的p值,而不是標稱p值。
> #E-value
> KW_table$E.value <-KW_table$p.value * dim(KW_table)[1]
> KW_table$E.value
由于E值只是將p值乘以測試次數,因此它可以大于1。如果數據框中有許多分類群用于測試,則此校正方法不容易找到有意義的分類群。重要分類群是E值遠小于1的分類群。以下代碼用于檢查是否已將E值添加到結果數據框中:
> #check E-value in result data frame
> head(kW_table)
id? p.value E.value
1? ? ? ? ? ? ? ? Tannerella 0.005289? 1.312
2? ? ? ? ? ? ? ? Lactococcus 0.407302 101.011
3? ? ? ? ? ? ? Lactobacillus 0.058626? 14.539
4 Lactobacillus::Lactococcus 0.476355 118.136
5? ? ? ? ? ? Parasutterella 0.120519? 29.889
6? ? ? ? ? ? ? Helicobacter 0.140053? 34.733
FWER:FWER是至少出現一次誤報(I類錯誤)的概率。換句話說,這是您沒有拒絕零假設H0的概率:在進行多個測試時,不同組之間沒有差異。該公式由下式給出
式中,T=測試次數。在R中,為避免直接使用上述公式計算FWER帶來的舍入誤差,最好采用右尾二項分布檢驗來計算FWER。R碼如下所示。
> #FWER
> KW_table$FWER <- pbinom(q=0, p=KW_table$p.value,size=dim(KW_table)[1], lower.tail=FALSE)
檢查數據框以查看是否將FWER添加到結果數據框:
> #check the dataframetable
> head(kW_table)
id? p.value E.value? FWER
1? ? ? ? ? ? ? ? Tannerella 0.005289? 1.312 0.7316
2? ? ? ? ? ? ? ? Lactococcus 0.407302 101.011 1.0000
3? ? ? ? ? ? ? Lactobacillus 0.058626? 14.539 1.0000
4 Lactobacillus::Lactococcus 0.476355 118.136 1.0000
5? ? ? ? ? ? Parasutterella 0.120519? 29.889 1.0000
6? ? ? ? ? ? ? Helicobacter 0.140053? 34.733 1.0000
FDR:最后但并非最不重要的是FDR。Benjamini和Hochberg(1995)將錯誤發現率定義如下:FDR=expected proportion of erroneous rejections among all rejections(錯誤拒絕在所有拒絕中的預期比例)。在本例中,FDR是在進行多次測試時被接受為陽性的分類群中假陽性的比例。 Benjamini-Hochberg校正包括以下步驟:首先,從最小到最大對p值進行排序,并進行排序(1,2,3,…。,k,…。,T);代碼如下:
> #FDR
> #order p-values from smallest to largest
> kW_table <- kW_table[order(kW_table$p.value, decreasing=FALSE), ]
> head(kW_table)
id? p.value E.value? FWER
8? ? Bacteroides 0.003976? 0.986 0.6277
19? ? Alistipes 0.004637? 1.150 0.6842
7? ? Prevotella 0.005174? 1.283 0.7238
39 Butyricimonas 0.005174? 1.283 0.7238
1? ? Tannerella 0.005289? 1.312 0.7316
10? Odoribacter 0.008189? 2.031 0.8699
接下來,使用以下公式和代碼計算q值:q-value = p - value *T/k;
> #calculate q-value
> kW_table$q.value.factor <- dim(kW_table)[1] / 1:dim(kW_table)[1]
> head(kW_table$q.value.factor)
[1] 248.00 124.00? 82.67? 62.00? 49.60? 41.33
> kW_table$q.value <- kW_table$p.value * kW_table$q.value.factor
> head(kW_table$q.value)
[1] 0.9860 0.5749 0.4277 0.3208 0.2623 0.3385
> #check to see if q-value added to the result data frame
> head(kW_table)
id? p.value E.value? FWER q.value.factor q.value
8? ? Bacteroides 0.003976? 0.986 0.6277? ? ? ? 248.00? 0.9860
19? ? Alistipes 0.004637? 1.150 0.6842? ? ? ? 124.00? 0.5749
7? ? Prevotella 0.005174? 1.283 0.7238? ? ? ? ? 82.67? 0.4277
39 Butyricimonas 0.005174? 1.283 0.7238? ? ? ? ? 62.00? 0.3208
1? ? Tannerella 0.005289? 1.312 0.7316? ? ? ? ? 49.60? 0.2623
10? Odoribacter 0.008189? 2.031 0.8699? ? ? ? ? 41.33? 0.3385
然后,通過使用以下代碼指定目標FDR,并識別q值等于或小于指定阿爾法的排名列表的最后一項:
> #set up alpha value
> KW_alpha=0.05
> #identify the last item of the ranked list with a q-value =< alpha
> last.significant.item <- max(which(KW_table$q.value <= KW_alpha))
Warning message:
In max(which(KW_table$q.value <= KW_alpha)) :
no non-missing arguments to max; returning -Inf
> last.significant.item
[1] -Inf
在我們的示例中,沒有小于或等于指定的alpha的q值,因此程序返回負無限。最后,顯示結果框表和選擇的分類群:
> #display the chosen results
> selected <- 1:5
> #selected <- 1:last.significant.item
> print(kW_table[selected,])
? ? ? ? ? ?id? ? ? ? ? ? ? ?p.value E.value? FWER q.value.factor q.value
8? ? Bacteroides 0.003976? 0.986 0.6277? ? ? ? 248.00? 0.9860
19? ? Alistipes 0.004637? 1.150 0.6842? ? ? ? 124.00? 0.5749
7? Prevotella 0.005174? 1.283 0.7238? ? ? ? ? 82.67? 0.4277
39 Butyricimonas 0.005174? 1.283 0.7238? ? ? ? ? 62.00? 0.3208
1? ? Tannerella 0.005289? 1.312 0.7316? ? ? ? ? 49.60? 0.2623
> diff.taxa.factor <- kW_table$id[selected]
> diff.taxa <- as.vector(diff.taxa.factor)
> diff.taxa
[1] "Bacteroides"? "Alistipes"? ? "Prevotella"? ?"Butyricimonas" "Tannerella"
因為在這種情況下沒有小于或等于指定的alpha=0.05的Q值,所以上面顯示的5個分類群不是基于FDR的。它們是p值最小的選定分類群。本賈米尼-霍希伯格校正比上面提出的其他多次測試校正不那么嚴格,因此具有更高的靈敏度。FDR廣泛應用于微生物群系和其他研究領域和許多R函數。
8.5 Summary
在這一章中,我們介紹了各種研究領域中常用的和經典的方法。其中一些在微生物組研究中得到了廣泛的應用。我們用分步實施的方式說明了這些微生物組數據的分析方法。R系統中的狀態。數據集來自我們自己的出版物(金等人)。2015年;王等人。2016)。讀者可以使用本章提供的R代碼和解釋來分析自己的微生物組數據。在本章中,我們重點研究了單變量群落微生物組數據的假設檢驗。在接下來的一章里。將著重對多變量群落微生物組數據進行假設檢驗。