【R】假设检验 - A/B Test差异检验实践
前言
本文章主要分享ABtest结果数据的差异检验的R语言实现。
先叨叨一下ABtest的实验重点:
企业在进行ABtest标准流程落地的过程中,主要考虑3个方面;
1.自动化分流策略
2.整体评估指标
3.AB测试全流程
于是假设,我们在设计好ABtest后的某一天实验的样本量达到了评估差异需要的最小样本量。在进行数据清洗后需要对其正态性和方差齐性进行检验,从而选择合适的假设检验方法对ABtest中不同设计版本的效果进行评估。
data <- iris %>% dplyr::filter(Species != "setosa")
#这里选择R自带的iris数据集进行示例
正态性检验
#R中常用的正态性检验函数
shapiro.test(data$Sepal.Length) #易受异常值影响
nortest::lillie.test(data$Sepal.Length) #Kolmogorov-Smirnov检验的修正
#大样本 #易受异常值影响 #非缺失值数量>4
nortest::ad.test(data$Sepal.Length) #大样本 #非缺失值数量>7
nortest::cvm.test(data$Sepal.Length) #大样本
nortest::sf.test(data$Sepal.Length)
nortest::pearson.test(data$Sepal.Length)
#我们查看较为稳健的lillie.test的结果
nortest::lillie.test(data$Sepal.Length)
Lilliefors (Kolmogorov-Smirnov) normality test
data: data$Sepal.Length
D = 0.067538, p-value = 0.3169
p-value = 0.3169 >0.05证明:无法拒绝原假设H0(data$Sepal.Length服从正态分布),固data$Sepal.Length的分布是正态的。
方差齐性检验
#R中常用的方差齐性检验函数
# Bartlett检验 - 对于正态分布的数据,这种检验极为灵敏
bartlett.test(Sepal.Length~ Species, data)
# Levene检验 - 相较于Bartlett检验,这一方法更为稳健。这一方法被封装于car程序包中
car::leveneTest(Sepal.Length~ Species, data)
# Fligner-Killeen检验 - 这是一个非参数的检验方法,完全不依赖于对分布的假设
fligner.test(Sepal.Length~ Species, data)
若正态性检验结果不显著,则考虑Bartlett检验&Levene检验;
结果显著的情况下,数据非正态分布,检验方差齐性用Fligner-Killeen检验
正态性 |
方差齐性检验方法 |
正态 |
Bartlett / Levene 检验 |
非正态 | Fligner-Killeen 检验 |
#注意这里数据输入的格式是
car::leveneTest([要检验的数值变量]~ [分组变量(factor类)], [数据框名])
#数据形状
> head(data)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 7.0 3.2 4.7 1.4 versicolor
2 6.4 3.2 4.5 1.5 versicolor
3 6.9 3.1 4.9 1.5 versicolor
4 5.5 2.3 4.0 1.3 versicolor
5 6.5 2.8 4.6 1.5 versicolor
6 5.7 2.8 4.5 1.3 versicolor
#这里我们进行Levene检验
car::leveneTest(Sepal.Length~ Species, data)
Levene's Test for Homogeneity of Variance (center = median)
Df F value Pr(>F)
group 1 1.0245 0.3139
98
#由于结果中Pr(>F)= 0.3139 >0.05
#该数据通过方差齐性检验,即各组间方差差异不显著
差异显著性检验
#总结的速查表
方差齐性 |
组数 | 检验方法 |
齐 |
>2 |
单因素ANOVA |
齐 |
=2 |
独立样本t检验 |
不齐 |
>2 |
Welch检验 |
不齐 |
=2 |
独立样本t'检验 |
#前置检验的结果为:正态分布、方差齐、组数为2
#固,选择独立样本t检验作为检验方法
> t.test(Sepal.Length~ Species, data, var.equal = T)
Two Sample t-test
data: Sepal.Length by Species
t = -5.6292, df = 98, p-value = 1.725e-07
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-0.8818516 -0.4221484
sample estimates:
mean in group versicolor mean in group virginica
5.936 6.588
#结果中:p-value = 1.725e-07 <0.05 ,实验组与对照组有显著差异
#根据均值6.588>5.936 可以判断group virginica效果好于group versicolor
最后
本篇对于:正态分布、方差齐的2组样本最后进行了独立样本T检验,而在实际生产环境中,会遇到非正态分布以及方差不齐的情况,届时将采用其他检验方法判断组间差异是否显著,评判ABtest的作用效果。
R实现如下:
#单因素方差分析anova
fit <- aov(Sepal.Length~ Species, iris)
summary(fit) #输出结果
gplots::plotmeans(Sepal.Length~ Species, iris) #均值比较图
TukeyHSD(fit) #多重比较
#Welch’s anova - 方差齐性检验不通过时
oneway.test(Sepal.Length~ Species, data = iris, var.equal = F)
#t检验
#方差齐性检验通过 - 两样本方差相同
t.test(Sepal.Length~ Species, data, var.equal = T)
#方差齐性检验不通过 - 两样本方差不同
t.test(extra~ group, sleep)
·END·
R语言与数据分析
生产力干货
微信号:RforData上一篇: 程序员的表白神器“520”大声喊出来,520大声喊
下一篇: 正则表达式验证qq号码是否输入正确