推论统计实践之验证斯特鲁普效应

背景

斯特鲁普效应是以美国心理学家约翰·里德利·斯特鲁普的名字命名的一种心理现象,在心理学中,该效应是对任务反应时间的干扰。当词的信息(词义)与写词色彩不一致时,便会出现心理紧张与自动反应之间的矛盾,于是造成参与者的反应时间延长。一个典型的例子–交互式斯特鲁普效应实验,可以很好地证明这种现象,这将在下面实验中详细描述。

实验

参与者会看到一个单词列表,每个单词都用墨水的颜色显示。参与者的任务是大声说出单词所用的颜色。
任务有两个条件:

  • 一致词条件:显示的单词与其所用颜色一致
  • 不一致词条件:显示的单词与其所用颜色不一致

在每一种条件下,列表中单词数量相同,测量参与者说出单词所用颜色的时间。每个参与者将经历2轮,1轮一致词条件,1轮不一致词条件,记录每个条件下的用时。

根据斯特鲁普效应,说出一致词条件下单词所用颜色所需时间较短。

分析

利用推论统计学的知识对“斯特鲁普效应”进行验证。

描述统计分析

报告关于数据集的一些描述性统计信息。例如,集中趋势测量和可变性测量。

1
2
3
4
5
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
1
2
3
filepath = 'stroop_effect_data.csv'
df = pd.read_csv(filepath)
df.head()

data_0

数据说明,第一列Congruent表明是在一致词条件下,参与者的反应时间(以秒为单位),第二列Incongruent表明是在不一致词条件下,参与者的反应时间。

1
df.describe()

data_1

1
2
3
# 一致词条件下的样本均值 
congruent_mean = df['Congruent'].mean()
congruent_mean

14.315800000000001

1
2
3
# 不一致词条件下的样本均值 
incongruent_mean = df['Incongruent'].mean()
incongruent_mean

23.13928

1
2
3
# 一致词条件下的样本标准差
congruent_std = df['Congruent'].std()
congruent_std

3.973978516549882

1
2
3
# 不一致词条件下的样本标准差
incongruent_std = df['Incongruent'].std()
incongruent_std

6.292920013263583

1
2
3
# 两个条件的平均时间差
mean_diff = congruent_mean - incongruent_mean
mean_diff

-8.823479999999998

1
2
3
# 两个条件的时间差的标准差
std_diff = np.std(df['Congruent'] - df['Incongruent'])
std_diff

5.270743538591116

从以上输出结果中可知道,25个参与者在一致性词条件和不一致性词条件下执行任务的平均用时分别是xcˉ=14.3158s\bar{x_{c}}=14.3158sxiˉ=23.1393s\bar{x_{i}}=23.1393s。两种情况的样本标准差分别为sc=3.9740s_{c}=3.9740si=6.2929s_{i}=6.2929。两个平均时间的差值为xcˉxiˉ=8.8235s\bar{x_{c}}- \bar{x_{i}}=-8.8235s,两种情况下参与者用时差值的标准差为sd=5.2707s_{d}=5.2707

下面将数据进行可视化,比较两个条件下样本数据的分布。

1
2
3
sns.set_style("darkgrid")
sns.boxplot(data=df[['Congruent', 'Incongruent']], orient="v",width=0.4,palette=sns.color_palette("BuGn"));
plt.ylabel("Time");

output_0

从图中可以看出,在不一致词条件下的任务反应时间似乎比在一致词条件下的任务反应时间长,这与之前报告的描述统计结果一致。此外,不一致条件组存在三个异常值,因而该组样本数据的分布很可能是正偏态。

推论统计分析

假设检验
1、问题
  • Q1:研究问题的自变量是什么?因变量是什么?

自变量是斯特鲁普任务的条件(单词含义与颜色是否一致),因变量是参与者完成任务的反应时间(以秒为单位)。实验要考察的是两个条件任务(自变量)对反应时间(因变量)的影响。

  • Q2:两个假设是什么?

我们想要考察任务类型对参与者反应时间的影响大小,并评估我们样本中的差异是否因为总体存在显著差异。

μc\mu_{c} : 一致条件下,总体反应时间均值

μi\mu_{i} : 不一致条件下,总体反应时间均值

H0H_{0}:在一致条件和不一致条件下,参与者反应时间总体没有显著差异 \rightarrow μc=μi\mu_{c} = \mu_{i}

H1H_{1}:与一致条件相比,在不一致条件下,参与者反应时间总体更长 \rightarrow μc<μi\mu_{c} < \mu_{i}

  • Q3:检验类型是什么?

因为实验的参与者是同一组人,被分配了两个条件,所以这里应该是相关配对检验。相关配对检验只关注每对相关数据的差值,从而避免得到的结论受到参与者间正常反应时间独立性的影响。在只关注差值集的情况下,样本集处理后只有一组(差值集)。下面对样本数据进行处理,从而得到差值集。

1
2
df['differences'] = df['Congruent'] - df['Incongruent']
df.head()

data_3

  • Q4:抽样分布类型是什么?

样本大小为25,小于30,所以需要进一步判断抽样分布是否满足T分布。通过可视化差值列数据查看其分布情况。

1
2
3
4
5
#查看数据集分布
sns.set_style("darkgrid")
sns.distplot(df['differences'],color='green')
plt.title('Distribution of the difference of reaction time under two conditions')
plt.show()

output_1

通过观察上图,发现两个条件下的反应时间差值的分布呈近似正态分布,满足t分布的使用条件,所以我们使用相关配对t检验

  • Q5:检验方向什么?

因为备选假设是斯特鲁普效应确实存在,根据Stroop Effect的定义,颜色和文字不同的情况下,人们的反应时间会变长(μc<μi\mu_{c} < \mu_{i}),所以我们使用单尾检验中的左尾检验

2、证据

在零假设成立的条件下,我们得到样本平均值(或者更极端值)的概率p为多少?

1
2
3
4
5
6
7
8
9
10
from scipy import stats

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

print('t值=',t,'\n双尾检验的p值=',p_twoTail)

t值= -8.201128966874277
双尾检验的p值= 2.027895273895288e-08

1
2
3
# 通过双尾检验的p值得到单尾检验的p值
p_oneTail=p_twoTail/2
print('单尾检验的p值=',p_oneTail)

单尾检验的p值= 1.013947636947644e-08

3、判断标准

显著水平为5%

1
alpha = 0.05
4、得出结论
1
2
3
4
5
#决策
if(t<0 and p_oneTail< alpha):
print('拒绝零假设,有统计显著。即接受备选假设,说明斯特鲁普效应存在')
else:
print('接受备选假设,没有统计显著,也就是斯特鲁普效应不存在')

拒绝零假设,有统计显著性。即接受备选假设,说明斯特鲁普效应存在。

5、假设检验报告
  • 相关配对检验 t(24)=8.2011t(24)=-8.2011p=1.0139e08p=1.0139e-08 (α=5%)(\alpha=5\%), 单尾(左尾)检验

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

置信区间

t检验的自由度 df=n1=251=24df=n-1=25-1=24,通过置信水平95%和自由度查表得到对应的t值

1
2
3
4
5
6
7
8
9
10
11
t_ci= 2.064
# 时间差的平均值: mean_diff

# 使用scipy包的stats模块计算时间差的标准误差
se = stats.sem(df['differences'])

# 置信区间的上限
a = mean_diff - t_ci * se

# 置信区间的下限
b = mean_diff + t_ci * se
1
print('两个平均值差的置信区间,95%置信水平 CI=[{:.6},{:.5}]'.format(a,b))

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

效应量

统计显著说明,两个条件下参与者的反应时间有差异;但差异的大小,效果是否显著通过效应量来衡量。

1
2
3
4
5
6
7
8
9
#根据零假设,可知时间差对应的总体平均值是0
pop_mean=0

# 时间差的样本平均值: mean_diff
# 时间差的样本标准差:std_diff

d=(mean_diff - pop_mean) / std_diff

print('d=',d)

d= -1.674048440300045

分析结果总结

描述统计分析

第一组样本数据:25个参与者在字体含义和字体颜色一致情况下,平均用时是 xcˉ=14.3158s\bar{x_{c}}=14.3158s,标准差是 sc=3.9740s_{c}=3.9740

第二组样本数据:25个参与者在字体含义和字体颜色不一致情况下,平均用时是 xiˉ=23.1393s\bar{x_{i}}=23.1393s,标准差是 si=6.2929s_{i}=6.2929

两种情况下参与者的平均用时差值为 xcˉxiˉ=8.8235s\bar{x_{c}}- \bar{x_{i}}=-8.8235s,两种情况下参与者用时差值的标准差为 sd=5.2707s_{d}=5.2707

推论统计分析

  • 假设检验

相关配对检验 t(24)=8.2011t(24)=-8.2011p=1.0139e08p=1.0139e-08 (α=5%)(\alpha=5\%), 单尾(左尾)检验

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

  • 置信区间

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

  • 效应量

d= -1.6740

参考

  1. 斯特鲁普效应-维基百科
  2. 交互式斯特鲁普效应-文本和颜色实验
-------------完-------------