R語言:菌群Alpha多樣性分析和Boxplot箱形圖

導讀

箱型圖(Boxplot)或者盒圖是一種能同時展示一組或多組數據的極值、四分位數、中位數和離群值,顯示數據離散情況的統計圖。下面介紹一下如何在R軟件中利用箱形圖可視化兩組微生物群的Alpha多樣性指數。過程分為以下幾步:1)模擬原始數據;2)模擬分組;3)標準化;4)計算多樣性;5)T檢驗;6)ggplot繪制Boxplot,保存結果。完成以上步驟將得到如下結果:

1.png

1 模擬豐度矩陣

set.seed(1995)
# 設置隨機種子:為了能多次獲取同一組隨機數

data=matrix(abs(round(rnorm(200, mean=1000, sd=500))), 20, 10)
# 獲取隨機正整數矩陣:20個樣本,10個菌種

colnames(data)=paste("Species", 1:10, sep=" ")
# 給細菌命名

rownames(data)=paste("Sample", 1:20, sep=" ")
# 給樣本命名,結果如下:

               Species 1 Species 2  ... Species 10
    Sample 1    36.70358 1255.7217
    Sample 2  2082.09677 1022.0450
    ...
    Sample 20

2 模擬分組文件

group=c("A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B")
# 把樣本分為A、B兩組

sample_id=rownames(data)
# 取樣本名

data_group=data.frame(sample_id, group)
# 做分組文件,如下:

   sample_id group
    1   Sample 1     A
    ...
    10 Sample 10     A
    11 Sample 11     B
    ...
    20 Sample 20     B

3 標準化豐度

data_norm=data
# 新建data_norm數據框,賦初值
sample_sum=apply(data, 1, sum)
# 計算每個樣本的菌種總豐度

for(i in 1:20)
{
    for(j in 1:10){
        data_norm[i,j]=data[i,j]/sample_sum[i]
        # [每個樣本的每個物種的豐度] / [該樣本物種總豐度] = 相對豐度
    }
}

apply(data_norm, 1, sum)
# 檢查每個樣本物種總豐度是否成功標準化到1,如下:

    Sample 1  Sample 2  Sample 3  Sample 4  Sample 5  Sample 6  Sample 7 
            1         1         1         1         1         1         1 
    Sample 8  Sample 9 Sample 10 Sample 11 Sample 12 Sample 13 Sample 14 
            1         1         1         1         1         1         1 
    Sample 15 Sample 16 Sample 17 Sample 18 Sample 19 Sample 20 
            1         1         1         1         1         1

4 計算Alpha多樣性

library(vegan)
# 加載VEGAN包

data_norm_shannon=diversity(data_norm, "shannon")
# 使用VEGAN包中的diversity函數計算每個樣品的Shannon Alpha多樣性指數

data_ggplot=data.frame(data_norm_shannon)
# 多樣性計算結果如下:

              data_norm_shannon
    Sample 1           2.209006
    ...
    Sample 20          2.198923

data_ggplot=data.frame(data_ggplot, data_group["group"])
# 添加分組信息,如下:

            data_norm_shannon group
    Sample 1           2.209006     A
    ...
    Sample 10          2.241821     A
    Sample 11          2.100319     B
    ...
    Sample 20          2.198923     B

5 T 檢驗

成組設計T檢驗需要兩個條件:1)個體間相互獨立;2)兩組樣本均來自正態分布總體;3)方差齊。我們可以利用直方圖和QQ圖觀察樣本是否呈正態分布,當然也可以直接用夏皮羅-威爾克(Shapiro-Wilk)假設檢驗的方法判斷樣本數據的分布。如果樣本數據符合正態分布,那么可以接著用Bartlett檢驗不同組樣本的方差齊性。兩個條件都滿足的話就可以做T檢驗了。我這里使用的是隨機產生的數據,所以分析結果就不要太在意了。

5.1 直方圖

group_A=data_ggplot$data_norm_shannon[data_ggplot$group=='A']
# 獲取A組的多樣性數據

group_B=data_ggplot$data_norm_shannon[data_ggplot$group=='B'] 
# 獲取B組的多樣性數據

hist(group_A)
hist(group_B)
# 繪制多樣性指數分布直方圖
# 觀察形狀若為倒鐘形那便是接近正態分布的

2.png

5.2 QQ圖

qqnorm(group_A)
qqnorm(group_B)
# 繪制多樣性指數QQ圖
# 觀察形狀是一條連接主對角線的線那便是接近正態分布

3.png

5.3 Shapiro-Wilk正態性檢驗

shapiro.test(data_ggplot$data_norm_shannon)
# 夏皮羅-威爾克(Shapiro-Wilk)檢驗正態性,p>0.05,接受原假設,符合正態分布

4.png

5.4 Bartlett方差齊性檢驗

bartlett.test(data_norm_shannon~group,data=data_ggplot)
# 巴特利特(Bartlett)檢驗方差齊性,p>0.05,接受原假設,即兩樣本數據方差齊

5.png

5.5 T 檢驗

with(data_ggplot,t.test(formula=data_norm_shannon~group,conf.level=0.95))
# T檢驗,p>0.05,沒法拒絕原假設,兩組Shannon多樣性指數差異不顯著

6.png

6 ggplot繪制箱形圖

library(ggplot2)
# 加載R包ggplot2

alpha_boxplot=ggplot(data_ggplot, aes(x=group, y=data_norm_shannon, fill=group))+
# 添加數據、xy值、 顏色參數給畫圖函數ggplot
geom_boxplot()+
# 盒圖
labs(title="Alpha diversity", x="Group", y="Shannon index")+
# 標題
theme(plot.title=element_text(hjust=0.5), legend.title=element_blank())
# 標題居中

pdf('result.pdf')
alpha_boxplot
dev.off()
# 保存結果,打開result.pdf文件,結果如下:

1.png

參考
1)R語言-t檢驗
https://blog.csdn.net/weixin_38322363/article/details/89811964
2)Shapiro-Wilk檢驗
http://www.lxweimin.com/p/e202069489a6
3)方差齊性檢驗的原理
https://zhuanlan.zhihu.com/p/26943946

同步發布于微信公眾號:微生態

\color{green}{????原創文章,碼字不易,轉載請注明出處????}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容