我正在使用多个t检验在两组(男女)之间进行体素明智的比较。为此,我正在使用scipy.stats.ttest_ind
。我有541443个体素作为我要执行独立t检验的因变量。一切似乎都正常,但是当我检查结果并对随机选取的体素进行单次t检验时,它们会得到不同的结果。
这是我的代码:
statistics,p_values = ttest_ind(male_data,female_data)
产生:array([-5.23764997e-16,-1.59544316e-15,7.88216339e-16,..., 1.11783465e-15,-2.22874323e-16,-9.35188323e-16])作为t值
single_stat,single_p_value = ttest_ind(female_data[:,0],male_data[:,0])
产生:-4.3805762173832176e-16作为t值
我希望第一个t检验的输出相等(所以〜-5.237或〜-4.380)。有谁知道这里可能出了什么问题?
我还尝试了第三种方法,该方法使用for循环进行多个t检验。似乎有一个一致的效果,就是for循环方法的结果总是与single-t-test方法的输出相同(这很有意义,因为它基本上是在做多个single ttest_ind
,然后将每个t检验的输出附加到列表中)。但是,这两个结果都与整个数组的ttest_ind
的输出不同。我还按照注释中的建议将数据切成不同的大小,并且发现了三种方法(或两种,因为for循环和单一t检验似乎总是相同)的结果变得越来越奇怪的悖论效果。更相似,但返回的t值和p值变得很小或很大。另外,当我想在最后一种情况下(n = 5)单击整个阵列的ttest_ind
的输出时, Spyder 崩溃。
n_rows = 150
Output from for-loop method (first t-value in the list):
t-value: -0.050583527798906465
p-value: 0.9596912767683707
Output from the t-test performed on only the first column:
t-value: -0.050583527798906465
p-value: 0.9596912767683707
Output from the t-test performed on the whole array (first t-value):
t-value: -0.050583527798907256
p-value: 0.9596912767683701
---------------------------------------
n_rows = 75
Output from for-loop method (first t-value in the list):
t-value: 0.9760289069224989
p-value: 0.33064277748038773
Output from the t-test performed on only the first column:
t-value: 0.9760289069224989
p-value: 0.33064277748038773
Output from the t-test performed on the whole array (first t-value):
t-value: 0.9760289069224984
p-value: 0.33064277748038795
---------------------------------------
n_rows = 5
Output from for-loop method (first t-value in the list):
t-value: 6111430044112607.0
p-value: 5.755396703077005e-124
Output from the t-test performed on only the first column:
t-value: 6111430044112607.0
p-value: 5.755396703077005e-124
Output from the t-test performed on the whole array (first t-value):
t-value: 6111430044112607.0
p-value: 5.755396703077005e-124
---------------------------------------