第九章 多变量群落分析1

微生物群落研究的主要目标是比较不同群落的组成(β多样性)。在第6章介绍了β多样性,并举例说明了如何计算β多样性指数。得到β多样性指数后,可以对其进行统计分析。微生物群研究中的β多样性分析分为两类:探索性技术和有意义的统计检验。我们在第7章中说明了聚类和排序。在本章中,我们重点介绍关于β多样性的有意义的统计检验。已经开发了几种方法或模型来测试微生物群落组成的差异。我们将介绍使用置换多变量方差分析(PERMANOVA)、Mantel检验、相似性分析(ANOSIM)、多响应置换过程(MRPP)和广义UniFrac距离通过PERMANOVA进行β多样性的统计检验。

9.1 Hypothesis Testing Among Groups Using Permutational Multivariate Analysis of Variance  (PERMANOVA)【使用置换多变量方差分析(PERMANOVA)进行组间假设检验】

① PERMANOVA简介

传统的多元方差分析(MANOVA)只是一个含有多个因变量的方差分析(ANOVA)。ANOVA用于检验零假设:两个或多个组之间的均值没有差异;比较起来,Manova可以用于检验零假设:两个或多个均值向量没有差异。因此,它对于多变量数据的分析特别强大。然而,传统的MANOVA假设因变量应该群体内部的正态分布(正态分布),在所有对因变量的线性关系,协变量的全对,在每一个细胞和所有依赖variable-covariate对(线性),因变量展览同等水平的方差在预测变量的范围(方差的同质性)和方差和协方差的同质性。由于这些严格的假设,传统的MANOVA不适合大多数微生物组多变量数据集。例如,不适合分析微生物组组成与环境因素(即不同处理组或条件)之间的关系。

2001年,Anderson(2001)提出了一种基于平方距离和的分析和划分的非参数方法来检验两组或更多组样本之间没有差异的假设。它被称为置换Manova(以前称为“非参数Manova”,缩写为NP-Manova)。Anderson的置换Manova是由相异矩阵表示的。让我们考虑每对观测之间的距离矩阵,设N=an,观测(点)的总数,并且dij观测之间的距离i=1,…,N,并且观测j=1,…,N,那么平方和的总和如下所示

总和将距离矩阵(但不包括对角线)的半对角线(或上对角线)中所有距离的平方相加,然后除以N。SST用于计算所有样本之间的平均距离。类似地,组内平方和或剩余平方和为

其中\xi ij是指示符,如果观测i和观测j在同一组中,则取值1,否则取值0。也就是说,将同一组中出现的两个观测值之间的所有距离的平方相加,然后除以n,即每个组中的观测值数量。在此基础上,利用SSW来计算组内样本间的平均距离。用于计算组间平均距离的平方和可以通过用SSW减去SST得到。也就是说,SSA=SST-SSW。给出了检验多元假设的伪F比:

该检验统计的基本原理在于,如果来自不同组的点在多变量空间中具有不同的中心位置(在欧几里德距离的情况下为质心),与组内距离相比,则组间距离将相对较大,产生的伪F比将相对较大。从作为F检验统计量的公式(9.3)中,我们可以看到,SSA/(a-1)与SSW/(N-1)之比(称为信噪比)越大,F值越大,从而导致较小的p值。问题是:我们如何才能获得p值?微生物群和生态学中的个体变量通常不是正态分布的,我们预计欧几里德距离不一定会用于分析。正如Anderson(2001)注意到的那样,即使每个变量都是正态分布的,并且使用了欧几里德距离,为多变量数据计算的平均平方也不会每个都由独立的v2变量之和组成,因为尽管单个观测被认为是独立的,但是单个物种(OTU或分类群)变量并不是彼此独立的。因此,不能使用传统的表格p值。Anderson建议对数据集中的变量进行随机打乱(置换),以生成经验分布。其背后的算法是,在零假设下,各组并没有真正的不同,然后多变量观测(行)将在不同的组之间交换。可以针对行的所有可能的重新排序重复随机洗牌,例如1000次,然后生成特定于该数据类型的1000个分布。表示组间显著性的p值将从经验F分布中获得。现在,让我们解释一下如何从排列测试中获得p值。如上所述,排列意味着将样本观测随机分配到组中。P值是通过将置换的F比与观察到的F比进行比较来计算的。显著性检验简单地说就是排列后的F比大于观察到的F比的分数。简单地说,我们以单向测试为例来解释排列的实际作用。在单向测试中,我们感兴趣的是看一个统计数字是小于还是大于可随机预期的值。根据大于或等于观察到的F统计量的置换伪F统计量的比例来计算p值。换句话说,我们想知道PERMANOVA之后的置换数据集是否产生了相对于实际数据集更好的组分辨率。如果超过5%的置换F统计量的值大于观察到的F统计量的值,则p值大于0.05。然后,我们可以得出结论,各组之间的任何差异在统计上都不显著。与传统的Manova相比,PERMANOVA至少有两个优势。首先,它不需要任何关于分布的假设。其次,它可以使用由任何距离度量计算的距离矩阵。显然,非分布假设是一种优势,但后面的特征也很重要,因为基于欧几里得距离的分析是计算组内样本之间的平均距离。换句话说,它是测量群在欧几里得空间中的中心位置,称为质心。然而,对于许多距离测量,很难计算出中心位置。例如,在生态学和微生物学研究中,存在许多情况下半度量的Bray-Curtis测度更合适;然而,在多元Bray-Curtis空间中,我们不能轻易地从样本数据中直接计算出中心位置。

②用Vegan软件包实现PERMANOVA

PERMANOVA是通过vegan包中的函数adonis()实现的。函数adonis()用于使用半度量和度量距离矩阵分析和划分平方和。adonis()的典型用途包括分析生态和微生物群落数据(按物种(分类群)矩阵采样)或具有有限数量的个体样本和数千或数百万列基因表达的遗传数据。函数adonis()允许对由连续和/或分类预测因子解释的β多样性的方差进行类似于方差分析的检验。adonis是vegan中推荐的方法。vegan中的其他方法包括MRPP和ANOSIM。然而,MRPP和ANOSIM都只处理类别预测,并且它们不如adonis好用。要实施PERMANOVA,您需要选择一个距离度量。对于常规测量,通常选择“欧几里得”距离,但对于群落微生物群数据,“Bray”(Bray-Curtis距离)更合适。在文献中,通常已经报告了四个β-分集度量,包括Bray-Curtis距离、Jaccard距离、加权和未加权的UniFrac距离。下面给出一个用法的例子:

adonis(formula, data, permutations = 1000, method = “bray”, contr.unordered =“contr.sum”, contr.ordered = “contr.poly”) 在上述语法中,formula=模型公式,如Y~A+B+C*D,其中,Y可以是不同的对象(继承自“dist”类)、数据框或矩阵;A、B、C、D可以是因子或连续变量。

在第6章利用VDR小鼠样本数据计算了包括Bray-Curtis指数在内的多种β-多样性测度。在获得这些β多样性指数后,我们可以进行多变量群落分析,以测试微生物群落的组成在不同样本之间的差异。在这种情况下,我们首先要测试微生物群落的组成是否在粪便和盲肠部位有所不同,并在不同的组(Vdr−/−和WT小鼠)之间存在差异。我们还想在相同的地点(如粪便样本)测试,与WT组相比,遗传缺陷组(Vdr−/−小鼠)是否有不同的微生物群组成。

使用Vegan软件包准备PERMANOVA的实施:因为我们的数据集中没有直接给出位置和组信息,所以我们需要额外的编程来从样本ID中提取它们。以下代码用于将字符串样本ID拆分为X1、X2、X3三个分量。

> grouping<-data.frame(row.names=rownames(abund_table),t(as.data.frame(strsplit(rownames (abund_table),"_"))))

> grouping<-data.frame(row.names=rownames(abund_table),t(as.data.frame (strsplit(rownames(abund_table),"_"))))

> grouping

X1 X2        X3

5_15_drySt-28F  5 15 drySt-28F

20_12_CeSt-28F 20 12  CeSt-28F

1_11_drySt-28F  1 11 drySt-28F

2_12_drySt-28F  2 12 drySt-28F

3_13_drySt-28F  3 13 drySt-28F

4_14_drySt-28F  4 14 drySt-28F

7_22_drySt-28F  7 22 drySt-28F

8_23_drySt-28F  8 23 drySt-28F

9_24_drySt-28F  9 24 drySt-28F

19_11_CeSt-28F 19 11  CeSt-28F

21_13_CeSt-28F 21 13  CeSt-28F

22_14_CeSt-28F 22 14  CeSt-28F

23_15_CeSt-28F 23 15  CeSt-28F

25_22_CeSt-28F 25 22  CeSt-28F

26_23_CeSt-28F 26 23  CeSt-28F

27_24_CeSt-28F 27 24  CeSt-28F

在数据集中,“dryST”表示样品来自粪便,“CeSt”表示样品来自盲肠。因此,我们创建了一个位置变量来对来自粪便和盲肠部位的样本进行分组。

> grouping$Location <- with(grouping, ifelse(X3%in%"drySt-28F", "Fecal", "Cecal"))

我们进一步从粪便和盲肠部位的WT样本中分离出Vdr−/−样本,如下所示:

> grouping$Group <- with(grouping,ifelse(as.factor(X2)%in% c (11,12,13,14,15),c("Vdr-/-"), c("WT")))

检查变量名并从数据集中删除X1、X2和X3。

> names(grouping)

> 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

在创建位置和组变量之后,现在可以调用函数adonis()来执行PERMANOVA。函数adonis()的输入数据可以是相异点或数据框;在后一种情况下,adonis()使用vegdist()来查找相异点。为了说明这一点,我们选择了Bray-Curtis、Jaccard和Sørensenβ-多样性度量。他们是在第6章中计算出来的,可以直接使用。

基因型间Bray-Curtis差异的检验差异:实现PERMANOVA的最简单的R代码用来检验vegan中Vdr−/−和野生型样本的Bray-Curtis不同之处,如下所示。

> set.seed(123)

> # adonis="analysis of dissimilarity" 

> adonis(bray ~ Group,data=grouping,permutations = 1000)

Call:

adonis(formula = bray ~ Group, data = grouping, permutations = 1000)

Permutation: free

Number of permutations: 1000

Terms added sequentially (first to last)

Df SumsOfSqs MeanSqs F.Model    R2 Pr(>F)

Group      1      0.23  0.230    1.5 0.097  0.18

Residuals 14      2.14  0.153        0.903     

Total    15      2.37                1.000 

如果没有给出Bray-Curtis相异度,下面的代码会给出相同的结果。

> adonis(abund_table ~ Group,data=grouping,permutations = 1000, method ="bray")

Call:

adonis(formula = abund_table ~ Group, data = grouping, permutations = 1000,     

method = "bray")

Permutation: free

Number of permutations: 1000

Terms added sequentially (first to last)

                 Df   SumsOfSqs   MeanSqs F.Model    R2     Pr(>F)

Group       1      0.23                0.230      1.5         0.097    0.19

Residuals 14     2.14                0.153                   0.903     

Total          15     2.37                                           1.000 

除了由于四舍五入导致的p值差异外,这两个输出中的所有统计数据都是相同的。通过排列试验得到p值。 分组R2为0.097,可用组解释总方差的9.7%。对Bray-Curtis距离矩阵的行和列执行1000次随机化,在零假设下生成R2。在这1,000个值中,有180个比观测值0.097大,因此获得与观测值一样大的值的几率小于180/1000,表明p值为0.18.。因此,我们得出结论,Vdr−/−和野生型样本之间的Bray-Curtis距离差异往往是偶然的。

不同基因型间Jaccard差异的检验差异:类似地,我们可以使用PERMANOVA来检验VDR−/−和野生型样本之间的 Jaccard相异度的差异。

> adonis(jaccard ~ Group,data=grouping,permutations = 1000)

Call:

adonis(formula = jaccard ~ Group, data = grouping, permutations = 1000)

Permutation: free

Number of permutations: 1000

Terms added sequentially (first to last)

                 Df    SumsOfSqs MeanSqs  F.Model    R2    Pr(>F)

Group       1      0.33             0.334         1.37      0.089   0.17

Residuals 14      3.40             0.243                     0.911     

Total        15      3.74                                           1.000 

不同基因型间Sørensen差异的检验差异:

> adonis(Sørensen ~ Group,data=grouping,permutations = 1000)

Call:

adonis(formula = Sørensen ~ Group, data = grouping, permutations = 1000)

Permutation: free

Number of permutations: 1000

Terms added sequentially (first to last)

                   Df   SumsOfSqs MeanSqs    F.Model    R2      Pr(>F)

Group         1       0.119           0.1191         1.3       0.085  0.21

Residuals  14      1.282           0.0916                     0.915     

Total           15     1.401                                           1.000

PERMANOVA采用Bray-Curtis、Jaccard和Sørensenβ多样性测度的相异度分析(“adonis”)进行。根据BrayCurtis距离(R2=0.097,P=0.18)、Jaccard距离(R2=0.089,P=0.17)和Sørensen距离(R2=0.085,P=0.21),VDR小鼠和WT小鼠之间的距离无显著性差异。结果表明,在样本量较小的情况下,−/−小鼠和WT小鼠在粪便和盲肠样本组合的情况下,这三个差异在0.0 5的统计显著性水平上没有显著差异.

地区间Bray-Curtis相异度的检验差异:以下R代码用于测试粪便和盲肠样本之间的Bray-Curtis差异是否不同。

> adonis(bray ~ Location,data=grouping,permutations = 1000)

Call:

adonis(formula = bray ~ Location, data = grouping, permutations = 1000)

Permutation: free

Number of permutations: 1000

Terms added sequentially (first to last)

                   Df   SumsOfSqs MeanSqs  F.Model    R2      Pr(>F)   

Location      1      0.533          0.533        4.06       0.225   0.001 ***

Residuals   14     1.840          0.131                     0.775         

Total           15      2.374                                       1.000         

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

R2为0.225,说明总方差的22.5%可以由地点来解释。对Bray-Curtis距离矩阵的行和列执行1000次随机化,在零假设下生成R2。在这1,000个值中,有一个比观测值0.225大,因此获得与观测值一样大的值的几率小于千分之一,表明p值为0.001。因此,我们可以得出结论,粪便和盲肠样本之间的Bray-Curtis距离差异往往不是偶然的。

地区间Jaccard差异的检验差异:以下R代码用于测试粪便和盲肠样本之间的Jaccard差异是否不同:

> adonis(jaccard ~ Location,data=grouping,permutations = 1000)

Call:

adonis(formula = jaccard ~ Location, data = grouping, permutations = 1000)

Permutation: free

Number of permutations: 1000

Terms added sequentially (first to last)

                 Df    SumsOfSqs  MeanSqs  F.Model    R2        Pr(>F) 

Location    1       0.64               0.645        2.92      0.173      0.006 **

Residuals 14      3.09               0.221                     0.827         

Total         15      3.74                                             1.000         

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

不同地点之间Sørensen差异性的检验差异:下列R代码用于测试粪便和盲肠样本之间的Sørensen差异是否不同:

> adonis(Sørensen ~ Location,data=grouping,permutations = 1000)

Call:

adonis(formula = Sørensen ~ Location, data = grouping, permutations = 1000)

Permutation: free

Number of permutations: 1000

Terms added sequentially (first to last)

                   Df SumsOfSqs MeanSqs  F.Model    R2       Pr(>F)   

Location      1     0.352           0.352      4.71       0.252    0.001 ***

Residuals  14    1.049           0.075                    0.748         

Total           15    1.401                                       1.000         

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Bray-Curtis距离(R2=0.225,P=0.001)、Jaccard距离(Adonis,R2=0.173,P=0.006)和Sørensen距离(Adonis,R2=0.252,P=0.001)显示出显著的分离。根据Bray-Curtis距离、Jaccard距离和Sørensen距离的差异,我们可以得出结论,两个地点之间的差异在统计上是显著的,并且大约22.5%、17.3%和25.2%的差异是由地点来解释的。

Bray-Curtis相异度按组对地点排序的贯序检验:在群体检测中,VDR−/−和WT样本与粪便或盲肠部位无明显区别。在定位检测中,粪便和盲肠标本与VDR−/−或WT组无明显区别。实际上,在给定两个变量组和位置的情况下,我们可以进行排列方差分析的序贯检验。为了说明这一点,我们使用了Bray-Curtis相异度来进行贯序检验。感兴趣的读者可以使用Jaccard和Jaccard距离测量来尝试他们自己的测试。

> adonis(bray ~ Group*Location,data=grouping,permutations = 1000)

Call:

adonis(formula = bray ~ Group * Location, data = grouping, permutations = 1000)

Permutation: free

Number of permutations: 1000

Terms added sequentially (first to last)

                              Df SumsOfSqs MeanSqs F.Model    R2      Pr(>F)   

Group                    1    0.230           0.230      1.77        0.097   0.123   

Location                1    0.533           0.533       4.10       0.225   0.001 ***

Group:Location     1    0.051           0.051     0.39        0.021    0.928   

Residuals             12    1.559         0.130                      0.657         

Total                     15    2.374                                       1.000         

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

分组Bray-Curtis相异排序位置的贯序检验:

> adonis(bray ~ Location*Group,data=grouping,permutations = 1000)

Call:

adonis(formula = bray ~ Location * Group, data = grouping, permutations = 1000)

Permutation: free

Number of permutations: 1000

Terms added sequentially (first to last)

                           Df   SumsOfSqs MeanSqs F.Model    R2       Pr(>F) 

Location            1        0.533           0.533       4.10      0.225    0.002 **

Group                1       0.230           0.230        1.77      0.097    0.095 .

Location:Group  1      0.051           0.051        0.39     0.021     0.909 

Residuals          12     1.559           0.130                     0.657         

Total                  15      2.374                                        1.000         

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

请注意,变量的顺序很重要。但是,无论是组内先试还是先定位,位置均有统计学意义,p<0.05。

四个水平组间Bray-Curtis差异性的检验差异:实际上,我们可以使用PERMANOVA来检验两种基因型和两个位点组合的四个水平的群体之间的差异。下面的R代码创建了一个组合了基因型变量和位置变量的4级组变量。默认分隔符是‘.’。

> grouping$Group4<- with(grouping, interaction(Location,Group))

> grouping

                            Location  Group      Group4

5_15_drySt-28F    Fecal Vdr-/- Fecal.Vdr-/-

20_12_CeSt-28F    Cecal Vdr-/- Cecal.Vdr-/-

1_11_drySt-28F    Fecal Vdr-/- Fecal.Vdr-/-

2_12_drySt-28F    Fecal Vdr-/- Fecal.Vdr-/-

3_13_drySt-28F    Fecal Vdr-/- Fecal.Vdr-/-

4_14_drySt-28F    Fecal Vdr-/- Fecal.Vdr-/-

7_22_drySt-28F    Fecal    WT    Fecal.WT

8_23_drySt-28F    Fecal    WT    Fecal.WT

9_24_drySt-28F    Fecal    WT    Fecal.WT

19_11_CeSt-28F    Cecal Vdr-/- Cecal.Vdr-/-

21_13_CeSt-28F    Cecal Vdr-/- Cecal.Vdr-/-

22_14_CeSt-28F    Cecal Vdr-/- Cecal.Vdr-/-

23_15_CeSt-28F    Cecal Vdr-/- Cecal.Vdr-/-

25_22_CeSt-28F    Cecal    WT    Cecal.WT

26_23_CeSt-28F    Cecal    WT    Cecal.WT

27_24_CeSt-28F    Cecal    WT    Cecal.WT

运用PERMANOVA检验四个水平组之间的差异性。

> adonis(bray ~ Group4,data=grouping,permutations = 1000)

Call:

adonis(formula = bray ~ Group4, data = grouping, permutations = 1000)

Permutation: free

Number of permutations: 1000

Terms added sequentially (first to last)

                    Df SumsOfSqs MeanSqs F.Model    R2 Pr(>F) 

Group4        3    0.814             0.271    2.09         0.343  0.018 *

Residuals   12    1.559             0.130                      0.657       

Total           15    2.374                                       1.000       

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

按Bray-Curtis距离计算,样本分离显著(adonis,R2=0.343,P=0.018)。我们可以得出结论,四个水平的组之间的差异在统计学上是显著的;根据Bray-Curtis的不同,大约34.3%的“方差”是由组的差异来解释的。

Change the Default Dummy Contrasts in R to the Default “Sum” Contrasts in Vegan Package( 将R中的默认虚拟对比度更改为Vegan包中的默认“Sum”对比度):对于设计矩阵中的无序因素,R默认使用虚拟对比或处理对比。vegan包默认使用“SUM”或ANOVA对比。无序因子的“总和”对比度用于更改R中的默认对比度。

> adonis(bray ~ Group4,data=grouping,permutations = 1000,contr.unordered ="contr.sum")

Call:

adonis(formula = bray ~ Group4, data = grouping, permutations = 1000,

contr.unordered = "contr.sum")

Permutation: free

Number of permutations: 1000

Terms added sequentially (first to last)

                  Df SumsOfSqs MeanSqs F.Model    R2      Pr(>F) 

Group4      3    0.814          0.271        2.09        0.343  0.009 **

Residuals 12    1.559         0.130                       0.657         

Total         15    2.374                                        1.000         

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

添加有序因素的对比:下面的R代码为测试添加了有序因子的“poly”对比

> adonis(bray ~ Group4,data=grouping,permutations = 1000,contr.unordered ="contr.sum",contr.ordered = "contr.poly")

Call:

adonis(formula = bray ~ Group4, data = grouping, permutations = 1000,

contr.unordered = "contr.sum", contr.ordered = "contr.poly")

Permutation: free

Number of permutations: 1000

Terms added sequentially (first to last)

                 Df SumsOfSqs MeanSqs F.Model    R2    Pr(>F) 

Group4      3    0.814           0.271      2.09       0.343  0.011 *

Residuals 12    1.559          0.130                   0.657       

Total         15    2.374                                     1.000       

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

测试不同群体之间的全局差异:我们可以使用以下两个示例调用之一进行置换Manova来测试这四个级别的组之间的全局差异。这两个调用都提供相同的输出。

> adonis(bray ~ grouping$Group4,permutations = 1000)

Call:

adonis(formula = bray ~ grouping$Group4, permutations = 1000)

Permutation: free

Number of permutations: 1000

Terms added sequentially (first to last)

                             Df SumsOfSqs MeanSqs F.Model    R2    Pr(>F)

grouping$Group4  3    0.814          0.271        2.09      0.343  0.017 *

Residuals             12    1.559          0.130                     0.657       

Total                     15    2.374                                        1.000       

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

> adonis(abund_table ~ Group4,data=grouping,permutations = 1000, method =

"bray")

Call:

adonis(formula = abund_table ~ Group4, data = grouping, permutations =

1000,method = "bray")

Permutation: free

Number of permutations: 1000

Terms added sequentially (first to last)

                     Df SumsOfSqs MeanSqs F.Model    R2   Pr(>F) 

Group4          3    0.814            0.271    2.09      0.343  0.01 **

Residuals     12    1.559          0.130                 0.657         

Total             15    2.374                                   1.000         

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

③用RVAideMemoire软件包实现两两置换Manova

在方差分析中,对置换Manova的显著检验结果表明,所定义的组之间存在显著差异;但是,没有办法知道哪些组是显著分开的。在使用vegan进行PERMANOVA之后,可以通过使用RVAideMemoire软件包中的函数pairwie.perm.manova()来执行成对置换Manova,以进行每个组水平的成对比较和多个测试的校正。此函数的一个调用示例如下:

pairwise.perm.manova(resp, fact, test = c(“Pillai”, “Wilks”,”Hotelling-Lawley”,“Roy”, “Spherical”), nperm = 1000, progress = TRUE, p.method = ”fdr”)

其中,resp = response、典型矩阵(每个变量一列)或距离矩阵或数据框;fact = grouping factor;test = choice of test statistic when response is a matrix;;nperm=获得P值的排列数目;progress=指示是否应该显示进度条的逻辑;以及p.method=用于校正P值的方法。

在多重比较中使用方差分析、Kruskal-Wallis Test。在两两排列的Manova中提供了几种p值调整方法,包括“bonferroni” , “holm” , “hochberg” and “hommel” ,“BH” or  “fdr” , “BY”。此包中不提供Tukey方法。Type? P.adjust()检查R中的选项和引用。如果您不想调整p值,请使用传递选项(“None”)。要执行两两排列的Manova,我们首先需要安装和加载RVAideMemoire包。

> install.packages("RVAideMemoire")

> library(RVAideMemoire)

然后,我们可以使用以下三个示例调用中的任何一个来执行两两排列的Manova。

> set.seed(0)

> pairwise.perm.manova(bray,grouping$Group4,nperm=1000)

> # o r

> pairwise.perm.manova(vegdist(abund_table,"bray"),grouping$Group4,nperm=1000)

> # o r

> pairwise.perm.manova(bray, grouping$Group4, test = c("Pillai","Wilks","Hotelling-Lawley", "Roy", "Spherical"),nperm = 1000,

+  progress = TRUE, p.method = "fdr")

使用“none“方法校正P值:当使用p.method=“None”时,p值不会校正。

> pairwise.perm.manova(bray, grouping$Group4, test = c("Pillai", "Wilks",

"Hotelling-Lawley", "Roy", "Spherical"), nperm = 1000,

+                      progress = TRUE, p.method = "none")

Pairwise comparisons using permutation MANOVAs on a distance matrix

data:  bray by grouping$Group4

1000 permutations

                    Cecal.Vdr-/- Fecal.Vdr-/- Cecal.WT

Fecal.Vdr-/- 0.02                   -                    -

Cecal.WT    0.64                    0.07              -

Fecal.WT    0.08                   0.16        0.50   

P value adjustment method: none

用“Bonferroni”法校正P值

> pairwise.perm.manova(bray, grouping$Group4, test = c("Pillai", "Wilks","Hotelling-Lawley", "Roy", "Spherical"), nperm = 1000,

+                      progress = TRUE, p.method = "bonferroni")

Pairwise comparisons using permutation MANOVAs on a distance matrix

data:  bray by grouping$Group4

1000 permutations

                     Cecal.Vdr-/- Fecal.Vdr-/- Cecal.WT

Fecal.Vdr-/- 0.1                        -                  -

Cecal.WT    1.0                      0.3                -

Fecal.WT    0.4                    1.0          1.0   

P value adjustment method: bonferroni

用“holm”法校正P值

> pairwise.perm.manova(bray, grouping$Group4, test = c("Pillai", "Wilks","Hotelling-Lawley", "Roy", "Spherical"), nperm = 1000,

+                      progress = TRUE, p.method = "holm")

Pairwise comparisons using permutation MANOVAs on a distance matrix

data:  bray by grouping$Group4

1000 permutations

                    Cecal.Vdr-/- Fecal.Vdr-/- Cecal.WT

Fecal.Vdr-/- 0.09                     -              -

Cecal.WT    1.00                   0.24          -

Fecal.WT    0.27                  0.52         1.00   

P value adjustment method: holm

用“Hochberg”法校正P值

> pairwise.perm.manova(bray, grouping$Group4, test = c("Pillai", "Wilks","Hotelling-Lawley", "Roy", "Spherical"), nperm = 1000,

+                      progress = TRUE, p.method = "hochberg")

Pairwise comparisons using permutation MANOVAs on a distance matrix

data:  bray by grouping$Group4

1000 permutations

                   Cecal.Vdr-/- Fecal.Vdr-/- Cecal.WT

Fecal.Vdr-/- 0.06                -                     -

Cecal.WT    0.65              0.23                -

Fecal.WT  0.26                  0.45           0.65   

P value adjustment method: hochberg

用“Hommel”法校正P值

> pairwise.perm.manova(bray, grouping$Group4, test = c("Pillai", "Wilks","Hotelling-Lawley", "Roy", "Spherical"), nperm = 1000,

+      progress = TRUE, p.method = "hommel")

Pairwise comparisons using permutation MANOVAs on a distance matrix

data:  bray by grouping$Group4

1000 permutations

                     Cecal.Vdr-/- Fecal.Vdr-/- Cecal.WT

Fecal.Vdr-/- 0.07                   -                  -

Cecal.WT    0.64                 0.20                -

Fecal.WT    0.30                 0.53            0.64   

P value adjustment method: hommel

使用“BH”方法校正P值

> pairwise.perm.manova(bray, grouping$Group4, test = c("Pillai", "Wilks","Hotelling-Lawley", "Roy", "Spherical"), nperm = 1000,

+                      progress = TRUE, p.method = "BH")

Pairwise comparisons using permutation MANOVAs on a distance matrix

data:  bray by grouping$Group4

1000 permutations

                     Cecal.Vdr-/- Fecal.Vdr-/- Cecal.WT

Fecal.Vdr-/- 0.1                     -                       -

Cecal.WT    0.7                    0.2                    -

Fecal.WT    0.2                   0.2                  0.6   

P value adjustment method: BH

使用“FDR”方法校正P值

> pairwise.perm.manova(bray, grouping$Group4, test = c("Pillai", "Wilks","Hotelling-Lawley", "Roy", "Spherical"), nperm = 1000,

+                      progress = TRUE, p.method = "fdr")

Pairwise comparisons using permutation MANOVAs on a distance matrix

data:  bray by grouping$Group4

1000 permutations

                  Cecal.Vdr-/- Fecal.Vdr-/- Cecal.WT

Fecal.Vdr-/- 0.1                       -              -

Cecal.WT    0.6                     0.1          -

Fecal.WT    0.1                       0.3      0.6   

P value adjustment method: fdr

使用“BY”方法校正P值

> pairwise.perm.manova(bray, grouping$Group4, test = c("Pillai", "Wilks","Hotelling-Lawley", "Roy", "Spherical"), nperm = 1000,

+                      progress = TRUE, p.method = "BY")

Pairwise comparisons using permutation MANOVAs on a distance matrix

data:  bray by grouping$Group4

1000 permutations

                  Cecal.Vdr-/- Fecal.Vdr-/- Cecal.WT

Fecal.Vdr-/- 0.3                  -                -

Cecal.WT    1.0                    0.3          -

Fecal.WT    0.3                  0.6          1.0   

P value adjustment method: BY

                 Cecal.Vdr-/- Fecal.Vdr-/- Cecal.WT

Fecal.Vdr-/- 0.02                    -               -

Cecal.WT    0.64                 0.07            -

Fecal.WT    0.08                 0.16        0.50   

P value adjustment  method: none

未经校正,粪便VdR−/−和盲肠VdR−/−分离显著,p值为0.0 2。但是,使用这两种方法进行调整后,没有两个配对项目在0.05的显著性水平上显著。

④Test Group Homogeneities Using the Function betadisper()(使用函数betadisper()测试组同质性)

在使用函adonis()测试组平均值差异之后,我们可以使用函数betadisper()来测试组同质性的差异。adonis()是类似于多元方差分析,betadisper()类似于Levene的方差相等检验。

> homo <-with(grouping,betadisper(bray, Group4))

> homo

Homogeneity of multivariate dispersions

Call: betadisper(d = bray, group = Group4)

No. of Positive Eigenvalues: 11

No. of Negative Eigenvalues: 4

Average distance to median:

Cecal.Vdr-/- Fecal.Vdr-/-  Cecal.WT    Fecal.WT

    0.342        0.285        0.309        0.239

Eigenvalues for PCoA axes:

PCoA1 PCoA2 PCoA3 PCoA4 PCoA5 PCoA6 PCoA7 PCoA8

0.775    0.628    0.358    0.174    0.161   0.116  0.100    0.045

该函数具有用于图形显示的plot和boxplot方法。下面的R代码产生图9.1中的PCoA图。

> plot(homo)

下面的R代码生成图9.2中四组到质心的距离的箱线图。

> boxplot(homo)

我们既可以使用标准参数方差分析,也可以使用置换检验(置换检验)来分析拟合模型的显著性。

> anova(homo)

Analysis of Variance Table

Response: Distances

                   Df  Sum Sq Mean Sq     F value Pr(>F)

Groups       3     0.021      0.00701    0.54      0.67

Residuals  12    0.157     0.01305             

> permutest(homo)

Permutation test for homogeneity of multivariate dispersions

Permutation: free

Number of permutations: 999

Response: Distances

                   Df   Sum Sq   Mean Sq   F    N.Perm  Pr(>F)

Groups       3      0.021     0.00701   0.54    999    0.67

Residuals  12     0.157     0.01305 

参数检验和排列检验均表明,多元离散度在0.05显著性水平上无统计学差异。此外,使用参数Tukey‘s HSD检验可以分析组之间的成对差异,如下所示:

> TukeyHSD(homo)

Tukey multiple comparisons of means

95% family-wise confidence level

Fit: aov(formula = distances ~ group, data = df)

$group

                                                 diff      lwr         upr     p adj

Fecal.Vdr-/--Cecal.Vdr-/- -0.05622 -0.2707 0.1583 0.8629

Cecal.WT-Cecal.Vdr-/-  -0.03273 -0.2804 0.2150 0.9786

Fecal.WT-Cecal.Vdr-/-  -0.10244 -0.3501 0.1453 0.6221

Cecal.WT-Fecal.Vdr-/-  0.02349 -0.2242 0.2712 0.9918

Fecal.WT-Fecal.Vdr-/-  -0.04623 -0.2939 0.2015 0.9437

Fecal.WT-Cecal.WT        -0.06972 -0.3466 0.2072 0.8760

结果表明,四组间的配对比较无统计学差异。因此,我们可以得出结论,这四组的方差是均匀的。


9.2 Hypothesis Tests Among Group-Differences Using Mantel Test (MANTEL)(使用Mantel检验(Mantel)进行组间差异的假设检验)

①不同矩阵的Mantel检验和部分Mantel检验介绍

Mantel发起了一种置换测试程序来测试两个距离矩阵之间的相关性,并在Mantel和Valand中得到进一步发展。由于这一开端,这一过程在生物和环境科学中被称为Mantel检验,在统计文献中也被称为Mantel和Valand的非参数Manova。通常,相关分析用于量化两个连续变量之间的关联,或者是自变量和因变量之间的关联,或者是两个自变量之间的关联。Mantel的检验具有优势:它可以应用于不同类型的变量,包括分类、排名或区间尺度数据,因为它使用距离(相异)矩阵作为输入数据。Mantel检验的设置是回归分析,其中变量本身是总结样本位置之间成对相似性的距离或相异矩阵。在这种设置下,因变量不是“样本i上分类单元X的丰度”,而可能是“样本i和j上分类单元X的平均数量的相似性”;同样,预测变量也不是单个样本的“条件”,而可能是样本之间的“条件相似性”。总而言之,Mante检验是一种相关性分析,因为它分析了两个变量或距离矩阵之间的关联。它仅仅是距离矩阵的回归。实际上,Mantel检验的威力和通用性在于它处理了距离矩阵,并构建了回归分析框架。在相关分析中包含分类变量,并将这些变量转换为距离(差异)指标的能力,使指标更好地用于假设检验,这对生态学家和微生物研究人员特别有用。因此,Mantel的测试被认为克服了解释物种-环境关系或一般分类-环境关系的一些固有问题。通常,Mantel检验中的零假设是这样构造的:响应变量矩阵中样本之间的距离与另一个解释变量矩阵中样本之间的距离不是线性相关的。我们可以问的操作性问题是这样的:“在预测变量(环境)变量方面相似的样本在因变量(分类)变量方面也倾向于相似吗?”或者“相近的样品在成分上也是相似的吗?”或者换一种说法,“不同类群或环境不同的样本,在分类群组成或成分上是否也不同?”测试统计如下:

其中,z=检验统计量,是Hadamard乘积(矩阵)。在乘积中,具有相同维数的两个矩阵产生另一个矩阵,其中每个元素ij是原始两个矩阵的元素ij的乘积;yi是相依距离矩阵或凝聚向量;xi是分组的预测矩阵或对比矩阵,如果样本在样本组中,则为预测矩阵或对比矩阵;如果样本在不同的组中,则为1。适当的距离度量可以是单变量(例如,“类杆菌丰度相似性”),也可以是多变量(例如,Bray-Curtis‘s、Jaccard’s、Sørenson‘s相似性指数);n是样本数量。可以将Mantel检验过程分为以下四个主要步骤:第一步:计算相异矩阵。第二步:计算检验统计量Z。第三步:检验显著性。

Mantel检验通过判断一组变量中的相似(或接近)是否与另一组变量中的相似(或接近)相关,来比较两组不同之处。基本上,它是不同条目之间的相关性。由于距离矩阵的元素不是独立的,且N个样本(N(N−1)/2)之间存在太多差异,因此不适用常规显著性检验。Mantel开发了渐近测试统计,但在素食包中,函数mantel()使用排列测试。与PERMANOVA检验一样,通过随机重新排列输入距离矩阵之一(第一相异度矩阵)的行和列来获得检验统计量z的p值。显著性检验就是排列后的Z大于观察到的Z的分数。它是给定这个大小或更大的Z的概率。如果随机化经常产生大于或等于观测数据的相关性,几乎没有证据表明相关性不同于零。如果对这两个距离进行秩变换,则Mantel检验与ANOSIM相同,与秩变换MRPP相似。

第四步:计算两个矩阵的相关系数r,确定它们之间的关系强度。标准化的Mantel统计数据r如下所示:

将标准化Mantel统计量r解释为与其他类型的相关系数(如皮尔逊系数r)一样是“效应大小”的量度的相关系数。r的值落在−1 到+1的范围内,接近−1表示强负相关,+1表示强正相关。如果样本之间的平均组内距离小于样本之间的平均总距离,则r>0;r越大,两组之间的相关性越强。Mantel检验用于比较两个距离(不相似)矩阵(例如A和B)之间的相关性,而部分Mantel检验用于估计这两个矩阵之间的相关性,同时控制控制矩阵C的影响。目标是去除虚假相关性。在生态学文献中,部分Mantel检验的一个典型例子用于将群落距离矩阵与从环境参数导出的另一个距离矩阵进行比较,同时使用地理距离作为第三个“控制”距离矩阵。在微生物组研究中,第三基质C可以是环境基质,也可以是由环境基质或另一变量(如处理成员或条件)创建的实验设计矩阵。但请记住,从环境参数导出的环境矩阵和设计矩阵本质上都需要是数值/连续的;还需要是距离(不同)矩阵。如果创建的矩阵不是距离(相异)矩阵,则在将其用作部分Mantel测试中的控制矩阵之前,应使用距离函数将其转换为距离(相异)矩阵。部分Mantel检验是通过两个步骤来构造的:首先,进行AC之间的回归以构造残差矩阵A‘,并进行BC之间的回归以构造残差矩阵B’;然后通过标准的Mantel检验来比较两个残差矩阵A‘和B’

②用Vegan软件包演示Mantel检验

两个群落距离矩阵的相关性检验:随着深度采样的进行,Bray-Curtis、Jaccard和Sørensen相异度指数通常具有较高的相关性。我们可以对这些矩阵进行 mantel检验。mantel检验可以通过vegan、ape和ade4包进行。在这里,我们使用vegan包进行测试。一种语法如下所示:mantel(xdis, ydis, method = “pearson”, permutations = 1000)

其中,xdis、ydis是相异矩阵或距离对象;methods是相关方法,是字符串,被接受为“Pearson”、“Spearman”或“Kendall”;permutations是在评估显著性时需要指定的排列数量。在第7章。我们使用GUniFrac软件包中的吸烟者数据集绘制了树,并说明了排序技术。在本节中,我们再次使用它来说明Mantel检验。以下R代码加载包、访问和子集数据。

> library(GUniFrac)

> data(throat.otu.tab)

> otu_table <-throat.otu.tab

> data(throat.meta)

> data(throat.tree)

> library(dplyr)

> throat_meta <- select(throat.meta, SmokingStatus, Age, Sex, PackYears)

Bray-Curtis和Jaccard相异性的Pearson积矩相关检验:Bray-Curtis和Jaccard相异指数的相关性估计如下。

> library(vegan)

> mantel(bray, jaccard,"pearson",permutations=1000)

Mantel statistic based on Pearson's product-moment correlation

Call:

mantel(xdis = bray, ydis = jaccard, method = "pearson", permutations = 1000)

Mantel statistic r: 0.993

Significance: 0.001

Upper quantiles of permutations (null model):

90%  95% 97.5%  99%

0.154 0.201 0.233 0.266

Permutation: free

Number of permutations: 1000

Mantel检验可以这样解释:我们指定排列=1000来对Bray-Curtis距离矩阵的行和列执行1000次随机化,其在零假设下生成相关性分布:Bray-Curtis矩阵中的样本之间的距离与Jaccard矩阵不是线性相关的。结果表明,在这种情况下,在这1,000个值中,没有一个大于观测值0.993(即排列数<观察值=1,>排列数>观察值=0,排列数=观察值=1),因此获得与观察值一样大的值的几率小于千分之一,表示p值为0.001。由于偶然产生的大关联是如此之小,我们可以得出结论,Bray-Curtis距离差异随Jaccard距离线性增加,换言之,这两个差异指数呈高度正相关。我们可以绘制Bray-Curtis和Jaccard矩阵的pearson相关图,如下所示:

> plot(bray, jaccard, main="Scatter plot of Bray-Curtis index vs. Jaccard index")

pearson系数r为0.993,p值为0.001。Bray-Curtis和Jaccard矩阵中元素的散点图表明这两个距离/不同之间存在线性关系,如图9.3所示。

Bray-Curtis和Sørensen异同的Spearman秩相关检验:我们使用Spearman方法计算了Bray-Curtis和Sørensen相异指数的相关性,如下所示:

> mantel(bray, Sørensen,"spearman",permutations=1000)

Mantel statistic based on Spearman's rank correlation rho

Call:

mantel(xdis = bray, ydis = Sørensen, method = "spearman", permutations

= 1000)

Mantel statistic r: 0.514

Significance: 0.001

Upper quantiles of permutations (null model):

90% 95% 97.5% 99%

0.132 0.178 0.206 0.241

Permutation: free

Number of permutations: 1000

Jaccard 和 Sørensen异同的Kendall秩相关检验:下面,我们使用Kendall方法计算Jaccard和Sørensen相异指数之间的相关性。

> mantel(jaccard,Sørensen,"kendall",permutations=1000)

Mantel statistic based on Kendall's rank correlation tau

Call:

mantel(xdis = jaccard, ydis = Sørensen, method = "kendall", permutations

= 1000)

Mantel statistic r: 0.358

Significance: 0.001

Upper quantiles of permutations (null model):

90%  95%  97.5%    99%

0.0961 0.1285 0.1521 0.1849

Permutation: free

Number of permutations: 1000

测试群落矩阵和实验设计的相关性:之前Mantel检验在两个群落矩阵之间进行。在这里,我们选择Bray-Curtis矩阵作为相依距离矩阵,元数据中的吸烟状况作为实验设计矩阵来说明检验。我们将测试吸烟者和不吸烟者的样本之间的Bray-Curtis不同之处是否不同。变量SmokingStatus在喉咙中元数据集。以下R代码提取此变量并将其转换为距离矩阵。

> library(dplyr)

> group <-select(throat.meta, SmokingStatus)

> group$Status <- with(group, ifelse(SmokingStatus%in%"Smoker", 1, 0))

> group <- group[,-1]

> group_dist <- vegdist(scale(group), "euclid")

下面的R代码对Bray-Curtis矩阵(依赖距离矩阵)和吸烟状况(预测矩阵)的pearson积矩相关性进行Mantel检验。

> mantel(group_dist,bray,"pearson",permutations = 1000)

Mantel statistic based on Pearson's product-moment correlation

Call:

mantel(xdis = group_dist, ydis = bray, method = "pearson", permutations= 1000)

Mantel statistic r: 0.0728

Significance: 0.003

Upper quantiles of permutations (null model):

90%    95%  97.5%    99%

0.0245 0.0336 0.0436 0.0581

Permutation: free

Number of permutations: 1000

Mantel统计量r为0.0728,p值为0.003,表明结果在a为0.05时具有统计学意义。因此,我们得出结论,吸烟状况确实可以预测Bray-Curtis差异,尽管这两个矩阵之间的正相关性相对较弱。通过指定1000个排列来获得p值。

控制第三矩阵的两个距离矩阵的相关性的部分Mantel检验:Mantel部分测试用于在控制环境距离矩阵的同时进行社区距离矩阵和设计距离矩阵的相关性分析。例如,Mantel部分测试可以用来确定当控制Bray-Curtis距离(相异度)矩阵和吸烟状况距离矩阵时,该矩阵与年龄、性别和每年的包装是否有显著的相关性。假设我们想知道“在控制环境矩阵(预测矩阵:每年的年龄、性别和包装)的同时,Bray-Curtis相异度(依赖矩阵)中有多少变异性是由吸烟状况(设计矩阵)解释的?”然后,通过构造吸烟状况与每年年龄、性别和包装的预测矩阵之间的回归的残差矩阵A‘和Bray-Curtis相异度与每年的年龄、性别和包装的预测矩阵之间的回归的残差矩阵B’,来计算检验统计量,该检验统计量是通过构造吸烟状况与每年的年龄、性别和包装的预测矩阵之间的回归的残差矩阵A‘和Bray-Curtis相异度与每年的预测矩阵之间的回归的残差矩阵B’来计算的。然后,通过标准Mantel检验比较两个残差矩阵A‘和B’。下面的R代码子集是喉部元数据集中的环境数据集。

> meta <- select(throat.meta, Age,Sex,PackYears

在原始数据集中,性别是一个标记为“Male”和“Female”的字符变量。为了将此数据集转换为数字距离矩阵,我们需要把它重新编码成一个数值。以下R代码创建数字变量性别。

> meta$Gender <- with(meta,ifelse(Sex%in%"Male", 1, 0))

> env <-select(meta, Age,Gender,PackYears)

下面的R代码使用vegan包中的函数vegdist()将此数据集转换为距离矩阵。

> env_dist <- vegdist(scale(env), "euclid")

Mantel部分测试使用pearson方法进行,如下所示。

> mantel.partial(group_dist,bray,env_dist, method = "pearson", permutations=1000)

Partial Mantel statistic based on Pearson's product

Call:

mantel.partial(xdis = group_dist, ydis = bray, zdis = env_dist,    method="pearson", permutations = 1000)

Mantel statistic r: 0.068

Significance: 0.008

Upper quantiles of permutations (null model):

90%    95%  97.5%    99%

0.0215 0.0321 0.0438 0.0641

Permutation: free

Number of permutations: 1000

0.068的Mantel统计表明,在控制环境矩阵随年龄、性别和包次的差异的情况下,吸烟状况与Bray-Curtis距离(不相似)矩阵之间的正相关关系相对不强。然而,p值为0.008,表明结果在a=0.05时具有统计学意义。


9.3 Hypothesis Tests Among-Group Differences Using ANOSIM(假设检验组间差异的ANOSIM方法)

①相似度分析(ANOSIM)简介

ANOSIM只是基于两个距离矩阵之间的标准化秩相关的Mantel检验的修改版本。ANOSIM检验是由发展起来的,它是社区生态学家和微生物组研究人员经常使用的一种无分布的多变量数据分析方法。它是一种基于组内和组内相似性的排列检验来检验两组或更多组样本之间没有差异的假设的非参数程序。它根据分组因子或实验处理水平,比较不同采样单位之间物种(或任何其他分类群)丰度和组成的变化(例如,β多样性)。与方差分析类似,ANOSIM将组成员或治疗水平视为因素,并将其建模为解释变量。相似性分析基于一个简单的概念:如果被测试组是有意义的,那么组内的样本在组成上应该比来自不同组的样本更相似。因此,零假设是:试验组成员或治疗条件之间没有差异。本试验采用Bray-Curtis相似性测度方法。ANOSIM检验统计量基于组间和组内平均排名的差异。具体如下:

执行ANOSIM主要有五个步骤:第一步:计算相异矩阵。步骤2:计算等级相异度,并将相异度最小的等级分配为1。步骤3:计算组内和组内等级差异的平均值。

R被解释为与其他类型的相关系数(如pearson系数)一样,是“效应大小”的量度的相关系数。检验统计量是检验在零假设下不同组间是否存在差异。如果零假设是正确的,则R=0,这表明组内和组内的差异在平均上是相同的。当高相似度和低相似度完美地混合在一起,并且与群体没有关系时,就会发生这种情况。如果零假设被拒绝,则R≠0,这表明组内的所有样本对比来自不同组的任何一对样本更相似。例如,在这种情况下,所有最相似的样本都在样本组内,则R=1。从理论上讲,R<0也是可能的,但实际上这种情况是在生态学和微生物群研究中不太可能。极端情况,R=−1,表示最相似的样本都不在组中。第五步:检测显著性。与PERMANOVA检验一样,检验统计量R的p值是通过排列获得的:将样本观察值随机分配到组中。然后,将组内和组间的排序相似度与随机机会产生的相似度进行比较。显著性检验仅仅是置换后的R大于R的观测值的分数,它是给定这个大小或更大的R的概率。假设检验背后的算法与PERMANOVA相同:如果两组样本单位在其物种(或其他分类群)组成上确实不同,则组间的组成差异应该大于组内的组成差异。

②基于Vegan软件包的图解相似度分析(ANOSIM)

相似性分析(ANOSIM)提供了一种统计检验两组或多组抽样单元之间是否存在显著差异的方法。相似性分析是通过vegan包中的函数anosim()实现的。该函数假定组内所有排序的不同点具有大致相等的中位数和范围。输入数据是一个相异矩阵,可以由函数dist()或vegdist()生成。该功能还具有汇总和绘图方法,用于执行建模后分析。下面是一个语法示例。

anosim (data, grouping, permutations = 1000, distance = ”bray”)

其中,data=数据矩阵或数据框,其中行是样本,列是响应变量,或者相异对象或相异度的对称方阵;grouping=分组变量(因子);permutation=用于评估ANOSIM统计量的重要性的排列的数目;distance=距离或相异度度量。如果输入数据没有不同的结构或为对称方阵,则需要指定距离。这里使用VDR小鼠的粪便数据来说明ANOSIM试验。首先,我们需要加载数据和vegan包(如果它们还没有加载)。如前所述获得分组信息。

> abund_table=read.csv("VdrFecalGenusCounts.csv",row.names=1,check.names=FALSE)

> abund_table<-t(abund_table)

> grouping<-data.frame(row.names=rownames(abund_table),t(as.data.frame (strsplit(rownames(abund_table),"_"))))

> grouping$Group <- with(grouping,ifelse(as.factor(X2)%in% c(11,12,13,14,15),c("Vdr-/-"), c("WT")))

> grouping<- grouping[,c(4)]

用Bray-Curtis相异度拟合ANOSIM:以下R码使用Bray-Curtis相异度矩阵作为输入数据运行ANOSIM。

> library(vegan)

> bray<-vegdist(abund_table, "bray")

> anosim(bray, grouping,permutations = 1000)

Call:

anosim(dat = bray, grouping = grouping, permutations = 1000)

Dissimilarity: bray

ANOSIM statistic R: 0.19

Significance: 0.2

Permutation: free

Number of permutations: 1000

从函数ANOSIM()的输出中可以看出,它包括建模公式以及函数调用使用的相异方法,ANOSIM统计量R的值,排列的显著性和R的排列值的个数,0.2的p值大于0.05,表明组内相似度不大于组间相似度,在0.05显著水平上。我们可以得出结论,没有证据表明组内样本比随机预期的更相似。以下R码使用大量数据框作为输入数据运行ANOSIM。

> anosim(abund_table, grouping, permutations = 1000, distance = "bray")

Call:

anosim(dat = abund_table, grouping = grouping, permutations = 1000,

distance = "bray")

Dissimilarity: bray

ANOSIM statistic R: 0.19

Significance: 0.19

Permutation: free

Number of permutations: 1000

ANOSIM拟合结果可以通过函数summary()进行汇总。

> fit <- anosim(bray, grouping,permutations = 1000)

> summary(fit)

Call:

anosim(dat = bray, grouping = grouping, permutations = 1000)

Dissimilarity: bray

ANOSIM statistic R: 0.19

Significance: 0.18

Permutation: free

Number of permutations: 1000

Upper quantiles of permutations (null model):

90%  95% 97.5%  99%

0.282 0.323 0.538 0.846

Dissimilarity ranks between and within classes:

                 0% 25% 50%  75% 100%  N

Between    2    9.5   17    21.50   28  15

Vdr-/-        1     6.5   14    19.75    25  10

WT           5      8.0   11     16.50   22   3

最后,我们可以绘制结果图(图9.4):

> plot(fit)

利用Jaccard相异度拟合ANOSIM:以下R码使用Jaccard方法拟合ANOSIM。

> anosim(abund_table, grouping, permutations = 1000, distance = "jaccard")

Call:

anosim(dat = abund_table, grouping = grouping, permutations = 1000,

distance= "jaccard")

Dissimilarity: jaccard

ANOSIM statistic R: 0.19

Significance: 0.2

Permutation: free

Number of permutations: 1000

用Sørensen相异度拟合ANOSIM:下列R码适用于使用Sørensen方法的ANOSIM。

> fit_S <- anosim(abund_table, grouping, permutations = 1000,distance ="Sørensen")

> summary(fit_S)

Call:

anosim(dat = abund_table, grouping = grouping, permutations = 1000)

Dissimilarity: bray

ANOSIM statistic R: 0.19

Significance: 0.19

Permutation: free

Number of permutations: 1000

Upper quantiles of permutations (null model):

90%  95% 97.5%  99%

0.282 0.344 0.546 0.846

Dissimilarity ranks between and within classes:

                0%   25% 50%  75% 100%  N

Between    2     9.5  17      21.50  28  15

Vdr-/-         1      6.5  14      19.75  25  10

WT            5      8.0  11       16.50  22  3


9.4 Hypothesis Tests of Multi-response Permutation Procedures (MRPP)(多响应置换过程(MRPP)的假设检验)

① MRPP简介

多响应置换过程(MRPP)是一种基于组内和组内差异的排列检验来检验两组或多组样本之间没有差异的假设的非参数过程。测试差异可以是平均值(位置)的差异或组内距离(扩散)的差异。与PERMANOVA类似,MRPP在概念和方法上都与方差分析相结合:它比较组内和组间的差异。潜在的想法也是一样的。MRPP检验统计量基于组内差异和组内差异之间的加权平均差异。具体如下:

实施MRPP主要有五个步骤:第一步:一般情况下使用Euclidean距离计算距离矩阵,社区数据使用比例城市街区度量。步骤2:计算每组Di中的平均距离。步骤3:计算g组的增量。第四步:确定效果大小。统计量A是效应大小的度量,在ANOISIM中的解释类似于R;它是组内同质性与随机期望值的比较。

检验统计量是检验在零假设下不同组间是否存在差异。如果组内异质性等于偶然期望,则A=0;当组内所有项目相同时,A=1。A<0.1在生态学中普遍存在,A>0.3在生态学中较高。然而,根据我们的知识,在微生物组文献中没有关于效应大小的报告标准。第五步:测试显著性。与PERMANOVA和ANOSIM检验一样,检验统计量\delta 的p值是通过Monte Carlo排列得到的。显著性检验只是简单地计算小于观测三角洲的排列三角洲的比例,并进行小样本校正。它是给定这个小的或更小的增量的概率。

②以Vegan软件包为例说明MRPP

MRPP提供了一种统计测试两组或更多组采样单元之间是否存在显著差异的方法。MRPP是通过vegan包中的函数mrpp()实现的。如果输入数据不同,则可以直接使用的。如果它是具有按响应进行观测的数据结构的矩阵,则在使用之前需要通过函数vegdist()计算相异度。默认距离是欧几里得方法,但是还应用了vegdist()中的其他不同之处。该函数具有汇总和绘图两种方法,用于执行建模后分析。以下是一个示例语法:mrpp(data, grouping, permutations = 1000, distance = “bray”)

其中,data=数据矩阵或数据框,其中行是观测值,列是响应,或者不同的对象或不同的对称方阵。响应可以是单变量或多变量;grouping=分组变量(因子);排列=用于评估MRPP统计量重要性的排列数目;距离=距离或相异度量。如果输入数据没有不同的结构或为对称方阵,则需要指定距离。与ANOSIM测试一样,我们需要访问数据并加载vegan包。

用Bray-Curtis相异度拟合MRPP:下面的R码使用Bray-Curtis相异度矩阵作为输入数据来运行MRPP。

> mrpp(bray, grouping,permutations = 1000)

Call:

mrpp(dat = bray, grouping = grouping, permutations = 1000)

Dissimilarity index: bray

Weights for groups:  n

Class means and counts:

         Vdr-/- WT 

delta 0.44  0.427

n         5      3   

Chance corrected within-group agreement A: 0.0502

Based on observed delta 0.4353 and expected delta 0.4583

Significance of delta: 0.17

Permutation: free

Number of permutations: 1000

观测delta和预期delta分别为0.4353和0.4583。差值的显著性为0.0502.13,校正后的组内协议A的机率为0.。在样本量较小的情况下,我们得出的结论是,在0.05的显著性水平上,两个属群之间没有统计上的显著差异。以下代码使用丰度数据框作为输入数据运行MRPP:

> mrpp(abund_table, grouping, permutations = 1000, distance = "bray")

Call:

mrpp(dat = abund_table, grouping = grouping, permutations = 1000,distance= "bray")

Dissimilarity index: bray

Weights for groups:  n

Class means and counts:

        Vdr-/- WT 

delta 0.44  0.427

n        5      3   

Chance corrected within-group agreement A: 0.0502

Based on observed delta 0.4353 and expected delta 0.4583

Significance of delta: 0.15

Permutation: free

Number of permutations: 1000

使用Meandist()获取平均距离矩阵:函数meandist()计算平均簇内(块)相异度(对角线)和簇间(块)相异度(非对角线元素)的矩阵,以及分组计数的属性n。

> meandist(bray, grouping,permutations = 1000)

        Vdr-/-  WT

Vdr-/- 0.4401 0.4766

WT    0.4766 0.4273

attr(,"class")

[1] "meandist" "matrix" 

attr(,"n")

grouping

Vdr-/-  WT

5      3

使用meandist()和Summary()获取平均距离和汇总统计信息:我们可以对函数meandist()对象使用函数Summary()来查找这些不同之处的类内、类间和总体平均值,以及具有所有权重类型选项和分类强度的MRPP统计数据。

> bray_mrpp <- meandist(bray, grouping,permutations = 1000,distance ="bray",weight.type = 1)

> summary(bray_mrpp)

Mean distances:

                          Average

within groups      0.4372

between groups  0.4766

overall                0.4583

Summary statistics:

                                      Statistic

MRPP A weights n          0.05016

MRPP A weights n-1        0.04900

MRPP A weights n(n-1)    0.04612

Classification strength  0.04131


9.5 Compare Microbiome Communities Using the GUniFrac Package(使用GUniFrac软件包比较微生物群落)

① UniFrac、加权UniFrac和广义UniFrac距离度量简介

在多变量微生物群落组成分析中,未加权和加权UniFrac距离的度量方法被最广泛地应用于两个微生物群落的度量。UniFrac距离,也称为未加权的UniFrac距离,是由Lozupone等人提出的。这是一种基于系统发育距离来估计微生物组样本之间差异的方法。UniFrac距离度量的目标是实现来自不同条件的微生物样本之间的客观比较。未加权的UniFrac定义如下:

按照这种定义,UniFrac度量的计算方法是将两个样本之间没有共享的分支长度除以任一样本覆盖的分支长度,而不是两个样本都覆盖的分支长度。距离0表示两个样本相同,距离1表示两个样本没有共同的分类群。作为缺失的二元检验,未加权的UniFrac距离仅考虑分类单元的存在和缺失信息;它在检测稀有谱系的丰度变化方面是最有效的。然而,这种距离度量的定义完全忽略了类群丰度信息。在原始的未加权方法中增加了比例加权,因此将这种新的UniFrac度量称为加权UniFrac。加权UniFrac距离利用类群丰度信息,并根据丰度差对分支长度进行加权;在加权UniFrac距离度量中,系统发育树的每个分支长度是根据两个样本之间分类单元丰度比例的差异来加权的,而不是只看是否有分类单元。加权UniFrac距离被定义为:

该定义的表述有几个特征:(1)它用丰度差来加权分支长度;(2)即使我们将丰度数据转换成有无数据,dW也不能被简化为dU;以及(3)dW使用绝对比例差,这导致DWI的值主要由比例大的分支决定,并且对小比例的分支上的丰度变化不那么敏感。通过将比例加权添加到UniFrac距离,加权的UniFrac距离减少了低丰度分类群被表示为0或由取决于采样深度的低计数表示的问题。在加权的UniFrac中,低丰度分类群的重量要低得多,因此对度量报告的总距离的影响较小。因此,加权的UniFrac既可以检测每个谱系中存在多少序列的变化,也可以检测存在哪些分类群的变化;检测丰富血统的变化是最敏感的。然而,无论是未加权的还是加权的UniFrac距离在检测适度丰富的谱系中的变化方面都可能不是非常强大,因为他们太看重稀有血统或最丰富的血统。因此提出了以下广义UniFrac距离来统一加权UniFrac距离和未加权UniFrac距离。

② Breast Milk Data Set(母乳数据集)

母乳数据集来自最近发表的两项研究。它收集了58个微生物组样本,这些样本取自正在哺乳的加拿大高加索女性。母乳是发育中的婴儿的重要细菌来源,会影响新生儿的细菌组成,进而影响日后的疾病风险。在第一篇论文中,作者使用这个数据集来比较早产和足月产、剖腹产(选择性和非选择性)和阴道分娩以及男婴和女婴之间的细菌图谱。在第二期出版物中,使用相同的数据集来说明作者自己开发的工具,包括未加权的UniFrac、加权的UniFrac、informationUniFrac和Ratio  UniFrac。在这里,我们使用这个数据集来比较使用GUniFrac软件包的微生物群落。

③ 使用GUniFrac软件包比较微生物群落

软件包GUniFrac是用来实现广义的uniFrac距离来比较微生物群落的。作为PERMANOVA过程,在GUniFrac软件包中,基于排列来评估伪F统计量的重要性。如果一种环境所特有的树木的比例比偶然预期的要大,那么这两个群落就被认为是不同的。在此软件包中,还可以实现未加权和加权UniFrac以及方差调整后的加权UniFrac距离。

其中mi是第i个分支上来自两个社区的个人/读取总数,m是个人/读取总数。它的开发是为了说明这样一个事实,即加权UniFrac距离没有考虑随机抽样下权重的变化,从而导致检测群落之间差异的能力较小(Chang等人。GUniFrac包依赖于vegan包和ape包,作者还建议使用包ade4。下面给出一种用法。 GUniFrac(otu.tab, tree, alpha = c(0, 0.5, 1))

其中,out.tab=具有行(=样本)和列(=OTU)的OTU计数表;tree= rooted phylogenetic tree of R class “phylo”;alpha= parameter controlling weight on abundant lineages。UniFrac测量计算需要两条信息:计数表和系统发育树。因此,运行GUniFrac软件包需要两个数据集:计数表(如OTU表)和系统发生树。在下面,我们将一步一步地说明如何使用GUniFrac包来比较微生物群落。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,340评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,762评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,329评论 0 329
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,678评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,583评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,995评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,493评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,145评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,293评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,250评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,267评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,973评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,556评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,648评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,873评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,257评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,809评论 2 339

推荐阅读更多精彩内容