2012-01-11 73 views
1

我想从我的Excel电子表格转换成Javascript到我的电子表格中的NORMSINV()宏。JavaScript等价于反常规函数?例如Excel的NORMSINV()或NORMINV()?

NormSInv()很好地记录在http://office.microsoft.com/en-us/excel-help/normsinv-HP005209195.aspx。基本上它的形式是 Z = NormSInv(概率)如果你给它的概率(比如说0.90),它就会给你一个标准正态分布(Z = 1.33)的Z值。

我可以按照http://en.wikipedia.org/wiki/Standard_normal_table对整个转换表进行编码,但要避免重新发明轮子。

那么,Javascript中是否有这样的函数?例如。在Javascript的数学库(如果有这样的事情!)。

感谢 希德

回答

7

我最终在JavaScript中自己实现了NormSInv()。当我只需要一个功能时,无需包含整个统计信息库

function NormSInv(p) { 
    var a1 = -39.6968302866538, a2 = 220.946098424521, a3 = -275.928510446969; 
    var a4 = 138.357751867269, a5 = -30.6647980661472, a6 = 2.50662827745924; 
    var b1 = -54.4760987982241, b2 = 161.585836858041, b3 = -155.698979859887; 
    var b4 = 66.8013118877197, b5 = -13.2806815528857, c1 = -7.78489400243029E-03; 
    var c2 = -0.322396458041136, c3 = -2.40075827716184, c4 = -2.54973253934373; 
    var c5 = 4.37466414146497, c6 = 2.93816398269878, d1 = 7.78469570904146E-03; 
    var d2 = 0.32246712907004, d3 = 2.445134137143, d4 = 3.75440866190742; 
    var p_low = 0.02425, p_high = 1 - p_low; 
    var q, r; 
    var retVal; 

    if ((p < 0) || (p > 1)) 
    { 
     alert("NormSInv: Argument out of range."); 
     retVal = 0; 
    } 
    else if (p < p_low) 
    { 
     q = Math.sqrt(-2 * Math.log(p)); 
     retVal = (((((c1 * q + c2) * q + c3) * q + c4) * q + c5) * q + c6)/((((d1 * q + d2) * q + d3) * q + d4) * q + 1); 
    } 
    else if (p <= p_high) 
    { 
     q = p - 0.5; 
     r = q * q; 
     retVal = (((((a1 * r + a2) * r + a3) * r + a4) * r + a5) * r + a6) * q/(((((b1 * r + b2) * r + b3) * r + b4) * r + b5) * r + 1); 
    } 
    else 
    { 
     q = Math.sqrt(-2 * Math.log(1 - p)); 
     retVal = -(((((c1 * q + c2) * q + c3) * q + c4) * q + c5) * q + c6)/((((d1 * q + d2) * q + d3) * q + d4) * q + 1); 
    } 

    return retVal; 
} 
4

没有什么,我知道的嵌入JavaScript的核心。您可能需要查看JStat JavaScript library。这似乎为统计计算提供了一系列功能。

+0

感谢您的回复。尽管这是一个有效的回应,但我最终还是在JavaScript中自己实现了NormSInv()。当我只需要一个功能时,不需要包括整个统计库... – DeepSpace101 2012-01-12 23:08:41

+0

假设你不犯任何错误:) – Tom 2014-01-08 19:52:11

相关问题