如何使用 norm.ppf()?

Fat*_*oom 9 python statistics scipy python-3.x

我无法理解如何正确使用此功能,有人可以向我解释一下吗?

假设我有:

  • 平均值为 172.7815
  • 标准差为 4.1532
  • N = 50(50 个样本)

当我被要求使用 norm.ppf() 计算 (95%) 误差幅度时,代码会如下所示吗?

norm.ppf(0.95, loc=172.78, scale=4.15)
Run Code Online (Sandbox Code Playgroud)

或者它看起来像这样?

norm.ppf(0.95, loc=0, scale=1)
Run Code Online (Sandbox Code Playgroud)

因为我知道它正在计算置信区间右侧的曲线面积(95%、97.5% 等...见下图),但是当我有均值和标准差时,我真的很困惑如何使用该功能。

在此处输入图片说明

sek*_*lwf 19

詹姆斯norm.ppf返回“标准差乘数”的说法是错误的。这感觉很相关,因为当人们搜索norm.ppf时,他的帖子是谷歌搜索结果中排名第一的。

“norm.ppf”是“norm.cdf”的逆。在示例中,它仅返回 95% 百分位数处的值。不涉及“标准差乘数”。

这里有一个更好的答案: 如何计算 python 中正态累积分布函数的反函数?

  • 重申一下,最上面的答案是不正确的。这很重要,因为当人们搜索“norm.ppf”时,该线程仍然是 Google 上的首要结果。如果您真的尝试阅读和理解,我的帖子实际上确实回答了问题,并提供了更详细解释的参考。正如@PM77-1 链接中引用的那样:“一般来说,无论如何,真正重要的信息都应该纳入答案中” (9认同)
  • 这并没有提供问题的答案。一旦您拥有足够的[声誉](https://stackoverflow.com/help/whats-reputation),您将能够[对任何帖子发表评论](https://stackoverflow.com/help/privileges/comment);相反,[提供不需要询问者澄清的答案](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an-我-做-相反)。 (2认同)

Jam*_*ush 18

该方法norm.ppf()采用一个百分比并返回该百分比出现的值的标准偏差乘数。

它相当于密度图上的“单尾检验”。

来自 scipy.stats.norm:

ppf(q, loc=0, scale=1) 百分比点函数(cdf 的倒数——百分位数)。

标准正态分布

编码:

norm.ppf(0.95, loc=0, scale=1)
Run Code Online (Sandbox Code Playgroud)

返回对于一个95%的显着间隔单尾测试上的标准正态分布(即,正常的分布的平均为0,标准偏差为1的特殊情况)。

我们的例子

要计算我们的 95% 显着性区间所在的 OP 提供的示例的值(对于单尾测试),我们将使用:

norm.ppf(0.95, loc=172.7815, scale=4.1532)
Run Code Online (Sandbox Code Playgroud)

这将返回一个值(用作“标准偏差乘数”),标记如果我们的数据是正态分布,将包含 95% 的数据点。

为了得到确切的数字,我们将norm.ppf()输出乘以我们所讨论的分布的标准偏差。

双尾测试

如果我们需要计算“双尾检验”(即我们关注大于小于均值的值),那么我们需要拆分显着性(即我们的 alpha 值),因为我们仍在使用计算方法对于单尾。一分为二象征着两条尾巴的显着性水平。95% 的显着性水平具有 5% 的 alpha;将 5% 的 alpha 拆分到两个尾部会返回 2.5%。从 100% 中取 2.5% 返回 97.5% 作为显着性水平的输入。

因此,如果我们关注均值两侧的值,我们的代码将输入 0.975 来表示跨两条尾巴的 95% 显着性水平:

norm.ppf(0.975, loc=172.7815, scale=4.1532)
Run Code Online (Sandbox Code Playgroud)

误差范围

误差幅度是用样本统计量估计总体参数时使用的显着性水平。我们想使用双尾输入来生成我们的 95% 置信区间,norm.ppf()因为我们关心大于和小于平均值的值:

ppf = norm.ppf(0.975, loc=172.7815, scale=4.1532)
Run Code Online (Sandbox Code Playgroud)

接下来,我们将 ppf 乘以我们的标准偏差以返回间隔值:

interval_value = std * ppf
Run Code Online (Sandbox Code Playgroud)

最后,我们将通过从平均值中添加和减去区间值来标记置信区间:

lower_95 = mean - interval_value
upper_95 = mean + interval_value
Run Code Online (Sandbox Code Playgroud)

用垂直线绘制:

_ = plt.axvline(lower_95, color='r', linestyle=':')
_ = plt.axvline(upper_95, color='r', linestyle=':')
Run Code Online (Sandbox Code Playgroud)