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

Java 确定F测试的临界F值时确定β函数,java,math,statistics,Java,Math,Statistics,我使用概述的方法来确定F测试的临界F值。我的问题是。我的x和y分别为0.5和248。我尝试使用以下(Java)代码通过求和进行集成 static double beta函数(双x,双y){ 双betaFunction=0.0; 双inc=0.00001,t=0; 双xM1=x-1,yM1=y-1; 做{ t+=inc; betaFunction+=数学功率(t,xM1)*数学功率(1.0-t,yM1)*inc; }而(t如果没有闭合形式的积分解,最好的方法是使用斯特林近似() 这是一个封闭形式的

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

static double beta函数(双x,双y){
双betaFunction=0.0;
双inc=0.00001,t=0;
双xM1=x-1,yM1=y-1;
做{
t+=inc;
betaFunction+=数学功率(t,xM1)*数学功率(1.0-t,yM1)*inc;

}而(t如果没有闭合形式的积分解,最好的方法是使用斯特林近似()

这是一个封闭形式的解决方案,接近“大”n的实际值

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


对于
x
y
,计算它至少可以在线性时间内完成。你必须自己决定在什么范围内使用它,什么错误是可以接受的。

所以你想做一个逆的,不完全的beta函数。我很久以前在一个遥远的星系中写过其中一个。当然,今天我就叫bMATLAB中的etaincinv

你只是不想用步长很小的数值积分来做。当然不是像你在这里做的那样,用矩形规则积分。请注意,对于这样的参数,beta的形状有点难看。(好吧,有点难看是一个很好的说法。它真的很难看。)


Abramowitz&Stegun提供了一些近似值,我记得这些近似值会有所帮助。然后你可以使用牛顿方法快速改进结果。这很好,因为积分的导数很容易计算。

我尝试了这里给出的斯特林近似值。不幸的是,它的指数太高,y=248,因此溢出了欠我的缓冲区。我将尝试使用对数。谢谢哦。我能够使用对数实现它。谢谢,哦。
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;
}