連続一様分布は、もっとも基本的な連続型確率分布の一つである。「ある区間内のどの値も同じ確率密度で出現する」という単純な状況をモデル化する。離散値に対して同様の性質をもつのが離散一様分布である。
日常生活にも連続一様分布で近似できる現象は多い。ある時刻にバス停に到着したとき、次のバスが来るまでの待ち時間(バスが等間隔で運行している場合)、ルーレットの針が止まる角度、工場の製品検査で許容誤差範囲内に収まる場合の誤差の分布などが挙げられる。
統計学やシミュレーションにおいて、連続一様分布は乱数生成の基礎として極めて重要である。コンピュータで生成される疑似乱数は通常、区間 [0, 1] 上の一様分布に従い、これを変換して正規分布や指数分布など他の分布に従う乱数を生成する。
定義
a < b を満たす実数 a, b に対して、確率変数 X が区間 [a, b] 上で一定の確率密度をもつとき、X は連続一様分布(continuous uniform distribution)に従うという。この分布を U(a, b) と表記する。
区間 [a, b] の外では確率密度が0であり、区間内では \dfrac{1}{b-a} で一定である。確率密度関数の積分は1になるという条件から、この値が導かれる。
確率密度関数のグラフ
連続一様分布の確率密度関数は、区間 [a, b] 上で水平な直線となる。以下は U(2, 8)(a=2, b=8)の場合である。
グラフの塗りつぶし部分の面積が1に等しい。連続型確率分布では、特定の区間の確率はその区間における確率密度関数の積分(面積)で表される。
累積分布関数
累積分布関数(cumulative distribution function, CDF)F(x) = P(X \leq x) は、確率密度関数を -\infty から x まで積分して得られる。
区間 [a, b] 内では、F(x) は x に対して線形に増加する。
確率の計算には累積分布関数を使うと便利である。P(c \leq X \leq d) は次のように計算できる。
この式は、区間の長さ d - c が全体の長さ b - a に占める割合が確率に等しいことを示している。
期待値と分散
期待値
連続一様分布 U(a, b) の期待値は、区間の中点に等しい。
【導出】 期待値の定義に従って計算する。
分散
分散は次の公式で与えられる。
【導出】 分散の公式 V[X] = E[X^2] - (E[X])^2 を使う。まず E[X^2] を求める。
したがって、分散は
連続一様分布 U(a, b) では
- 期待値:E[X] = \dfrac{a+b}{2}(区間の中点)
- 分散:V[X] = \dfrac{(b-a)^2}{12}
モーメント母関数
モーメント母関数(moment generating function)は次のように求められる。
t = 0 のときは M(0) = 1 である。
モーメント母関数を微分して t = 0 を代入することで期待値や高次モーメントを求めることもできる。M'(0) = E[X]、M''(0) = E[X^2] の関係がある。
標準一様分布
a = 0, b = 1 の場合、すなわち U(0, 1) を標準一様分布という。乱数生成において最も基本的な分布であり、ほとんどのプログラミング言語で提供される乱数関数はこの分布に従う。
標準一様分布の性質:
- 確率密度関数:f(x) = 1 (0 \leq x \leq 1)
- 累積分布関数:F(x) = x (0 \leq x \leq 1)
- 期待値:E[X] = \dfrac{1}{2}
- 分散:V[X] = \dfrac{1}{12} \approx 0.0833
線形変換により、標準一様分布から任意の連続一様分布を生成できる。U \sim U(0, 1) のとき、X = a + (b - a)U は U(a, b) に従う。
簡単な計算例
例1:バスの待ち時間
あるバス停では、バスが10分間隔で運行している。ランダムな時刻にバス停に到着したとき、待ち時間 X(分)は U(0, 10) に従うとみなせる。
期待値(平均待ち時間)は
分散は
標準偏差は \sigma = \sqrt{8.33} \approx 2.89 分である。
「待ち時間が3分以下である確率」は
例2:U(2, 8) の計算
確率変数 X が U(2, 8) に従うとする。
期待値と分散を求める。
「X が3以上6以下となる確率」は
練習問題
期待値と分散は
確率は累積分布関数より
U が [0, 1] を動くとき、Y = 3U + 2 は [2, 5] を動く。
したがって、Y \sim U(2, 5) に従う。
または、線形変換の性質 E[aU+b] = aE[U]+b、V[aU+b] = a^2 V[U] を使って
累積分布関数を使って
または、区間の長さの比として \dfrac{4-2}{5-1} = \dfrac{2}{4} = 0.5
まとめ
| 項目 | 内容 |
|---|---|
| 分布名 | 連続一様分布(continuous uniform distribution) |
| 表記 | U(a, b) |
| 確率密度関数 | f(x) = \dfrac{1}{b-a} (a \leq x \leq b) |
| 累積分布関数 | F(x) = \dfrac{x-a}{b-a} (a \leq x \leq b) |
| 期待値 | E[X] = \dfrac{a + b}{2} |
| 分散 | V[X] = \dfrac{(b-a)^2}{12} |
| モーメント母関数 | M(t) = \dfrac{e^{tb} - e^{ta}}{t(b-a)} (t \neq 0) |
| 応用例 | 乱数生成、待ち時間モデル、測定誤差 |
Pythonで実装する
Pythonを使って連続一様分布の計算やシミュレーションを行う。
import numpy as np
from scipy import stats
# パラメータ設定
a, b = 2, 8 # U(2, 8)
# 期待値と分散(理論値)
E_X = (a + b) / 2
V_X = (b - a)**2 / 12
print("=== 連続一様分布 U(2, 8) ===")
print(f"期待値(理論値): E[X] = {E_X}")
print(f"分散(理論値) : V[X] = {V_X:.4f}")
print(f"標準偏差 : σ = {np.sqrt(V_X):.4f}")
# scipy.statsを使用した計算
# uniform(loc, scale) で loc から loc+scale までの一様分布
dist = stats.uniform(loc=a, scale=b-a)
print(f"\nscipy.statsによる計算:")
print(f"期待値: {dist.mean()}")
print(f"分散 : {dist.var():.4f}")
# 確率密度関数の確認
print(f"\n確率密度関数 f(x) = 1/(b-a) = 1/{b-a} = {1/(b-a):.4f}")
# 累積分布関数(確率計算)
print(f"\n累積分布関数:")
print(f" F(3) = P(X ≤ 3) = {dist.cdf(3):.4f}")
print(f" F(5) = P(X ≤ 5) = {dist.cdf(5):.4f}")
print(f" F(6) = P(X ≤ 6) = {dist.cdf(6):.4f}")
# 区間の確率
print(f"\n確率計算:")
print(f" P(3 ≤ X ≤ 6) = {dist.cdf(6) - dist.cdf(3):.4f}")
print(f" P(X > 5) = {1 - dist.cdf(5):.4f}")
# シミュレーション
np.random.seed(42)
n_samples = 10000
samples = np.random.uniform(a, b, size=n_samples)
print(f"\nシミュレーション(n={n_samples}):")
print(f"標本平均: {np.mean(samples):.4f}")
print(f"標本分散: {np.var(samples, ddof=0):.4f}")
シミュレーション結果が理論値に近い値を示している。大数の法則により、標本サイズを増やすほど標本平均は期待値に、標本分散は分散に収束する。