ggplot2之配对数据差异比较及结果可视化
寫在前面
從元旦之前,由于工作確實非常的多,所以更新的頻率持續下降,現在基本上是周更了,這種情況應該還會要持續一段時間,可能要到4月或者5月才能恢復正常的更新頻率。
上一次給大家帶來結果可視化相關的推文好像有很長的時間了,這應該是年前最后一篇推文了,給大家帶來一個不太常用,但是有時候又挺有用的結果圖繪制的方法。
什么是配對數據?
這篇推文主要介紹配對數據的差異檢驗并且實用箱圖加配對連線的方式來展示數據結果。
那什么是配對數據呢?
配對數據就是指兩組互相配對樣本同一變量的數值,有點類似于相關性分析中的兩組數據,但是差別是相關性分析中的數據是同一批樣本的不同變量,而配對數據是同一變量的兩組互相匹配的樣本。
舉幾個簡單的例子,比如說同一批站位水體和沉積物的pH、鹽都等等,或者同一批污水處理廠進水和出水的營養物質含量。
對于這種配對的數據,雖然我們面對的是兩組不同的樣本,但實際上這兩組樣本之間是有聯系的,是存在一一對應關系的。
差異檢驗
既然是配對的數據,在進行差異檢驗的時候就不能使用普通的檢驗方式了。
配對的數據一般都是兩組,通常使用的差異檢驗方法就是配對t檢驗 (paired t-test)。
這里舉一個具體的例子來進行解釋和說明,比方說我現在想要比較同一個河流中一系列位點水體中游離態的細菌群落與顆粒物附著的細菌群落alpha多樣性之間的差異。
示例數據如下圖所示,第一列為分組列,第二列代表樣本的配對信息,之后幾列為待比較的alpha多樣性指數數據。
首先導入分析數據,并指定分組因子。
bb <- read.table("alpha_diversity_1.txt",header = TRUE,sep = "\t")library(reshape2) bb1 <- melt(bb) bb$Group <- factor(bb$Group,levels = c("Free","Adherent")) bb1$Group <- factor(bb1$Group,levels = c("Free","Adherent"))之后使用配對t檢驗分析不同alpha多樣性指數的差異顯著性,并返回分析結果。
bb.sample <- colnames(bb)[3:ncol(bb)] test.b <- c() x <- c("a","b") y <- c("a","a")for (i in bb.sample) {fit1 <- t.test(as.formula(sprintf("%s ~ Group",i)),data = bb,paired = TRUE) if (fit1$p.value < 0.05) {res1 <- x}else{res1 <- y}test.b <- cbind(test.b,res1) } colnames(test.b) <- colnames(bb)[3:ncol(bb)] rownames(test.b) <- levels(bb$Group) test.b <- melt(test.b) colnames(test.b) <- c("Group","variable","value")最后會得到一個test.b的數據框,在第三列以不同的小寫字母表示差異檢驗的結果。
??這個數據是我隨機生成的,所以全都沒有顯著性差異。
結果可視化
首先構建用于繪圖的數據。
library(tidyverse) test.b1 <- bb[,c(1,3:ncol(bb))] %>% gather(variable,value,-Group) %>% group_by(variable,Group) %>% summarise(Max = max(value)) test.b11 <- dcast(test.b1,Group~variable)for (i in 2:ncol(test.b11)) {test.b11[,i] <- test.b11[,i] + max(test.b11[,i])*0.015} test.b11 <- melt(test.b11) test.b1 <- merge(test.b1,test.b11,by = c("variable","Group")) test.b2 <- merge(test.b,test.b1,by = c("variable","Group"))bb1$variable <- factor(bb1$variable,levels = c("Chao1","ACE","Shannon","Simpson")) test.b2$variable <- factor(test.b2$variable,levels = c("Chao1","ACE","Shannon","Simpson"))之后進行結果的可視化。
library(ggplot2) cbbPalette <- c("#B2182B","#56B4E9") p <- ggplot(bb1,aes(Group,value)) + geom_boxplot(aes(color = Group),outlier.size = 0,size = 0.8) +geom_line(aes(group = Paired),color = "grey70") +geom_point(aes(color = Group),size = 2.5,alpha = 0.5) +geom_text(data = test.b2,aes(x = Group,y = value.y,label = value.x),size = 6,color = "black",fontface = "bold") +scale_color_manual(values = cbbPalette) +ylab("The alpha diversity indices between free\nand adherent bacterial communities ") +facet_wrap(.~variable,ncol = 2,scales = "free_y") +theme_bw()+theme(axis.ticks.length = unit(0.4,"lines"), axis.ticks = element_line(color='black'),axis.line = element_line(colour = "black"), axis.title.x=element_blank(),axis.title.y=element_text(colour='black', size=18,face = "bold",vjust = 1.5),axis.text.y=element_text(colour='black',size=13,face = "bold"),axis.text.x=element_text(colour = "black",size = 14,face = "bold"),strip.text = element_text(colour = "black",size = 18,face = "bold"),legend.position = "none")這里使用箱須圖表示兩組數據的分布情況,之后使用散點+連線的方式表示數據的配對關系,最后應用不同的小寫字母來表示數據的差異顯著性。
之后保存圖片即可。
png("alpha_diversity_1.png",width = 4000,height = 3600,res = 600) p dev.off() pdf("alpha_diversity_1.pdf",width = 7,height = 6) p dev.off()代碼的詳細解釋我就不寫了,其實挺簡單的,都是非?;A的東西,主要就是注意兩點,一個是不同圖層填充顏色的透明度,另一個就是箱子、點和線3個圖層添加的先后順序。
關注公眾號“紅皇后學術”,后臺恢復“配對檢驗”獲取繪圖實例的代碼!!
往期精品(點擊圖片直達文字對應教程)
機器學習
后臺回復“生信寶典福利第一波”或點擊閱讀原文獲取教程合集
總結
以上是生活随笔為你收集整理的ggplot2之配对数据差异比较及结果可视化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习算法-随机森林初探(1)
- 下一篇: 上期送书中奖名单