一覧CS-13-3 · 統計と測定

平均の信頼区間と仮説検定

既知の標準偏差を持つ正規モデルで、平均の推定幅と検定結果が変わる条件を計算します。

説明

標本平均は抽出ごとに変わるため、母平均の推定には幅を付けます。信頼区間は、同じ方法を繰り返したときに所定の割合で母平均を含むように作る区間です。仮説検定は、仮定した母平均の下で観測結果がどれほど極端かを調べます。

ここでは独立な正規分布の測定を仮定し、母標準偏差が10ミリ秒と既知の場合に限定します。標本平均104ミリ秒から95%信頼区間と両側検定を計算し、標本数と有意水準を変えます。標準偏差を標本から推定する場合は同じ式を無条件に流用できません。

1測定モデルと標準誤差

母標準偏差σ=10、標本数25、標本平均104とします。標本平均の標準偏差はσ/√nで、標準誤差と呼びます。

import math; from statistics import NormalDist平方根と正規分布; normal = NormalDist(); sigma = 10; n = 25; mean = 104モデルと観測値; se = sigma/math.sqrt(n); se標本平均の標準誤差

標準誤差は2ミリ秒です。個々の測定値の標準偏差10と、平均の揺れ2は対象が違います。独立な測定を平均することで揺れが小さくなります。

295%の区間を作る

標準正規分布の中央95%を取るため、上側累積確率0.975の点を使います。両端には2.5%ずつ残ります。

critical = normal.inv_cdf(0.975)両側95%の臨界値; interval = (mean-critical*se, mean+critical*se)平均の上下に幅を加える; critical, interval臨界値と信頼区間

臨界値は約1.96、区間は約100.08〜107.92です。個々の測定値の95%がこの範囲に入るという意味ではありません。母平均を推定する区間です。

3標本数を増やす場合

比較のため平均104と既知のσを固定し、標本数だけ変えて区間幅を求めます。実際に追加測定すれば平均も動きます。

[(size, round(2*critical*sigma/math.sqrt(size),3)) for size in [25,100,400]]独立標本数と区間の全幅

全幅は約7.84、3.92、1.96です。標本数を4倍にすると幅は半分になります。ただし同じ測定を複製して件数を増やしても、独立な情報は増えません。

4母平均100という仮説

帰無仮説を母平均100、対立仮説を100以外とする両側検定です。観測平均104が仮説から標準誤差何個分離れているかを求めます。

null_mean = 100帰無仮説の母平均; z = (mean-null_mean)/se差を標準誤差で標準化; p_value = 2*(1-normal.cdf(abs(z)))両側の裾の確率; z, p_value統計量とp値

z=2、p値は約0.0455です。これは帰無仮説とモデルを仮定したとき、絶対値が今回以上の統計量を得る確率です。帰無仮説が正しい確率ではありません。

5有意水準で判断が変わる

検定前に決める有意水準αを、ここでは比較用に5%と1%へ変えます。p値がαより小さければ棄却します。

[(alpha, p_value < alpha) for alpha in [0.05,0.01]]有意水準ごとの棄却判定, interval[0] <= null_mean <= interval[1]95%区間に100を含むか

5%では棄却、1%では棄却できません。同じ両側の設定では、95%区間に100が含まれないことと5%検定の棄却が対応します。観測後に都合のよい水準を選ぶ手順にはしません。

6統計的有意性と差の大きさ

実用上の差と統計的な検出可能性は別です。平均差を0.5ミリ秒に縮め、独立標本数を10000へ増やします。

small_difference = 0.5; large_n = 10000小さい差と大きい標本数; large_z = small_difference/(sigma/math.sqrt(large_n))標準化した差; large_z, 2*(1-normal.cdf(abs(large_z)))統計量と両側p値

差0.5でもz=5となり、p値は小さくなります。その差に運用上の価値があるかは、許容待ち時間や改善費用と合わせて判断します。小さいp値だけでは効果の大きさを示せません。

7区間を何度も作る

母平均100、母標準偏差10の正規モデルから25件ずつ1000回抽出します。区間が100を含む回数を数えます。

import random; rng = random.Random(2026)固定seedの乱数器; means = [sum(rng.gauss(100,sigma) for _ in range(n))/n for _ in range(1000)]25件の標本平均を1000個; covered = sum(abs(m-100) <= critical*se for m in means)母平均を含む区間数; covered, covered/1000被覆回数と割合

被覆割合は95%付近ですが、有限回の試行で必ず950回になるわけではありません。95%は区間作成方法の長期的な性質です。今回得た固定区間の中で母平均が動くという説明にはなりません。

899%区間との比較

同じ観測平均から信頼係数99%の区間を計算します。母平均を含む割合を高めると、区間は広くなります。

critical99 = normal.inv_cdf(0.995)両側99%の臨界値; (mean-critical99*se, mean+critical99*se), critical99 > critical広がった区間と臨界値

99%区間は約98.85〜109.15で100を含みます。この教材の既知σ・正規性・独立性を外れる場合には、推定法や検定法の適用条件を改めて確認する必要があります。

まとめ

信頼区間は母平均を推定する方法の被覆率であり、個々の測定値の範囲ではありません。

p値は帰無仮説の下での極端さを表し、仮説が正しい確率や効果量ではありません。

独立性・分布・標準偏差の扱いと、有意水準を確認して計算を適用します。

操作履歴と解説を振り返れます。

Python 3

1
import math; from statistics import NormalDist; normal = NormalDist(); sigma = 10; n = 25; mean = 104; se = sigma/math.sqrt(n); se
2.0
2
critical = normal.inv_cdf(0.975); interval = (mean-critical*se, mean+critical*se); critical, interval
(1.9599639845400534, (100.0800720309199, 107.9199279690801))
3
[(size, round(2*critical*sigma/math.sqrt(size),3)) for size in [25,100,400]]
[(25, 7.84), (100, 3.92), (400, 1.96)]
4
null_mean = 100; z = (mean-null_mean)/se; p_value = 2*(1-normal.cdf(abs(z))); z, p_value
(2.0, 0.04550026389635842)
5
[(alpha, p_value < alpha) for alpha in [0.05,0.01]], interval[0] <= null_mean <= interval[1]
([(0.05, True), (0.01, False)], False)
6
small_difference = 0.5; large_n = 10000; large_z = small_difference/(sigma/math.sqrt(large_n)); large_z, 2*(1-normal.cdf(abs(large_z)))
(5.0, 5.733031438470704e-07)
7
import random; rng = random.Random(2026); means = [sum(rng.gauss(100,sigma) for _ in range(n))/n for _ in range(1000)]; covered = sum(abs(m-100) <= critical*se for m in means); covered, covered/1000
(950, 0.95)
8
critical99 = normal.inv_cdf(0.995); (mean-critical99*se, mean+critical99*se), critical99 > critical
((98.8483413929022, 109.1516586070978), True)

演習完了