欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【R】假设检验 - A/B Test差异检验实践

程序员文章站 2022-05-09 14:07:55
...

【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语言与数据分析

生产力干货

【R】假设检验 - A/B Test差异检验实践

微信号:RforData