独立双样本检验

AB测试:为同一目标制定两个案例,测试出效果最好的案例,得出最后结果。

例子:假设有AB两个键盘设计案例,测试同一时间打相同单词错误数量结果如下图,由于同一行是不同两个对象的测试结果,因此为独立双样本检验。

描述统计分析:

#读入数据
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
fileNameStr = E:\DATA\datatest.xlsx
xls = pd.ExcelFile(fileNameStr,dtype = object)
data = xls.parse(Sheet1,dtype = object)
data.head()

#字元串转换为数值(浮点型)
data[A] = data[A].astype(int)
data[B] = data[B].astype(int)
data.describe()

#样本平均值
a_mean = data[A].mean()
b_mean = data[B].mean()
#样本标准差
a_std = data[A].std()
b_std = data[B].std()

如果单看平均打错字的数量来看A小于B,但是A版本和B版本存在统计显著吗?可以通过以下假设检验。

一、问题是什么: 哪个键盘布局用户体验更好

1、零假设:A版本与B版本没有差别,A版本平均值 = B版本平均值

备选假设: A版本与B版本有差别,A版本平均值 != B版本平均值

2、判断检验类型:因为两组样本是不同人测出来的数据,选择独立双样本检验

3、确定抽样分布:

由于本次案例中的样本为25小于30,因此是小样本。

再根据画图看出其分布近似与正态分布,因此可以推断总体样本近似与正态分布,因此该抽样为t分布。

import seaborn as sns
plt.rc(font,family=[Microsoft YaHei])
sns.distplot(data[A],color="g")
plt.title(A版本数据集分布)
plt.show()

sns.distplot(data[B])
plt.title(B版本数据集分布)
plt.show()

4、检验方向:由于备选假设是A版本平均值不等于B版本,因此检验方向为双尾检验

二、证据是什么:计算p值

在零假设成立的前提下,得到样本平均值的概率是多少

由于scipy在计算独立双样本t检验时无法返回自由度,因此选用另一个统计包:statsmodels

import statsmodels.stats.weightstats as st

ttest_ind:独立双样本检验
usevar = unequal:两个总体方差不一样
t:假设检验计算出的t值
p_two:双尾检验的p值
df:自由度

t,p_two,df = st.ttest_ind(data[A],data[B],usevar = unequal)
print(t=,t,p_two=,p_two,df=,df)

t= -4.05593853685732

p_two= 0.0001945745530721613

df= 45.27813331135628

三、判断标准是什么

判断标准使用常用的显著水平5%,即alpha = 5%,双尾检验中图片显示的黄色部分的面积,计算比较的时候则是alpha/2,当t<0时,则和左边的alpha/2进行比较。

alpha = 0.05
if(p_two<alpha/2):
print(拒绝零假设,有统计显著,接受备选假设)
print(备选假设:A版本与B版本有差异)
else:
print(接受零假设,无统计显著)
print(零假设:A版本与B版本无差异)

四、做出结论

拒绝零假设,有统计显著,接受备选假设 备选假设:A版本与B版本有差异

独立双样本检验的置信区间:

对于独立双样本检验的置信区间关心两个样本之间的差异,因此不会计算单个样本,而是两个样本平均值的差值。

因此公式中的样本平均值=样本1平均值-样本2平均值

标准误差: SE=sqrt{s1/n1+s2/n2},其中s1,s2为样本1和2的标准差,n1,n2为样本1和2的样本大小。

t_ci = 0.0631 #95%的置信水平,自由度df对应的t值
a_n = 25 #样本大小
b_n = 25
se = np.sqrt(np.square(a_std)/a_n +np.square(b_std)/b_n) #计算标准误差
sample_mean = a_mean - b_mean
a = sample_mean - t_ci*se #置信区间上限
b = sample_mean + t_ci*se #置信区间下限
print(a=,a,b=,b)

a= -2.7623162230986336

b= -2.677683776901366

95%置信水平 CI = (-2.76,-2.68)

独立双样本检验的效应量:

在独立双样本检验中,计算效应量的标准差为合并标准差,公式如下:

#合并标准差
sp = np.sqrt(((a_n-1)*np.square(a_std)+(b_n-1)*np.square(b_std))/(a_n+b_n-2))
#效应量
d=(a_mean - b_mean)/sp
print(d=,d)

d= -1.1471926573950622

d的绝对值大于0.8因此效果显著大,即A版本与B版本效果差异较大。

梨子:用python实现假设检验(相关配对检验/斯特鲁普效应)?

zhuanlan.zhihu.com
图标
梨子:用python实现假设检验(单样本检验)?

zhuanlan.zhihu.com
图标

推荐阅读:
相关文章