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年前の話。 サビついた脳細胞。 式を見て途方に暮れる。