scipy进行t检验以确定是否相等

3vpjnl9f  于 2023-11-19  发布在  其他
关注(0)|答案(1)|浏览(121)

我正在尝试执行t检验以确定两个数据样本的均值是否相等。我知道我需要使用差异的零假设执行t检验并拒绝它:

$$ H_0 = \| \mu_1 - \mu_2\| > \delta $$

$$ H_a = \| \mu_1 - \mu_2\| < \delta $$

字符串
我知道scipy有ttest_ind,但这个测试假设相等,所以它对我不起作用。
有没有办法直接用scipy来执行这个测试?或者怎么做?
找到了几个需要推导方程和使用t分布表的例子。我正在寻找一个使用scipy或其他软件包中内置的统计函数来减少验证工作的解决方案。

f0brbegy

f0brbegy1#

听起来你在寻找一个equivalence test,其中一个例子是“两个单侧测试”(TOST)。SciPy没有内置的东西,但你可以执行两个单侧t检验。

import numpy as np
from scipy import stats
rng = np.random.default_rng(459324692354693456)
x = rng.normal(size=100)
y = rng.normal(size=100)

delta = 0.5  # "equivalence bound"
# H0: mean of distribution underlying `x` is equal to the mean of
# the distribution underlying `y - delta`.
# (some would replace "equal" with "less than or equal to"
# H1: mean of distribution underlying `x` is greater than the mean of
# the distribution underlying `y - delta`.
res1 = stats.ttest_ind(x, y - delta, alternative='greater')
print(res1)

# the other one-sided test
res2 = stats.ttest_ind(x, y + delta, alternative='less')
print(res2)

个字符
Lakens 2018的话来说,“当两个 p 值中较大的一个小于α时,可以得出统计学等效的结论”。
statsmodels有一个函数ttost_ind

from statsmodels.stats.weightstats import ttost_ind
ttost_ind(x, y, -delta, delta)


ttost_ind的第一个输出是两个p值中较大的一个,其余两个输出与上面的SciPy的两个输出匹配。

(0.00013198904382128585,
 (3.715303013401054, 0.00013198904382128585, 198.0),
 (-3.956379347715618, 5.298494654171652e-05, 198.0))

相关问题