[Sci/Num]Python中与Matlab的"norminv"(正态分布反函数)相对应的是什么?

9
我正在寻找Python中类似于Matlab中norminv函数的等价物。换句话说(来自上面的描述):我正在搜索Python中的“正态分布反函数”,可能在scipy的stats部分中(或者是numpy?)。我猜它存在于scipy中,但可能使用与Matlab不同的名称,在Matlab的帮助页面上也不一定有。然而,我不确定这个函数的其他名称或确切工作方式,所以我很难找到它。不幸的是,它并不仅仅是“逆正常累积...”而不是“正常逆累积...”。
1个回答

2

这取决于您想要什么。如果您想要正态分布的反函数的分布的cdf,则需要使用invgauss,即“反高斯连续随机变量”。要获取cdf,您需要使用invgauss.cdf方法。摘自文档:

from scipy.stats import invgauss
mu = 0.145462645553
vals = invgauss.ppf([0.001, 0.5, 0.999], mu)
res = invgauss.cdf(vals, mu)

另一方面,如果您想要正态分布的cdf的反函数,您需要使用norm分布的ppf方法,它是"百分点函数(cdf的反函数-百分位数)"。


我认为这不正确:Inverse Gaussian Distribution - knedlsepp
我只是不确定逆高斯分布函数是否与高斯分布函数的逆相同。我只是在交叉检查这个问题。 - knedlsepp
2
好的。这个不正确的原因是:正态累积分布函数的反函数是定义在区间 [0,1] 上的函数,而所谓的逆高斯分布的分布函数在维基百科上列出的支持范围为 (0,Inf)。这意味着它们必须是两个不同的东西,正如我所怀疑的那样。OP想要在我链接的问题中使用函数 norm.ppf - knedlsepp
该死,为什么有这么多几乎都叫相同的函数,但在它们的所有实现中都被不同地称呼……不幸的是我没有 MATLAB,所以我无法进行一些快速检查以查看哪个 Python 函数产生与 MATLAB 相同的输出。 但是我可以安装 Octave,它似乎有一个 norminv 函数。 我会尝试一些不同的可能性并报告结果。 - JC_CL
2
好的,假设Octave中的norminv确实与Matlab中的norminv相同(Octave的文档非常简短,我对统计学一窍不通),则Python等效函数似乎确实是来自scipy.statsnorm.ppf:Octave - octave:9> norminv(0.9) ans = 1.2816 octave:10> norminv(0.5) ans = 0 Python - `In [35]: stats.norm.ppf(0.9) Out [35]:1.2815515655446004In [36]: stats.norm.ppf(0.5) Out [36]:0.0` - JC_CL
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接