python - 如何在Python中计算单尾p值?

标签 python arrays scipy

我有两个数组,一个是校正值 x 的数组,另一个是原始值(应用校正之前)y 的数组。我知道如果我想做一个双尾 ttest 来获得双尾 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(...)相同。

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

关于python - 如何在Python中计算单尾p值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45045802/

相关文章:

python - 如何知道 optparse 选项是在命令行中传递的还是作为默认选项传递的

python - scipy.integrate.odeint 是否可以输出内部计算

java - 循环数组只有两个对象分配给Map?

javascript - 如何在我的 html 上使用 getJSON

python - 如何在 Python 中创建 logit 正态分布?

python - 如何解释 `scipy.stats.kstest` 和 `ks_2samp` 以评估 `fit` 的数据分布?

python - 选择性覆盖 Jinja2

python - 测试和 python 包结构

python - 这个 for 循环在 python 中是如何工作的

java - 用用户输入按位置替换破折号然后存储