r语言aic和bic准则 r语言abs_js

前言

    本文章主要分享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语言与数据分析

生产力干货