対数正規分布の確率密度関数・期待値・分散の導出の証明

みなさん、こんにちは!統計学や確率論に慣れ親しんでいる方なら、正規分布について何度も聞いたことがあることでしょう。正規分布は、自然界や社会科学など、さまざまな分野で出現する現象をモデル化するのに非常に役立ちます。今日は、このおなじみの正規分布に、ちょっと変わった視点で迫ってみたいと思います。

具体的には、確率変数 X が平均μ分散σ2 の正規分布に従うとき、すなわち XN(μ,σ2) であるとき、その指数関数 Y=eX が従う分布を対数正規分布と言います。

対数正規分布の確率密度関数と期待値と分散を導出してみようと思います。

対数正規分布の確率密度関数・期待値・分散の導出

対数正規分布の確率密度関数の導出

eX の密度関数をf(x) と書くことにします。f(x)=xP(Xx) が成り立つことを思い出しておきます。

P(Xx)=x1(2πσ2)1/2e(sμ)22σ2ds

であるので、x>0 の時には、

P(eXx)=P(Xlogx)=logx1(2πσ2)1/2e(sμ)22σ2ds

です。

xb(x)f(t)dt=b(x)f(b(x))

であることを思い出すと、

f(x)=xP(eXx)=1x1(2πσ2)1/2e(logxμ)22σ2

となります。

従って、まとめると、

f(x)={1x1(2πσ2)1/2e(logxμ)22σ2(x>0)0(x0)

ということになります。

対数正規分布の期待値の求め方

ガウス関数の積分

12πtex22tdx=1

を思い出しておく。

E(eX)=ex1(2πσ2)1/2e(xμ)22σ2dx=1(2πσ2)1/2e(x2(2μ+2σ2)x+μ2)2σ2dx=1(2πσ2)1/2e(x(μ+σ2))2(2μσ2+σ4)2σ2dx=eμ+12σ21(2πσ2)1/2e(x(μ+σ2))22σ2dx=eμ+12σ21(2πσ2)1/2ex22σ2dx=eμ+12σ2×1=eμ+12σ2

まとめると、確率変数 X が平均μ分散σ2 の正規分布に従うとき、Y=eX とすると、

E(Y)=eμ+12σ2

となります。

対数正規分布の分散の求め方

V(Y)=E(Y2)(E(Y))2=E(e2X)(E(eX))2 が成り立つことを用いることにします。

E(e2X)=e2x1(2πσ2)1/2e(xμ)22σ2dx=1(2πσ2)1/2e(x2(2μ+4σ2)x+μ2)2σ2dx=1(2πσ2)1/2e(x(μ+2σ2))2(4μσ2+4σ4)2σ2dx=e2μ+2σ21(2πσ2)1/2e(x(μ+2σ2))22σ2dx=e2μ+2σ2

また、

(E(eX))2=e2μ+σ2

なので、

V(Y)=e2μ+2σ2e2μ+σ2

となります。

おまけ:連続複利が対数正規分布に従う場合

連続複利が正規分布に従っているとします。つまり、rN(μ,σ2) です。

1 円を1年間運用すると、er になります。このときのリターンer11R と表すことにすると、

期待値は、

E(R)=E(er1)=eμ+12σ21

と計算できます。また分散については、

V(R)=V(er1)=V(er)=e2μ+2σ2e2μ+σ2

と計算することができます。

おまけ2:確率密度関数を実際にみてみよう

確率変数 X が平均μ分散σ2 の正規分布に従うとします。

Y=eX の密度関数の分布をみてみましょう。

σ=0.2 に固定して、μ を変化させたとき以下のようになります。

import numpy as np
import matplotlib.pyplot as plt

# フィギュアのサイズを設定
plt.figure(figsize=(16, 9))

# 対数の標準偏差
sigma = 0.2

# xの値の範囲
x = np.linspace(0.01, 20, 1000)

# 対数の期待値muの値を0, 1/4, 2/4, 3/4, 1と変化させる
mu_values = np.linspace(0, 4, 5)

# 各mu値に対して対数正規分布の密度関数をプロット
for mu in mu_values:
    # 対数正規分布の密度関数
    pdf = (1 / (x * sigma * np.sqrt(2 * np.pi))) * np.exp(-((np.log(x) - mu) ** 2) / (2 * sigma ** 2))
    # 密度関数をプロットする
    plt.plot(x, pdf, label=f'Log-normal PDF (mu={mu / 4})')

# グラフにタイトルとラベルを追加
plt.title('Log-normal Distribution for Various Mu')
plt.xlabel('x')
plt.ylabel('f(x)')
plt.legend()

# グラフを表示
plt.show()

また、μ0に固定して、σ を動かしたときの様子は以下のようになります。

import numpy as np
import matplotlib.pyplot as plt

# フィギュアのサイズを設定
plt.figure(figsize=(16, 9))

# 平均の対数
mu = 0.0

# xの値の範囲
x = np.linspace(0.01, 20, 1000)

# sigmaの値を0.1, 0.3, 0.6, 0.8, 1.0と変化させる
sigma_values = np.linspace(0.1, 1, 5)

# 各sigma値に対して対数正規分布の密度関数をプロット
for sigma in sigma_values:
    # 対数正規分布の密度関数
    pdf = (1 / (x * sigma * np.sqrt(2 * np.pi))) * np.exp(-((np.log(x) - mu) ** 2) / (2 * sigma ** 2))
    # 密度関数をプロットする
    plt.plot(x, pdf, label=f'Log-normal PDF (sigma={sigma:.1f})')

# グラフにタイトルとラベルを追加
plt.title('Log-normal Distribution for Various Sigma')
plt.xlabel('x')
plt.ylabel('f(x)')
plt.legend()

# グラフを表示
plt.show()

あわせて読みたい記事

記事をシェアして話のネタにする

コメント

コメントする