【问题标题】:Why scipy.stats.ttest_ind provides different results for the same input ? (not indempotent)为什么 scipy.stats.ttest_ind 为相同的输入提供不同的结果? (不是幂等的)
【发布时间】:2020-07-20 11:59:07
【问题描述】:

我正在尝试运行 T 检验来检查给定 KPI 的两个样本之间是否存在显着差异。我正在运行这个 python 代码:

population_control = 18917
population_treatment = 169996
stddev_control = 3.7944261452602888
stddev_treatment = 3.8521668798017057
avg_control = 2.906
avg_treatment = 2.921

import scipy.stats
rvs1 = scipy.stats.norm.rvs(loc=avg_control,scale=stddev_control,size=population_control)
rvs2 = scipy.stats.norm.rvs(loc=avg_treatment,scale=stddev_treatment,size=population_treatment)
t_score, pvalue = scipy.stats.ttest_ind(rvs1, rvs2, equal_var = False)

print(pvalue)

但我不明白为什么对于相同的输入信息,输出会从一个执行变为另一个执行。有时我的 p 值

另外,当我输入 np.random.seed(12345678) 时,我总是有相同的 p 值,但这让我怀疑我在做什么。

你有什么想法吗?非常感谢。

【问题讨论】:

  • scipy.stats.norm.rvs 生成随机值。如果您不设置种子,则每次运行程序时这些值都会有所不同。
  • @WarrenWeckesser 是的,但在这种情况下,这种方法证明了什么?因为根据种子的不同,我最终会得到完全不同的 p 值和结论
  • “因为取决于种子,我最终会得到完全不同的 p 值……” 是的,这正是人们对不同数据集的期望。根据您的回答,您似乎已经找到了问题和解决方案。

标签: python scipy statistics ab-testing


【解决方案1】:

我正在回答我自己的问题,但我想听听您对此的看法。

“问题”似乎来自scipy.stats.norm.rvs,它试图从我给他的平均值、方差和popsize 中创建分布样本。看起来样本生成是随机的,这就是为什么我们最后会得到不同的 pvalue。

显然,对于我的用例,最好使用 ttest_ind_from_stats ,这样我就有了一个固定的 pvalue

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    相关资源
    最近更新 更多