其他类型假设检验如何实现?

配对相关样本检验项目实战:如何验证统计学现象?

双独立样本检验项目实战:键盘布局A/B测试

(二)相关配对检验

斯特鲁普效应

斯特鲁普效应是当有与原有认知不同的情况出现时,人们的反应时间会较长。

实验设计

通过网上的stroop实验做测试人的反应时间(https://faculty.washington.edu/chudler/java/ready.html)。 

每名参与者得到两组有颜色的文字,第一组数据是字体内容和字体颜色一致,第二组数据是字体内容和字体颜色不一致。

每名参与者对每组文字说出文字的颜色,并分别统计完成每组的时间。

此次实验共记录25组数据(样本量),并汇总到Excel表格中。

一、描述统计分析

#导入包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

'''
路径和文件名中不要用中文,不然会报错
encoding用于指定文件的编码,因为读取的csv中有中文,所以指定文件编码为中文编码“GBK”
'''
data = pd.read_csv('斯特鲁普效应.csv')
data.head()
观察数据结果:“一致”列是(第一组数据)字体内容和字体颜色一致情况下,实验者的反应时间(单位:秒)。

“不一致”列是(第二组数据)字体内容和字体颜色不一致情况下,实验者的反应时间。
#获取描述统计信息
data.describe()
'''
第一组数据:字体内容和字体颜色一致情况下,实验者的反应时间
'''
#第一组数据均值
con1_mean = data['Congruent'].mean()
# 第一组数据标准差
con1_std = data['Incongruent'].std()

'''
第一组数据:字体内容和字体颜色一致情况下,实验者的反应时间
'''
# 第二组数据均值
con2_mean = data['Incongruent'].mean()
# 第二组数据标准差
con2_std = data['Incongruent'].std()

#两个样本数据集对比
#画板
fg = plt.figure(figsize = (20,10))
#画纸
ax = fg.add_subplot(1,1,1)
#绘制柱状图
data.plot(kind = 'bar',ax = ax)
#显示图形
plt.show()
print('描述统计分析结果:')
print('第一组数据:字体内容和字体颜色一致情况下,实验者的平均反应时间是:',con1_mean,'秒,标准差是',con1_std,'')
print('第二组数据:字体内容和字体颜色不一致情况下,实验者的平均反应时间是:',con2_mean,'秒,标准差是',con2_std,'')
print('“不一致”情况下所用时间均大于“一致”情况,也就是当字体内容和字体验证不一致时,实验者的平均反应时间变长')

二、推论统计分析

 

进行假设检验

 

1.问题是什么?

自变量是指原因。因变量是指结果,也就是自变量发生变化导致改变的值就是因变量。

自变量:我们有两组实验数据,第一组是字体内容和颜色一致。第二组数据值是字体内容和颜色不一致。所以自变量是实验数据的颜色和文字是否相同

因变量:实验者的反应时间

所以,我们要考察的是自变量(字体内容和颜色是否相同)两种情况下对因变量(反应时间)的影响。

 

零假设和备选假设

 

假设第一组“一致”的均值为 u1 ,第二组“不一致”的均值为 u2

零假设H0:人们的反应时间不会因为字体内容和字体颜色是否相同(u1 = u2 ,或者 u1-u2=0 )

备选假设H1:特鲁普效应确实存在。根据特鲁普效应的定义,颜色和文字不同的情况下,人们的完场测试的时间会变长( u1 < u2 )

 

检验类型

检验类型有很多种,因为该使用两组数据是相关样本,所以选择相关配对检验。

相关配对检验只关注每对相关数据的差值,从而避免得到的结论受到参与人员间正常反应时间独立性的影响。

在只关注差值集的情况下,样本集处理后只有一组(差值集)。下面我们对样本数据进行处理,从而得到差值集。

'''
获取差值数据集,也就是“一致”这一列数据,对应减去“不一致”这一列的数据
'''
#差值数据集
data['差值'] =data['Congruent'] -data['Incongruent']
data.head()

抽样分布类型

我们还要判断抽样分布是哪种?因为抽样分布的类型,决定了后面计算p值的不同。

在我们这个案例中,样本大小是25(小于30),属于小样本。那小样本的抽样分布是否满足t分布呢?

因为t分布还要求数据集近似正态分布,所以下面图片我们看下差值数据集的分布长什么样。
"""设置字体,用于显示中文"""
plt.rcParams['font.sans-serif']=['FangSong']
"""SimSun 宋体,Microsoft YaHei微软雅黑 YouYuan幼圆 FangSong仿宋"""
plt.rcParams['font.size']=20
plt.rcParams['axes.unicode_minus']=False# 负号乱码

'''
直方图能够粗略估计数据密度,如果想给数据一个更精确的拟合曲线(专业术语叫:核密度估计kernel density estimate (KDE)),
Seaborn 可以很方便的画出直方图和拟合曲线。
查看数据集分布官网教程地址:https://seaborn.pydata.org/tutorial/distributions.html

安装绘图包seaborn:
conda install seaborn
'''
#导入绘图包
import seaborn as sns
#查看数据集分布
sns.distplot(data['差值'])
plt.title('差值数据集分布')
plt.show()

通过观察上面差值数据集分布图,数据集近似正态分布,所以满足t分布的使用条件,我们可以使用相关样本t检验。

检验方向

单尾检验(左尾,右尾),还是双尾检验?

 

因为备选假设是:特鲁普效应确实存在,根据Stroop Effect的定义,颜色和文字不同的情况下,人们的完场测试的时间会变长( u1 < u2 )。

所以我们使用单尾检验中的左尾检验,显著水平为5%,t检验的自由度df=n-1=25-1=24

2.证据是什么?

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

'''
用python统计包scipy自动计算
用scipy计算出的是:双尾检验
单(1samp)样本t检验(ttest_1samp):https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_1samp.html
相关(related)配对t检验(ttest_rel):https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_rel.html
双独立(independent)样本t检验(ttest_ind):https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html
'''
#导入统计模块(stats)
from scipy import stats

'''
ttest_rel:相关配对检验
返回的第1个值t是假设检验计算出的(t值),
第2个值p是双尾检验的p值
'''
t,p_twoTail = stats.ttest_rel(data['Congruent'],data['Incongruent'])

print('t值=',t,'双尾检验的p值=',p_twoTail) 
'''
因为scipy计算出的是双尾检验的t值和p值,但是我们这里是左尾检验。
根据对称性,双尾的p值是对应单尾p值的2倍
'''
#单尾检验的p值
p_oneTail=p_twoTail/2
print('单尾检验的p值=',p_oneTail)

3.判断标准是什么?

#显著水平使用alpha=5%
alpha=0.05

4.做出结论

'''
因为scipy计算出的是双尾检验的t值和p值,但是我们这里是左尾检验。
根据对称性,双尾的p值是对应单尾p值的2倍
左尾判断条件:t < 0 and  p/2 < alpha
右尾判断条件:t > 0 and  p/2 < alpha
'''
#单尾检验的p值
p_oneTail=p_twoTail/2
#显著水平
a=0.05
#决策
if(t<0 and p_oneTail< a):
    print('拒绝零假设,有统计显著')
    print('也就是接受备选假设:特鲁普效应存在')
else:
    print('接受备选假设,没有统计显著,也就是特鲁普效应不存在')

假设检验报告:

相关配对检验t(24)=-8.35,p=7.32e-09 (α=5%),左尾检验

统计上存在显著差异,拒绝零假设,从而验证斯特鲁普效应存在。

5. 置信区间

'''
1)置信水平对应的t值(t_ci)
查t表格可以得到,95%的置信水平对应的t值=2.262
2)计算上下限
置信区间上限a=样本平均值 - t_ci ×标准误差
置信区间下限b=样本平均值 - t_ci ×标准误差
'''

'''
95%的置信水平,自由度是n-1对应的t值
查找t表格获取,
也可以通过这个工具获取:https://www.graphpad.com/quickcalcs/statratio1/(利用这个工具获取t值,需要注意输入的概率值是1-95%=0.05)
注意:课程中这里对应的下面t_ci值有误,以下面的值为准
'''
t_ci=2.064
#差值数据集平均值
sample_mean=data['差值'].mean()
#使用scipy计算标准误差
se=stats.sem(data['差值'])
#置信区间上限
a=sample_mean - t_ci * se
#置信区间下限
b=sample_mean + t_ci * se
print('两个平均值差值的置信区间,95置信水平 CI=[%f,%f]' % (a,b))

6.效应量

'''
效应量:差异指标Cohen's d
'''
#差值数据集对应的总体平均值是0
pop_mean=0
#差值数据集的标准差
sample_std=data['差值'].std()
d=(sample_mean - pop_mean) / sample_std

print('d=',d)

三、数据分析报告总结

 

1、描述统计分析

第一组样本数据:字体内容和字体颜色一致情况下,平均反应时间是: 13.89 秒,标准差是 3.47 秒

第二组样本数据:字体内容和字体颜色不一致情况下,平均反应时间是: 22.62 秒,标准差是 5.09 秒

“不一致”情况下所用时间均大于“一致”情况,也就是当字体内容和字体验证不一致时,实验者的平均反应时间变长

2、推论统计分析

1)假设检验

相关配对检验t(24)=-8.35,p=7.32e-09 (α=5%),左尾检验

统计上存在显著差异,拒绝零假设,从而验证斯特鲁普效应存在。

2)置信区间

两个平均值差值的置信区间,95%置信水平 CI=[-8.80,-8.67]

3)效应量

d= - 1.67

12-25 02:42