如何实现集成Chi ^ 2函数的逆?

时间:2016-06-29 23:38:34

标签: python statistics distribution

我正在一篇名为A Neural Bayesian Estimator for Conditional Probability Densities的论文的上下文中实现一些变量的预处理。

它说: 1.)给定非线性,单调变量F:t-> s,使得s均匀分布。这可以通过以下方式在论文中提到:

>>> sorting the target vector in ascending order
>>> fitting the spline to data, e.g. using interpolate from scipy

2。)之后s被缩放到介于-1和1之间。这可以通过interp实现:

>>> from numpy import interp
>>> interp(256,[1,512],[5,10])

3.)最后,平面分布需要转换为高斯分布,以std 1为中心。

虽然前两步明确如何实施,但我正在与第三步挣扎。

关于3.),作者进一步指出可以使用积分X ^ 2(X ... chi)函数的逆。是否有适合这项工作的图书馆,最好是Python?

更新1:

再次阅读论文后,似乎X ^ 2与chi没有直接关系,而是计算如下:

X ^ 2 = P *(1-o)^ 2 +(1-P)*(( - 1)-o)^ 2

P为纯度(可以通过给定变量轻松计算)和o变量本身。

对于给定的s缩放在-1和1之间,我可能只计算了下限= -1和上限= s的积分,然后得到它的倒数。

问题:如何以数字方式做到这一点?

1 个答案:

答案 0 :(得分:1)

如果您的意思是X {sup> 2 分布为PDF here,那么您所看到的是X 2 CDF。它通过不完整的Gamma函数表示,参见相同的参考,您可以使用SciPy来计算它,thisthat应该符合条件。不要忘记分母中的完整Gamma函数。

要查找不完整Gamma的反转,您可以从SciPy查看反函数:thisthat

因此,我不相信你需要所有这些插值的东西

更新

可以使用在线集成商分析计算该表达式 比如that。只需计算上限的resulat和下限的结果之间的差异,然后设置

更新II

你必须自己设定间隔

下面是您可能尝试使用的(绝对未经测试的!)代码。注意,我使用泛型 根寻找例程,虽然因为积分是多项式,更优化的方式可能 是使用here的多项式根,甚至是 自己编码 - 它只是一个cubic equation

_

更新III

变量mkdir -p "$d" && cp "$1" "$d"被定义为从0到1的某个(随机U(0,1))数字。

def intgrl(x):
    return x*(x*(3.0 + x - 6.0*p) + 3.0)/3.0

def CDF(x, norm):
    return (intgrl(x) - intgrl(-1.0))/norm

def f(x, norm, rn):
    return CDF(x, norm) - rn

norm = intgrl(1.0) - intgrl(-1.0)

rn = 0.12345
res = scipy.optimize.brentq(f, -1.0, 1.0, args=(norm, rn))