14

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

假设我有:

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

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

norm.ppf(0.95, loc=172.78, scale=4.15)

还是会像这样?

norm.ppf(0.95, loc=0, scale=1)

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

在此处输入图像描述

4

4 回答 4

25

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

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

来自 scipy.stats.norm:

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

标准正态分布

编码:

norm.ppf(0.95, loc=0, scale=1)

返回标准正态分布的单尾检验的95% 显着性区间(即均值为 0 且标准差为 1 的正态分布的特殊情况)。

我们的例子

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

norm.ppf(0.95, loc=172.7815, scale=4.1532)

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

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

双尾测试

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

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

norm.ppf(0.975, loc=172.7815, scale=4.1532)

误差范围

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

ppf = norm.ppf(0.975, loc=172.7815, scale=4.1532)

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

interval_value = std * ppf

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

lower_95 = mean - interval_value
upper_95 = mean + interval_value

用垂直线绘制:

_ = plt.axvline(lower_95, color='r', linestyle=':')
_ = plt.axvline(upper_95, color='r', linestyle=':')
于 2020-05-02T08:37:08.883 回答
3

您可以直接计算置信区间norm.ppf,而无需计算误差范围

upper_of_interval = norm.ppf(0.975, loc=172.7815, scale=4.1532/np.sqrt(50))
lower_of_interval = norm.ppf(0.025, loc=172.7815, scale=4.1532/np.sqrt(50))

4.1532是样本标准差,不是样本均值的抽样分布的标准差。因此,scaleinnorm.ppf将被指定为scale = 4.1532 / np.sqrt(50),它是采样分布的标准差的估计量。

(抽样分布的标准差值等于population standard deviation / np.sqrt(sample size)。这里,我们不知道总体标准差,样本量大于 30,所以sample standard deviation / np.sqrt(sample size)可以作为一个很好的估计量)。

误差范围可以用 来计算(upper_of_interval - lower_of_interval) / 2

[在 norm.ppf() 中解释 2.5 和 97.5 的图像] 1

于 2021-03-14T07:51:06.203 回答
3

norm.ppf詹姆斯返回“标准偏差乘数”的说法是错误的。

我希望我可以发表评论让他编辑它,但我没有足够的声誉,所以我只能尝试强调这个问题作为答案。这感觉很相关,因为当人们搜索 norm.ppf 时,他的帖子是谷歌搜索结果中排名靠前的结果。

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

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

我只是想把这个放在这里给任何从谷歌搜索结果顶部访问这个页面的人。

于 2021-08-25T18:01:17.473 回答
0

计算 95% 百分位数的金额并绘制一条垂直线和带有金额的注释

mean=172.7815
std=4.1532
N = 50

results=norm.rvs(mean,std, size=N)
pct_5 = norm.ppf(.95,mean,std)
plt.hist(results,bins=10)
plt.axvline(pct_5)
plt.annotate(pct_5,xy=(pct_5,6))
plt.show()
于 2021-04-13T20:50:15.570 回答