導讀
箱型圖(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
同步發布于微信公眾號:微生態