クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

標本と信頼区間の考え方

このレッスンのあとで: 標本の平均から、全体の平均がどの範囲にあるかを言うことができる。

55分のレッスンコマンド2件JupyterLab データサイエンスラボ:pandas、Matplotlib、scikit-learn をブラウザーで

一部から全体を見積もる

標本調査は、全体の一部だけを調べて、全体の値を見積もる方法です。全部を調べなくても、数十日分から、全体の平均がどの範囲にあるかを、幅つきで言えます。

貸し自転車の店は、1年の平均貸出台数を、31日分の記録だけから見積もりたいのです。

このレッスンのゴール

メモ

標本の平均から、全体の平均がどの範囲にあるかを言うことができる。

キーワード

ことばいみれい
母集団知りたい全体1年の365日
標本母集団から取り出した一部
偏り標本が母集団を正しく映していないこと
標準誤差標本平均が、取り方で揺れる大きさの目安
標本標準偏差2乗の合計を、個数マイナス1で割って求める標準偏差
信頼区間母集団の平均が入ると見積もる範囲

学生が入力するセルは、このプレビューでは空白です。

標本は母集団の一部

知りたい全体を母集団、そこから取り出した一部を標本と言います。ここでは、365日が母集団で、取り出した日が標本です。

標本の大きさより大事なのは、母集団を正しく映しているかどうかです。映していない標本には、偏りがあります。

標本の取り方で平均が変わる

コマンド
docker exec jupyter python3 -c "import csv; h = [int(r['hires']) for r in csv.DictReader(open('hires.csv'))]; print(round(sum(h) / len(h), 1), round(sum(h[:31]) / 31, 1), round(sum(h[::12]) / len(h[::12]), 1))"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

標本平均は取り方で揺れる

標本を取りなおすたびに、標本平均は少し違う値になります。この揺れの大きさの目安が標準誤差です。

標準誤差は、標本の標準偏差を、個数の平方根で割って求めます。標本が大きいほど、小さくなります。

例: 5日の標本の標準誤差

求めるもの値
標本10、12、14、16、18
平均14
平均との差の2乗の合計16 + 4 + 0 + 4 + 16 = 40
分散 (個数マイナス1で割る)40 ÷ 4 = 10
標本標準偏差約3.16
標準誤差 (5の平方根で割る)3.16 ÷ 2.24 = 約1.41

学生が入力するセルは、このプレビューでは空白です。

信頼区間は見積もりの幅

標本平均の前後に、標準誤差の1.96倍を取った範囲が、95%信頼区間です。母集団の平均は、この範囲に入ると見積もります。

例では 14 ± 1.96 × 1.41 で、約11.2から約16.8です。同じ方法で区間を何度も作ると、約95%が本当の平均を含みます。

31日の標本から区間を出す

コマンド
docker exec jupyter python3 -c "import csv, statistics as s; h = [int(r['hires']) for r in csv.DictReader(open('hires.csv'))][::12]; m = sum(h) / len(h); e = s.stdev(h) / len(h) ** 0.5; print(len(h), round(m, 1), round(e, 2), round(m - 1.96 * e, 1), round(m + 1.96 * e, 1))"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくある間違い

注意

多くの人は、標本を大きくすれば、いつも正しい答えに近づくと考えます。標本の取り方に偏りがあれば、個数を増やしても同じ方向にずれます。まず取り方を確かめ、そのあとで個数を考えてください。

区間を計算で出す

コード: python
# 5日分の標本から、平均の区間を出します。
values = [10, 12, 14, 16, 18]
n = len(values)
mean = sum(values) / n
total = 0
for v in values:
    total = total + (v - mean) ** 2
sd = (total / (n - 1)) ** 0.5
error = sd / n ** 0.5
print("平均:", mean)
print("標準誤差:", round(error, 2))
print("区間:", round(mean - 1.96 * error, 1), "から", round(mean + 1.96 * error, 1))
# 18 を 28 に変えて、区間の幅を比べてください。

さらに挑戦: 10日ごとの標本

ノートブックで、hires["hires"][::10] を使い、10日ごとの標本から区間を作ってください。

12日ごとの区間と比べて、幅はどう変わりましたか。365日の本当の平均は、区間に入っていますか。

このラボとソースについて: JupyterLab データサイエンスラボ:pandas、Matplotlib、scikit-learn をブラウザーで

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。