スタートページJavaScriptライブラリ目次

確率統計分布関連 JavaScript関数ライブラリ stat.js の利用解説書

ご利用にあたって

正規分布
  確率密度 p = distNormalDen(x [,μ, σ]);
  累積確率 s = distNormalCum(x [,μ, σ]);
  累積確率の逆関数 x = distNormalInv(p [,μ, σ]);

μ、σを省略すると、μ=0、σ=1の標準正規分布になります。
確率密度
 平均μ、分散σ2の正規分布において、値xの確率密度関数の値pは次式で計算できます。
  p = 1/√(2πσ2) * e(-(x-μ)2/2σ2)
累積確率
 -∞~xの累積確率の値sを戻します。
 確率密度 を数値積分 sFx() で計算するより、近似式が知られています。
 ここではHastingsの式を使いました。(引用先:http://qiita.com/gigamori/items/e17e6f9faffb78822c56 by Yanai Takamichi)
累積確率の逆関数
 累積確率 s を与えたときの x を戻します。
 次の近似式を参考にさせていただきました
 「https://potatodigger.wordpress.com/2013/06/30/正規分布の確率密度関数pdf、累積分布関数cdf、逆累/ by potatodigger」
μ= σ=指定しないとμ=0、σ=1
x= p= s=


中心極限定理による必要標本数と許容確率誤差
  必要標本数: [n5, n1] = distCltNmin(p, pe) 
  許容確率誤差:[pe5, pe1] = distCltPerr(p, n) 

  n :必要な標本数 n1:有意水準5%, n1:有意水準1%
    p :母集団での想定発生確率
  pe:許容確率誤差 = 標本での発生確率と母集団での想定発生確率の差 pe1:有意水準5%, n1:有意水準1%
  pt:有意水準(= 0.05, 0.01)(Z;正規分布の変位。 両側有意水準 pt = 0.05 のとき Z = 1.96、 pt = 0.01 のとき Z = 2.58)

中心極限定理:母集団の分布に関係なく、標本数 n が非常に大きくなると,標本平均の分布は平均μ,分散 σ2/n の正規分布に近づく。
 標本の大きさ n が大であれば標本比率 p0 は近似的に正規分布 (p, p(1-p)/n) に従う。
 必要な標本数 n = (Z/pe)2 * p(1-p)
 nを与えたときの確率誤差 pe = Z*√(p(1-p)/n)
         (Z;正規分布の変位。 両側有意水準 pt = 0.05 のとき Z = 1.96、 pt = 0.01 のとき Z = 2.58)
母確率が p ± pe と想定されるときに必要な標本数
p= pe= n0.05= n0.01=
母確率が p と想定されるときに、標本数を n としたときの、信頼区間 p ± Perr の Perr
p= n= Perr0.05= Perr0.01=

三角分布
  平均分散: [平均, 分散] = distTriMV(xmin, xmax, xmod);
  確率密度: p = distTriDen(x, xmin, xmax, xmod);
  累積確率: s = distTriCum(x, xmin, xmax, xmod);
  累積確率の逆関数: x = distTriInv(s, xmin, xmax, xmod);

右図のように、3点 a(xmin,0), b(xmax,0), c(xmod, h) を結ぶ三角形となる分布。
  平均:(a+b+c)/3、 分散:(a2+b2+c2-ab-bc-ca)/18
参照:「三角分布」

最小値:xmin= 最大値:xmax= 最頻値:xmod=
x= p= s= 平均= 分散=

参考

上の xmin, xmax, xmod を与えたとき、x=xmin~xmax における p と s のリストを表示します。

二項分布
  平均分散: [平均, 分散] = distBinMV(n, p);
  確率密度:Px = distBinDen(x, n, p);
  累積密度:s = distBinCum(x, n, p);

平均:np  分散:np(1-p)
発生確率がpの事象が、n回の試行でx回発生する確率
  確率密度: x回発生する確率   P(x) = nCx・px(1-p)n-x
  累積密度: 0~x回発生する確率 S(≦x) = ΣP(x)
    nCx = n!/x!(n-x)! = nCx(n, x) 二項係数(n個からx個を取り出す場合の数(場合の数))
参照:「離散型統計分布」
二項分布の計算は計算量が大きく、大きい数と小さい数の計算が必要になるので誤差が生じます。計算を容易にするために、
  ・np > 5 かつ n(1-p) > 5 ならば、平均μ=np、標準偏差σ=√np(1-p) の正規分布で近似できる。
   確率密度:区間 x-0.5~x+0.5 の正規分布累積確率 distNormalCumMinmax(x-0.5, x+0.5, μ, σ)
   累積密度:≦x+0.5 の累積確率 distNormalCum(x+0.5, μ, σ)
  ・n>50, np≦5 ならば、平均λ=np のポアソン分布で近似できる。
などの方法がありますが、ここでは用いていません。
x= n= p=
Px= s= 平均= 分散=

参考

上の n,p を与えたとき、x=0~n における Px と s のリストを表示します。

負の二項分布
  平均分散: [平均, 分散] = distBinNegMV(x, p);
  確率密度: Pn = distBinNegDen(x,n,p);
  累積密度: s = distBinNegCum(x,n,p);

平均:x(1-p)/p  分散:x(1-p)/p2
ある事象が起こる確率がpのとき、n回試行したときに、その事象がはじめてx回になる確率P(n)の確率分布。
   P(n) = n-1x-1・px(1-p)n-x
参照:「離散型統計分布」

x=1 のときは、幾何分布 distGeoDen と一致します。
x= n= p=
Pn= s= 平均= 分散=

参考

上の n,p を与えたとき、x=1~n における Pn と s のリストを表示します。

幾何分布
  平均分散:[平均, 分散] = distGeoMV(n, p);
  確率密度 Pn = distGeoDen(n, p);
  累積確率 s = distGeoCum(n, p);
  累積確率の逆関数 n = distGeoInv(s, p);

平均:(1-p)/p  分散:2*平均2
発生確率pの事象がはじめて発生したときの試行回数nの確率分布(負の二項分布で、x=1とおくと、幾何分布に一致
  確率密度: Pn = (1-p)n-1*p
  累積確率: s  = 1-(1-p)n
    逆関数:  n = log(1-s) / log(1-p)
参照:「離散型統計分布」
n= p=
Pn= s= 平均= 分散=

超幾何分布
  平均分散:[平均, 分散] = distHyperGeoMV(a, b, α);
  確率密度: p = distHyperGeoDen(a, b, α, β);
  累積確率: s = distHyperGeoCum(a, b, α, β);

平均・分散
 a+b 個から α個取り出すとき、白玉(a) がαである確率 P(α) の平均・分散
  平均 = x*a/n;  分散 = (a*(a-1) * x*(x-1)) / (n*(n-1));
確率密度
  袋の中にAがa個、Bがb個入っている。α+β個を取り出したとき、Aがα個、Bがβ個である確率
   p = aαbβa+bα+β
で計算できる(参照:「離散型統計分布」)。
確率密度:αが0~α個である確率。
「α以上である確率」は distHyperGeoCum(a, b, α-1, β+1) になる。
超幾何分布では、CやDなど多数の系列も対象にするが、複雑になるので、ここでは2系列に限定する。
  A  B
袋の中の個数: a = b =
取り出した個数: α= β=
p= s= 平均= 分散=


指数分布
  平均分散:[平均, 分散] = distExpMV(λ);
  確率密度: p = distExpDen(t, λ) 
  累積確率: s = distExpCum(t, λ) 
  累積確率の逆関数: t = distExpInv(p, λ) 

平均 = 1/λ;  分散 = 1/λ2;
関数一般形式機能計算式
distExpDen(t, λ)t=t における確率密度p = λ*e(-λ*t)
distExpCum(t, λ)区間 t=0~t の累積確率s = 1-e(-λ*t)
distExpInv(p, λ)累積確率が p となる t の値t = -(1/λ)log(1-p)
参照:「ポアソン分布と指数分布」
λ= t= p= s= 平均= 分散=

参考

上の λ を与えたとき、t を変化させたときの p と s のリストを表示します。

アーラン分布
  平均分散:[平均, 分散] = distErlangMV(λ, k);
  確率密度: p = distErlangDen(t, λ, k) 
  累積確率: s = distErlangCum(t, λ, k) 

平均 = k/λ;  分散 = k/λ2;
アーラン分布は、指数分布と一様分布の中間的な分布。
  k=1なら指数分布、k=大なら正規分布、k=∞なら一様分布
  p = (λ*t)k-1/(k-1)! * λe(-λ*t)
  s = 区間 t=0~t の累積確率
t= λ= k=
p= s= 平均= 分散=


ポアソン分布
  平均分散:[平均, 分散] = distPoissonMV(λ);
  確率密度: p = distPoissonDen(x,λ);
  累積確率: s = distPoissonCum(x,λ);
  累積確率の逆関数 x = distPoissonInv(s,λ);

平均 = λ;  分散 = λ2;
一定(微小)時間内にある事象が発生する回数が平均λであるとき、発生回数がxとなる確率pは、
    p(x) = (λx/x!)*e ← distPoissonDen(x,λ)
 のポアソン分布に従う(参照:「ポアソン分布と指数分布」「離散型統計分布」

累積確率は、単純に s(x) = s(x-1) + p(x) で求めた。
逆関数は、x=0, 1, 2, ... として累積確率 s(x) を計算し、s(x) ≦ p である最大のxを戻している。
 すなわち「確率pでx回以下だといえる」こととした。
λ= x= p= s=
平均= 分散=

参考

参考1:λを固定し、xを0, 1, 2, ... と変化させたときの p と s を求める
参考2:λを固定し、pを変化させたときの x を求める

   

シグモイド関数
  微分方程式 d = distSigmoidDen(x, c);
  シグモイド関数 y = distSigmoidCum(x, c);
  シグモイド関数の逆関数 x = distSigmoidInv(y, c);

参照:「シグモイド関数」

ケース1

微分方程式      dy/dx = d = c*y*(1-y) = c*(1-1/(1+e-cx))*(1/(1+e-cx))
 入力
    var x = [1, 2];  // ベクトル
    var c = 0.5;
    var d = distSigmoidDen(x, c);
 出力
    d[0] = 0.118, d[1] = 0.098

シグモイド関数 y = 1/(1+e-cx)
 入力
    var x = [1, 2];  // ベクトル
    var c = 0.5;
    var y = distSigmoidCum(x, c);
 出力
    y[0] = 0.622, y[1] = 0.731

逆関数        x = (1/c)log(y/(1-y))
 入力
    var y = 0.9; // スカラー
    var c = 0.5;
    var x = distSigmoidInv(y, c);
  出力
    x = 4.394

ケース2

c=
x=
y=
d=


ロジスティック曲線(Logistic curve)
  微分方程式 d = distLogisticDen(x, k, b, c) 
  ロジスティック関数 y = distLogisticCum(x, k, b, c);
  ロジスティック関数の逆関数 x = distLogisticInv(y, k, b, c);

参照:「ロジスティック曲線」

ケース1

微分方程式      dy/dx = d = (c/k)*y*(k-y)
 入力
    var x = [1, 2];  // ベクトル]
    var k = 2;
    var b = 0.5;
    var c = 0.5;
    var d = distLogisticDen(x, k, b, c);
 出力
    d[0] = 0.179, d[1] = 0.131

ロジスティック関数 y = k/(1+b*e-cx)
 入力
    var x = [1, 2];  // ベクトル
    var k = 2;
    var b = 0.5;
    var c = 0.5;
    var y = distLogisticCum(x, k, b, c);
 出力
    y[0] = 1.535, y[1] = 1.689

逆関数        x = -(1/c)log((k-y)/(b*y))
 入力
    var y = 0.9; // スカラー
    var k = 2;
    var b = 0.5;
    var c = 0.5;
    var x = distLogisticInv(y, k, b, c);
  出力
    x = -1.787

ケース2

k= b= c=
x=
y=
d=


ロジスティック回帰関連
  オッズ  Odss = distOdss(p) 
  ロジット Logit = distLogit(p) 

参照:「ロジスティック回帰分析の前提概念」

オッズ
 事象発生確率/非発生確率 = p/(1-p)
ロジット
 標準シグモイド関数の逆関数、 log(p/(1-p))
Odds, Logit は、p のスカラー、ベクトルに対応します。

ケース1

 var Odss = distOdss(0.6);          // スカラー
      // Odss = 1.5
  var Logit = distLogit([0.6, 0.8]);   // ベクトル
      // Logit[0] = 0.405, Logiit[1] = 1.386

ケース2

p  =
Odss =
Logit=

  オッズ比 OR = distOdssRatio(n00, n01, n10, n11) 

下表の n00, n01, n10, n11 を与えて、OdssRatio を計算します。

     事象あり 事象なし   合計          p              オッズ
  群A   n00       n01   s0=n00+n01    p0=n00/s0  Odss0=p0/(1-p0)
  群B     n10       n11   s1=n10+n11    p1=n10/s1    Odss1=p1/(1-p1)
   オッズ比 OddsRatio = Odss0/Odds1

  var OdssRatio = distOdssRatio(40, 10, 20, 80);
n00= n01=   s0= p0= Odss0=
n10= n11=   s1= p1= Odss1=
OdssRatio =

ゴンペルツ曲線(Gompertz curve)
  微分方程式 p = distGompertzDen(x, k, b, c]);
  ゴンペルツ関数 s = distGompertzCum(x, k, b, c);
  ゴンペルツ関数の逆関数 x = distGompertzInv(y, k, b, c);

参照:「ゴンペルツ曲線」

ケース1

微分方程式      dy/dx = d = -c*log(b)*y*e-cx
 入力
    var x = [1, 2];  // ベクトル]
    var k = 2;
    var b = 0.5;
    var c = 0.5;
    var d = distGompertzDen(x, k, b, c);
 出力
    d[0] = 0.276, d[1] = 0.198

ゴンペルツ関数 y = k*be-cx
 入力
    var x = [1, 2];  // ベクトル
    var k = 2;
    var b = 0.5;
    var c = 0.5;
    var y = distGompertzCum(x, k, b, c);
 出力
    y[0] = 1.314, y[1] = 1.550

逆関数        x = -(1/c)log(log(k/y)/|log(b)|)
 入力
    var y = 0.9; // スカラー
    var k = 2;
    var b = 0.5;
    var c = 0.5;
    var x = distGompertzInv(y, k, b, c);
  出力
    x = -0.283

ケース2

k= b= c=
x=
y=
d=