z分数的概率,反之亦然

Posted

技术标签:

【中文标题】z分数的概率,反之亦然【英文标题】:Probability to z-score and vice versa 【发布时间】:2014-01-18 19:58:48 【问题描述】:

我如何计算p-valuez score,反之亦然?

例如,如果我的 p 值为 0.95,我应该得到 1.96 作为回报。

我在 scipy 中看到了一些函数,但它们只在数组上运行 z-test。

我可以访问 numpy、statsmodel、pandas 和 scipy(我认为)。

【问题讨论】:

【参考方案1】:
>>> import scipy.stats as st
>>> st.norm.ppf(.95)
1.6448536269514722
>>> st.norm.cdf(1.64)
0.94949741652589625

正如其他用户所指出的,Python 默认计算左/下尾概率。如果要确定包含 95% 分布的密度点,则必须采取另一种方法:

>>>st.norm.ppf(.975)
1.959963984540054
>>>st.norm.ppf(.025)
-1.960063984540054

【讨论】:

对于像我这样的其他任何人,他们对返回 1.96 但接受的答案给出 1.64 的函数的请求感到短暂困惑——不同之处在于 1.96 是其中的 zscore 是 95 % 的数据(忽略两个尾部),但 st.norm.ppf() 给出的 zscore 有 95% 的数据低于(仅忽略上尾)。 (cont) 如果你想从 0.95 得到 1.96,你必须利用正态分布是对称的这一事实,并将你忽略的数量除以一半,从而只忽略上尾: st.norm.ppf(1-(1-0.95)/2) == 1.959963984540054 - 基本统计数据,是的,但我只是想明确说明。 谁能告诉我用什么python代码来绘制上面的图? @bobthebuilder Womp womp!该图表实际上是使用 R 中的 tigerstats 包(特别是 pnormGC)生成的。【参考方案2】:

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 部分找到。

【讨论】:

【参考方案3】:

如果你对 T-test 感兴趣,可以做类似的:

z-statistics (z-score) 在数据服从正态分布、总体标准差 sigma 已知且样本量大于 30 时使用。Z-Score 告诉您与意思是你的结果是。 z 分数使用以下公式计算: z_score = (xbar - mu) / sigma t-statistics (t-score),也称为Student's T-Distribution,用于数据服从正态分布、总体标准差(sigma)NOT已知,但样本标准差(s)已知或可以计算,且样本量在30以下。T-Score告诉你您的结果与平均值有多少标准偏差。 t 分数使用以下公式计算: t_score = (xbar - mu) / (s/sqrt(n))

总结:如果样本量大于 30,则 z 分布和 t 分布几乎相同,可以使用任何一种。如果总体标准差可用且样本量大于 30,则可以使用总体标准差代替样本标准差使用 t 分布。

teststatistics lookuptable lookupvalues criticalvalue normaldistribution populationstandarddeviation (sigma) samplesize
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 百分比点函数用于计算特定置信度下的临界值:

z 关键 = 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

【讨论】:

【参考方案4】:

Z 分数到概率:

下面的代码 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

【讨论】:

以上是关于z分数的概率,反之亦然的主要内容,如果未能解决你的问题,请参考以下文章

Z-score和T-score的区别

数学(概率):HNOI2013 游走

Z-分数(Z-score)是

R计算Z分数(Z-Scores)

将 Z 分数(Z 值,标准分数)转换为 Python 中正态分布的 p 值

[BZOJ 3143][Hnoi2013]游走(高斯消元+期望)