対数正規分布
確率変数 Y=lnX (=logeX) が正規分布に従うとき,その真数である確率変数 X が従う確率分布を対数正規分布 (log-normal distribution) という.所得の分布のような低い方には限度があるが高い方には限度がないような事象のモデル化に使われる.正規分布から簡単に導出することができるという利点もある.本分布の利用例は多岐に渡り,ウイルスの潜伏期間の分布,エアロゾルの粒子径の分布,地殻中に存在するミネラルの分布等,分野を問わず様々な領域で用いられている確率分布である.パラメーターは正規分布と同じく,期待値 μ と分散 σ2 であり,対数正規分布は LN(μ, σ2) にて略記される.確率密度関数は以下で与えられる.
確率変数Xの範囲は以下である.
モーメント母関数は以上の範囲においては存在しない.期待値は以下で与えられる.
分散は以下の式で与えられる.
期待値および分散の導出
期待値は以下のように求める.
ここで,lnX=t とおくと,dx=etdt となるので上式に代入し,さらに計算を続ける.
ここで,t-σ2=s とおくと上式は以下のように変形される.
このとき,上式における積分形はまさに正規分布の確率密度関数の積分なので値は1となる.よって期待値は以下のように表される.
分散は,分散と期待値の間で成り立つ以下の関係式を用いて求める.
まず,E(X2) を求める.ここでは,上の期待値の場合と同じように3行目から4行目の変形では lnX=t とおき,5行目から6行目の変形では t-2σ2=s とおく.
以上のように求めた原点まわりの2次モーメント E(X2) および期待値 E(X) を用いて分散は以下のように求める.
確率密度関数の導出
対数正規分布の確率密度関数は正規分布に従う確率変数とその確率密度関数から確率変数の変換をすることで得られる.まず,以下のような標準正規分布に従う確率変数 Y=lnX (=logeX) を考える.この対数における真数Xが対数正規分布に従う確率変数である.
このときの,確率変数Yが従う分布の確率密度関数を f(y),確率変数Xが従う分布の確率密度関数,すなわち求めるべき確率密度関数を g(x) とする.また,以下のような関数 ψ(x) を考える.
このような関数が与えられたとき,求めるべき確率密度関数 g(x) は以下のように表される.
よって,確率変数Xが従う分布の確率密度関数 g(x) は以下のように計算される.これこそが,対数正規分布の確率密度関数である.
対数正規分布に従う確率変数の性質
対数正規分布に従う確率変数の積および比は同様に対数正規分布に従う.以下のような互いに独立な対数正規分布に従う確率変数 X1 および X2 を考える.
このとき,これらの確率変数の積および比はそれぞれ以下のような対数正規分布に従う.
これらは単に正規分布の再生性に由来する性質である.
確率密度関数の形状
対数正規分布の確率密度関数の形状は以下のようになる.
補遺
図を生成するためのRソースコード
#!/usr/bin/env Rscript main=function() { svg("tpd_log_normal_distribution_01.svg",width=8,height=4) par(plt=c(0.2,0.9,0.2,0.9)) x=seq(0,6,0.01) plot(x,type="n",xaxs="i",yaxs="i",xlim=c(0,6),ylim=c(0,2),bty="l",xlab="",ylab="Probability density",las=1,family="Arial") lines(x,dlnorm(x,meanlog=0,sdlog=sqrt(5)),lty=1,lwd=1.6,col="#2b4b65") lines(x,dlnorm(x,meanlog=0,sdlog=sqrt(2)),lty=1,lwd=1.6,col="#ff8c00") lines(x,dlnorm(x,meanlog=1,sdlog=sqrt(5)),lty=1,lwd=1.6,col="#e12f3c") lines(x,dlnorm(x,meanlog=1,sdlog=sqrt(2)),lty=1,lwd=1.6,col="#00cc99") axis(side=1,at=0:6,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("LN(0, 5)","LN(0, 2)","LN(1, 5)","LN(1, 2)") 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()