如何在Python中执行 Welch 的 ANOVA
当违反等方差假设时, Welch 的 ANOVA被用作标准单向 ANOVA 的替代方案。单向方差分析(“方差分析”)用于查看三个或更多独立组的平均值是否存在统计学上的显着差异。
执行 Welch 的 ANOVA 的步骤:
第 1 步:创建一个 Pandas 数据框来保存执行 ANCOVA 的数据。
例子:
为了查看三种不同的学习策略是否会导致不同的考试成绩,教师随机分配 10 名学生使用每种策略(strat1、strat2、strat3)一周,然后要求每个学生参加类似复杂性的考试。以下是30名学生的考试成绩:
strat1 = [64, 66, 68, 75, 78, 94, 98, 79, 71, 80]
strat2 = [91, 92, 93, 90, 97, 94, 82, 88, 95, 96]
strat3 = [79, 78, 88, 94, 92, 85, 83, 85, 82, 81]
第 2 步:检查这三种策略的分数之间是否存在相等的方差。
我们可以使用 Bartlett 检验来查看每组的方差是否相等。如果检验统计量的 p 值小于某个显着性水平(例如 =.05),我们可以拒绝原假设并得出并非所有组都具有相同方差的结论。要在Python中运行 Bartlett 的测试,请使用以下代码:
Python
# Import library
import scipy.stats as stats
# Create Data
strat1 = [64, 66, 68, 75, 78, 94, 98, 79, 71, 80]
strat2 = [91, 92, 93, 90, 97, 94, 82, 88, 95, 96]
strat3 = [79, 78, 88, 94, 92, 85, 83, 85, 82, 81]
# perform Bartlett's test
stats.bartlett(strat1, strat2, strat3)
Python
import pingouin as pg
import pandas as pd
import numpy as np
# create DataFrame
df = pd.DataFrame({'score': [64, 66, 68, 75, 78, 94, 98, 79, 71, 80,
91, 92, 93, 90, 97, 94, 82, 88, 95, 96,
79, 78, 88, 94, 92, 85, 83, 85, 82, 81],
'group': np.repeat(['strat1', 'strat2', 'strat3'],
repeats=10)})
# perform Welch's ANOVA
pg.welch_anova(dv='score', between='group', data=df)
Bartlett 检验的 p 值 (.01089) 小于 α = .05,这意味着我们可以拒绝每个组具有相同方差的原假设。因此,等于方差的假设被违反,我们可以继续执行 Welch 的 ANOVA。
第 3 步:现在将 Welch 的 ANOVA 应用于数据。
在Python中,我们可以使用 Pingouin 包的 welch_anova()函数来执行 Welch 的 ANOVA。在应用 Welch 的 ANOVA 之前,请确保我们已经安装了 'pingouin' 库。
安装 pingouin 库的语法:
pip install pingouin
Python
import pingouin as pg
import pandas as pd
import numpy as np
# create DataFrame
df = pd.DataFrame({'score': [64, 66, 68, 75, 78, 94, 98, 79, 71, 80,
91, 92, 93, 90, 97, 94, 82, 88, 95, 96,
79, 78, 88, 94, 92, 85, 83, 85, 82, 81],
'group': np.repeat(['strat1', 'strat2', 'strat3'],
repeats=10)})
# perform Welch's ANOVA
pg.welch_anova(dv='score', between='group', data=df)
第四步:分析执行welch_anova()后得到的结果。
ANOVA 表中的总体 p 值 (0.001598) 小于 α = .05,这意味着我们可以拒绝三种学习技术的考试成绩相等的原假设。