在python中获得z得分的概率,反之亦然

use*_*006 53 python statistics

我有numpy,statsmodel,pandas和scipy(我认为)

如何计算p值的z得分,反之亦然?

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

我在scipy中看到了一些函数,但它们只在数组上运行z测试.

Myl*_*ker 102

>>> import scipy.stats as st
>>> st.norm.ppf(.95)
1.6448536269514722
>>> st.norm.cdf(1.64)
0.94949741652589625
Run Code Online (Sandbox Code Playgroud)

默认的Python概率

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

>>>st.norm.ppf(.975)
1.959963984540054
>>>st.norm.ppf(.025)
-1.960063984540054
Run Code Online (Sandbox Code Playgroud)

两点之间的密度

  • (续)如果你想要0.96从0.95,你必须利用正态分布是对称的事实,并将你忽略的数量除以一半,只得忽略上面的尾部:`st.norm.ppf(1 - (1-0.95)/ 2)== 1.959963984540054` - 基本统计数据,是的,但我只想说明一点. (34认同)
  • 对于像我这样的其他人,对于返回1.96的函数的请求简单地感到困惑,但是接受的答案给出1.64 - 不同之处在于1.96是其中的zscore是95%的数据(忽略两个尾部) ),但是st.norm.ppf()给出了zscore,其中95%的数据*低于*它(仅忽略上尾). (26认同)
  • @bobthebuilder Womp womp!该图表实际上是使用 R 中的 [tigerstats](https://cran.r-project.org/web/packages/tigerstats/index.html) 包生成的(特别是 [pnormGC](https://homerhanumat.github. io/tigerstats/qnorm.html))。 (3认同)
  • 谁能告诉我上面的图是用什么Python代码绘制的吗? (2认同)

Xav*_*hot 17

从 开始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
Run Code Online (Sandbox Code Playgroud)

对“(1 + 0.95) / 2”的解释。公式可以在维基百科部分找到。


Pou*_*del 6

如果你对T检验感兴趣,你可以做类似的事情:

  • 当数据服从正态分布、总体标准差 sigma 已知并且样本大小高于 30 时,使用z 统计量 (z 得分) 。Z 得分告诉您结果与平均值的标准差有多少。z 分数使用以下公式计算:
    z_score = (xbar - mu) / sigma
  • t 统计量 (t-score)也称为学生 T 分布,当数据服从正态分布、总体标准差 ( sigma )未知,但样本标准差 ( s ) 已知或可以已知时使用计算出来的,并且样本量低于 30。T-Score 告诉您结果与平均值的标准差有多少。t 分数使用以下公式计算:
    t_score = (xbar - mu) / (s/sqrt(n))

摘要:如果样本量大于 30,则 z 分布和 t 分布几乎相同,可以使用其中之一。如果总体标准差可用并且样本量大于 30,则可以将 t 分布与总体标准差一起使用,而不是样本标准差。

测试
统计
查找
查找
临界
正态分布
总体
标准
差(西格玛)
样本
z 统计量 z表 z 分数 z-关键是特定置信水平下的 z 分数 是的 已知的 > 30
t-统计量 T表 t 分数 t-关键是特定置信水平下的 t 分数 是的 未知 < 30



Python Percent Point Function用于计算特定置信水平下的临界值:

  • z 临界 = stats.norm.ppf(1 - alpha) (use alpha = alpha/2 for two-sided)
  • t-关键 = 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
Run Code Online (Sandbox Code Playgroud)