第八章 單變量群落分析

我們將微生物群落組成研究分為兩個主要部分:(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代碼和解釋來分析自己的微生物組數據。在本章中,我們重點研究了單變量群落微生物組數據的假設檢驗。在接下來的一章里。將著重對多變量群落微生物組數據進行假設檢驗。

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

推薦閱讀更多精彩內容