我一直在寻找一个有效的函数来计算学生 t 分布的 CDF(累积分布函数)。
这是我在查看另一个 stackoverflow 问题、JStat 库、此处第 317 行的 the_subtprob 函数后解决的问题。
看了最后参考文献中的注释,我找到了一本绝版书,这没有帮助
如果您对更精确的算法感兴趣,可以查看:StatLib:http ://lib.stat.cmu.edu/apstat/ ;
Griffiths, P. 和 Hill, ID 的应用统计算法
Ellis Horwood:Chichester (1985)
cmu 站点有一个 FORTRAN 函数,我将其翻译如下所示。
查看其他来源,我发现高阶函数,如不完全 beta、log gamma,并且实现似乎更复杂,并且在一种情况下是迭代的。
我想知道这个实现是否有任何已知的缺陷。它似乎产生与其他结果相同的结果。关于如何评估这一点的任何想法也会有所帮助。
function tcdf (t, v) {
//
// ALGORITHM AS 3 APPL. STATIST. (1968) VOL.17, P.189
// STUDENT T PROBABILITY (LOWER TAIL)
//
var b = v / (v + t * t),
c = 1,
s = 1,
ioe = v % 2,
k = 2 + ioe;
if (v < 1) {
return 0;
}
if (v >= 4) {
while (k <= v - 2) {
c *= b - b / k;
s += c;
k += 2;
}
}
c = t / Math.sqrt(v);
if (1 !== ioe) {
return 0.5 + 0.5 * Math.sqrt(b) * c * s;
}
return 0.5 + ((1 === v ? 0 : b * c * s) + Math.atan(c)) / Math.PI;
}