Python 如何在scipy中模拟2样本t检验

Python 如何在scipy中模拟2样本t检验,python,math,statistics,scipy,excel-formula,Python,Math,Statistics,Scipy,Excel Formula,我试图在Python中模拟MS Excel的t-probe函数。我需要这样做,因为我必须自动化一些以前在Excel中完成的计算。这是我的测试程序: import scipy.stats a = [5, 0.9, -0.4, -0.9, 0.5, 0.8, 0.2, 0.2, 0, -0.8] b = [1.1, 0.9, -0.5, -0.7, 0.6, 0.7, 0.3, 0.1, -0.1, -0.7] print scipy.stats.ttest_ind(a,b, equal_var

我试图在Python中模拟MS Excel的t-probe函数。我需要这样做,因为我必须自动化一些以前在Excel中完成的计算。这是我的测试程序:

import scipy.stats
a = [5, 0.9,  -0.4, -0.9, 0.5, 0.8, 0.2, 0.2, 0, -0.8]
b = [1.1, 0.9, -0.5, -0.7, 0.6, 0.7, 0.3, 0.1, -0.1, -0.7]

print scipy.stats.ttest_ind(a,b, equal_var=True)
结果是:

(array(0.6661542796363409), 0.51376033318001801)
但是,Excel为相同的输入提供此值:0.35844407

我注意到他们使用了tail=2参数(参见)。不幸的是,我不知道如何用scipy计算双尾t检验。(事实上我不知道它是什么。)

另一件非常奇怪的事情是,在scipy中,当我改变样本的顺序时,我得到了一个明显不同的结果。例如,如果我将-0.7移到b的头部,则得到0.51376033318001824,而不是0.51376033318001801。虽然差别不大,但仍然如此

对于Excel来说,这是一个全新的故事——看起来当样本顺序不同时,双尾t检验给出的结果明显不同


问题是:我如何在scipy中模拟Excel版本的双尾t检验?

它看起来像是
Excel
正在计算
ttest\u rel

In [15]: import scipy.stats as stats

In [20]: stats.ttest_rel(a, b)
Out[20]: (array(0.9677712267394081), 0.35844406902161985)
a
b
相关时,使用
stats.t测试相关值。说:

使用[ttest_rel]的例子是同一组学生在考试中的分数 不同的检查,或从同一单元重复取样

a
b
是独立的时使用

我们可以使用[ttest__ind],如果我们观察到两个独立的样本来自 相同或不同的人群,例如男孩和女孩的考试成绩或 两个民族


还有一件事我不明白。在Python版本中,示例的顺序不起作用。例如,如果我调用
a.sort(),b.sort()
,则“ttest\u rel”的返回值相同。但是,如果我在Excel中执行此操作(对值进行排序),则会得到完全不同的结果。为什么呢?(我知道这不再是一个真正的编程问题)顺序确实很重要,即使对于
ttest\u rel
。例如,
ttest_rel(a,sorted(b))
给出的结果与
ttest_rel(a,b)
不同。这是一个巧合,
ttest_rel(排序(a),排序(b))
给出了与
ttest_rel(a,b)
相同的结果。在
ttest_rel
的源代码中有一行,
d=(a-b).astype(np.float64)
,因此很明显顺序确实很重要。现在,如果您将完全相同的数据输入Excel和
ttest\u rel
并得到不同的结果,那么它将返回到绘图板上…谢谢。所以这是偶然的。:-)然而,我注意到,对于测试,顺序并不重要。但是我能理解。在这种情况下(
stats.ttest_rel(a,b)
)小p值的含义是什么?