我必须使用什么来计算正态分布的逆概率密度函数?我正在使用 scipy 找出正态分布概率密度函数:
from scipy.stats import norm
norm.pdf(1000, loc=1040, scale=210)
0.0018655737107410499
如何计算出 0.0018 概率对应于给定正态分布中的 1000?
最佳答案
不可能存在从概率密度到分位数的 1:1 映射。
因为正态分布的 PDF 是二次方的,所以可能存在具有特定概率密度的 2、1 或零分位数。
更新
通过分析找到根源其实并不难。正态分布的 PDF 由下式给出:
通过一些重新排列我们得到:
(x - mu)**2 = -2 * sigma**2 * log( pd * sigma * sqrt(2 * pi))
如果 RHS 上的判别式 < 0,则没有实根。如果它等于零,则有一个根(其中 x = mu),如果它 > 0,则有两个根。
将它们组合成一个函数:
import numpy as np
def get_quantiles(pd, mu, sigma):
discrim = -2 * sigma**2 * np.log(pd * sigma * np.sqrt(2 * np.pi))
# no real roots
if discrim < 0:
return None
# one root, where x == mu
elif discrim == 0:
return mu
# two roots
else:
return mu - np.sqrt(discrim), mu + np.sqrt(discrim)
这给出了所需的分位数,在舍入误差范围内:
from scipy.stats import norm
pd = norm.pdf(1000, loc=1040, scale=210)
print get_quantiles(pd, 1040, 210)
# (1000.0000000000001, 1079.9999999999998)
关于python - 逆概率密度函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22264046/