python怎么实现检验_用python实现假设检验(独立双样本检验/AB测试)

独立双样本检验

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

print('拒绝零假设,有统计显著,接受备选假设')

print('备选假设:A版本与B版本有差异')

else:

print('接受零假设,无统计显著')

print('零假设:A版本与B版本无差异')

四、做出结论

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

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

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

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

标准误差:

,其中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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值