【发布时间】:2014-01-18 19:58:48
【问题描述】:
我如何计算p-value 的z score,反之亦然?
例如,如果我的 p 值为 0.95,我应该得到 1.96 作为回报。
我在 scipy 中看到了一些函数,但它们只在数组上运行 z-test。
我可以访问 numpy、statsmodel、pandas 和 scipy(我认为)。
【问题讨论】:
标签: python statistics
我如何计算p-value 的z score,反之亦然?
例如,如果我的 p 值为 0.95,我应该得到 1.96 作为回报。
我在 scipy 中看到了一些函数,但它们只在数组上运行 z-test。
我可以访问 numpy、statsmodel、pandas 和 scipy(我认为)。
【问题讨论】:
标签: python statistics
【讨论】:
st.norm.ppf(1-(1-0.95)/2) == 1.959963984540054 - 基本统计数据,是的,但我只是想明确说明。
从Python 3.8 开始,标准库提供NormalDist 对象作为statistics 模块的一部分。
它可用于获取zscore,正态曲线下面积的 x% 位于(忽略两条尾巴)。
我们可以使用标准正态分布上的inv_cdf(逆累积分布函数)和cdf(累积分布函数)从另一个中获取一个,反之亦然:
from statistics import NormalDist
NormalDist().inv_cdf((1 + 0.95) / 2.)
# 1.9599639845400536
NormalDist().cdf(1.9599639845400536) * 2 - 1
# 0.95
“(1 + 0.95) / 2”的解释。公式可以在 wikipedia 部分找到。
【讨论】:
如果你对 T-test 感兴趣,可以做类似的:
总结:如果样本量大于 30,则 z 分布和 t 分布几乎相同,可以使用任何一种。如果总体标准差可用且样本量大于 30,则可以使用总体标准差代替样本标准差使用 t 分布。
| test statistics |
lookup table |
lookup values |
critical value |
normal distribution |
population standard deviation (sigma) |
sample size |
|---|---|---|---|---|---|---|
| z-statistics | z-table | z-score | z-critical is z-score at a specific confidence level | yes | known | > 30 |
| t-statistics | t-table | t-score | t-critical is t-score at a specific confidence level | yes | not known | < 30 |
Python 百分比点函数用于计算特定置信度下的临界值:
= stats.norm.ppf(1 - alpha) (use alpha = alpha/2 for two-sided)
= stats.t.ppf(alpha/numOfTails, ddof)
import numpy as np
from scipy import stats
# alpha to critical
alpha = 0.05
n_sided = 2 # 2-sided test
z_crit = stats.norm.ppf(1-alpha/n_sided)
print(z_crit) # 1.959963984540054
# critical to alpha
alpha = stats.norm.sf(z_crit) * n_sided
print(alpha) # 0.05
【讨论】:
下面的代码 sn-p 将 z 分数的绝对值的负数 映射到标准正态分布的 cdf 并乘以 2 。这将给出找到图中阴影区域 1 + 区域 2 的概率的概率:
import numpy as np
from scipy.stats import norm
norm(0, 1).cdf(-np.absolute(zscore)) * 2
参考:https://mathbitsnotebook.com/Algebra2/Statistics/STzScores.html
【讨论】: