Scipy ttest________________________________?

2024-05-17 01:22:53 发布

您现在位置:Python中文网/ 问答频道 /正文

对于scipy.stats.ttest_ind,我认为将permutations参数设置为任何正数将导致执行置换测试。我还认为,如果正在执行置换测试,则不会对两个总体的方差进行任何假设,因此equal_var参数应该被忽略

我发现equal_var参数确实会在使用置换测试时改变结果p值和测试统计。下面显示了一个简单的可复制示例:

sample1 = [34, 1200, 23, 50, 60, 50, 0, 0, 30, 89, 0, 300, 400, 20, 10, 0]
sample2 = [20, 10, 5, 0, 30, 50, 0, 100, 110, 0, 40, 10, 3, 0]

# equal_var = True
t1, p1 = stats.ttest_ind(a=sample1, b=sample2, permutations=10_000_000)
t2, p2 = stats.ttest_ind(a=sample1, b=sample2, permutations=10_000_000)
t3, p3 = stats.ttest_ind(a=sample1, b=sample2, permutations=10_000_000)

# equal_var = False
t4, p4 = stats.ttest_ind(a=sample1, b=sample2, permutations=10_000_000, equal_var=False)
t5, p5 = stats.ttest_ind(a=sample1, b=sample2, permutations=10_000_000, equal_var=False)
t6, p6 = stats.ttest_ind(a=sample1, b=sample2, permutations=10_000_000, equal_var=False)

运行上述代码(测试统计数据和p值)的输出为:

enter image description here

使用equal_var = True的3次置换测试中的3次返回约0.15的p值,而使用equal_var = False的3次相同置换测试中的3次返回约0.10的p值

有人能帮我理解这里发生了什么,以及为什么equal_var参数会改变置换测试的结果吗

我的理解是,排列测试只是将每个数据随机分配给两组中的一组(因为在空值下我们可以这样做),并计算平均值的差异。然后重复该过程permutations次。然后在最后计算p值,方法是将平均数差等于或大于我们实际采集样本的排列数除以使用的排列总数。基于此,我很难理解为什么equal_var参数会改变p值,正如我们在上面的示例中看到的那样

谢谢大家!


Tags: falsetrue示例参数varstatsscipyequal
1条回答
网友
1楼 · 发布于 2024-05-17 01:22:53

scipy.stats.ttest_ind计算样本检验统计量(t),然后计算样本推断检验(p值)。参数permutations影响推理测试,但不改变测试统计。参数equal_var影响测试统计数据,而与参数permutations无关

在计算检验统计量时,如果指定了equal_var,则检验统计量基于在整个数据池(两个样本)中计算的单个方差估计。否则,测试统计基于与两个样本的单独平均值相关的方差之和

在计算推断测试时,如果指定了permutations,则推断测试基于潜在测试统计的经验自举分布,可能来自同一数据池,但随机分配给样本1或样本2。这种推断测试并没有对数据样本来自的总体做出强有力的假设

如果未指定permutations,则推断测试基于潜在测试统计的理论分布,如果两个数据样本来自符合某些参数假设(正态分布等)的总体,则可能会出现这种分布。根据equal_var参数的不同,使用的理论分布略有不同(因为equal_var会影响假定的“自由度”)

相关问题 更多 >