如何在python中计算正态分布的百分位数

问题陈述-随机变量 X 为 N (25,4)。找到 X 的指定百分位数:

问题陈述-随机变量 X 为 N (25,4)。找到 X 的指定百分位数:

a.第 10 个百分位数

b.第 90 个百分位数

c.第 80 个百分位数

d.第 50 个百分位数

尝试次数1

我的代码:

import numpy as np
import math
import scipy.stats
mu=25
sigma=4
a=mu-(1.282*4)
b=mu+(1.282*4)

...像这样。我从https://sphweb.c.bu.edu/otlt/mph-modules/bs/bs704_probability/bs704_probability10.html中给出的 Zscore 表中获得了值

尝试次数2

X=np.random.normal(25,4,10000) # sample size not mentioned in 
                                 problem. I just assumed it
a_9 = np.percentile(X,10)
b_9 = np.percentile(X,90)
c_9 = np.percentile(X,80)
d_9 = np.percentile(X,50)

但是根据实践平台的隐藏测试用例,答案是不正确的。任何人都可以告诉我正确的方法来计算答案吗?

11

您可以使用scipy.stats和内置的ppf功能(看documentation

import numpy as np
import scipy.stats as sps
import matplotlib.pyplot as plt
mu = 25
sigma = 4
# define the normal distribution and PDF
dist = sps.norm(loc=mu, scale=sigma)
x = np.linspace(dist.ppf(.001), dist.ppf(.999))
y = dist.pdf(x)
# calculate PPFs
ppfs = {}
for ppf in [.1, .5, .8, .9]:
    p = dist.ppf(ppf)
    ppfs.update({ppf*100: p})
# plot results
fig, ax = plt.subplots(figsize=(10, 4))
ax.plot(x, y, color='k')
for i, ppf in enumerate(ppfs):
    ax.axvline(ppfs[ppf], color=f'C{i}', label=f'{ppf:.0f}th: {ppfs[ppf]:.1f}')
ax.legend()
plt.show()

that gives enter image description here

6

使用 scipy.stats.norm(正态分布)中的 ppf 方法。

scipy.stats.norm.ppf(0.1, loc=25, scale=4)

该函数类似于 r 中的 qnorm 函数。ppf 方法给出了给定百分位数的随机变量的值。

-1
a_9 = 19.88
b_9 = 30.12
c_9 = 28.36
d_9 = 25.00
X = np.random.normal(25,4,10000000)

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(298)
在 Powershell中创建日志文件
上一篇
如何在 Windows中的两个程序之间快速交换
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(33条)