正規分布
正規分布 (normal distribution) はガウス分布 (Gaussian distribution) とも呼ばれる連続確率分布のひとつである.名前に冠されているガウスとは,19世紀のドイツの数学者 Carolus Fridericus Gauss に由来する.一般誤差分布の特殊形ではあるものの広義では正規分布そのものを指して誤差分布 (error distribution) と呼ぶ場合がある. 統計学においては理論上・実用上を問わず最も重要な確率分布といえる.応用の範囲は限りなく広く,自然科学から人文科学に至るまでの多くの現象のモデル化に用いられる.例えば,パラメトリックな統計検定では多くの場合,標本変数が正規分布に従うことが仮定されている.また,身近なところではヒトの性別毎の身長の分布は正規分布に従うことが知られている.ただし,体重は正規分布ではなくガンマ分布に従う.パラメーターは期待値 μ と分散 σ2 であり,正規分布は N(μ, σ2) にて略記される.確率変数をXとしたとき,確率密度関数は以下で与えられる.
確率変数Xの範囲は以下で与えられる範囲である.
モーメント母関数は確率変数Xの全範囲で定義され,以下で与えられる.
キュムラント母関数 KX(t) は以上の式を用いることで以下のように簡単に求まる.
期待値は以下で与えられる値である.期待値は確率分布の位置を決定するパラメーターである.正規分布においてはその他の代表値,すなわち中央値と最頻値も期待値と等しい.
分散は以下の式で与えられる.正規分布の散らばりの程度を表す.
その他の特徴量
累積分布関数は以下で与えられる.
上式における関数 erf(x) はガウスの誤差関数 (error function) であり以下で定義される.
特性関数は以下である.
正規分布においては平均値,中央値および最頻値の値は等しく μ となる.
平均偏差 d(X) は以下で与えられる.
歪度 β11/2 および尖度 β2 は以下のようになる.定義によっては尖度は 3 とされる場合もある.未知の分布に対して歪度と尖度を計算して,その値が正規分布のそれと明らかに異なる場合,その分布は正規分布でないとみなすことがある.
モーメント母関数の導出
モーメント母関数は定義式に従って以下のように求める.計算は非常にシンプルである.
ここで,以下のような変数変換を考える.
これは同時に以下のふたつの関係も意味する.
したがって,これらの関係式にて変数変換すると上式は以下のように変形できる.
ここで,上式の積分形はガウス積分を意味している.ガウス積分は以下の公式で与えられる特殊な積分である.
よって,以上のガウス積分を用いることで上式はさらに変形され,以下のようにモーメント母関数が求まる.
モーメント母関数を利用した期待値および分散の導出
期待値および分散はモーメントを利用して求めるのが簡単である.まず,モーメント母関数の1階微分および2階微分は以下のように計算される.
以上より,原点まわりの1次のモーメントおよび2次のモーメントは以下のようになる.
よって,原点まわりの1次のモーメントを用いて期待値は以下のように求められる.
また,分散は原点まわりの1次のモーメントと2次のモーメントの間に成り立つ関係式を用いて以下のように計算される.
定義式からの期待値および分散の導出
期待値および分散はモーメント母関数ではなく定義式を用いて求めると若干計算量が増す.まず,期待値は定義式から以下のように求められる.
ここで,以下の変数変換を考える.
これは同時に以下の関係も意味する.
以上の関係を用いて上式を変形することで以下のように期待値が求まる.以下の2行目の2番目の積分は上と同様にガウス積分の公式を利用して変換する.
分散は以下のように求める.
ここで,以下の変数変換を考える.
これは同時に以下の関係も意味する.
これらの関係式を用いて上式を変形させることで分散は以下のように求まる.
上式の2行目から3行目への変換には部分積分の公式を利用する.その後の3行目の2番目の積分形はガウス積分の公式を利用して変換する.また,3行目の括弧内は0となるが,これはロピタルの定理を用いることで証明できる.ロピタルの定理とは以下のようなものである.まず,以下のような関数 f(x) および g(x) を考える.右辺は0であっても良い.
このとき,以下のような関係が成り立つ.これをロピタルの定理という.以上の計算では c が正または負の無限大である場合を考えることになる.
この定理を用いることで以下のように上式の括弧内が0に収束することがわかる.
正規変数の線形変換
確率変数Xが正規分布 N(μ, σ2) に従うとき,以下のような線形変換によって生じる新たな確率変数Yを考える.
この確率変数Yが従う分布は,以下のようにモーメント母関数を求めることで明らかになる.
計算の結果算出された以上の式が意味するところは,確率変数Yが従う分布は確率変数Xが従う分布と等しく正規分布であり,平均 aμ+b および分散 a2σ2 のパラメーターを持つ分布 N(aμ+b, a2σ2) である,ということになる.
標準正規分布
確率変数Xが正規分布 N(μ, σ2) に従うとき,以上の線形変換を考える.ここで,a および b は以下を満たすものとする.
以上の a および b にて確率変数Xを以下のように線形変換したとき,変換後の確率変数Zのことを標準化変数という.また,元の確率変数Xから平均 μ を引き,その値をさらに標準偏差 σ で割ることを標準化するという.
正規変数の線形変換後の確率変数が従う確率分布は正規分布 N(aμ+b, a2σ2) であるので,上で用いた a および b を代入し計算することで,確率変数Zは以下の正規分布 N(0, 1) に従うことが分かる.
この正規分布 N(0, 1) を特別に標準正規分布 (standard normal distribution) という.どのような値であれ,正規分布に従う確率変数であれば,以上の標準化を行うことで得られる標準化変数は標準正規分布に従う.統計的推定に利用される非常に重要な定理である.
確率密度関数について
正規分布の確率密度関数 f(x) が真に確率密度関数であることは確率変数Xが取り得る全範囲における f(x) の積分の結果が 1 であることによって確かめられる.証明は以下のように行う.
ここで,以下の変数変換を考える.
これによって上式は以下のように変形される.
このとき,上式の積分形はガウス積分を示すものである.よって上式は以下のように変形され,f(x) は確かに確率密度関数であることが確認される.
正規分布の形状
正規分布の形状は以下のようになる.以下は標準正規分布の分布なので,μ=0 かつ σ=1 の場合である.分布は左右対称で,その中心は平均 μ となる.また,分散 σ によって分布の散らばりが規定される.正規分布においては,平均から ±σ の範囲までに全面積の 68.27% が ±2σ の範囲までに 95.45% が,±3σ の範囲までには 99.73% が入る.すなわち,確率変数Xが正規分布 N(μ, σ2) に従うとき,μ±1σ 以下の範囲に X が含まれる確率は 68.27%,μ±2σ 以下の範囲では 95.45%,μ±3σ 以下では 99.73% となる.分野を問わず,このような範囲を2シグマとか3シグマとかと呼び,観測値が期待される値よりずれていることの判断基準とする場合が多い.
学業偏差値
学業偏差値を S で表すとき,これは以下のように標準化変数に10を掛け,50を加えた値,すなわち標本変数を平均を50,標準偏差を10に規格化した値である.
すなわち,試験の点数の分布が正規分布に従うと仮定するなら,学業偏差値が50の学生は上から50%,60の場合は上から約16%,70の場合は上から約2.3%,80の場合は約0.14%に属していることになる.実際の得点分布は厳密には正規分布には従わないので以上は大体の目安となる.
正規分布の再生性
以下のような互いに独立な正規分布に従うふたつの確率変数XおよびYを考える.
このとき,これらの確率変数の和 X+Y は以下の正規分布に従う.これを正規分布の再生性という.再生性は変数の数が増えても同様に成り立つ.
正規分布 N(-3, 1) および N(2, 3),さらにそれらを重ね合わせた正規分布 N(-1, 4) の確率密度関数は以下のようになる.正規分布 N(-1, 4) の分布は N(-3, 1) および N(2, 3) をただ単に重ね合わせた分布 N(-3, 1) + N(2, 3) とは明らかに形状が異なることが分かる.
正規分布が再生性を持つことは以下のように証明できる.まず,確率変数XおよびYのモーメント母関数はそれぞれ以下の通りである.
これらより,確率変数 X+Y のモーメント母関数は以下のように求められる.
以上より,計算の結果得られた確率変数 X+Y のモーメント母関数より,X+Y は正規分布 N(μ1+μ2, σ12+σ22) に従うことが分かる.上式の1番目の等号は確率変数の和のモーメント母関数に関する定理である.この定理は一般には以下のように与えられる.まず,互いに独立なN個の確率変数Xi (i=1, 2, ... ,N) を考える.また,それぞれの確率変数に対するモーメント母関数を MXi(t) とする.このとき,それらの確率変数の和とそれに対するモーメント母関数には以下の関係が成り立つ.
以上の定理は以下のように証明できる.
正規分布に従う確率変数
それぞれが正規分布 N(μ1, σ12), N(μ2, σ22), ... , N(μN, σN2) に従うN個の確率変数Xi (i=1, 2, ... ,N) に任意の係数 ai (i=1, 2, ... ,N) を掛けた値の和を統計量Tとする.
このとき,以上の統計量Tは正規分布の再生性より以下の正規分布に従う.
以上の事柄が成り立つが,実際のデータの取り扱いに際し重要になるのは各変数が以下のときである.
このときの統計量Tは,確率変数Xi (i=1, 2, ... ,N) が互いに独立に正規分布 N(μ, σ2) に従うとき,すなわち,正規母集団 N(μ, σ2) からN個の標本を取り出したとき,それらの平均Xとなる.
このときこの統計量Xが従う分布は上より,以下のようになる.
これは非常に重要な概念である.何らかの正規母集団 N(μ, σ2) からの標本平均が従う分布が明らかになるということは,その正規母集団の母平均の推定が可能となる.また,それを応用すれば多標本間の平均値の差の検定等が可能となる.
正規分布と対数正規分布
以下のような確率変数 lnX を考える.
このとき,以上の確率変数の真数Xが従う分布は以下の対数正規分布 LN(μ, σ2) となる.
正規分布とカイ二乗分布
以下のような標準正規分布 N(1, 0) に従う確率変数Xを考える.
このとき,以上の確率変数の2乗の変数が従う確率分布は自由度1のカイ二乗分布となる.
正規性の検定
得られた統計量が正規性をもつこと,すなわち,得られたデータが正規分布に従うか否かは,コルモゴロフ・スミルノフ検定,ジャック・ベラ検定,アンダーソン・ダーリング検定,シャピロ・ウィルク検定等の適合度検定によって評価することが可能である.
Rにおける正規分布の関数
Rにおいて,正規分布に関連する関数には以下のようなものがある.
関数 | 詳細 |
---|---|
dnorm(x) | xで指定した確率変数に対する確率密度を算出. |
pnorm(q) | qで指定した確率変数に対する確率を算出. |
qnorm(p) | pで与えられた確率に対する確率変数を算出. |
rnorm(n) | 正規分布に従う乱数をn個発生. |
コマンド dnorm は dnorm(x=, mean=, sd=) のように使用する.引数の mean および sd はそれぞれ計算させたい正規分布の平均値および標準偏差を意味しており,任意の値を入力する.デフォルトでは標準正規分布 N(0, 1),すなわち mean=0 および sd=1 が設定されている.もし,正規分布 N(5, 16) を考えたい場合は mean=5 および sd=4 を入力する.引数 x には確率密度を知りたい確率変数を入力する.x に数値を入力するとその数値 (確率変数) のときの確率密度が表示される.また,x にはベクトルを指定できるが,その場合はベクトルに含まれる各数値のときの確率密度がそれぞれ表示される.以下のようにコマンドを打つ.
$ dnorm(x=c(-1, 0, 1), mean=0, sd=1)
結果は以下のようになる.すなわち,このコマンドを実行すると,横軸に確率変数,縦軸に確率密度をとった場合の正規分布のグラフ (上図) において,横軸の1点または複数点を x にした場合の縦軸の値が得られる.
0.2419707 0.3989423 0.2419707
コマンド pnorm は dnorm(q=, mean=, sd=) のように使用する.引数の mean および sd は dnorm の場合と同様となる.このコマンドを実行すると,負の無限大から引数 q に入力した値に至るまでの積分値,すなわち確率が計算される.また,q にはベクトルを指定できるが,その場合はベクトルに含まれる各数値のときの確率がそれぞれ表示される.以下のようにコマンドを打つ.
$ pnorm(q=c(-2.58, -1.96, 0, 1.96, 2.58), mean=0, sd=1)
結果は以下のようになる.分布の中央値を意味する 0 を与えたときは確率は 0.5 に -1.96 および -2.58 を指定した場合はそれぞれ 0.025 (2.5%) および 0.005 (0.5%) となる.
0.004940016 0.024997895 0.500000000 0.975002105 0.995059984
コマンド qnorm は dnorm(p=, mean=, sd=) のように使用する.引数の mean および sd は dnorm および pnorm の場合と同様となる.p には確率を表す値または確率を表す値を含んだベクトルを入力する.以下のようにコマンドを打つ.
$ qnorm(p=c(0.95, 0.975, 0.995), mean=0, sd=1)
結果は以下のようになる.すなわち,p で指定した確率を導く確率変数の値が返ってくる.上のように入力すると以下のように約1.65,1.96,2.58 という正規分布におなじみの数値が返ってくる.
1.644854 1.959964 2.575829
コマンド dnorm は dnorm(n=, mean=, sd=) のように使用する.引数の mean および sd には,以上の dnorm 等と同じく計算したい正規分布の平均値および標準偏差を入力する.このコマンドを実行すると,指定した正規分布に従う確率変数を乱数として n で指定した数だけ得ることができる.上の3つのコマンドと異なり,n には数値を入力する.ベクトルを入力することもできるが,その場合はそのベクトルの長さに対応した数の乱数が発生される.以下のようにコマンドを打つ.
$ rnorm(n=5, mean=0, sd=1)
結果は以下のようになる.実行環境によって得られる数値は異なる.
-1.2776243 -1.4087940 1.6826709 -0.3378861 0.7487340
補遺
図1を生成するためのRソースコード
#!/usr/bin/env Rscript main=function() { svg("tpd_normal_distribution_01.svg",width=8,height=4) par(plt=c(0.2,0.9,0.4,0.9)) x=seq(-4,4,0.01) plot(x,type="n",xaxs="i",yaxs="i",xlim=c(-4,4),ylim=c(0,0.4),bty="l",xaxt="n",xlab="",ylab="Probability density",las=1,family="Arial") polygon(c(-4,x,4),c(0,dnorm(x),0),col="#2b4b65",border=NA) for(i in 0:3) { segments(i,0,i,dnorm(i),col="#ffffff") segments(-1-i,0,-1-i,dnorm(-1-i),col="#ffffff") } lines(x,dnorm(x),lty=1,lwd=1.6,col="#2b4b65") axis(side=1,at=-3:3,labels=expression(mu-3*sigma,mu-2*sigma,mu-sigma,mu,mu+sigma,mu+2*sigma,mu+3*sigma),family="Arial",font.axis=2) par(xpd=NA) arrows(-1,-0.1,1,-0.1,length=0.1,code=3,lty=5) arrows(-2,-0.17,2,-0.17,length=0.1,code=3,lty=5) arrows(-3,-0.24,3,-0.24,length=0.1,code=3,lty=5) text(0,-0.13,"68.27%",family="Arial") text(0,-0.20,"95.45%",family="Arial") text(0,-0.27,"99.73%",family="Arial") dev.off() } main()
図2を生成するためのRソースコード
#!/usr/bin/env Rscript main=function() { svg("tpd_normal_distribution_02.svg",width=8,height=4) par(plt=c(0.2,0.9,0.2,0.9)) x=seq(-8,8,0.01) plot(x,type="n",xaxs="i",yaxs="i",xlim=c(-8,8),ylim=c(0,0.5),bty="l",xaxt="n",xlab="",ylab="Probability density",las=1,family="Arial") lines(x,dnorm(x,mean=-3,sd=1),lty=1,lwd=1.6,col="#2b4b65") lines(x,dnorm(x,mean=2,sd=sqrt(3)),lty=1,lwd=1.6,col="#ff8c00") lines(x,dnorm(x,mean=-1,sd=sqrt(4)),lty=1,lwd=1.6,col="#e12f3c") lines(x,dnorm(x,mean=-3,sd=1)+dnorm(x,mean=2,sd=sqrt(3)),lty=3,lwd=1.6,col="#00cc99") axis(side=1,at=-8:8,tck=1.0,lty="dotted",lwd=0.5,labels=seq(-8,8,1),family="Arial",font.axis=2) axis(side=2,tck=1.0,lty="dotted",lwd=0.5,labels=NA) labels=c("N(-3, 1) ","N( 2, 3) ","N(-1, 4) ","N(-3, 1) + N( 2, 3) ") legend("topright",legend=labels,lty=c(1,1,1,3),lwd=1.6,col=c("#2b4b65","#ff8c00","#e12f3c","#00cc99"),cex=0.8,bg="#ffffff",box.lty=3) dev.off() } main()