首先我们复习一下两组数据比较的思路:

废话不多说了,我们直接开始吧:
一、正态性检验
R语言进行Lilliefors正态性检验依赖nortest
包,代码如下:
library(nortest) # 加载nortest包
lillie.test(data) # 每次仅能传入一组data
lillie.test()
返回的数据包括检验量D和P 值,如下所示:
lillie.test(data)
> Lilliefors (Kolmogorov-Smirnov) normality test
> data: data
> D = xxxxx, p-value = xxxxx
若通过循环检验多组数据正态性并通过P 值判断数据是否服从正态分布,可以通过lillie.test(x0.5)$p.value
的方法直接返回数值形式的P 值。
二、方差齐性检验
R语言进行Levene方差齐性检验依赖car
包和carData
包,其语法有些像Python做多组数据事后多重比较,传入的内容包括所有样本的数据集和分组。代码如下:
library(car) # 加载car包
library(carData)
leveneTest(data, factor, center=mean)
# xscale为多组样本依次排列在一起的数值型变量;factor为类似于SPSS的分组变量,可用1,2,3等整数表示
# center默认为median,当数据服从正态分布时,应该将center参数改为mean
leveneTest()
返回的内容如下:
> Levene's Test for Homogeneity of Variance (center = mean)
> Df F value Pr(>F)
> group 1 0.1491 0.7039
> 18
需要注意的是,R语言中的leveneTest()
不支持直接传入多组数据,否则会返回警告信息,如下所示:
leveneTest(data1, data2)
> Warning message:
> In leveneTest.default(data1, data2) : data2 coerced to factor.
自动生成分组的代码如下所示:
factor <- as.factor(c(seq(1,1,length.out=length(data1)), seq(2,2,length.out=length(data2))))
与正态性检验类似,若想直接获得方差齐性检验的P 值,可以通过leveneTest(xscale, group)$Pr(>F)[1]
的方法。
三、t检验
R语言的t检验和t'检验(两组样本方差不齐时采用),以及两独立样本和两配对样本t检验都包含在t.test
方法中,代码如下:
library(stats)
t.test(data1, data2, paired = FALSE, var.equal = TRUE) # 配对样本t检验:将paired改为T;t'检验:将var.equal改为F
也可通过t.test(data1, data2, oaired = F, var.equal = T)$p.value
直接获取P 值。
四、非参数检验
R语言的非参数检验只有一个语法wilcox.test()
,通过paired
参数来确定是进行两独立样本还是两相关样本的非参数检验。代码如下:
library(stats)
wilcox.test(data1, data2, paired = F) # 两独立样本的非参数检验
wilcox.test(data1, data2, paired = T) # 两相关样本的非参数检验
五、总结
R语言的循环和python不太一样,代码总结如下:
# 两独立样本的比较
# data1, data2为两个样本, alldata为data1和data2的合集,group为针对alldata的分组
library(nortest)
library(car)
library(carData)
library(stats)
if (lillie.test(data1)$p.value & lillie.test(data2)$p.value > 0.1) {
print ("两组数据均服从正态分布")
if (leveneTest(alldata, group=group, center = mean)$`Pr(>F)`[1] > 0.1) {
print ("两组数据方差齐,将使用独立样本t检验")
t.test(data1, data2, paired = F, var.equal = T)
} else {
print ("两组数据方差不齐,将使用独立样本t'检验")
t.test(data1, data2, paired = F, var.equal = F)
}
} else {
print ("两组数据不全服从正态分布,将使用非参数检验")
wilcox.test(data1, data2, paired = F)
}
# 两配对样本的比较
ibrary(nortest)
library(stats)
if (lillie.test(x0.5)$p.value & lillie.test(x1)$p.value > 0.1) {
print ("两组数据均服从正态分布")
t.test(x0.5, x1, paired = T)
} else {
print ("两组数据不全服从正态分布,将使用非参数检验")
wilcox.test(x0.5, x1, paired = T)
}