从平均值和标准差计算Z得分

6
我希望询问是否有一些流行的包,如numpy、scipy等,内置了一个函数可以在已知临界值、均值和标准差的情况下计算Z分数。
通常我会这样做:
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函数,但它需要一个样本数组而不是样本统计量。

4个回答

4
从Python 3.9开始,标准库提供了zscore函数,该函数是NormalDist对象的一部分,属于statistics模块。请注意保留HTML标签。
NormalDist(mu=72, sigma=.5).zscore(73.06)
# 2.1200000000000045

1
你可以只用一行代码完成它,就像这样:


>>> import scipy.stats as st
>>> st.norm(mean, stdev).cdf(xcritical))

1
在你的问题中,我不确定你所说的计算'x'小于'xcritical'的概率是什么意思,因为你没有定义'x'。无论如何,我将回答如何计算'x'值的z分数。
根据scipy.stats.norm文档here,似乎没有内置方法来计算给定均值和标准差的值(在你的情况下是'xcritical')的z分数。但是,您可以使用内置方法cdfppf来计算相同的值。考虑以下代码片段(值与您在帖子中使用的值相同,其中'xcritical'是您想要计算z分数的值):
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()计算给定“平均值”和“标准偏差”的情况下获得“xcritical”值的累积概率'p'。 norm.cdf()计算正态分布曲线下从负无穷到一个'x'值(在本例中为'xritical')的百分比面积。然后,我们将此概率传递给norm.ppf()以获得对应于该'x'值的z-分数。 norm.ppf()是百分点函数,它产生标准正态分布曲线中传递的较低尾部概率相对应的(z)值。这段代码的输出是2.12,与您从函数Zscore()获得的结果相同。

希望能有所帮助!


0
电池的使用寿命以小时为单位,其标准差σ为1.25小时,服从正态分布。抽取10个随机样本电池,其平均使用寿命为x=40.5小时。 a. 在α=0.5的情况下,是否有证据支持电池的使用寿命超过40小时?
使用norm.sf函数可以得到钟形曲线右侧的概率密度值,进而判断是否超过给定的α值。
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值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接