MVK*_*XXX 8 python numpy scipy.stats
问题陈述 - 随机变量 X 是 N(25, 4)。找到 X 的指定百分位:
A。第 10 个百分位数
b. 第 90 个百分位数
C。第 80 个百分位数
d. 第 50 个百分位数
我的代码:
import numpy as np
import math
import scipy.stats
mu=25
sigma=4
a=mu-(1.282*4)
b=mu+(1.282*4)
Run Code Online (Sandbox Code Playgroud)
... 像那样。我从https://sphweb.bumc.bu.edu/otlt/mph-modules/bs/bs704_probability/bs704_probability10.html中给出的 Zscore 表中获取了值
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)
Run Code Online (Sandbox Code Playgroud)
但根据练习平台隐藏的测试用例,答案是不正确的。谁能告诉我计算答案的正确方法吗?有没有 scipy.stats 函数来实现这个?
Max*_*ini 13
您可以使用scipy.stats内置ppf函数(查看文档)
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()
Run Code Online (Sandbox Code Playgroud)
小智 6
使用 scipy.stats.norm 中的 ppf 方法(正态分布)。
scipy.stats.norm.ppf(0.1, loc=25, scale=4)
Run Code Online (Sandbox Code Playgroud)
该函数类似于 r 中的 qnorm 函数。ppf 方法给出给定百分位处的随机变量的值。
| 归档时间: |
|
| 查看次数: |
15609 次 |
| 最近记录: |