期待値は「gを差し替えられる1つの型」だった【番外編】

過去問を解いていて、指数分布の分散を積率母関数から求める問題で間違えました。原因を追っていくと、計算のミス以前に期待値の定義そのものを理解していなかったことが分かりました。

E[g(X)]=g(x)f(x)dxE[g(X)] = \int g(x) f(x)\, dx という式を見て、意味が取れていなかったのです。そして E[X2]E[X^2] を求めるとき、XX に何かを代入するのだと思っていました。

これは土台なので、抜けたままだと推定でも検定でもずっと詰まります。整理しておきます。

なお筆者は統計の専門家ではありません。理解の誤りが含まれる可能性があるため、試験対策として読む場合は必ず公式テキストで確認してください。

TL;DR

  • 期待値は「値 × 確率」を全部足したもの。離散では \sum、連続では \int を使う
  • 連続では1点の確率が0なので、確率の代わりに「密度 × 幅」を使う。それが f(x)dxf(x)\,dx
  • 離散と連続の違いは、\sum\int に、P(X=x)P(X=x)f(x)dxf(x)\,dx になった2箇所だけ
  • E[X2]E[X^2]XX に何かを代入するのではなく、x2f(x)x^2 f(x) を積分する
  • 平均・分散・積率母関数はすべて「gg を差し替えた同じ式」だった

何が分かっていなかったのか

指数分布(率 λ\lambda、平均は 1/λ1/\lambda)の分散を積率母関数から求めようとして、こう書いてしまいました。

E[λ2e2λx]E\left[\lambda^2 e^{-2\lambda x}\right]

これは間違いです。しかも間違いの種類が2つ重なっていました。

ひとつは微分する変数を取り違えたこと。積率母関数の微分は tt について行いますが、λ\lambda で微分していました。もうひとつは期待値を取る順序が逆だったこと。正しくは「先に期待値を取って tt の関数を作り、それを微分する」のですが、微分してから期待値を取ろうとしていました。

そしてこの2つのミスの根っこにあったのが、E[]E[\cdot] という記号が何を意味するのかを分かっていなかったことです。

離散の期待値:値 × 確率 を足す

出発点は離散です。サイコロの期待値は素直に計算できます。

E[X]=116+216++616=3.5E[X] = 1 \cdot \frac{1}{6} + 2 \cdot \frac{1}{6} + \cdots + 6 \cdot \frac{1}{6} = 3.5

これを一般化すると、こうなります。

E[g(X)]=xg(x)P(X=x)E[g(X)] = \sum_x g(x) \, P(X=x)

ここで g(x)=xg(x) = x とすれば平均、g(x)=x2g(x) = x^2 とすれば2次モーメント。掛ける中身(gg)を変えるだけで、いろいろな量が計算できます。

サイコロで E[X2]E[X^2] を求めるなら、1216+2216++6216=91615.1671^2 \cdot \frac{1}{6} + 2^2 \cdot \frac{1}{6} + \cdots + 6^2 \cdot \frac{1}{6} = \frac{91}{6} \approx 15.167 です。

ここで大事なのは、XX に何かを代入しているのではないということでした。gg の形として x2x^2 が現れているだけです。

連続では「点の確率」が使えない

連続分布では困ったことが起きます。ちょうど x=3.0000x = 3.0000\ldots になる確率は0なのです。値が連続的に無限にあるので、1点あたりの確率は0になってしまいます。だから「値 × 確率」の形が使えません。

そこで幅を持ち込みます。密度 f(x)f(x) は「単位幅あたりの確率」なので、幅を掛けて初めて確率になる。dxdx の区間に入る確率は f(x)dxf(x)\,dx で近似できるわけです。

だから離散の P(X=x)P(X=x)f(x)dxf(x)\,dx に置き換えればいい。

E[g(X)]=g(x)f(x)dxE[g(X)] = \int g(x) \, f(x) \, dx

離散と連続の期待値の対応を示した図。左は離散で各値に確率を掛けて足す様子、右は連続で短冊の面積を使う様子

違いは2箇所だけです\sum\int になり、P(X=x)P(X=x)f(x)dxf(x)\,dx になった。それ以外の構造は同じでした。

密度そのものは確率ではない

ここは第4回(変数変換)でも出てきた話です。平均3の指数分布で f(0)=1/30.333f(0) = 1/3 \approx 0.333 ですが、これは「x=0x=0 の確率が0.333」という意味ではありません。

実際に確かめました。

区間実測した確率f(0)×f(0) \times
[0,1.0)[0, 1.0)0.283490.33333
[0,0.1)[0, 0.1)0.032780.03333
[0,0.01)[0, 0.01)0.003350.00333

幅を小さくするほど f(0)×f(0) \times 幅 に近づきます。これが密度の意味です。

本当に足し算なのか確かめる

積分は「無限に細かい足し算」です。それなら有限の足し算でも近い値が出るはずなので、実際に計算してみました。

リーマン和が積分に近づく様子を示す3枚組の図。平均3の指数分布について、縦軸がx・f(x)、横軸がx(0〜16)で、赤い曲線の下をオレンジの短冊で埋めている。左は幅dx=2.0で階段が粗く、足し上げた値は3.0534。中央は幅0.5で3.0035、右は幅0.1で短冊が曲線とほぼ見分けがつかなくなり3.0001。厳密値E[X]=3.0に近づいていく

平均3の指数分布で xf(x)dxx \cdot f(x) \cdot dx を足し上げていくと、こうなります。

区間幅 dxdxxf(x)dx\sum x \cdot f(x) \cdot dxx2f(x)dx\sum x^2 \cdot f(x) \cdot dx
1.03.01375518.000802
0.13.00013918.000000
0.013.00000118.000000
厳密な積分3=1/λ=1/\lambda18=2/λ2=2/\lambda^2

細かくするほど厳密値に近づきます。積分は足し算の極限という当たり前のことですが、自分の手で確かめると納得が違いました。

import numpy as np

lam = 1/3                                 # 率λ。平均は 1/λ = 3
f = lambda x: lam * np.exp(-lam * x)

for dx in [1.0, 0.1, 0.01]:
    xs = np.arange(dx/2, 200, dx)      # 区間の中央の値
    print(dx, (xs * f(xs) * dx).sum())  # E[X] = 3 に近づく
    print(dx, (xs**2 * f(xs) * dx).sum())  # E[X²] = 18 に近づく

g を差し替えるだけで、全部同じ式

ここが今回いちばんの発見でした。期待値の枠組みは1つで、変えるのは gg だけです。

gを差し替えると別の期待値になることを示す図。灰色の破線が密度、色つきの曲線がg(x)f(x)で、その面積が期待値

灰色の破線が密度 f(x)f(x)、色つきの曲線が g(x)f(x)g(x) f(x) で、その面積が期待値です。gg を変えると曲線の形が変わり、面積も変わります。

λ\lambda(平均 1/λ1/\lambda)の指数分布で計算すると、こうなります。

求めたいものg(x)g(x)積分の結果意味
E[X]E[X]xx1/λ1/\lambda平均
E[X2]E[X^2]x2x^22/λ22/\lambda^22次モーメント
E[X3]E[X^3]x3x^36/λ36/\lambda^33次モーメント
M(t)M(t)etxe^{tx}λλt\dfrac{\lambda}{\lambda - t}t<λt < \lambda積率母関数
E[1]E[1]1111全確率

積率母関数も同じ式だった

M(t)=E[etX]=etxf(x)dxM(t) = E[e^{tX}] = \int e^{tx} f(x) \, dx

ggetxe^{tx} を入れただけです。第9回で「なぜ etxe^{tx} という形なのか」を扱いましたが、計算の枠組み自体は平均や分散と何も変わりません。特別な操作ではなかったのです。

私が間違えたのは、この tt を「動かす対象」ではなく分布のパラメータのように扱ってしまったことでした。ttモーメントを取り出すための取っ手で、最後まで文字のまま残して、微分し終わってから t=0t=0 を代入します。

表の最後の行が検算に使える

g=1g = 1 を入れると f(x)dx=1\int f(x)\,dx = 1 になります。これは「全確率が1」という当たり前のことですが、密度の式が正しいかの検算として使えます。

同じ発想で、積率母関数を導出したら t=0t=0 を入れてみるのが有効です。M(0)=E[e0]=E[1]=1M(0) = E[e^0] = E[1] = 1 になるはずなので、1にならなければ途中で計算を間違えています。30秒で済む検算です。

分散もこの型に収まる

V[X]=E[(Xμ)2]V[X] = E[(X-\mu)^2]

g(x)=(xμ)2g(x) = (x-\mu)^2 を入れただけです。分散は「平均からのズレの2乗」という量の期待値でした。

離散なら V[X]=(xμ)2P(X=x)V[X] = \sum (x-\mu)^2 P(X=x)、連続なら V[X]=(xμ)2f(x)dxV[X] = \int (x-\mu)^2 f(x)\,dx です。

サイコロで確かめます。μ=3.5\mu = 3.5 なので、

xx(xμ)2(x-\mu)^2×P(X=x)\times P(X=x)
16.251.04167
22.250.37500
30.250.04167
40.250.04167
52.250.37500
66.251.04167
合計2.91667

第3回で扱った展開形 E[X2](E[X])2E[X^2] - (E[X])^2 で計算しても 15.166673.52=2.9166715.16667 - 3.5^2 = 2.91667 で一致します。

指数分布の E[X²] を定義通り積分する

積率母関数を使わずに直接計算すると、こうなります。

E[X2]=0x2λeλxdx=2λ2E[X^2] = \int_0^{\infty} x^2 \cdot \lambda e^{-\lambda x} \, dx = \frac{2}{\lambda^2}

部分積分を2回使えば出ます。これと E[X]=1/λE[X] = 1/\lambda を組み合わせると V[X]=2/λ21/λ2=1/λ2V[X] = 2/\lambda^2 - 1/\lambda^2 = 1/\lambda^2 です。

両方の手が動くと検算になります。積率母関数で出した答えを定義通りの積分で確かめる、あるいはその逆。今回の私のミスも、定義通りに x2f(x)x^2 f(x) を積分して 2/λ22/\lambda^2 を確認できていれば、その場で気づけたはずでした。

シミュレーションでも一致する

800万件の乱数で確認しました。積分で定義した期待値と、実際にたくさん生成して平均を取ったものが一致します

シミュレーションg(x)f(x)dx\int g(x)f(x)dx
E[X]E[X]2.99973.0000
E[X2]E[X^2]18.006418.0000
E[X3]E[X^3]162.2279162.0000
E[e0.2X]E[e^{0.2X}]2.49862.5000
E[X]E[\sqrt{X}]1.53491.5350

最後の行のように g(x)=xg(x) = \sqrt{x} でも計算できます。gg は何でもよいのです。

これは第8回(大数の法則)とつながります。「たくさん生成して平均を取ると期待値に近づく」——それが大数の法則でした。つまり積分による定義と、シミュレーションによる近似が、大数の法則で結ばれているわけです。

実務的には、積分が解けない場合でもシミュレーションで期待値を求められるということでもあります(モンテカルロ法)。

この先で効いてくる

今後こういう記号が出てきますが、すべて同じ型です。

記号積分で書くと何を計算しているか
E[X]E[X]xf(x)dx\int x f(x)dx平均
E[X2]E[X^2]x2f(x)dx\int x^2 f(x)dx2次モーメント
E[(Xμ)2]E[(X-\mu)^2](xμ)2f(x)dx\int (x-\mu)^2 f(x)dx分散
E[etX]E[e^{tX}]etxf(x)dx\int e^{tx} f(x)dx積率母関数
E[logf(X)]E[\log f(X)]logf(x)f(x)dx\int \log f(x) \cdot f(x)dxエントロピー

第8章(統計的推定の基礎)では、フィッシャー情報量がこういう形で出てきます。

I(θ)=E[(θlogf(X;θ))2]I(\theta) = E\left[\left(\frac{\partial}{\partial\theta}\log f(X;\theta)\right)^2\right]

長くて怖い見た目ですが、これはスコア関数の2乗の期待値であって、gg に「スコア関数の2乗」を入れただけです。今回の型で読めば「\int(スコア関数の2乗)×f(x)dx\times f(x)\, dx か」と分かります。

記号に圧倒されて手が止まる、という状態を避けられそうです。

分かったこと

問い答え
連続の期待値の定義はg(x)f(x)dx\int g(x) f(x) dx。「値 × 密度 × 幅」を足す
離散との違いは\sum \to \intP(X=x)f(x)dxP(X=x) \to f(x)dx の2箇所だけ
なぜ確率でなく密度なのか連続では1点の確率が0だから。幅を掛けて確率にする
E[X2]E[X^2] の求め方XX に代入するのではなく、x2f(x)x^2 f(x) を積分する
積率母関数の求め方ggetxe^{tx} を入れて積分する
検算の方法g=1g=1 で1になるか/M(0)=1M(0)=1 になるか/定義通りの積分と一致するか

一言でまとめると、期待値は gg を差し替えられる1つの型でした。平均・モーメント・分散・積率母関数は、その型に何を入れるかの違いしかありません。

過去問で計算を間違えたとき、最初は「計算ミスかな」と思っていました。でも掘っていくと、定義の理解が抜けていたのが原因でした。公式を覚えて手順を追うだけでは、こういう抜けに気づけません。間違えたことで土台の穴が見つかったので、結果的には収穫だったと思います。


この連載は、うまくいった記録だけでなく詰まった箇所も含めて書いています。同じく準1級を目指している方、一度挫折した方の参考になれば嬉しいです。