ワイブル分布
ワイブル分布 (Weibull distribution) は連続確率分布のひとつである.分布名のワイブルとはスウェーデンの数学者 Ernst Hjalmar Waloddi Weibull に由来する.事象の生起確率が一定という条件の下で,その事象が発生するまでの時間は確率変数とみなすことができ,その確率変数が従う分布は指数分布になるということが知られているが,ここで,事象の生起確率が対象とする期間内において変化する場合,その事象が発生するまでの時間を確率変数とみなすと,その確率変数が従う分布は指数分布ではなくワイブル分布となる.このような現象の例は日常生活にも多い.例えば,電化製品の故障率は観察する期間において常に一定というよりは時間を経ると共に上昇すると考えられる (経年劣化による故障率の上昇).このような場合において,対象の電化製品が故障するまでの時間,すなわち電荷製品の寿命のモデル化には指数分布よりもワイブル分布が適しているといえる.ワイブル分布のパラメーターは尺度母数 a (>0) および形状母数 b (>0) であるが,この形状母数 b が1より大きいときが以上の例に相当する場合である.一方で,bが1より小さいときは時間とともに故障率が低下する場合,すなわち初期不良のモデルとなる.ワイブル分布は物質の強度や劣化,寿命等を記述するために広く用いられている分布ではあるが,その他にも応用範囲は広い.経済学においては倒産のモデル化等に,医学においては術後の病気の再発のモデル化等に用いられる.また,気象学においては風速の分布を確率変数とみなしたとき,その確率変数が従う分布がワイブル分布であるとしている.ワイブル分布は W(a, b) にて略記される.確率密度関数は以下で与えられる.
確率変数Xの範囲は以下で与えられる.
期待値は以下で与えられる値である.式中の Γ はガンマ関数を意味する.
分散は以下の式で与えられる.これは,単に原点まわりの2次モーメントから1次モーメントを引いただけの形である.
期待値および分散の導出
期待値は定義式を用いて以下のように求められる.
ここで,以下の置換を行う.
これを x について解くと以下のようになる.
一方で,積分形の中のネイピア数の部分は以下のように置換される.
上式の両辺を t で微分してマイナスをはらうと以下のようになる.
よって,以上の関係を用いて上式 E(X) の式は以下のように変形される.
上式の積分形はまさにガンマ関数を示している.そこで,積分形をガンマ関数の表示にすることで以下のように期待値が得られる.
分散は,以下の期待値と分散の間に成り立つ関係式を利用して求めることができる.
最初に,原点まわりの2次のモーメント E(X2) を求める.この場合も以上の期待値のときに用いた x の t への置換の式を利用する.
ここで,上式の積分形はガンマ関数を表すので以下のように変形することで,原点まわりの2次のモーメントが求まる.
以上とさらにその上で求めた期待値 E(X) を用いて,分散は以下のように計算される.
原点まわりのr次のモーメント
ワイブル分布における原点まわりのr次のモーメントは以下の簡単な式で与えられる.覚えておくと便利である.
ワイブル分布と指数分布
指数分布はガンマ分布の特別な形のひとつであるが,ワイブル分布の特別な形のひとつであるともいえる.ワイブル分布においてパラメーターが b=1 を満たすとき,すなわち,W(a, 1) のときのワイブル分布は以下のように指数分布と等価である.
一方で,W(a, 2) のときのワイブル分布はレイリー分布と等価である.
確率密度関数の形状
ワイブル分布の確率密度関数の形状は以下のようになる.尺度母数 a を一定にして形状尺度 b を大きくすると正規分布に近づく.このような性質から,ワイブル分布は正規分布に近いが異なる分布のより精密なモデル化の候補のひとつとして用いられることがある.一方で,形状母数 b を一定にして尺度母数 a を小さくすると分布の尖度が大きくなる.
補遺
図を生成するためのRソースコード
#!/usr/bin/env Rscript main=function() { svg("tpd_weibull_distribution_01.svg",width=8,height=4) par(plt=c(0.2,0.9,0.2,0.9)) x=seq(0,5,0.01) plot(x,type="n",xaxs="i",yaxs="i",xlim=c(0,5),ylim=c(0,1.2),bty="l",xlab="",ylab="Probability density",las=1,family="Arial") lines(x,dweibull(x,scale=3,shape=3),lty=1,lwd=1.6,col="#2b4b65") lines(x,dweibull(x,scale=2,shape=3),lty=1,lwd=1.6,col="#ff8c00") lines(x,dweibull(x,scale=1,shape=3),lty=1,lwd=1.6,col="#e12f3c") lines(x,dweibull(x,scale=1,shape=1),lty=1,lwd=1.6,col="#00cc99") axis(side=1,at=0:5,tck=1.0,lty="dotted",lwd=0.5,labels=NA) axis(side=2,tck=1.0,lty="dotted",lwd=0.5,labels=NA) labels=c("W(3, 3)","W(2, 3)","W(1, 3)","W(1, 1)") legend("topright",legend=labels,lty=1,lwd=1.6,col=c("#2b4b65","#ff8c00","#e12f3c","#00cc99"),cex=0.8,bg="#ffffff",box.lty=3) dev.off() } main()