在javascript中实现双尾t分布-修改现有解决方案

在javascript中实现双尾t分布-修改现有解决方案,javascript,statistics,t-test,Javascript,Statistics,T Test,我正在尝试用javascript实现一个双尾t测试 发件人: 我已从链接中提取了一个潜在的解决方案,并对其进行了修改,使其在表单之外工作: function LogGamma(Z) { with (Math) { var S=1+76.18009173/Z-86.50532033/(Z+1)+24.01409822/(Z+2)-1.231739516/(Z+3)+.00120858003/(Z+4)-.00000536382/(Z+5); var LG=

我正在尝试用javascript实现一个双尾t测试

发件人:

我已从链接中提取了一个潜在的解决方案,并对其进行了修改,使其在表单之外工作:

function LogGamma(Z) {
    with (Math) {
        var S=1+76.18009173/Z-86.50532033/(Z+1)+24.01409822/(Z+2)-1.231739516/(Z+3)+.00120858003/(Z+4)-.00000536382/(Z+5);
        var LG= (Z-.5)*log(Z+4.5)-(Z+4.5)+log(S*2.50662827465);
    }
    return LG
}

function Betinc(X,A,B) {
    var A0=0;
    var B0=1;
    var A1=1;
    var B1=1;
    var M9=0;
    var A2=0;
    var C9;
    while (Math.abs((A1-A2)/A1)>.00001) {
        A2=A1;
        C9=-(A+M9)*(A+B+M9)*X/(A+2*M9)/(A+2*M9+1);
        A0=A1+C9*A0;
        B0=B1+C9*B0;
        M9=M9+1;
        C9=M9*(B-M9)*X/(A+2*M9-1)/(A+2*M9);
        A1=A0+C9*A1;
        B1=B0+C9*B1;
        A0=A0/B1;
        B0=B0/B1;
        A1=A1/B1;
        B1=1;
    }
    return A1/A
}

function tdist(X, df) {
    with (Math) {
        if (df<=0) {
            alert("Degrees of freedom must be positive")
        } else {
            A=df/2;
            S=A+.5;
            Z=df/(df+X*X);
            BT=exp(LogGamma(S)-LogGamma(.5)-LogGamma(A)+A*log(Z)+.5*log(1-Z));
            if (Z<(A+1)/(S+2)) {
                betacdf=BT*Betinc(Z,A,.5)
            } else {
                betacdf=1-BT*Betinc(1-Z,.5,A)
            }
            if (X<0) {
                tcdf=betacdf/2
            } else {
                tcdf=1-betacdf/2
            }
        }
        tcdf=round(tcdf*100000)/100000;
    }
    return tcdf;
}
函数LogGamma(Z){
(数学){
var S=1+76.18009173/Z-86.50532033/(Z+1)+24.01409822/(Z+2)-1.231739516/(Z+3)+.00120858003/(Z+4)-.00000536382/(Z+5);
var LG=(Z-.5)*对数(Z+4.5)-(Z+4.5)+对数(S*2.50662827465);
}
返回LG
}
函数Betinc(X,A,B){
var A0=0;
var B0=1;
var A1=1;
var B1=1;
var M9=0;
var A2=0;
var C9;
而(数学abs((A1-A2)/A1)>.00001){
A2=A1;
C9=-(A+M9)*(A+B+M9)*X/(A+2*M9)/(A+2*M9+1);
A0=A1+C9*A0;
B0=B1+C9*B0;
M9=M9+1;
C9=M9*(B-M9)*X/(A+2*M9-1)/(A+2*M9);
A1=A0+C9*A1;
B1=B0+C9*B1;
A0=A0/B1;
B0=B0/B1;
A1=A1/B1;
B1=1;
}
返回A1/A
}
功能tdist(X,df){
(数学){

如果(D从TDIST函数的一些基本研究来看,1和2尾分布之间的关系似乎可以通过简单地乘以2:2尾值=2*1尾值来满足。这可能像接受第三个参数一样简单吗?如果设置为true,则答案加倍,表示2尾测试?现在在测试上述代码之后,似乎是1-tdist()应该用于返回到google sheets中实现的tdist。从tdist函数的一些基本调查来看,1和2尾分布之间的关系似乎可以通过简单地乘以2:2-tail value=2*1-tail value来实现。如果设置为true,它是否可以简单地接受第三个参数并将答案加倍一个双尾测试?在测试了上述代码之后,似乎应该使用1-tdist()返回到谷歌表单中实现的tdist。