Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将概率转换为z分数_Javascript_Probability - Fatal编程技术网

Javascript 如何将概率转换为z分数

Javascript 如何将概率转换为z分数,javascript,probability,Javascript,Probability,Javascript> 如果你在数据科学行业,如果没有正态分布表,你会很烦恼。我在Stackoverflow中看到了一篇文章,它在JavaScript中将z-score转换为概率。我真正想知道的是这个函数的反向计算 /** *@param{number}z-平均值的标准偏差数。 */ 函数GetZPercent(z){ //如果z大于平均值的6.5标准偏差 //有效位数将超出合理范围 //射程。 如果(z6.5) 返回1.0; var-factK=1; var总和=0; var项=1; var

Javascript>

如果你在数据科学行业,如果没有正态分布表,你会很烦恼。我在Stackoverflow中看到了一篇文章,它在JavaScript中将z-score转换为概率。我真正想知道的是这个函数的反向计算

/**
*@param{number}z-平均值的标准偏差数。
*/
函数GetZPercent(z){
//如果z大于平均值的6.5标准偏差
//有效位数将超出合理范围
//射程。
如果(z<-6.5)
返回0.0;
如果(z>6.5)
返回1.0;
var-factK=1;
var总和=0;
var项=1;
var k=0;
var loopStop=Math.exp(-23);
while(Math.abs(term)>loopStop){
术语=0.3989422804*数学功率(-1,k)*数学功率(z,k)/(2*k+1)/
数学功率(2,k)*数学功率(z,k+1)/factK;
总和+=期限;
k++;
factK*=k;
}
总和+=0.5;
回报金额;

}
这里有一个函数,它执行相反的计算(z分数的概率)。此代码段允许您输入概率,并显示相应的z分数:

函数百分位_z(p){
if(p<0.5)返回-百分位_z(1-p);
如果(p>0.92){
如果(p==1)返回无穷大;
设r=Math.sqrt(-Math.log(1-p));
返回(((2.3212128*r+4.8501413)*r-2.2979648)*r-2.7871893)/
((1.6370678*r+3.5438892)*r+1);
}
p-=0.5;
设r=p*p;
返回p*((-25.4410605*r+41.3911977)*r-18.6150006)*r+2.5066282)/
(((3.1308291*r-21.0622410)*r+23.0833674)*r-8.4735109)*r+1);
}
//I/O处理
函数计算(){
var p=+document.getElementById(“prob”).value;
var z=百分位_z(p);
document.getElementById(“z”).textContent=z.toFixed(4);
}
计算()
input{width:5em}
概率(介于0和1之间):


Z分数:
这里有一个函数,它执行相反的计算(Z分数的概率)。此代码段允许您输入概率,并显示相应的z分数:

函数百分位_z(p){
if(p<0.5)返回-百分位_z(1-p);
如果(p>0.92){
如果(p==1)返回无穷大;
设r=Math.sqrt(-Math.log(1-p));
返回(((2.3212128*r+4.8501413)*r-2.2979648)*r-2.7871893)/
((1.6370678*r+3.5438892)*r+1);
}
p-=0.5;
设r=p*p;
返回p*((-25.4410605*r+41.3911977)*r-18.6150006)*r+2.5066282)/
(((3.1308291*r-21.0622410)*r+23.0833674)*r-8.4735109)*r+1);
}
//I/O处理
函数计算(){
var p=+document.getElementById(“prob”).value;
var z=百分位_z(p);
document.getElementById(“z”).textContent=z.toFixed(4);
}
计算()
input{width:5em}
概率(介于0和1之间):


Z分数:
我发现这个代码也能工作。使用critz(p)将概率转换为z分数。例如,我们可以从critz(0.95)中得到1.65,因为95%对应于z分数中的1.65标准偏差

/*  The following JavaScript functions for calculating normal and
    chi-square probabilities and critical values were adapted by
    John Walker from C implementations
    written by Gary Perlman of Wang Institute, Tyngsboro, MA
    01879.  Both the original C code and this JavaScript edition
    are in the public domain.  */

/*  POZ  --  probability of normal z value

    Adapted from a polynomial approximation in:
            Ibbetson D, Algorithm 209
            Collected Algorithms of the CACM 1963 p. 616
    Note:
            This routine has six digit accuracy, so it is only useful for absolute
            z values <= 6.  For z values > to 6.0, poz() returns 0.0.
*/
    var Z_MAX = 6;
function poz(z) {

    var y, x, w;

    if (z == 0.0) {
        x = 0.0;
    } else {
        y = 0.5 * Math.abs(z);
        if (y > (Z_MAX * 0.5)) {
            x = 1.0;
        } else if (y < 1.0) {
            w = y * y;
            x = ((((((((0.000124818987 * w
                     - 0.001075204047) * w + 0.005198775019) * w
                     - 0.019198292004) * w + 0.059054035642) * w
                     - 0.151968751364) * w + 0.319152932694) * w
                     - 0.531923007300) * w + 0.797884560593) * y * 2.0;
        } else {
            y -= 2.0;
            x = (((((((((((((-0.000045255659 * y
                           + 0.000152529290) * y - 0.000019538132) * y
                           - 0.000676904986) * y + 0.001390604284) * y
                           - 0.000794620820) * y - 0.002034254874) * y
                           + 0.006549791214) * y - 0.010557625006) * y
                           + 0.011630447319) * y - 0.009279453341) * y
                           + 0.005353579108) * y - 0.002141268741) * y
                           + 0.000535310849) * y + 0.999936657524;
        }
    }
    return z > 0.0 ? ((x + 1.0) * 0.5) : ((1.0 - x) * 0.5);
}


/*  CRITZ  --  Compute critical normal z value to
               produce given p.  We just do a bisection
               search for a value within CHI_EPSILON,
               relying on the monotonicity of pochisq().  */

function critz(p) {
    var Z_EPSILON = 0.000001;     /* Accuracy of z approximation */
    var minz = -Z_MAX;
    var maxz = Z_MAX;
    var zval = 0.0;
    var pval;
    if( p < 0.0 ) p = 0.0;
    if( p > 1.0 ) p = 1.0;

    while ((maxz - minz) > Z_EPSILON) {
        pval = poz(zval);
        if (pval > p) {
            maxz = zval;
        } else {
            minz = zval;
        }
        zval = (maxz + minz) * 0.5;
    }
    return(zval);
}
/*以下JavaScript函数用于计算正常和
卡方概率和临界值采用
来自C实现的John Walker
作者:马里兰州廷斯伯罗王学院加里·帕尔曼
1879原始C代码和此JavaScript版本
属于公共领域*/
/*POZ——正常z值的概率
根据多项式近似值改编,如下所示:
Ibbetson D,算法209
收集了CACM 1963 p的算法。616
注:
此例程具有六位精度,因此仅对绝对值有用
z值为6.0时,poz()返回0.0。
*/
var Z_MAX=6;
函数poz(z){
变量y,x,w;
如果(z==0.0){
x=0.0;
}否则{
y=0.5*数学绝对值(z);
如果(y>(Z_MAX*0.5)){
x=1.0;
}否则如果(y<1.0){
w=y*y;
x=((((((((()0.000124818987*w
-0.00107520407)*w+0.005198775019)*w
-0.019198292004)*w+0.059054035642)*w
-0.151968751364)*w+0.319152932694)*w
-0.531923007300)*w+0.797884560593)*y*2.0;
}否则{
y-=2.0;
x=(((((((((((((((()))0.000045255659*y
+0.00015229290)*y-0.000019538132)*y
-0.000676904986)*y+0.001390604284)*y
-0.000794620820)*y-0.002034254874)*y
+0.006549791214)*y-0.010557625006)*y
+0.011630447319)*y-0.00927945341)*y
+0.0053579108)*y-0.00211268741)*y
+0.0005310849)*y+0.99993667524;
}
}
返回z>0.0?((x+1.0)*0.5):((1.0-x)*0.5);
}
/*CRITZ——计算临界法向z值
产生给定的p。我们只是做一个二等分
在CHI_EPSILON中搜索一个值,
依赖于pochisq()的单调性*/
函数critz(p){
var Z_ε=0.000001;/*Z近似的精度*/
var minz=-Z_MAX;
var maxz=Z_MAX;
var-zval=0.0;
var pval;
如果(p<0.0)p=0.0;
如果(p>1.0)p=1.0;
while((maxz-minz)>Z_ε){
pval=poz(zval);
如果(pval>p){
maxz=zval;
}否则{
minz=zval;
}
zval=(最大值+最小值)*0.5;
}
返回(zval);
}

我发现这个代码也可以工作。使用critz(p)将概率转换为z分数。例如,我们可以从critz(0.95)中得到1.65,因为95%对应于z分数中的1.65标准偏差

/*  The following JavaScript functions for calculating normal and
    chi-square probabilities and critical values were adapted by
    John Walker from C implementations
    written by Gary Perlman of Wang Institute, Tyngsboro, MA
    01879.  Both the original C code and this JavaScript edition
    are in the public domain.  */

/*  POZ  --  probability of normal z value

    Adapted from a polynomial approximation in:
            Ibbetson D, Algorithm 209
            Collected Algorithms of the CACM 1963 p. 616
    Note:
            This routine has six digit accuracy, so it is only useful for absolute
            z values <= 6.  For z values > to 6.0, poz() returns 0.0.
*/
    var Z_MAX = 6;
function poz(z) {

    var y, x, w;

    if (z == 0.0) {
        x = 0.0;
    } else {
        y = 0.5 * Math.abs(z);
        if (y > (Z_MAX * 0.5)) {
            x = 1.0;
        } else if (y < 1.0) {
            w = y * y;
            x = ((((((((0.000124818987 * w
                     - 0.001075204047) * w + 0.005198775019) * w
                     - 0.019198292004) * w + 0.059054035642) * w
                     - 0.151968751364) * w + 0.319152932694) * w
                     - 0.531923007300) * w + 0.797884560593) * y * 2.0;
        } else {
            y -= 2.0;
            x = (((((((((((((-0.000045255659 * y
                           + 0.000152529290) * y - 0.000019538132) * y
                           - 0.000676904986) * y + 0.001390604284) * y
                           - 0.000794620820) * y - 0.002034254874) * y
                           + 0.006549791214) * y - 0.010557625006) * y
                           + 0.011630447319) * y - 0.009279453341) * y
                           + 0.005353579108) * y - 0.002141268741) * y
                           + 0.000535310849) * y + 0.999936657524;
        }
    }
    return z > 0.0 ? ((x + 1.0) * 0.5) : ((1.0 - x) * 0.5);
}


/*  CRITZ  --  Compute critical normal z value to
               produce given p.  We just do a bisection
               search for a value within CHI_EPSILON,
               relying on the monotonicity of pochisq().  */

function critz(p) {
    var Z_EPSILON = 0.000001;     /* Accuracy of z approximation */
    var minz = -Z_MAX;
    var maxz = Z_MAX;
    var zval = 0.0;
    var pval;
    if( p < 0.0 ) p = 0.0;
    if( p > 1.0 ) p = 1.0;

    while ((maxz - minz) > Z_EPSILON) {
        pval = poz(zval);
        if (pval > p) {
            maxz = zval;
        } else {
            minz = zval;
        }
        zval = (maxz + minz) * 0.5;
    }
    return(zval);
}
/*以下JavaScript函数用于计算正常和
卡方检验