Python中如何计算双非中心累积F分布

Python中如何计算双非中心累积F分布,python,statistics,scipy,Python,Statistics,Scipy,这是我在这里提出的另一个问题: 我找到了一种避免反问题的方法,所以我只需要在python中计算累积双非中心f分布(DNCF)。我对统计学了解不多,但wolfram指出DNCF只是非中心卡方分布的一个比率 考虑到分子自由度和非中心性参数(Dfn,Ncn)以及分母自由度/非中心性参数(Dfd,Ncd)的DNCF分布,简单地执行以下操作是否准确: def DNCF(x,Dfn,Dfd,Ncn,Ncd): out=scipy.stats.ncx2.cdf(x,Dfn,Ncn)/scipy.st

这是我在这里提出的另一个问题:

我找到了一种避免反问题的方法,所以我只需要在python中计算累积双非中心f分布(DNCF)。我对统计学了解不多,但wolfram指出DNCF只是非中心卡方分布的一个比率

考虑到分子自由度和非中心性参数(Dfn,Ncn)以及分母自由度/非中心性参数(Dfd,Ncd)的DNCF分布,简单地执行以下操作是否准确:

def DNCF(x,Dfn,Dfd,Ncn,Ncd):
    out=scipy.stats.ncx2.cdf(x,Dfn,Ncn)/scipy.stats.ncx2.cdf(x,Dfd,Ncd)
    return out
这对我来说似乎是可行的,但我希望能得到更多统计知识的人的验证。
谢谢

不,您建议的公式不正确。变量比率的cdf通常是一些更复杂的函数,如所谓的变量变化法(也称为变换法)所示。不幸的是,我不知道正确的公式。如果你找不到它,你可以尝试通过改变变量来解决它。需要做一两次积分才能得到cdf——如果你至少能解决这个问题,你可以求助于计算机代数系统来计算积分。你链接到的Mathworld文章中有一个cdf公式(他们称之为分布函数)。这个公式包含了一些特殊的函数,但我认为SciPy中包含了beta函数和2F1超几何函数。我不确定如何实现这个方程。它可能需要一个cython实现才能高效(使用求和)。我会更深入地研究这个问题,谢谢你的帮助,也许分母中的阶乘的存在会使它收敛得足够快。让我们知道结果如何。在python中,我所知道的最接近于此的是在这个线程中,代码使用显式集成。