微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何从python中的正态分布计算百分位数?

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

一个。第 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)

……就这样。我从 Zscore 表中得到了值 https://sphweb.bumc.bu.edu/otlt/mph-modules/bs/bs704_probability/bs704_probability10.html

尝试 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)

但是根据练习平台隐藏的测试用例,答案是错误的。谁能告诉我计算答案的正确方法?是否有任何 scipy.stats 功能

解决方法

你可以使用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()

enter image description here

,

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。