作統計學分析的其中一個重要目的就是尋找組間差別,在研究中,咱們最常關注的問題莫過於處理組與對照組是否存在了顯著不一樣。就兩組間比較而言,t檢驗是常見的分析方法之一。api
本文簡介怎樣在R中進行t檢驗,以實現兩組間差別分析。微信
本文使用的做圖數據的網盤連接(提取碼 6268):app
https://pan.baidu.com/s/108oBkDTkuJ1HGBPX0h5Osgless
文件「alpha.txt」爲某16S細菌羣落測序所得到的部分alpha多樣性指數數據,包含3列信息:sample,樣本名稱;observed_species和shannon分別爲兩種類型的alpha多樣性指數。文件「group.txt」爲各樣本分組信息,第一列(sample)爲各樣本名稱;第二列(group)爲各樣本的分組信息。編輯器
接下來,咱們指望在R中運行t檢驗,以查看不一樣分組間(兩兩分組之間)的各alpha多樣性指數是否存在顯著不一樣。ide
數據預處理及正態性假設檢驗函數
數據預處理post
library(reshape2)
#讀入文件,合併分組信息,數據重排
alpha <- read.table('alpha.txt', sep = '\t', header = TRUE, stringsAsFactors = FALSE, check.names = FALSE)
group <- read.table('group.txt', sep = '\t', header = TRUE, stringsAsFactors = FALSE, check.names = FALSE)
alpha <- melt(merge(alpha, group, by = 'sample'), id = c('sample', 'group'))
#咱們指望查看 group1 和 group2 的 observed_species 指數是否存在顯著差別
#選擇要比較的分組
richness_12 <- subset(alpha, variable == 'observed_species' & group %in% c('1', '2'))
richness_12$group <- factor(richness_12$group)
head(richness_12, 10)
選取的數據框「richness_12」內容以下所示。第一列(sample),兩組數據中所含樣本名稱;第二列(group),兩組分組名稱,且分組列已轉化爲因子類型;第三列(variable),alpha多樣性指數observed_species;第四列(value),observed_species指數的數值。網站
正態性假設檢驗spa
正態QQ圖
如下使用car包中的qqPlot(),繪製QQ圖查看數值分佈。結果中,橫座標是標準的正態分佈值,縱座標是咱們數據的值。若是二者基本相等,或者說全部的點都離直線很近,落在置信區間內(圖中虛線部分,默認展現95%置信區間),即代表正態性假設符合得很好。
##正態 qq 圖驗證數據正態性
library(car)
#QQ-plot
qqPlot(lm(value~group, data = richness_12), simulate = TRUE, main = 'QQ Plot', labels = FALSE)
Shapiro-Wilk檢驗
Shapiro-Wilk相似於線性迴歸的方法,是檢驗其於迴歸曲線的殘差,據此驗證數據分佈的正態性。R中提供了可用於執行Shapiro-Wilk檢驗的函數shapiro.test(),原假設(或稱零假設)爲數據集符合正態分佈,若結果中p值大於0.05,則接受原假設,數據分佈符合正態性。
##Shapiro-Wilk 檢驗,當且僅當二者 p 值均大於 0.05 時代表數據符合正態分佈
shapiro <- tapply(richness_12$value, richness_12$group, shapiro.test)
shapiro
shapiro$'1'$p.value
shapiro$'2'$p.value
T檢驗
綜上,咱們的數據分佈經過了正態假設檢驗,便可執行t檢驗。可分爲獨立樣本的t檢驗與非獨立樣本的t檢驗。
獨立樣本的t檢驗
若是樣本間是相互獨立的,可選用獨立樣本t檢驗。R語言t檢驗函數t.test()中默認兩組間相互獨立(默認參數paired = FALSE),執行獨立樣本的t檢驗。同時需注意,在R中的t檢驗默認假定方差不相等(默認參數var.equal = FALSE),並使用Welsh的修正自由度;能夠經過參數「var.equal= TRUE」假定方差相等,並使用合併方差估計。此外,t.test()默認的備擇假設是雙側的(默認參數alternative = 'two.sided'),即執行雙側檢驗;可分別使用「alternative= 'less'」或「alternative = 'greater'」執行單側t檢驗。
咱們執行了一個假設方差不相等的雙側檢驗,以下示例。
##獨立樣本的 t 檢驗
t_test <- t.test(value~group, richness_12, paired = FALSE, alternative = 'two.sided')
t_test
t_test$p.value
因爲p值遠小於0.05,即拒絕了原假設(原假設兩組間沒有差別),group1和group2的observed_species指數間存在顯著不一樣。
非獨立樣本的t檢驗
若是樣本間並不是相互獨立的,可選用非獨立樣本t檢驗。例如,非獨立組設計(dependent groups design),前-後測設計(per-post design),或重複測量設計(repeated measures design)等。儘管此時你選用獨立t檢驗的方法也能夠。
此時在t.test()中設定參數「paired = TRUE」便可執行非獨立樣本的t檢驗,以下示例,一樣爲假設方差不相等的雙側檢驗。
##非獨立樣本的 t 檢驗
t_test <- t.test(value~group, richness_12, paired = TRUE, alternative = 'two.sided')
t_test
t_test$p.value
因爲p值遠小於0.05,即拒絕了原假設(原假設兩組間沒有差別),group1和group2的observed_species指數間存在顯著不一樣。
可視化展現
考慮做圖將兩組差別進行可視化展現。
#boxplot() 箱線圖示例
boxplot(value~group, data = richness_12, col = c('blue', 'orange'), ylab = 'Observed_species', xlab = 'Group', main = 't-test: p-value < 0.001')
#ggplot2 柱形圖示例
#分別計算各組中的均值以及標準差,展現爲均值 ± 標準差的柱形圖樣式
library(doBy) #使用其中的 summaryBy() 以方便按分組計算
library(ggplot2) #ggplot2 做圖
dat <- summaryBy(value~group, richness_12, FUN = c(mean, sd))
ggplot(dat, aes(group, value.mean, fill = group)) +
geom_col(width = 0.4, show.legend = FALSE) +
geom_errorbar(aes(ymin = value.mean - value.sd, ymax = value.mean + value.sd), width = 0.15, size = 0.5) +
theme(panel.grid = element_blank(), panel.background = element_rect(color = 'black', fill = 'transparent'), plot.title = element_text(hjust = 0.5)) +
labs(x = 'Group', y = 'Observed_species', title = 't-test: p-value < 0.001')
友情連接
本文分享自微信公衆號 - 小明的數據分析筆記本()。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。