Python 如何在scipy中模拟2样本t检验
我试图在Python中模拟MS Excel的t-probe函数。我需要这样做,因为我必须自动化一些以前在Excel中完成的计算。这是我的测试程序: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
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值的含义是什么?