如何在给定某些参数和输出的情况下找到 scipy.stats.exponnorm 的参数

问题描述 投票:0回答:1

我的问题如下: 考虑两个 PDF - 一个是正态分布(我们称之为范数),另一个是指数修正正态分布(exponorm)。给定 X 点,F 是 X 点与无穷大之间范数面积与指数范数面积的分数比。 IE。 F = (1 - 指数.CDF(X))/(1 - 范数.CDF(X)) .

我专门研究了 scipy 函数https://docs.scipy.org/doc/scipy/reference/ generated/scipy.stats.exponnorm.html,并试图弄清楚如何输入 F 的值,以及范数和指数范数所需的所有其他参数,然后输出链接中定义的 K 值。

Tl;博士,给定 CDF 和所有其他参数的值,如何提取 PDF 的参数。

提前致谢:)

python scipy statistics normal-distribution scipy.stats
1个回答
0
投票

如何输入 F 的值以及范数和指数所需的所有其他参数,然后输出链接中定义的 K 值。

IIUC,在第一个问题中,您想要在给定所有其他变量的值的情况下输出

K
exponnorm
形状参数。

也就是说,您想要求解“K”的方程“F = (1 - exponorm.CDF(X))/(1 -norm.CDF(X))”,它是“exponorm”的参数(不是明确显示)。

认识到 CDF 的补集是 SF(生存函数),您想要找到

K
的值,使得函数
f
如下:

from scipy import stats
def f(K, x, F):
    exponnorm = stats.exponnorm(K=K)
    norm = stats.norm()  # assuming standard normal
    return exponnorm.sf(x)/norm.sf(x) - K

f(K, x, F)
那样调用时返回零。

您有一个标量未知的标量值函数,因此您可以使用

scipy.optimize.root
来求解它。我们知道
K
必须大于零,并且我们假设
K
有一个很大的上限。

from scipy import optimize
# define "all other parameters"
x = 1.5
F = 2
bracket=(1e-8, 1e8)  # assume K is within this bracket
res = optimize.root_scalar(f, args=(x, F), bracket=bracket)
res.root  # 13.385243944296551
f(res.root, x, F)  # 0    

我不确定第二个问题,因为“a PDF”和“CDF”不明确,但听起来你仍然试图解决一个变量的标量值函数,所以你可以采用上面的方法根据需要。

© www.soinside.com 2019 - 2024. All rights reserved.