首页 > 解决方案 > R的qnorm函数有javascript实现吗?

问题描述

qnorm我试图像 R函数一样在正态分布中获得 z 分数(或简单的分数) ,但使用 javascript。

在 R 中是这样的:

> qnorm(0.90, mean = 1500, sd = 300)
[1] 1884.465

javascript有这样的(希望是轻量级的)实现吗?

标签: javascriptstatistics

解决方案


谷歌够了吗?

var qnorm = function(p) {

  p = parseFloat(p);
  var split = 0.42;

  var a0 = 2.50662823884;
  var a1 = -18.61500062529;
  var a2 = 41.39119773534;
  var a3 = -25.44106049637;
  var b1 = -8.47351093090;
  var b2 = 23.08336743743;
  var b3 = -21.06224101826;
  var b4 = 3.13082909833;
  var c0 = -2.78718931138;
  var c1 = -2.29796479134;
  var c2 = 4.85014127135;
  var c3 = 2.32121276858;
  var d1 = 3.54388924762;
  var d2 = 1.63706781897;

  var q = p - 0.5;

  var r, ppnd;

  if (Math.abs(q) <= split) {
    r = q * q;
    ppnd = q * (((a3 * r + a2) * r + a1) * r + a0) / ((((b4 * r + b3) * r + b2) * r + b1) * r + 1);
  } else {
    r = p;
    if (q > 0) r = 1 - p;
    if (r > 0) {
      r = Math.sqrt(-Math.log(r));
      ppnd = (((c3 * r + c2) * r + c1) * r + c0) / ((d2 * r + d1) * r + 1);
      if (q < 0) ppnd = -ppnd;
    } else {
      ppnd = 0;
    }
  }

  return ppnd;
}

console.log(qnorm(.432423));


推荐阅读