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

nag*_*lzs 2 python math statistics excel-formula scipy

我试图在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)
Run Code Online (Sandbox Code Playgroud)

这是结果:

(array(0.6661542796363409), 0.51376033318001801)
Run Code Online (Sandbox Code Playgroud)

但是,Excel为同一输入提供此值:0.35844407

我注意到他们使用了tail = 2参数(参见http://office.microsoft.com/en-us/excel-help/ttest-HP005209325.aspx).不幸的是,我不知道如何用scipy计算双尾t检验.(事实上​​我不知道它是什么.)

另一个非常奇怪的事情是,在scipy中,当我改变样本的顺序时,我会得到一个明显不同的结果.例如,如果我将-0.7移动到b的头部,那么我得到0.51376033318001824而不是0.51376033318001801.没有太大的区别,但仍然.

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

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

unu*_*tbu 5

它看起来像是Excel在计算ttest_rel:

In [15]: import scipy.stats as stats

In [20]: stats.ttest_rel(a, b)
Out[20]: (array(0.9677712267394081), 0.35844406902161985)
Run Code Online (Sandbox Code Playgroud)

使用stats.ttest_rel何时ab相关.文档说:

[ttest_rel]的使用示例是不同考试中同一组学生的分数,或来自相同单元的重复抽样.

使用stats.ttest_indab独立.

如果我们观察来自相同或不同人群的两个独立样本,例如男孩和女孩或两个种族的考试分数,我们可以使用[ttest_ind].

  • 即使对于`ttest_rel`,订单也很重要.例如,`ttest_rel(a,sorted(b))`给出的结果与`ttest_rel(a,b)`不同.巧合的是,`ttest_rel(sorted(a),sorted(b))`给出与`ttest_rel(a,b)`相同的结果.在`ttest_rel`的源代码中有一行,`d =(a - b).astype(np.float64)`,所以很明显顺序很重要.现在,如果您将完全相同的数据提供给Excel和`ttest_rel`并得到不同的结果,那么它回到绘图板...... (2认同)