
差異顯著性檢驗是我們在分析資料的時候應用最多的統計學方法。
我們經常要比較兩組或多組資料是否具有顯著差異,同時我們還會用差異顯著性檢驗識别不同組樣品中具有顯著差異的變量。
這篇推文會分别介紹經常使用的差異顯著性檢驗方法在R語言中的實作。
方法選擇
差異顯著性檢驗具有多種方法,分别針對不同的情況,我們要根據自身情況選擇合适的方法進行分析。
⚠️以上方法均為比較不同組資料見均值的差異顯著性。
正态分布檢驗
可以看出在進行差異顯著性檢驗之前,最重要的一步就是要評估資料是否符合正态分布。
QQ圖
我們可以使用QQ圖的方法來評估資料是否符合或接近正态分布。
QQ圖是由觀測值與按正态分布的預期值做出來的散點圖,散點圖組成的回歸線越接近于标準線,表示實際觀測資料越接近正态分布。
QQ圖使用qqnorm和qqline兩個函數完成,其參數比較簡單,基本不需要修改和調整。
"Normal Q-Q Plot",
各參數意義:
- y為待分析資料;
- ylim為y軸範圍;
- main為圖像标題;
- xlab和ylab為x和y軸标簽;
- plot.it是否要繪圖;
- datax是否資料值為x軸資料。
FALSE, distribution = qnorm,
各參數意義:
- y為待分析資料;
- datax是否資料值為x軸資料;
- distribution定義資料的參考理論分布;
- probs為兩個數字的向量,代表可能性;
- qtype定義用于計算的分位數的類型。
使用一組随機資料繪制一個QQ圖的示例。
x 10)
qqnorm(x)
qqline(x)
shapiro.test
雖然QQ圖可以用于評估資料是否符合正态分布,但是其并沒有确定的标準,因而在使用時會有一定的限制。
我們還可以使用shapiro.test函數來判斷資料是否符合正态分布。
shapiro.test的零假設是變量符合正态分布,當結果的p-value > 0.05時,不能拒絕原假設,表明變量服從正态分布。
兩組樣本差異比較
确定資料是否符合正态分布之後,就可以對其進行組間差異顯著性比較了。
t-test
當資料分為兩組并且兩組資料均符合正态分布時,使用t-test進行差異顯著性比較,該分析由t.test函數完成。
NULL,
各參數意義:
- x和y為待分析資料;
- alternative規定檢測的類型;
- mu為原假設,即定義兩組資料均值的假設差異;
- paired是否進行配對檢驗;
- var.equal定義是否檢測兩組方差的一緻性;
- conf.level為顯著性等級。
⚠️t.test預設使用的是Welch t-test,該方法不要求比較資料方差齊性。
如果想要使用要求資料方法齊性的Student‘s t-test,需要把var.equal設定為TRUE。
方差齊性檢驗
方差齊性應用F-test進行檢驗,該分析由var.test函數完成。
1,
各參數意義:
- x為因變量資料;
- y為響應變量資料;
- ratio定義x和y方差的比值;
- alternative定義檢驗的類型;
- conf.level為置信水準。
t-test示例
随機生成兩個向量資料進行t-test。
x10)
y 10,mean = 5)
檢驗兩組資料方差是否齊性,p-value > 0.05表示兩組資料方差齊性。
進行t-test,p-value < 0.05表示兩組資料的均值具有顯著差異。
當兩組資料數量一緻并且具有比對關系時,可以進行配對t-test。
有時我們面對的是長資料,也就是在資料框中,一列代表需要分析的資料,而另一個因子列代表分組資訊,此時可以使用公式的方式進行差異顯著性檢驗。
以mtcars資料為例,資料中的vs列包含0和1兩種分組,我們比較資料框中mpg數值在這兩組中的差異。
data(mtcars)
mtcars$vs t.test(mpg~vs,data = mtcars)
⚠️使用公式的時候,待分析的資料在~之前,分組列在~之後。
⚠️在進行分析之前一定要将分組列設為factor。
wilcox秩和檢驗
當分析的資料不符合正态分布并且分組為兩組時,使用wilcox秩和檢驗來判斷兩組資料的均值是否具有顯著差異,該分析由wilcox.test函數完成。
NULL,
各參數意義:
- x和y為進行分析的資料;
- alternative定義檢驗的類型;
- paired定義是否進行配對檢驗;
- exact定義是否生成exact的p-value;
- correct定義是否對p-value進行連續型校正;
- conf.int定義是否計算置信區間;
- conf.level定義置信區間的置信水準。
wilcox.test函數的使用方法與t.test基本上一緻,隻是由于屬于不符合正态分布,是以無需檢驗兩組資料的方差時候齊性。
與t-test一樣,wilcox秩和檢驗結果中p-value < 0.05代表兩組資料的均值具有顯著差異。
當面對長資料時,同樣可以使用公式的方式進行分析。
多個變量的批量檢驗
上面介紹的都是基本的使用方法,隻能一個變量一個變量的進行差異檢驗,但大多數時候我們可能需要檢驗很多個變量的差異,此時我們隻需要寫一個簡單的循環就可以了。
這裡以以iris的前100行資料為例,其被最後一列Species分為兩組。
"iris")
得到的test就是每個變量的差異性檢驗結果。
⚠️分組列要放在資料框的最後一列。
⚠️注意在對自己的資料使用的時候要将循環公式中的Species替換為自己的分組列的列名。
多組樣本差異比較
有時我們面對的資料在的分組在兩組以上,此時使用t-test或Wilcox秩和檢驗就并不合适了,需要用到方差分析。
One-way ANOVA
當分析資料符合正态分布并且分組在3組及以上時,需要用One-way ANOVA來檢驗各組間資料差異的顯著性,該分析通過aov函數完成。
不同于t-test和秩和檢驗,由于ANOVA中分組超過了兩組,是以該分析所需資料必須為資料框形式,資料框的其中一列為待分析資料,另外還需要有一個因子列作為分組資訊。
NULL, projections =
各參數意義:
- formula為進行分析的公式;
- data為進行分析的資料;
- projections定義是否要傳回投影;
- qr是否要傳回QR分解結果。
⚠️ANOVA的分析必須以公式形式完成,公式中~前為待分析資料,~後為分組資料。
以iris資料為例進行分析。
"iris")
結果中如果Pr(>F)的值小于0.05,則表明不同組資料間存在顯著的差異。
組間兩兩比較
在多組資料比較時,我們除了希望得到整體的差異顯著性之外,更多的時候還需要擷取不同組兩兩之間比較的差異顯著性。
針對One-way ANOVA的檢測,可以使用TukeyHSD和pairwise.t.test函數進行後續的組間兩兩差異性比較。
TukeyHSD使用比較簡單,隻需要對aov函數的結果使用該函數即可。
結果中p adj的值即為不同組資料量量比較的顯著性結果。
pairwise.t.test需要直接調用分析資料進行檢驗。
該函數得到的結果是不同組資料兩兩比較顯著性p-value的矩陣。
Kruskal-Wallis test
當分析資料不符合正态分布并且分組在3組及以上時,需要用Kruskal-Wallis test來檢驗各組間資料差異的顯著性,該分析通過kruskal.test函數完成。
該函數的使用方式與aov完全一緻,但是該函數的結果是直接顯示不需要使用summary函數。
組間兩兩比較
對于使用Kruskal-Wallis test的資料進行不同組間兩兩比較時,使用pairwise.wilcox.test函數。
多個變量的批量檢驗
對于One-way ANOVA和Krusal-Wallis test的多個變量批量檢驗,其方法與上文提到的t-test和秩和檢驗一緻,隻需将上文循環腳本中對應的函數進行替換即可。
對于組間兩兩比較的批量操作和結果提取,在之前的推文中有過使用,大家可以查閱一下。
兩種分組方式
Two-way ANOVA
當資料符合正态分布并且有兩種不同的分組方式時,需要使用Two-way ANOVA來檢驗變量在不同組間是否具有顯著差異。
與One-way ANOVA一樣,Two-way ANOVA同樣使用aov函數完成。
與One-way ANOVA不同的是,Two-way ANOVA有兩種分組方式,是以需要在公式的~之後添加兩個分組。
使用mtcars資料為例進行Two-way ANOVA分析。
"mtcars")
⚠️在~後的兩個分組變量要用星号連接配接。