Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中进行单尾pvalue计算?_Python_Arrays_Scipy - Fatal编程技术网

如何在Python中进行单尾pvalue计算?

如何在Python中进行单尾pvalue计算?,python,arrays,scipy,Python,Arrays,Scipy,我有两个数组,一个是校正值x的数组,另一个是原始值y的数组(在应用校正之前)。我知道,如果我想进行双尾测试以获得双尾pvalue,我需要这样做: t_statistic, pvlaue = scipy.stats.ttest_ind(x, y, nan_policy='omit') 然而,这只会告诉我这两个数组之间是否存在显著差异。我想证明校正后的值x明显小于y。要做到这一点,我似乎需要得到单尾pvalue,但我似乎找不到一个函数可以做到这一点。有什么想法吗?考虑以下两种阵列: import

我有两个数组,一个是校正值x的数组,另一个是原始值y的数组(在应用校正之前)。我知道,如果我想进行双尾测试以获得双尾pvalue,我需要这样做:

t_statistic, pvlaue = scipy.stats.ttest_ind(x, y, nan_policy='omit')

然而,这只会告诉我这两个数组之间是否存在显著差异。我想证明校正后的值x明显小于y。要做到这一点,我似乎需要得到单尾pvalue,但我似乎找不到一个函数可以做到这一点。有什么想法吗?

考虑以下两种阵列:

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(-abs(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(…)
相同


我假设数组具有相同的长度。如果没有,则需要修改自由度。

此处的逻辑相同。根据假设的方向,将返回的t_统计量传递给生存函数或cdf。我尝试在sf中传递t_统计量,但它说我需要修改参数。这是我掌握的所有信息。快速提问。我在测试中输入x,y的顺序重要吗?例如,我想看看x是否比y大很多。我是否在测试中订购x,y,然后按照sf的讨论进行右尾测试?那么,如果值为@ayhan,这是否正确?”ss.t.cdf(t_stat,len(x)+len(y)-2)*2',我们为什么要将得到的p值乘以2?这不允许p值大于1吗?@hirschme对于双尾假设检验,我们计算-无穷大和-绝对(t值)之间的面积,以及绝对(t值)和inf之间的面积。因为t分布是对称的,你可以计算其中一个并乘以2。当然,每一个都将返回一个小于或等于0.5的值。然而,我没有在帖子中提到,如果t为正,那么计算结果将是
(1-ss.t.cdf(t_stat,len(x)+len(y)-2))*2
@ayhan,这很有意义,谢谢。我刚刚发布了与一般问题相同的内容。请随便回答。否则我将删除它,因为它不再相关