从平均值和标准差计算 Z 分数
Posted
技术标签:
【中文标题】从平均值和标准差计算 Z 分数【英文标题】:Z-score calculation from mean and st dev 【发布时间】:2018-07-20 04:49:53 【问题描述】:如果我已经知道临界值、均值和 st dev,我想问一下是否有任何流行的软件包,例如:numpy、scipy 等具有计算 Z-Score 的内置函数。
我通常这样做:
def Zscore(xcritical, mean, stdev):
return (xcritical - mean)/stdev
#example:
xcritical = 73.06
mean = 72
stdev = 0.5
zscore = Zscore(xcritical, mean, stdev)
后来我使用scipy.stats.norm.cdf
来计算 x 低于 xcritical 的概率。
import scipy.stats as st
print(st.norm.cdf(zscore))
我想知道我是否可以以某种方式简化它。我知道有 scipy.stats.zscore
函数,但它需要一个样本数组而不是样本统计信息。
【问题讨论】:
【参考方案1】:已知电池的寿命(以小时为单位)大致呈正态分布,标准偏差 σ = 1.25 小时。 10 节电池的随机样本的平均寿命为 x = 40.5 小时。 一种。是否有证据支持电池寿命的说法 超过40小时?使用 α = 0.5。
norm.sf,因为我想知道钟形曲线的右侧是否超过了alpha来回答。
norm.sf(40.5, loc=40, scale=1.25/np.sqrt(10)) #recall the z score formula
p 值 = 0.102
何:u=40;哈:u>40
因此 p 值大于 alpha,因此我们无法拒绝原假设并得出结论,确实有证据支持电池寿命超过 40 小时。 P 值 0.10 > 0.05 alpha
【讨论】:
【参考方案2】:从Python 3.9
开始,标准库在NormalDist
对象上提供zscore
函数作为statistics
模块的一部分:
NormalDist(mu=72, sigma=.5).zscore(73.06)
# 2.1200000000000045
【讨论】:
【参考方案3】:只需一行即可完成;像这样:
>>> import scipy.stats as st
>>> st.norm(mean, stdev).cdf(xcritical))
【讨论】:
【参考方案4】:在您的问题中,我不确定您计算“x”低于“xcritical”的概率是什么意思,因为您没有定义“x”。无论如何,我将回答如何计算 'x' 值的 z-score。
按照 scipy.stats.norm 文档 here,似乎没有内置方法来计算值的 z 分数(在您的情况下为“xcritical”) ,给定平均值和标准差。但是,您可以使用内置方法 cdf 和 ppf 进行计算。考虑以下 sn-p(这些值与您在帖子中使用的值相同,其中 'xcritical' 是您希望计算 z-score 的值):
xcritical = 73.06
mean = 72
stdev = 0.5
p = norm.cdf(x=xcritical,loc=mean,scale=stdev)
z_score = norm.ppf(p)
print('The z-score for corresonding to mean and std deviation is: :.3f'.format(xcritical,mean,stdev,z_score))
在这里,我们首先使用 norm.cdf() 计算在给定 'mean' 和 'stdev' 的情况下获得 'xcritical' 值的累积概率 'p'。 norm.cdf() 计算正态分布曲线下从负无穷到“x”值(在本例中为“xritical”)的面积百分比。然后,我们将这个概率传递给 norm.ppf() 以获得对应于那个 'x' 值的 z 分数。 norm.ppf() 是百分比点函数,它产生对应于标准正态分布曲线中通过的较低尾部概率的 (z) 值。此代码的输出 2.12 与您将从函数 Zscore() 获得的输出相同。
希望有帮助!
【讨论】:
以上是关于从平均值和标准差计算 Z 分数的主要内容,如果未能解决你的问题,请参考以下文章