2012-01-11 55 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