我的问题如下: 考虑两个 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 的参数。
提前致谢:)
如何输入 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”不明确,但听起来你仍然试图解决一个变量的标量值函数,所以你可以采用上面的方法根据需要。