我有两个数组,一个是校正值x的数组,另一个是原始值的数组(在应用校正之前),y。我知道如果我想进行双尾测试以获得双尾p值,我需要这样做:
t_statistic, pvlaue = scipy.stats.ttest_ind(x, y, nan_policy='omit')
然而,这仅告诉我两个阵列是否彼此显着不同。我想证明修正后的值x明显小于y。要做到这一点,似乎我需要获得单尾pvalue,但我似乎无法找到一个执行此操作的函数。有什么想法吗?
答案 0 :(得分:2)
考虑这两个数组:
import scipy.stats as ss
import numpy as np
prng = np.random.RandomState(0)
x, y = prng.normal([1, 2], 1, size=(10, 2)).T
独立样本t检验返回:
t_stat, p_val = ss.ttest_ind(x, y, nan_policy='omit')
print('t stat: {:.4f}, p value: {:4f}'.format(t_stat, p_val))
# t stat: -1.1052, p value: 0.283617
该p值实际上是根据累积密度函数计算得出的:
ss.t.cdf(t_stat, len(x) + len(y) - 2) * 2
# 0.28361693716176473
这里,len(x) + len(y) - 2
是自由度的数量。
注意乘以2.如果测试是单尾的,则不要乘以。这就是全部。所以你的左尾测试的p值是
ss.t.cdf(t_stat, len(x) + len(y) - 2)
# 0.14180846858088236
如果测试是正确的,你将使用生存函数
ss.t.sf(t_stat, len(x) + len(y) - 2)
# 0.85819153141911764
与1 - ss.t.cdf(...)
相同。
我认为数组的长度相同。如果没有,您需要修改自由度。