このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

簡易版・ボレルのパラドックスとその解釈:R言語を使って

ボレルのパラドックス(あるいは、ボレル/コルモゴロフのパラドックス)と呼ばれる議論の簡易化したバージョンを紹介します。

問題と2つの解答

ダーツとかアーチェリーのマトを考えてください。次の図のようなものです。

水色の円の半径を1とします。赤い円の半径は1/3です。赤い所に矢が刺さると「当たり」だとします。矢がどこに刺さるかはまったくのランダムです。ただし、矢が水色の円の外に出ることはないとします。外に出ても無視して勘定に入れないと思ってもかまいません。

このとき、矢が赤い所に当たる確率はいくつでしょうか? というのが問題です。

解答例その1: 水色の円の面積は 1×1×π = π、赤い円の面積は 1/3×1/3×π = 1/9π だから、赤い円に矢が入る確率は 1/9。

解答例その2: 円は、中心から放射状に出る長さ1の線分が集まって構成される。どの線分に矢が刺さるかは同じ確率なので、1本の線分だけを考えれば十分。線分のなかで赤い部分は全体の1/3なので、赤い部分に矢が刺さる確率は1/3。

結果が違います。さて、どちらが正しいのでしょうか?

種明かし

どちらも間違いとは言えません。どちらが正しいと決定もできません。「矢がどこに刺さるかはまったくのランダムです」が曖昧な前提だからです。(前提をハッキリさせて、正誤を決めることもあります。)

確率分布(確率測度)がないと赤い円の確率の測りようがありません。この問題では確率分布が明示されてないので、解答者が各自で決めています。それぞれが想定した確率分布が違うので解答も違ってきます。矛盾があるわけではありません。つまり、擬似的なパラドックスなのです。

それぞれの確率分布を説明します。3000回矢を投げたとして、刺さった位置をシミュレートしてみます。まず解答例その1の前提は、円内の一様分布です。Rで次のようにすると、矢の跡が図になります。

require(ggplot2)
N <- 3000

# 2倍のサンプルを作って、N個だけ使う
a <- runif(N*2, -1, 1)
b <- runif(N*2, -1, 1)
mask <- a^2 + b^2 <= 1
x <- a[mask]
y <- b[mask]
x <- x[1:N]
y <- y[1:N]
qplot(x, y, alpha=I(0.5)) + xlim(-1, 1) + ylim(-1, 1)

局所的なマダラはありますが、全体を眺めると、矢の跡は円内に一様に散らばっています。半径1/3の円内にある跡だけ抜き出して勘定してみます。そして、全体の跡(3000個)との比率を求めてみます。

hit <- x^2 + y^2 <= (1/3)^2
sum(hit)/N

sum(hit)/Nの値は0.1043333となり、確かに1/9(0.1111111)に近いです。


次は解答例その2のほう。こっちは、極座標で考えて、偏角t(0≦t≦2π)方向と半径r方向のどちらについても分布が一様だと仮定しています。

t <- runif(N, 0, 2*pi)
r <- runif(N)
qplot(t, r, alpha=I(0.5)) + xlim(0, 2*pi) + ylim(0, 1)

tとrの空間では、上の図のように矢の跡が一様に散らばります。このt-r空間での分布を、x = r*cos(t), y = r*sin(t) で、x-y空間に持って行くとどうなるでしょうか。先ほど定義したx, yを壊したくないので、x_, y_という変数を使って確かめます。

x_ <- r*cos(t)
y_ <- r*sin(t)
qplot(x_, y_, alpha=I(0.5)) + xlim(-1, 1) + ylim(-1, 1)

明らかに中心付近が濃くなっています。半径1/3の赤い円=当たり領域に入る跡の比率は:

hit_ <- x_^2 + y_^2 <= (1/3)^2
sum(hit_)/N

値は0.3486667で、1/3(0.3333333)に近いです。

円の中心が濃くなるのは何故でしょう; t-r空間で短冊のような細長い長方形を考えてみます。

t1 <- t[t <= 0.5]
r1 <- r[t <= 0.5]
qplot(t1, r1, alpha=I(0.5)) + xlim(0, 2*pi) + ylim(0, 1)

(t, r)|→(x_, y_) という変換で、短冊の上のほうは広がって、逆に下のほうはギュッと縮まって扇型になります。扇型のトガッたほうでは、もとの分布が圧縮されて濃くなるのです。

x1 <- r1*cos(t1)
y1 <- r1*sin(t1)
qplot(x1, y1, alpha=I(0.5)) + xlim(-1, 1) + ylim(-1, 1)

円の中心で密度の値が立ち上がっているのを見るために、3次元グラフを描いてみます。

d <- 0.05
K <- 1/d
n <- floor(x_ / d)
m <- floor(y_ / d)
n <- n + K + 1
m <- m + K + 1

z <- matrix(0, 2*K, 2*K)
for (i in 1:N) z[n[i], m[i]] <-  z[n[i], m[i]] + 1

xBreaks <- seq(-1, (1 - d), d) + d/2
yBreaks <- xBreaks

persp(xBreaks, yBreaks, z, 
      xlab = "x", ylab = "y", zlab = "z",
      xlim = c(-1, 1), ylim = c(-1, 1),
      theta = 30, phi = 30, expand = 0.5, col = "skyblue")

軟化処理をしてないのでクチャクチャですが、円の中心で密度が急激に増大しているのは見てとれるでしょう。

まとめ

  • 確率分布(確率測度)を決めないと、確率を云々することは出来ません。
  • Rでシミュレーションすると分かりやすいですね。



[追記]

解答例その2がおかしいと思う方、次ならどうなんでしょうか。

問題: 辺の長さが1の正方形のマトで、矢が赤い所に当たる確率はいくつでしょうか?

解答例: 正方形は、縦に走る長さ1の線分が集まって構成される。どの線分に矢が刺さるかは同じ確率なので、1本の線分だけを考えれば十分。線分のなかで赤い部分は全体の1/3なので、赤い部分に矢が刺さる確率は1/3。



[追記その2]

マトの形が次のようだったら、「線の集まり」論法が使える? それとも使えない?