非参数检验,一般是在分布未知的情况下使用。我们首先会先对数据进行正态检验和方差齐性分析,如果均不服从,则对数据进行变化,如果还是不服从,则进行非参数检验。
首先输入数据进行变换
library(reshape2)
ano = read.table("statistic.txt",header = T, sep = "\t",quote = "")
head(ano)
原始输入数据如下
Samples | L2.L2 | L2.L4 | L2.L6 | L4.L2 | L4.L4 | L4.L6 | L6.L2 | L6.L4 | L6.L6 |
---|---|---|---|---|---|---|---|---|---|
S1 | 10 | 5 | 6 | 6 | 10 | 6 | 10 | 6 | 11 |
S2 | 8 | 6 | 5 | 7 | 11 | 5 | 9 | 9 | 12 |
S3 | 10 | 7 | 11 | 8 | 8 | 8 | 11 | 9 | 8 |
S4 | 9 | 6 | 9 | 7 | 8 | 9 | 6 | 9 | 13 |
S5 | 12 | 9 | 7 | 9 | 10 | 8 | 12 | 11 | 11 |
S6 | 10 | 8 | 8 | 6 | 10 | 11 | 9 | 11 | 12 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
使用reshape2包进行数据变换,将多列组合成一列变量模式。
library(reshape2)
a = melt(ano,id.vars = "Samples")
将多列合并到variable列上。变换后结果如下
Samples | variable | value |
---|---|---|
S1 | L2.L2 | 10 |
S2 | L2.L2 | 8 |
S3 | L2.L2 | 10 |
S4 | L2.L2 | 9 |
S5 | L2.L2 | 12 |
S6 | L2.L2 | 10 |
- 正态检验:
使用shapiro.test()进行检验
shapiro.test(a$value)
结果如下:
Shapiro-Wilk normality test
data: a$value
W = 0.94081, p-value = 5.945e-09
p-value = 5.94e-09 < 0.05,拒绝原假设,数据不服从正态分布。
- 方差齐性检验:
使用bartlett.test()进行检验
bartlett.test(value~variable, data = a)
Bartlett test of homogeneity of variances
data: value by variable
Bartlett's K-squared = 29.636, df = 8, p->value = 0.0002451
结果显示,p-value = 0.0002451 < 0.05,拒绝原假设,数据方差不齐。
- 非参数多重检验Kruskal-Wallis H test
使用kruskal.test()进行检验:
kruskal.test(value~variable, data = a)
Kruskal-Wallis rank sum test
data: value by variable
Kruskal-Wallis chi-squared = 85.493, df = 8, p-value = 3.808e-15
结果显示,p-value = 3.808e-15 < 0.05,样本间存在显著差异的组合,需要进一步进行两两检验。
- nemenyi两两检验
使用kruskalmc(value~variable, data = a, probs = 0.05)进行检验,结果不能得到具体p-value值,因此设定多个probs进行区分。
library(multcomp)
library(pgirmess)
library(coin)
kruskalmc(value~variable, data = a, probs = 0.05)
kruskalmc(value~variable, data = a, probs = 0.01)
kruskalmc(value~variable, data = a, probs = 0.001)
kruskalmc(value~variable, data = a, probs = 0.0001)
Multiple comparison test after Kruskal-Wallis
p.value: 0.05
Comparisons
Comparing group | obs.dif | critical.dif | difference |
---|---|---|---|
L2.L2-L2.L4 | 102.700000 | 64.45642 | TRUE |
L2.L2-L2.L6 | 96.150000 | 64.45642 | TRUE |
L2.L2-L4.L2 | 82.183333 | 64.45642 | TRUE |
L2.L2-L4.L4 | 9.250000 | 64.45642 | FALSE |
L2.L2-L4.L6 | 88.416667 | 64.45642 | TRUE |
L2.L2-L6.L2 | 43.500000 | 64.45642 | FALSE |
TRUE表示p-value < 0.05, FALSE则表示p-value > 0.05。可以通过设定多个Probs来界定p-value的范围