确定F测试的临界F值时确定Beta函数

时间:2013-08-29 20:04:55

标签: java math statistics

我使用概述here的方法来确定F测试的临界F值。我的问题是the beta function is an integral。我的x和y分别为0.5和248。我尝试使用以下(Java)代码通过求和进行集成。

static double BetaFunction(double x, double y){
    double betaFunction=0.0;
    double inc=0.00001, t=0;
    double xM1=x-1, yM1=y-1;

    do{
        t+=inc;         
        betaFunction+=Math.pow(t, xM1)*Math.pow(1.0-t, yM1)*inc;
    } while (t<1.0);

    return betaFunction;
}

不幸的是,返回的值在很大程度上取决于我为inc选择的值。当该值减小时,运行时间线性上升,精度以对数方式改善。

有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

所以你想做一个反向的,不完整的beta函数。我很久以前就写过其中一个,远在遥远的银河系中。当然,今天我只是在MATLAB中调用betaincinv。

你只是不想通过小步长的数值积分来做到这一点。当然不像你在这里那样作为矩形规则集成。请注意,测试版对于像这样的参数有一些讨厌的形状。 (好吧,有点讨厌是一个很好的说法。它真的很讨厌。)

Abramowitz&amp;我记得Stegun有一些近似值可以提供帮助。然后,您可以使用牛顿方法快速完成结果。这很好用,因为积分的导数很容易评估。

答案 1 :(得分:1)

在没有封闭形式积分解的情况下,你可能做的最好的事情就是使用斯特林的近似值(http://en.wikipedia.org/wiki/Stirling%27s_approximation

这是一种封闭式解决方案,可以接近“大”n的实际值。

sqrt(2Pi)*x^(x-.5)*y^(y-.5)/(x+y)^(x+y-.5)

计算它至少可以在xy的线性时间内完成。您必须自己决定使用它的范围以及您可以接受的错误。