首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从python中的正态分布计算百分位数?

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

Stack Overflow用户
提问于 2021-02-01 14:33:53
回答 2查看 1.8K关注 0票数 0

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

a.第10个百分位数

b.第90个百分位数

c.第80个百分位

d. 50个百分位数

尝试1

我的代码:

代码语言:javascript
复制
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.bumc.bu.edu/otlt/mph-modules/bs/bs704_probability/bs704_probability10.html中给出的Zscore表中获得了值

尝试2

代码语言:javascript
复制
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函数?

EN

回答 2

Stack Overflow用户

发布于 2021-03-27 20:04:50

您可以使用scipy.stats和内置的ppf函数(查看documentation)

代码语言:javascript
复制
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()

这就给了我们

票数 3
EN

Stack Overflow用户

发布于 2021-08-02 13:07:54

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

代码语言:javascript
复制
scipy.stats.norm.ppf(0.1, loc=25, scale=4)

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65988123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档