JAVAによる統計学入門 04 正規分布 01
確率密度関数、標準正規分布
up 2022 05 23 (Mon)
これまでの up 履歴
04 正規分布 01 2022/05/ :
03 誕生日問題 02 2022/05/18 : https://ameblo.jp/greenlight2017/entry-12743454593.html
02 誕生日問題 01 2022/05/09 : https://ameblo.jp/greenlight2017/entry-12743453610.html
01 二項分布 2022/05/01 : https://ameblo.jp/greenlight2017/entry-12743452188.htm
まず、高校時代にもどって、統計学の復習をしよう。
平均が m、 標準偏差が s の正規分布の確率密度関数は、次のように定義される。
・ 確率密度関数
1 - ((x-m)(x-m)/2s*s)
f(x) = ――――――― e
(√(2π))s
この確率密度関数 f(x) はJAVAの数値関数をつかって、比較的簡単に計算できる。
double ND(double x, double m, double s){
double PI = Math.PI; double E = Math.E; double K = 1 / (Math.sqrt(2 * PI)*s);
double p = K * Math.pow(E, -(x-m)*(x-m)/(2* s*s));
return p;
}
πをあらわす乗数を PI とする。Math.PI で求められる。PI = 3.141592653589793
e をあらわす乗数を E とする。Math.E で求められる。 E = 2.7182818459045
n の平方根は Math.sqrt(n) で求められる。
Math(x, y)は、x の y乗を返す。
ここで、Z = (X - m) / s に置き換える。 X を標準化した確率変数 Z は、平均が 0 標準偏差が 1 の
標準正規分布 になる。
その確率密度関数は、
1 - ((x*x)/2)
f(x) = ――――――― e
(√(2π))
JAVAでは、以下のように実装できる。
double SND(double x){
double PI = Math.PI; double E = Math.E; double K = 1 / (Math.sqrt(2 * PI));
double p = K * Math.pow(E, -x*x/2);
return p;
}
ところで、x の値が a から b のとき、その累積分布関数は、密度関数を a から b までを積分する
ことで求められる。
・ 累積分布関数
- b
F(x) = | f(x) dx
- a
一方、累積分布関数。 こんな f(x) の積分をどうやってやるのか。JAVA でどう実装するのだろうか。
微分や積分、ほぼ、70年前の話。 サビついた脳細胞。 式を見て途方に暮れる。