確率変数の変数変換

以前もこの話題をやったが、手を動かしていろいろ実験した結果、前よりも腑に落ちた(感覚的にしっくりくるようになった)ので再度まとめ。

まず、簡単な場合。[0, 2]の範囲の一様乱数 X がある。その密度関数は f(x) = 1/2、変域は[0, 2]である。

Y = 2X と変数変換する。明らかに Y も一様乱数で、範囲は [0, 4]。密度関数は f(y) = {1 \over 2 \cdot 2}、変域は[0, 4]である。「変域が広がった分だけ密度が薄くなった」わけだ。

Y = X^2 と変数変換する。新たな変域は上と同じく [0, 4] だが、密度の薄まり方が場所によって異なる。X が 0 に近い領域では、Y はゆっくりとしか変化しないから、相対的に「濃い」と考えられる。あるいは、同じ Y の幅を取った時、その元となる X の範囲が広い、したがって確率が高いとも言える。上の場合の類推で、f(y) = {1 \over f'(x) \cdot 2} = {1 \over 2x \cdot 2} = {1 \over 2\sqrt y \cdot 2} = {1 \over 4 \sqrt y}となる。つまり、導関数の逆数を元の確率分布に掛ければよろしい。

やや複雑な場合。[0, 2\pi]の範囲の一様乱数 X がある。その密度関数は [f(x) = {1 \over 2\pi}]、変域は[0, 2\pi]である。

Y = cos(X) と変数変換する。f(y) = {1 \over f'(x) \cdot 2\pi} = {1 \over \sin x \cdot 2\pi} = {1 \over \sin (\cos^{-1} y) \cdot 2\pi} となる。ここで、\sin (\cos^{-1} y)はというと、cos が y のときに sin はいくらかと聞いているので、\sqrt{1-y^2}である。したがって、f(y) = {1 \over 2\pi\sqrt{1-y^2}}である。ーといいたい所なのだが、X が [0, 2\pi] を動く間に Y は [-1, 1] を2回動くので、上を2倍しなければならない。実際、そのままだと、

(%i21) integrate(1/2/%pi/sin(acos(x)), x, -1, 1);
                                       1
(%o21)                                 -
                                       2

となってしまうことが maxima で確認できる。以上より、f(y) = {1 \over \pi\sqrt{1-y^2}} が答え。

なにはともあれ、この関数をプロットすると、y = -1 と 1 で大きくて、y = 0 付近では小さい値になっているのが分かる。

R で乱数を発生させて実験してみても、

hist(cos(runif(10000, min=0, max=2*pi)))
curve(1/pi/sqrt(1-x*x), xlim=c(-1, 1))

で、いい具合である。