正規分布
正規分布の確率密度関数を描き、範囲を指定して確率を計算します。
よくあるのは、平均m、標準偏差σに対し、m±σ , m±2σ , m±3σ に入る確率です。
次の図はm=0の場合です。σ=1 のとき標準正規分布です。±σに入る確率はおよそ 0.68269 と計算されています。
スクリプトは次の通りです。Drawスロットに書きます。
================================================
σ=C.x-A.x;
m=0;
f(x):=(1/(sqrt(2*pi)*σ))*exp(-(x-m)^2/(2*σ^2));
plot(4*f(#)); // y軸方向に4倍して表示
apply(-10..10,drawtext([#-0.1,-0.2],#,size->12));
apply(1..10,drawtext([-0.3,#*4/10-0.05],#/10,size->12));
drawtext([G.x+0.1,G.y],"m="+m,size->18);
drawtext([C.x+0.1,C.y],"σ="+σ,size->18);
// シンプソン公式による数値積分
Z.y=0; // 点Z,Dがx軸から離れないようにする。
D.xy=[Z.x,4*f(Z.x)];
sx=0; //定義域左端
ex=Z.x; //定義域右端
if(sx>ex,ex=0;sx=Z.x);
n=10; // 分点の数
dx=(ex-sx)/n; //区間幅
xn=apply(0..n,sx+#*dx); // sxからexまでをn等分した分点のリスト
yn=apply(xn,f(#));
sum=0;
dx=dx/2;
repeat(n,i,
x0=xn_i;
x1=(xn_i+xn_(i+1))/2;
x2=xn_(i+1);
y0=yn_i;
y1=f(x1);
y2=yn_(i+1);
sum=sum+dx*(y0+4*y1+y2)/3;
);
drawtext([1,1.5],"確率="+format(2*sum,5),size->18);
pt=[[Z.x,0],[-Z.x,0],[-Z.x,4*f(-Z.x)]];
nx=abs(Z.x*40);
repeat(nx,s,
x=-Z.x+2*s*Z.x/nx;
pt=append(pt,[x,4*f(x)]);
);
fillpoly(pt,alpha->0.2,color->[1,0,0]);
==========================================
この図から、必要な要素だけをKETCindyで書き出します。
右上のスライダは、σを変更するためのスライダですが、これは書き出す必要はありません。
確率密度関数と、ピンクの領域を囲む線、それぞれの点でしょう。緑の点はZです。この座標を使って3本の線分を表示します。
σの値と確率も書き出します。±σの範囲を斜線で示すことにしましょう。
=============================================
Defvar("s="+text(σ));
Deffun("g(x)", ["regional(y)","y=4*(1/(sqrt(2*pi)*s))*exp(-x^2/(2*s^2))","y"]);
Plotdata("1","g(x)","x");
Listplot("1",[[-Z.x,4*f(-Z.x)],[-Z.x,0],[Z.x,0],[Z.x,4*f(Z.x)]]);
Listplot("2",[[-0.1,2],[0.1,2]]);
Letter([[0,2],"w4","0.5",[1,1.5],"e","確率="+format(2*sum,5),[1,2],"e","σ="+text(σ),[Z.x,0],"s2",text(Z.x)]);
Hatchdata("1",["ii"],[["gr1","s"],["sg1","n"]]);
==============================================
実行すると次のようになります。
今度は、σの値を変えたものを表示しましょう。
σを.小さくすると縦長の釣り鐘形になります。
< 戻る >