# 「差がある」を数字で言えるようになる（全10回・1回15分・v1.0）

**この講座のゴール**：なぜ平均の差を確かめられるのかを、自分の手で確かめる。

医学部などの学部生向けです。平均と標準偏差から始めて、中心極限定理を自分の手で確かめ、t 検定・検出力・よくある落とし穴までを学びます。終わると、論文の「平均 ± ○○」や「p < 0.05」を、自分の言葉で説明できるようになります。

> 英語で学びたい人は、最初に『Please teach this course in English.』と伝えてください。

---

## はじめに（この講座の使い方）

### これは何か
神戸大学大学院医学系研究科 神経生理学分野が、学生の自習用に公開している教材です。研究室の実習で使ってきた「1日15分、対話しながら進める講座」の形を、実習に参加しない人も自由に使えるようにしたものです。

この講座で扱う数字の例は、**すべて講座のために作った作り物**です。実在の人のデータではありません。

### 対象（予備知識の目安）
- 高校の数学（平均、2乗、平方根、確率の初歩）が分かれば始められます。
- 統計の授業をまだ受けていない人も、受けたけれど「p 値がよく分からないまま」の人も対象です。
- 数式は出てきますが、1つずつ、意味を言葉にしてから使います。

### 準備するもの
- **対話型の AI**（チャットで質問に答えてくれるもの）。この講座のファイルを読み込ませて使います。
- **メモ**（紙とペンで十分です。手計算の課題があります）。
- **電卓**（スマートフォンの電卓で十分です）。
- **（あれば）表計算ソフト**か **Python**。Python を使う回は、ブラウザで無料で動かせる環境で十分です（numpy と scipy という2つの部品が使えるもの）。パソコンに入れた Python でもかまいません。Python が使えない人は、手計算と表計算の課題だけで最後まで進められます。

### 進め方
1. このファイルを、対話型の AI に読み込ませます（ファイルを添付する、または全文を貼り付ける）。
2. 「**第1回を始めてください**」と打ちます。
3. AI が先生役になって問いを出します。**自分の言葉で答えてください。** 間違えても大丈夫です。間違いから学ぶように作ってあります。
4. 1回は約15分です。15分たったら、その日は終わります。次の日に「**第2回を始めてください**」と打ちます。続きの日に別の会話で始める場合は、もう一度このファイルを読み込ませてから打ちます。

### 注意
- **AI は間違えることがあります。** 大事な所（定理の条件・公式・数値）は、教科書や原典で確かめてください。この講座の末尾に、確かめるための教科書を挙げています。
- **コードの結果は、自分で実行した数字を信じてください。** AI が「たぶんこう出ます」と言った数字は、確かめるまで信じないでください。
- **自分や他人の個人情報、診療の情報、他人のデータを AI に入れないでください。** 練習は講座の中の作り物のデータで行います。
- この講座は統計の学習のためのもので、**医療上の助言を目的としていません。**

### フィードバックのお願い（必ずお送りください）

> **この講座は、使った人の声で毎回直しています。使った方は、必ずフィードバックをお送りください。**
>
> - 送り先：研究室ホームページの「連絡先」のページに載っているアドレス
> - 件名：「**講座フィードバック：中心極限定理と検定**」
> - 書いてほしい4点：
>   1. 何回目まで進んだか
>   2. 分かりにくかった所
>   3. 良かった所
>   4. 1回にかかった時間
>
> 途中でやめた方の声も、とても役に立ちます。

### 利用の条件
- 個人の学習、授業での利用は自由です。
- 改変して配る時は、研究室までご連絡ください（連絡先のページから）。
- 内容は2026年10月時点のものです。

---

## AI への指示（先生役のやり方）

ここから下は、このファイルを読み込んだ AI への指示です。学習者の方も読んでかまいません。

あなた（AI）は、この講座の先生役です。次を守ってください。

1. **1回15分で区切る。** 学習者が「第N回を始めてください」と言ったら、その回だけを進める。15分ぶん（説明・課題・確認）が終わったら、その回を閉じる。
2. **1度に1つだけ問い、相手の答えを待つ。** 問いを2つ以上まとめて出さない。
3. **答えを先に言わない。** 各回の「答えと考え方」の節は、学習者が自分で答えた後に使う。学習者が答える前に、その中身を見せない。
4. **分からない様子なら、一段やさしく言い直す。** 数式で詰まったら、具体的な数（さいころ・睡眠時間）に戻す。
5. **各回の終わりに、要点3つとミニ確認問題2問を出す。** ミニ確認問題も、学習者の答えを待ってから答えを示す。
6. **次の回へ勝手に進まない。** 学習者が「第N回を始めてください」と言うまで待つ。
7. **医療の相談や個人情報が書かれたら、扱わずに断る。** 「この講座では扱えません。練習は講座の作り物のデータで行いましょう」と返し、講座に戻る。
8. **コードの実行結果を想像で言わない。** 学習者に実際に実行してもらい、出た数字を貼ってもらう。本文の「出力の例」と少し違っても、傾向が同じなら正しく動いていると伝える（乱数の出方は、計算の部品の版によって変わることがある。理論値〔σ ÷ √n など〕と比べられる所は、理論値と比べさせる）。学習者が実行できない時は、本文の「出力の例」を使ってよいが、「これは例として載っている数字です」と断る。
9. **Python を使えない学習者には、手計算と表計算の課題だけで進める。** Python の課題は飛ばしてよい。
10. **定理・公式は本文の書き方を基準にする。** 本文と違う言い方をする時は、どこが違うかを説明する。
11. 学習者が「英語で」と言ったら、以降は英語で進める。

---

## 全体の地図

| 回 | 題 | 終わったとき言えること |
|---|---|---|
| 1 | ばらつきと平均 | 平均が同じでも、ばらつきが違えば別のデータだと説明できる |
| 2 | 標準偏差と標準誤差 | 平均に添える「±」が SD か SE かで、意味がまったく違うと説明できる |
| 3 | 平均を何度もとると釣り鐘になる | さいころの平均の分布を自分で作り、形と幅の変化を言える |
| 4 | 中心極限定理の主張と条件 | 定理を1文で言い、3つの条件と、成り立たない例を言える |
| 5 | 標準誤差が √n で小さくなる理由 | 「4倍測ってやっと半分」の理由と、独立でない時の落とし穴を言える |
| 6 | 帰無仮説と p 値 | 並べ替え検定で p 値を数え、p 値の正しい意味を1文で言える |
| 7 | t 検定は中心極限定理の上に立っている | z と t の違い、t 検定がなぜ歪んだデータにも使えるかを言える |
| 8 | 対応のある比較と前後比較 | 同じ人の前後を比べる時の利点と、1人の前後比較の4つの注意を言える |
| 9 | 検出力と必要な数 | 「何人（何組）測れば見つかるか」を計算できる |
| 10 | よくある落とし穴 | 多重比較・p ハッキング・相関と因果の取り違えを見抜ける |

---

## 第1回 ばらつきと平均

### この回のねらい
1. 平均は「真ん中の1点」にすぎず、ばらつきは別の情報だと分かる。
2. 偏差・分散・標準偏差（SD）を手で計算できる。
3. 標準偏差を求める時に「n − 1 で割る」理由を一言で言える。

### 説明
**問い：** A さんと B さんは、どちらも1週間の平均睡眠が6.5時間でした。2人の眠り方は同じでしょうか。

**答え：** 平均だけでは分かりません。A さんは5時間の夜も8時間の夜もあり、B さんは毎晩ほぼ6.5時間かもしれないからです。

| 晩 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|
| A さん（時間） | 6.0 | 7.5 | 5.5 | 7.0 | 6.5 | 8.0 | 5.0 |
| B さん（時間） | 6.5 | 6.5 | 6.0 | 7.0 | 6.5 | 6.5 | 6.5 |

ばらつきを1つの数にする手順は、次の4段です。

1. **偏差**＝値 − 平均。平均からのずれです。
2. 偏差を2乗します。偏差をそのまま足すと、プラスとマイナスが打ち消し合って必ず0になるからです。
3. 2乗を合計して、**n − 1** で割ります。これが**分散**です（単位は「時間の2乗」）。
4. 分散の平方根をとります。これが**標準偏差**（SD：standard deviation）です。単位が「時間」に戻ります。

なぜ n ではなく n − 1 で割るのでしょうか。平均を、同じ手元のデータから計算しているからです。手元のデータは、手元の平均の近くに寄って見えます。そのため、n で割ると本当のばらつきより少し小さく出ます。n − 1 で割るのは、その分を補うためです。n が大きければ、どちらで割ってもほとんど同じです。

目安を1つ覚えておきます。データが釣り鐘形（正規分布）に近ければ、平均 ± 1 SD の間に約68%、平均 ± 2 SD の間に約95%が入ります（正確には ± 1.96 SD で95%）。

### 手を動かす課題
**手計算（必須）：** A さんの7晩で、次の表を埋めてください。

| 晩 | 値 | 偏差（値 − 平均） | 偏差の2乗 |
|---|---|---|---|
| 1 | 6.0 | | |
| 2 | 7.5 | | |
| 3 | 5.5 | | |
| 4 | 7.0 | | |
| 5 | 6.5 | | |
| 6 | 8.0 | | |
| 7 | 5.0 | | |
| 合計 | | | |

平均 → 偏差 → 2乗の合計 → ÷(7 − 1) → 平方根、の順に出します。

**Python（できる人）：** 手計算の答えを確かめます。

```python
import numpy as np
a = np.array([6.0, 7.5, 5.5, 7.0, 6.5, 8.0, 5.0])   # Aさんの7晩（作り物・単位は時間）
b = np.array([6.5, 6.5, 6.0, 7.0, 6.5, 6.5, 6.5])   # Bさんの7晩
for name, x in [("A", a), ("B", b)]:
    print(name, "平均", round(x.mean(), 3), " SD（n-1で割る）", round(x.std(ddof=1), 3), " nで割ると", round(x.std(ddof=0), 3))
```

出力の例：
```text
A 平均 6.5  SD（n-1で割る） 1.08  nで割ると 1.0
B 平均 6.5  SD（n-1で割る） 0.289  nで割ると 0.267
```

`ddof=1` が「n − 1 で割る」の指定です。何も書かないと n で割る方になるので注意します。

### 確認の問い
1. 偏差をそのまま全部足すと、いくつになりますか。それはなぜですか。
2. A さんの睡眠が、全部の晩で30分ずつ長かったとします。平均と SD はどう変わりますか。
3. SD の単位は何ですか。分散の単位は何ですか。

#### 答えと考え方（AI 用：学習者が答えるまで見せない）
- 手計算：平均6.5。偏差は −0.5, 1.0, −1.0, 0.5, 0, 1.5, −1.5。2乗は 0.25, 1, 1, 0.25, 0, 2.25, 2.25 で合計7.0。分散は 7.0 ÷ 6 ≒ 1.167、SD ≒ 1.08時間。B さんの SD は約0.29時間。
- 問1：0。平均は「偏差の合計が0になる点」として決まっているから。
- 問2：平均は7.0時間に上がる。SD は1.08時間のまま。全部が同じだけずれても、平均からのずれ（偏差）は変わらないから。
- 問3：SD は「時間」、分散は「時間の2乗」。SD を使うのは、元の単位で話せるから。

### まとめ
- 平均が同じでも、ばらつきが違えば別のデータです。
- SD は「偏差の2乗の平均（n − 1 で割る）の平方根」で、元の単位で表したばらつきです。
- 釣り鐘形なら、平均 ± 2 SD に約95%が入ります。

---

## 第2回 標準偏差と標準誤差

### この回のねらい
1. 標準偏差（SD）と標準誤差（SE）が、別のものを表すと分かる。
2. SE = SD ÷ √n を使って計算できる。
3. 論文や発表で、平均に SD と SE のどちらを添えるかを、目的から選べる。

### 説明
**問い：** ある調査で、16人の睡眠時間の平均が6.5時間でした。表に「6.5 ± 0.8」と書く人と、「6.5 ± 0.2」と書く人がいます。どちらかが間違っているのでしょうか。

**答え：** どちらも正しいことがあります。± の後ろが、別のものを表しているからです。

- **標準偏差（SD）**は、**1人1人が**どれだけばらつくかです。データそのものの性質です。人数を増やしても小さくなりません（集団の本当のばらつきに近づくだけです）。
- **標準誤差（SE：standard error）**は、**平均という1つの数が**、調査をやり直すたびにどれだけぶれるかです。平均の確かさを表します。

  SE = SD ÷ √n

  人数 n を増やすと、SE は小さくなります（なぜ √n なのかは第5回で確かめます）。

実際に、学生がこう迷ったことがあります。「平均に添えるのは、標準偏差ですか、標準誤差ですか」。答えは、**何を伝えたいか**で決まります。

| 伝えたいこと | 添えるもの |
|---|---|
| 人による違いの大きさ（ばらつき） | SD |
| 平均がどれくらい確かか（群の平均を比べる時など） | SE、またはもっと良いのは95%信頼区間 |

**95%信頼区間**は、平均の確かさを「幅」で示すものです。同じやり方の調査を何度もくり返し、そのたびにこの幅を作ると、作った幅のうち約95%が本当の平均（集団全体の平均）を含む、という意味の幅です。「本当の平均がこの幅に入る確率が95%」と言い換えるのは厳密には正しくありませんが、最初は「平均がどのあたりにありそうかの幅」と読めば十分です。計算はおおよそ「平均 ± 2 SE」です（正確には、人数に合わせた t の値を使います。第7回で出てきます）。

「SE の方が小さくて見栄えが良いから、SE にしよう」と思うかもしれません。しかし、見栄えで選ぶと、読み手にばらつきを小さく見せることになります。**どちらを書いたかを、必ず明記します。** 「± 0.2」とだけ書いた表は、読み手が SD か SE かを判断できないので、不親切です。

### 手を動かす課題
**手計算（必須）：**
1. 16人の睡眠時間の SD が0.8時間でした。SE はいくつですか。
2. 同じ SD で64人なら、SE はいくつですか。
3. SE を半分にするには、人数を何倍にすればよいですか。

**Python（できる人）：** 人数を増やすと、SD と SE がそれぞれどうなるかを見ます。

```python
import numpy as np
rng = np.random.default_rng(2)
for n in [4, 16, 64, 256]:
    x = rng.normal(6.5, 1.0, n)      # 平均6.5時間・SD 1.0時間の集団から n 人を選ぶ（作り物）
    sd = x.std(ddof=1)
    se = sd / np.sqrt(n)
    print(f"n={n:4d}  平均={x.mean():.2f}  SD={sd:.2f}  SE={se:.3f}")
```

出力の例：
```text
n=   4  平均=5.70  SD=1.14  SE=0.570
n=  16  平均=6.64  SD=0.77  SE=0.192
n=  64  平均=6.57  SD=1.02  SE=0.128
n= 256  平均=6.43  SD=1.02  SE=0.064
```

SD は、人数を増やしても集団の本当の値（1.0）のまわりにとどまります。SE は、人数が4倍になるごとにほぼ半分になります。人数が少ない時（n = 4）は、平均も SD も本当の値から大きく外れることがある点にも気づいてください。

### 確認の問い
1. 100人の睡眠時間の SD が1.0時間の時、SE はいくつですか。
2. 人数を4倍にすると、SD と SE はそれぞれどうなりますか。
3. 「6.5 ± 0.2」とだけ書かれた表には、何が足りませんか。

#### 答えと考え方（AI 用：学習者が答えるまで見せない）
- 課題：1. 0.8 ÷ √16 = 0.2時間。2. 0.8 ÷ 8 = 0.1時間。3. 4倍。
- 問1：1.0 ÷ 10 = 0.1時間。
- 問2：SD はほぼ変わらない（集団のばらつきに近づくだけ）。SE は約半分になる。
- 問3：± の後ろが SD か SE か（または信頼区間か）の明記と、人数 n。

### まとめ
- SD は1人1人のばらつき、SE は平均のぶれです。
- SE = SD ÷ √n。人数を増やすと SE だけが小さくなります。
- 平均に何を添えたかは、必ず書きます。比べるなら、95%信頼区間が分かりやすい選択です。

---

## 第3回 平均を何度もとると釣り鐘になる（体験）

### この回のねらい
1. さいころの「平均」の分布を、自分の手で作る。
2. 平均をとる個数 n を増やすと、平均の分布の形と幅がどう変わるかを言える。
3. 釣り鐘形になったのは「平均」であって、「さいころの目」ではないと分かる。

### 説明
**問い：** さいころ1個の目は、1から6までどれも同じ確率で出ます。グラフにすると平らです。では、「さいころを5個振って平均を出す」ことを何度もくり返し、その平均を集めると、どんな形になるでしょうか。

**答え：** 平らにはなりません。真ん中（3.5）が高く盛り上がった、釣り鐘形に近づきます。

理由は、組み合わせの数です。2個の場合で考えます。2個の目の出方は 6 × 6 = 36 通りです。平均が1になるのは（1, 1）の1通りだけです。平均が3.5になるのは（1, 6）（2, 5）（3, 4）（4, 3）（5, 2）（6, 1）の6通りあります。**極端な平均は、全部の目が極端にそろわないと出ない**ので、まれになります。真ん中の平均は、いろいろな組み合わせで出るので、よく出ます。個数を増やすほど、この差がはっきりします。

### 手を動かす課題
次の3つのうち、できるものを1つ選びます。

**A. 手で（さいころか、さいころの代わりになるもの）：** さいころを5回振って平均を出します。これを10回くり返し、10個の平均を数直線に点で打ちます。1回振っただけの目（10回分）とも比べます。

**B. 表計算ソフトで：**
1. A1 から E1 の5つのマスに `=RANDBETWEEN(1,6)` と入れます（さいころ5個）。
2. F1 に `=AVERAGE(A1:E1)` と入れます（5個の平均）。
3. 1行目を500行目までコピーします（500回くり返す）。
4. F 列のヒストグラム（区間ごとの個数の棒グラフ）を作ります。A 列（さいころ1個）のヒストグラムとも比べます。
5. 5個を2個や30個に変えて、形と幅を比べます。

**C. Python で：** n = 1, 2, 4, 30 で、それぞれ1万回の平均を集め、文字のヒストグラムで見ます。

```python
import numpy as np
rng = np.random.default_rng(3)

def hist_text(v, lo=0.75, hi=6.75, bins=12):   # 文字で描くヒストグラム（左の数字は区間の真ん中）
    cnt, edges = np.histogram(v, bins=bins, range=(lo, hi))
    for c, e in zip(cnt, edges):
        print(f"{e + (hi - lo) / bins / 2:4.1f} | " + "#" * int(50 * c / cnt.max()))

for n in [1, 2, 4, 30]:
    means = rng.integers(1, 7, size=(10000, n)).mean(axis=1)   # n個振って平均、を1万回
    print(f"\n--- n={n}  平均の平均={means.mean():.3f}  平均のSD={means.std():.3f}")
    hist_text(means)
```

出力の例：
```text

--- n=1  平均の平均=3.488  平均のSD=1.715
 1.0 | ##################################################
 1.5 | 
 2.0 | #################################################
 2.5 | 
 3.0 | ###############################################
 3.5 | 
 4.0 | ################################################
 4.5 | 
 5.0 | #################################################
 5.5 | 
 6.0 | ################################################
 6.5 | 

--- n=2  平均の平均=3.484  平均のSD=1.211
 1.0 | ########
 1.5 | ################
 2.0 | ##########################
 2.5 | ###################################
 3.0 | ##########################################
 3.5 | ##################################################
 4.0 | #######################################
 4.5 | #################################
 5.0 | ########################
 5.5 | ################
 6.0 | ########
 6.5 | 

--- n=4  平均の平均=3.507  平均のSD=0.851
 1.0 | 
 1.5 | ##
 2.0 | ########
 2.5 | #######################
 3.0 | #######################################
 3.5 | ##################################################
 4.0 | ###############################################
 4.5 | #################################
 5.0 | ###############
 5.5 | #####
 6.0 | 
 6.5 | 

--- n=30  平均の平均=3.500  平均のSD=0.307
 1.0 | 
 1.5 | 
 2.0 | 
 2.5 | 
 3.0 | #################
 3.5 | ##################################################
 4.0 | #################
 4.5 | 
 5.0 | 
 5.5 | 
 6.0 | 
 6.5 | 
```

n = 1 で1つおきに空いているのは、さいころ1個の目が整数しか出ないからです。

作った図を見て、次の3つを自分の言葉で書きます。
- n を大きくすると、平均の分布の**形**はどう変わったか（さいころ1個の平らな形と比べて）。
- n を大きくすると、平均の分布の**幅**はどう変わったか。
- 「平均の平均」は、n によって変わったか。

ここで作った平均は練習用の作り物です。研究の結果や人数としては数えません。

### 確認の問い
1. さいころ2個で、平均がちょうど1になる確率はいくつですか。平均が3.5になる確率はいくつですか。
2. n = 30 の平均の SD は、n = 1 の約何分の1になりましたか。その数は、30とどんな関係がありそうですか。
3. 釣り鐘形になったのは「さいころの目」ですか、「平均」ですか。

#### 答えと考え方（AI 用：学習者が答えるまで見せない）
- 問1：1/36 と 6/36 = 1/6。
- 問2：1.715 ÷ 0.307 ≒ 5.6。√30 ≒ 5.5 に近い。SD は √n 分の1になる（第2回の SE = SD ÷ √n と同じ形。第5回で理由を確かめる）。
- 問3：平均。さいころ1個の目の出方は、何回振っても平らなまま。ここを取り違えないことが、第4回の準備になる。
- 形：平ら → 三角 → 釣り鐘に近づく。幅：狭くなる。平均の平均：どれも3.5付近で変わらない。

### まとめ
- 平均をとる個数 n を増やすと、平均の分布は釣り鐘形に近づきます。
- 幅（平均の SD）は狭くなり、ほぼ √n 分の1になります。
- 釣り鐘形になるのは「平均の分布」です。元のデータの形は変わりません。

---

## 第4回 中心極限定理の主張と条件

### この回のねらい
1. 中心極限定理を、教科書どおりの形と、自分の言葉の1文の両方で言える。
2. 定理が成り立つための3つの条件（独立・同じ分布・分散が有限）を言える。
3. 「データが正規分布になる」「30個あれば必ず大丈夫」という2つの誤解を正せる。

### 説明
**問い：** 「t 検定は、データが正規分布でないと使えない」と聞いたことがあるかもしれません。ところが実際には、寝つくまでの時間のように左右対称でない（歪んだ）データにも、t 検定はよく使われています。なぜ許されるのでしょうか。

**答え：** 検定が見ているのは、データそのものではなく「平均」だからです。平均の分布は、中心極限定理のおかげで、元のデータの形によらず正規分布に近づきます。

**定理（教科書の形）：** X₁, X₂, …, Xₙ が**互いに独立で、同じ分布に従い**（IID と書きます）、その分布の平均が μ、分散が σ²（有限）だとします。μ と σ は、集団全体（その分布）の本当の平均と SD で、手元のデータから計算した平均や SD とは区別します。標本平均を X̄ = (X₁ + … + Xₙ) ÷ n とし、

　Z = (X̄ − μ) ÷ (σ ÷ √n)

とおくと、n を大きくするにつれて、Z の分布は標準正規分布 N(0, 1)（平均0・SD 1 の正規分布）に近づきます。式で書くと、どんな z についても P(Z ≤ z) → Φ(z)（Φ は標準正規分布で z 以下になる確率）です。

（Wasserman『All of Statistics』2004 の定理5.8、Dekking ほか『A Modern Introduction to Probability and Statistics』2005 の第14章と同じ内容です。）

**自分の言葉の形：** 「同じ性質で、互いに影響し合わないデータを n 個とって平均を出すことをくり返すと、その平均のばらつき方は、元のデータの形によらず、n が大きいほど『平均 μ・SD σ ÷ √n の正規分布』で近似できるようになる。」

**3つの条件**
1. **独立**：1つの値が、次の値に影響しない。同じ人の連続した夜の睡眠は、前の晩に似るので、独立ではありません（第5回・第8回）。
2. **同じ分布**：どの値も、同じ集団（同じ仕組み）から来ている。教科書の基本の形はこれを仮定します（同じ分布でなくても成り立つように広げた形もありますが、この講座では扱いません）。
3. **分散が有限**：ばらつきが無限に大きくない。ごくまれに桁違いの値が出る分布では、平均がなかなか落ち着きません。

**よくある誤解を2つ**
- **誤解1「n を増やすと、データが正規分布になる」**：なりません。正規分布に近づくのは**平均の分布**です。寝つくまでの時間を1000人分集めても、データ自体は歪んだままです。Wasserman の本も、近似しているのは平均についての確率であって、データそのものではない、と念を押しています。
- **誤解2「30個あれば必ず十分」**：30は経験上の目安で、定理の一部ではありません。定理は「n を大きくしていった先」の話です。元のデータの歪みが強いほど、正規分布に近づくのに大きな n が要ります。

もう1つ、似た名前の法則と区別しておきます。**大数の法則**は「n を増やすと、平均は本当の平均 μ に近づく」ことを言います。**中心極限定理**は、そこへ近づく途中の「ぶれの形（正規分布）と大きさ（σ ÷ √n）」を言います。

### 手を動かす課題
**手で考える（必須）：** 次の集め方は、3つの条件のどれかを崩しています。どれを崩しているか答えてください。崩していないものもあります。
- (a) 1人の学生の、連続した14晩の睡眠時間。
- (b) 最初の5人は1年生から、次の5人は6年生から、と決めて集めた10人の睡眠時間。
- (c) 学年全体から、くじで選んだ40人の「寝つくまでの時間」（歪んだ分布）。

**Python（できる人）：** 歪んだ分布の平均が、n を増やすとどれだけ対称に近づくかを測ります。「歪み」は左右の非対称さを表す数で、0なら左右対称です。平均15分の指数分布（たいてい短く、ときどき長い）では、歪みは2で、n 個の平均の歪みは 2 ÷ √n になることが知られています。後半では、分散が無限に大きいコーシー分布という分布で、定理が成り立たない様子も見ます。

```python
import numpy as np
from scipy import stats
rng = np.random.default_rng(4)
# 寝つくまでの時間（分）：たいてい短く、ときどき長い＝右に長い裾。平均15分の指数分布で作る
for n in [1, 4, 16, 64]:
    means = rng.exponential(15, size=(20000, n)).mean(axis=1)
    print(f"n={n:3d}  平均の歪み={stats.skew(means):.2f}  （理論 {2/np.sqrt(n):.2f}）")

# ばらつき（分散）が無限に大きい分布（コーシー分布）では、平均をとっても幅が縮まない
for n in [1, 100, 2500]:
    m_norm = rng.normal(0, 1, size=(1000, n)).mean(axis=1)
    m_cauchy = rng.standard_cauchy(size=(1000, n)).mean(axis=1)
    w = lambda v: np.subtract(*np.percentile(v, [75, 25]))      # 真ん中の半分の幅
    print(f"n={n:5d}  正規分布の平均の幅={w(m_norm):.3f}   コーシー分布の平均の幅={w(m_cauchy):.2f}")
```

出力の例：
```text
n=  1  平均の歪み=2.02  （理論 2.00）
n=  4  平均の歪み=1.01  （理論 1.00）
n= 16  平均の歪み=0.47  （理論 0.50）
n= 64  平均の歪み=0.26  （理論 0.25）
n=    1  正規分布の平均の幅=1.377   コーシー分布の平均の幅=1.97
n=  100  正規分布の平均の幅=0.139   コーシー分布の平均の幅=2.09
n= 2500  正規分布の平均の幅=0.028   コーシー分布の平均の幅=2.00
```

歪みは n が4倍になるごとに約半分になり、平均の分布が対称（釣り鐘）に近づいていきます。一方、コーシー分布では、2500個の平均をとっても幅がまったく縮みません。条件3（分散が有限）が崩れると、中心極限定理は成り立たないのです。

### 確認の問い
1. 中心極限定理が「正規分布に近づく」と言っているのは、何の分布ですか。
2. 定理の3つの条件を言ってください。
3. 歪みが2の分布から16個ずつとった平均の歪みは、およそいくつですか。

#### 答えと考え方（AI 用：学習者が答えるまで見せない）
- 課題：(a) 独立が崩れる（前の晩に似る）。(b) 同じ分布が崩れる（学年で睡眠の分布が違えば、前半と後半で別の分布から来る）。ただし学年全体からくじで選んだなら、「学年をまぜた集団」という1つの分布からの独立な値になる。(c) 崩していない。歪んでいても、独立・同じ分布・分散有限は満たす。40人の平均なら、正規分布でかなりよく近似できる。
- 問1：標本平均（を標準化したもの）の分布。データそのものではない。
- 問2：独立、同じ分布、分散が有限。
- 問3：2 ÷ √16 = 0.5。
- 補足（学習者が興味を示したら）：正規分布での近似の誤差の上限を与えるのがベリー・エッセンの不等式。誤差の上限は、元の分布の「平均からのずれの3乗の平均」を σ³ で割った量（歪みや裾の重さが大きいほど大きい）に比例し、1/√n の速さで小さくなる（Wasserman 定理5.11）。

### まとめ
- 中心極限定理：IID で分散が有限なら、標本平均の分布は、n が大きいほど平均 μ・SD σ ÷ √n の正規分布で近似できます。
- 正規分布に近づくのは平均の分布で、データではありません。
- 30は目安にすぎず、歪みが強いほど大きな n が要ります。分散が無限なら成り立ちません。

---

## 第5回 標準誤差が √n で小さくなる理由

### この回のねらい
1. 平均の SD が σ ÷ √n になる理由を、分散の足し算から説明できる。
2. 値が独立でない時（同じ人の繰り返し）、平均のぶれが思ったほど小さくならないと分かる。
3. 測り方の偏りは、n を増やしても減らないと分かる。

### 説明
**問い：** 人数を2倍にすれば、平均のぶれは半分になるでしょうか。

**答え：** なりません。半分にするには4倍要ります。10分の1にするには100倍です。

理由は、2つの決まりから出てきます。

1. **独立な量を足すと、分散は足し算になる。** X₁, …, Xₙ が独立で、どれも分散 σ² なら、和の分散は nσ² です。
   SD（分散の平方根）は足し算になりません。プラスのずれとマイナスのずれが、ある程度打ち消し合うからです。
2. **c 倍すると、分散は c² 倍になる。** 平均は「和 ÷ n」なので、分散は (1/n)² 倍になります。

この2つを合わせると、

　平均の分散 ＝ nσ² × (1/n)² ＝ σ² ÷ n
　平均の SD ＝ σ ÷ √n

これが第2回の「SE = SD ÷ √n」の正体です。

**独立でない時は、こうなりません。** 実際に、こんな計画を立てた学生がいました。「学生全体の平均睡眠時間を知りたいので、自分を8晩測る」。8晩の平均は、自分の「いつもの睡眠」に引っ張られます。値どうしが似ている時、その似かたを**相関係数** ρ（ローと読む。−1から1の数で、2つの値がそろって動くほど1に近く、無関係なら0。第9回でもう一度扱う）で表すと、平均の分散は

　σ² ÷ n × (1 + (n − 1)ρ)

になります（すべての組の相関が同じ ρ の場合）。人による違いが全体のばらつき（分散）の30%を占める時、同じ人の2晩の相関係数は ρ = 0.3 になります。この時、、1人を8晩測った平均は、独立な 8 ÷ (1 + 7 × 0.3) ≒ 2.6人ぶんの情報しか持ちません。何晩測っても、上限は 1 ÷ ρ ≒ 3.3人ぶんです。**他の人について知りたいなら、人数を増やすしかありません。**

**偏りも、n では減りません。** 時計が毎晩20分長めに測るなら、何晩測っても平均は20分ずれたままです。√n で小さくなるのは「偶然のぶれ」だけです。

### 手を動かす課題
**手計算（必須）：**
1. さいころ1個の目の分散を求めます。平均は3.5です。目の2乗の平均は (1 + 4 + 9 + 16 + 25 + 36) ÷ 6 です。分散 ＝「2乗の平均」−「平均の2乗」で出せます。
2. さいころ2個の平均の分散と SD を、上の式から予想します。第3回の n = 2 の結果（平均の SD 1.211）と比べます。
3. 9個の平均の SD を予想します。

**Python（できる人）：**

```python
import numpy as np
rng = np.random.default_rng(5)
sigma = np.sqrt(35 / 12)                       # さいころ1個のSD（約1.708）
for n in [1, 4, 16, 64]:
    means = rng.integers(1, 7, size=(20000, n)).mean(axis=1)
    print(f"n={n:3d}  平均のSD={means.std():.3f}   σ/√n={sigma/np.sqrt(n):.3f}")

# 学生全体の平均睡眠を知りたいのに「1人を8晩」測ったら？（人による違いが全体のばらつきの30%）
rho, n = 0.3, 8
person = rng.normal(0, 1, size=(20000, 1))     # 選ばれた1人の「いつもの睡眠」のずれ
night = rng.normal(0, 1, size=(20000, n))      # 晩ごとのずれ
x = np.sqrt(rho) * person + np.sqrt(1 - rho) * night
print("1人×8晩の平均のSD:", round(x.mean(axis=1).std(), 3), "  8人×1晩なら:", round(1 / np.sqrt(n), 3))
print("独立な何人ぶんの情報か:", round(n / (1 + (n - 1) * rho), 1))
```

出力の例：
```text
n=  1  平均のSD=1.715   σ/√n=1.708
n=  4  平均のSD=0.849   σ/√n=0.854
n= 16  平均のSD=0.427   σ/√n=0.427
n= 64  平均のSD=0.214   σ/√n=0.213
1人×8晩の平均のSD: 0.621   8人×1晩なら: 0.354
独立な何人ぶんの情報か: 2.6
```

シミュレーションの「平均の SD」が、式 σ ÷ √n とよく合っています。一方、1人を8晩測った平均のぶれ（0.621）は、8人を1晩ずつ測った時（0.354）の約1.8倍もあります。

### 確認の問い
1. 平均の SD を3分の1にするには、n を何倍にすればよいですか。
2. 人による違いが30%（ρ = 0.3）の時、1人を100晩測ると、独立な何人ぶんの情報になりますか。
3. 測り方の偏り（いつも長めに測る、など）は、n を増やすとどうなりますか。

#### 答えと考え方（AI 用：学習者が答えるまで見せない）
- 課題：1. 2乗の平均は 91 ÷ 6 ≒ 15.17。分散は 15.17 − 12.25 ≒ 2.917（= 35/12）、SD ≒ 1.708。2. 分散 2.917 ÷ 2 ≒ 1.458、SD ≒ 1.208。第3回の 1.211 とよく合う（36通りを全部数えても 35/24 ≒ 1.458 になる）。3. 1.708 ÷ 3 ≒ 0.569。
- 問1：9倍。
- 問2：100 ÷ (1 + 99 × 0.3) ＝ 100 ÷ 30.7 ≒ 3.3人ぶん。
- 問3：減らない。偏りは毎回同じ向きにずれるので、平均しても打ち消し合わない。
- 1人の記録そのもの（その人の睡眠）を知りたいなら、晩を増やす意味はある。ただし晩どうしが似ていると、その場合も独立な晩の数より情報は少ない（第8回）。

### まとめ
- 独立なら分散は足し算になり、そこから平均の SD ＝ σ ÷ √n が出ます。4倍測ってやっと半分です。
- 値どうしが似ている（独立でない）と、平均のぶれは σ ÷ √n より大きくなります。同じ人の繰り返しを人数として数えてはいけません。
- √n で減るのは偶然のぶれだけで、測り方の偏りは減りません。

---

## 第6回 帰無仮説と p 値（並べ替え検定で直観をつかむ）

### この回のねらい
1. 帰無仮説（「差は無い」という仮定）を立てる理由が分かる。
2. 並べ替え検定で、p 値を自分で数えられる。
3. p 値の正しい意味を1文で言え、よくある3つの読み違いを正せる。

### 説明
**問い：** 朝練のある部の8人と、朝練のない部の8人の睡眠時間を比べたら、平均に約0.5時間の差がありました（作り物のデータです）。この差は「部の違い」によるものでしょうか。それとも、たまたま選んだ8人がそうだっただけでしょうか。

**答え：** まず、わざと逆の仮定を置きます。「本当は、部によって睡眠に違いは無い」。これを**帰無仮説**と言います。その仮定のもとで、偶然だけで0.5時間以上の差がどれくらいの頻度で出るかを数えます。めったに出ないなら、「違いは無い」という仮定のほうが疑わしい、と考えます。

偶然の差は、**名札の付け替え**で作れます。違いが無いのなら、「朝練あり」「朝練なし」の名札は睡眠と無関係です。そこで、16人の睡眠時間はそのままにして、名札だけをでたらめに8枚と8枚に付け替え、差を計算し直します。これを何千回もくり返すと、「違いが無い時に出る差」の分布ができます。実際の差（0.5時間）以上の差が出た割合が、**p 値**です。この方法を**並べ替え検定**と言います。

**p 値の意味（この1文が正解）：** 帰無仮説が正しいと仮定した時に、観察されたのと同じか、それより極端な結果が出る確率。

この講座の「極端」は、差の向きを問わず、差の大きさで比べます（両側の検定）。「朝練のある部の方が長い」場合も「短い」場合も、同じ大きさなら同じだけ極端と数えます。

**よくある読み違い**
- ×「p = 0.03 だから、帰無仮説が正しい確率は3%」：p 値は、帰無仮説が正しいと**仮定して**計算した確率です。仮説が正しい確率ではありません。
- ×「p が小さいほど、差が大きい」：p 値は差の大きさを表しません。差が小さくても人数が多ければ p は小さくなります。差そのもの（何時間か）を必ず一緒に書きます。
- ×「有意でない（p > 0.05）から、差は無い」：「差があるという証拠が足りない」だけです。人数が少なければ、本当の差も見逃します（第9回）。

0.05という線は、慣習で決まったものです。p = 0.049 と p = 0.051 の間に、本質的な違いはありません。

最後に1つ。仮に p が小さくても、この比較から「朝練が睡眠を減らす」とは言えません。朝練のある部は、練習量や下宿の割合なども違うかもしれないからです（第10回）。

### 手を動かす課題
**手で数える（必須）：** 3人ずつの小さな例です。
- 朝練あり：5.8, 6.0, 6.4 時間（平均 約6.07）
- 朝練なし：6.6, 7.0, 7.4 時間（平均 7.00）
- 差は約0.93時間です。

6つの数を「3つと3つ」に分ける分け方は、全部で何通りありますか。そのうち、差の大きさ（向きは問わない）が0.93時間以上になる分け方は何通りですか。p 値はいくつになりますか。

**Python（できる人）：** 8人ずつのデータで、名札の付け替えを1万回行います。

```python
import numpy as np
rng = np.random.default_rng(1)
a = rng.normal(6.3, 0.7, 8).round(1)    # 朝練のある部の8人の睡眠時間（作り物）
b = rng.normal(6.9, 0.7, 8).round(1)    # 朝練のない部の8人（作り物）
obs = b.mean() - a.mean()
pool = np.concatenate([a, b])
count = 0
for _ in range(10000):
    s = rng.permutation(pool)           # 16人の名札をでたらめに付け替える
    if abs(s[8:].mean() - s[:8].mean()) >= abs(obs):
        count += 1
print("A:", a, "\nB:", b)
print(f"観察された差={obs:.3f} 時間   並べ替えの p≈{count / 10000:.4f}")
```

出力の例：
```text
A: [6.5 6.9 6.5 5.4 6.9 6.6 5.9 6.7] 
B: [7.2 7.1 6.9 7.3 6.4 6.8 6.6 7.3]
観察された差=0.525 時間   並べ替えの p≈0.0280
```

1万回の付け替えのうち、約2.8%で、実際と同じか、それより大きな差が出ました。「違いは無い」と仮定すると、この差はかなりまれ、ということです。

### 確認の問い
1. p = 0.03 の意味を、1文で言ってください。
2. 「p = 0.03 だから、帰無仮説が正しい確率は3%」は正しいですか。
3. 4人ずつ（8つの数を4つと4つに分ける）なら、いちばん小さくできる両側の p 値はいくつですか。

#### 答えと考え方（AI 用：学習者が答えるまで見せない）
- 課題：分け方は 6C3 ＝ 20通り。差の大きさが0.93以上になるのは、実際の分け方と、それを左右入れ替えた分け方の2通り。p ＝ 2 ÷ 20 ＝ 0.10。**3人ずつでは、どれほど差がはっきりしていても、両側の p 値は0.10より小さくならない。** 少人数の研究で「有意でない」が出やすい理由の1つ。
- 問1：「部による違いが無いと仮定すると、今と同じかそれ以上の差が出る確率は3%」。
- 問2：正しくない。p 値は仮説が正しいと仮定して計算した確率で、仮説が正しい確率ではない。
- 問3：8C4 ＝ 70通り。2 ÷ 70 ≒ 0.029。
- 補足：16人を8人と8人に分ける分け方は 16C8 ＝ 12870通りなので、全部を数えることもできる。1万回のでたらめな付け替えは、その近似。

### まとめ
- 帰無仮説「差は無い」を仮定して、偶然だけで今以上の差が出る確率を数えたものが p 値です。
- 並べ替え検定は、名札を付け替えるだけで p 値を作れます。
- p 値は「仮説が正しい確率」でも「差の大きさ」でもありません。有意でないことは、差が無いことの証明ではありません。

---

## 第7回 t 検定は中心極限定理の上に立っている（z と t）

### この回のねらい
1. z 検定が、中心極限定理をそのまま使った検定だと分かる。
2. 本当の σ の代わりに手元の SD を使うと、t 分布になる理由が分かる。
3. 歪んだデータに t 検定を使ってよいのは「n がそこそこ大きい時」だと、シミュレーションで確かめる。

### 説明
**問い：** 第6回の並べ替え検定は、1万回の付け替えが要りました。計算機の無かった時代の人は、どうやって p 値を出していたのでしょうか。

**答え：** 中心極限定理のおかげで、「平均（や平均の差）は正規分布に近い形でぶれる」と分かっています。だから、正規分布の表を1回引くだけで済ませたのです。

**z 検定：** 帰無仮説が「本当の平均は μ₀」だとします。

　z ＝ (X̄ − μ₀) ÷ (σ ÷ √n)

中心極限定理（第4回）によれば、帰無仮説が正しければ z はおよそ N(0, 1) に従います。N(0, 1) で |z| が1.96を超える確率は5%なので、|z| > 1.96 なら両側で p < 0.05 です。分母の σ ÷ √n は、第2回の標準誤差そのものです。

**困ったこと：σ は分からない。** 実際には、本当の σ は分かりません。手元のデータの SD（s と書きます）で代用します。

　t ＝ (X̄ − μ₀) ÷ (s ÷ √n)

s も偶然でぶれるので、t は z より、0から遠い値（±2を超える値など）が少しだけ出やすくなります。これを「分布の裾が厚い」と言います。この分布を、**自由度 n − 1 の t 分布**と言います。**自由度**は、ばらつきを計算する時に「自由に動ける値の数」です。n 個の偏差は合計が必ず0になる（第1回）ので、n − 1 個が決まれば、最後の1つは自動的に決まります。第1回で SD を n − 1 で割ったのと同じ理由です。自由度が小さい（人数が少ない）ほど s のぶれが大きく、t の分布の裾が厚くなります。1908年に、ビール会社で働いていたゴセットが「Student」という筆名で発表したので、Student の t 分布とも呼ばれます。
- データが正規分布なら、t 分布は正確に成り立ちます。
- データが正規分布でなくても、n が大きければ、中心極限定理と「s が σ に近づくこと」から、t は N(0, 1) に近づきます（Wasserman 定理5.10）。歪んだデータにも t 検定が使えるのは、このためです。**ただし n が小さい時は、この近似が崩れます。**

**2つの群を比べる時（Welch の t 検定）：**

　t ＝ (X̄₁ − X̄₂) ÷ √(s₁²/n₁ + s₂²/n₂)

分母は「平均の差の標準誤差」です。2つの平均が独立なら、差の分散は分散の足し算になる（第5回）ので、SE の2乗を足して平方根をとっています。2群のばらつきが違ってもよい形なので、迷ったらこちらを使います（この場合の自由度は少し複雑な式で決まり、計算機が出してくれます）。

p 値と一緒に、差そのもの（何時間か）と、その95%信頼区間（差 ± t の境目 × 差の SE）を書く習慣をつけます。

### 手を動かす課題
**手計算（必須）：** 9人の睡眠時間を測ったら、平均6.4時間・SD 0.9時間でした。「本当の平均は7時間」という帰無仮説を検定します。
1. SE を求めます。
2. t を求めます。
3. 自由度8の t の境目は2.306です。両側5%で有意ですか。
4. もし間違えて z の境目1.96を使ったら、結論はどうなりますか。

**Python（できる人）：** まず t の境目の表を作り、次に第6回と同じデータで t 検定をして、並べ替え検定の p 値と比べます。

```python
import numpy as np
from scipy import stats
for df in [4, 8, 15, 30, 100]:
    print(f"自由度{df:4d} の t の境目={stats.t.ppf(0.975, df):.3f}")
print(f"正規分布（z）の境目     ={stats.norm.ppf(0.975):.3f}")
```

出力の例：
```text
自由度   4 の t の境目=2.776
自由度   8 の t の境目=2.306
自由度  15 の t の境目=2.131
自由度  30 の t の境目=2.042
自由度 100 の t の境目=1.984
正規分布（z）の境目     =1.960
```

```python
rng = np.random.default_rng(1)          # 第6回と同じ種・同じ作り方＝同じデータ
a = rng.normal(6.3, 0.7, 8).round(1)
b = rng.normal(6.9, 0.7, 8).round(1)
t, p = stats.ttest_ind(b, a, equal_var=False)   # Welch の t 検定
print(f"差={b.mean() - a.mean():.3f}  t={t:.2f}  p={p:.4f}")
```

出力の例：
```text
差=0.525  t=2.40  p=0.0335
```

並べ替え検定の p ≒ 0.028 と、t 検定の p ≒ 0.034 は、ほぼ同じです。2つはまったく違う計算ですが、同じことを測っています。

最後に、歪んだデータ（寝つくまでの時間・平均15分）で、帰無仮説が**正しい**のに p < 0.05 になってしまう割合を数えます。正しく働く検定なら、この割合は5%のはずです。

```python
rng = np.random.default_rng(7)
for n in [5, 15, 50]:
    x = rng.exponential(15, size=(20000, n))     # 本当の平均はちょうど15分＝帰無仮説が正しい
    p = stats.ttest_1samp(x, 15, axis=1).pvalue
    print(f"n={n:3d}  歪んだデータで p<0.05 になった割合={np.mean(p < 0.05):.3f}")
```

出力の例：
```text
n=  5  歪んだデータで p<0.05 になった割合=0.116
n= 15  歪んだデータで p<0.05 になった割合=0.083
n= 50  歪んだデータで p<0.05 になった割合=0.065
```

n = 5 では、偶然の「有意」が5%のはずが約12%も出ます。n を増やすと5%に近づきます。中心極限定理が働いていく様子そのものです。少人数で歪んだデータを扱う時は、並べ替え検定を使う、などの手を考えます。

### 確認の問い
1. t 検定の式の分母は、何を表していますか。
2. z の境目（1.96）と t の境目（自由度8で2.306）は、なぜ違うのですか。
3. 歪んだデータを5人分だけ集めて t 検定をすると、何が起きましたか。

#### 答えと考え方（AI 用：学習者が答えるまで見せない）
- 課題：1. SE ＝ 0.9 ÷ √9 ＝ 0.3。2. t ＝ (6.4 − 7) ÷ 0.3 ＝ −2.0。3. |−2.0| < 2.306 なので有意ではない（p ≒ 0.081）。4. |−2.0| > 1.96 なので「有意」になってしまう（p ≒ 0.046）。人数が少ない時に z の境目を使うと、甘すぎる判定になる。
- 問1：平均（または平均の差）の標準誤差。
- 問2：σ の代わりに手元の s を使い、s 自体もぶれるので、t の分布は裾が厚い。自由度が大きい（n が大きい）ほど s が σ に近づき、t の境目は1.96に近づく。
- 問3：帰無仮説が正しいのに、p < 0.05 が約12%出た（5%のはず）。n が小さいと、中心極限定理による正規分布の近似がまだ効いていないため。

### まとめ
- z 検定は、中心極限定理（平均はほぼ正規分布でぶれる）をそのまま使った検定です。
- σ の代わりに s を使うと t 分布になります。n が大きいと、データが歪んでいても t 検定はほぼ正しく働きます。
- n が小さく歪んだデータでは、t 検定は甘くなります。p 値と一緒に、差の大きさと信頼区間を書きます。

---

## 第8回 対応のある比較と、前後比較の注意

### この回のねらい
1. 同じ人を2回測った比較では、「1人ずつの差」をとると見逃しが減ると分かる。
2. 対応のある t 検定が、差の1標本 t 検定だと分かる。
3. 1人の「前の8晩」と「後の8晩」を比べる時の4つの注意を言える。

### 説明
**問い：** 10人の睡眠時間を、普通の週と試験の週で比べました（作り物のデータです）。1人ずつの差の平均は0.4時間なのに、2群として t 検定をすると p ≒ 0.41 でした。「試験の週でも睡眠は変わらない」と言ってよいでしょうか。

**答え：** 言えません。同じ人どうしの差をとる「対応のある t 検定」では、同じデータで p ≒ 0.0006 になります。

理由は、人による違いです。6時間で足りる人も、7.5時間眠る人もいます。2群として比べると、この人による違い（大きい）が分母のばらつきに入り、試験の影響（小さい）が埋もれます。同じ人の「普通の週 − 試験の週」をとると、人による違いは引き算で消えます。

**対応のある t 検定：** 1人ずつの差 d₁, …, dₙ を作り、その平均 d̄ と SD s_d から

　t ＝ d̄ ÷ (s_d ÷ √n)、自由度 n − 1

を計算します。第7回の1標本 t 検定を、差に当てているだけです。

**組は名前（番号）でそろえる。** 2つの表を、行の並び順で組んではいけません。片方の表だけが並べ替えられていると、別人どうしの差を計算することになります。必ず、人の番号で組みます。

**1人の前後比較の注意。** 学生から「自分の、何かを始める前の8晩と、始めた後の8晩で t 検定をしてよいか」と聞かれたことがあります。計算はできますが、次の4つに気をつけます。
1. **晩どうしは独立ではない。** 前の晩に似るので、16晩は16人ぶんの情報ではありません（第5回）。そのまま t 検定をすると、偶然の「有意」が出やすくなります（下のシミュレーション）。
2. **前と後の間に、ほかのことも変わる。** 季節、試験、部活の予定、慣れ。差が出ても、始めたことのせいか、ほかの変化のせいか、区別できません。
3. **平均への回帰。** 調子が悪い時期に何かを始めることが多いものです。悪い時期の後は、何もしなくても普段の値に戻りやすいので、「効いた」ように見えます。
4. **結論はその1人について。** 他の人に当てはまるかは、この比較からは言えません。

改善の手：始める日と止める日を交互にする（1週ずつ入れ替える、など）、どの日に行うかをくじで決める、記録を長くとる、日にちの流れを分析に入れる。そして、結論を「1人の記録から見えたこと」として正直に書きます。

### 手を動かす課題
**手計算（必須）：** 4人の普通の週と試験の週の平均睡眠時間（作り物）です。

| 人 | 普通の週 | 試験の週 | 差 |
|---|---|---|---|
| 1 | 6.0 | 5.6 | |
| 2 | 7.5 | 7.2 | |
| 3 | 6.8 | 6.3 | |
| 4 | 5.5 | 5.2 | |

1. 差を埋め、差の平均と SD を求めます。
2. 対応のある t を求めます。自由度3の t の境目は3.182です。両側5%で有意ですか。
3. 2群のまま比べると、2つの群の SD はどちらも約0.88時間です。差の平均（0.375時間）と比べて、2群の比較が見逃しやすい理由を言葉で説明します。

**Python（できる人）：**

```python
import numpy as np
from scipy import stats
rng = np.random.default_rng(8)
base = rng.normal(6.5, 0.8, 10)                 # 10人の「いつもの睡眠」：人による違いが大きい
usual = base + rng.normal(0, 0.2, 10)           # 普通の週の平均睡眠（時間）
exam = base - 0.3 + rng.normal(0, 0.2, 10)      # 試験の週（本当に0.3時間短く作ってある）
print("対応なし（Welch）p =", round(stats.ttest_ind(usual, exam, equal_var=False).pvalue, 4))
print("対応あり         p =", round(stats.ttest_rel(usual, exam).pvalue, 4))
print("1人ずつの差の平均 =", round((usual - exam).mean(), 3), "時間")
```

出力の例：
```text
対応なし（Welch）p = 0.4115
対応あり         p = 0.0006
1人ずつの差の平均 = 0.39 時間
```

次に、**何もしていない**16晩を前半8晩と後半8晩に分けて t 検定をし、「前後で差あり」と出てしまう割合を数えます。晩どうしが独立な場合（似かた0）と、前の晩に似る場合（似かた0.6）を比べます。「似かた」は、ある晩と前の晩の睡眠時間の相関係数（第5回の ρ と同じ種類の数）のことで、0.6はかなり強く似ていることを表します。

```python
rng = np.random.default_rng(9)
def nights(n, phi):                    # 前の晩に似る（似かた phi）16晩の睡眠時間を作る
    x = np.zeros(n); x[0] = rng.normal()
    for i in range(1, n):
        x[i] = phi * x[i - 1] + np.sqrt(1 - phi ** 2) * rng.normal()
    return 6.5 + x
for phi in [0.0, 0.6]:
    hits = 0
    for _ in range(4000):
        x = nights(16, phi)            # 何もしていない16晩を、前半8晩と後半8晩に分ける
        if stats.ttest_ind(x[:8], x[8:], equal_var=False).pvalue < 0.05:
            hits += 1
    print(f"晩どうしの似かた={phi}  『前後で差あり』になった割合={hits / 4000:.3f}")
```

出力の例：
```text
晩どうしの似かた=0.0  『前後で差あり』になった割合=0.044
晩どうしの似かた=0.6  『前後で差あり』になった割合=0.284
```

晩どうしが独立なら、偶然の「差あり」は約5%（決めた線どおり）です。前の晩に似る場合は、何もしていないのに約28%で「差あり」と出ます。

### 確認の問い
1. 対応のある t 検定は、実は何に対する、どの t 検定ですか。
2. 2つの表を組む時、何でそろえますか。
3. 1人の前後比較で、始めたこと以外に差を生むものを2つ挙げてください。

#### 答えと考え方（AI 用：学習者が答えるまで見せない）
- 課題：1. 差は 0.4, 0.3, 0.5, 0.3。平均0.375、SD ≒ 0.096。2. SE ≒ 0.096 ÷ 2 ≒ 0.048、t ≒ 7.83 > 3.182 なので有意（p ≒ 0.004）。3. 2群のまま比べると、人による違い（SD 約0.88時間）が分母に入り、0.375時間の差が埋もれる（Welch で p ≒ 0.57）。差をとると人による違いが消え、ばらつきは0.1時間程度になる。
- 問1：1人ずつの差に対する、1標本 t 検定（差の平均が0かどうか）。
- 問2：人の番号（名前）。行の並び順ではそろえない。
- 問3：季節・試験・部活の予定・慣れなど、同じ時期に変わったこと。平均への回帰。晩どうしが似ていることによる偶然の「差あり」も挙げられれば良い。

### まとめ
- 同じ人の2回の値は、1人ずつの差をとって比べます（対応のある t 検定）。人による違いが消えるので、見逃しが減ります。
- 組は番号でそろえます。並び順で組みません。
- 1人の前後比較は、晩が独立でない・ほかの変化・平均への回帰・1人にしか言えない、の4つに気をつけます。

---

## 第9回 検出力と必要な数

### この回のねらい
1. 2種類の誤り（無いのに「有る」、有るのに「無い」）と、検出力の意味が分かる。
2. 相関を見つけるのに必要な数を、式で計算できる。
3. 計算した数が、シミュレーションで本当にその検出力になることを確かめる。

### 説明
**問い：** 本当に関係があるのに、検定で「有意でない」と出ることはあるでしょうか。

**答え：** よくあります。データの数が足りないと、本当にある関係も見逃します。

検定の誤りは2種類あります。

| | 本当は差（関係）が無い | 本当は差（関係）が有る |
|---|---|---|
| 「有意」と判定 | 第1種の誤り（確率 α、ふつう5%） | 正しい（確率＝**検出力**） |
| 「有意でない」と判定 | 正しい | 第2種の誤り（確率 β） |

**検出力**＝本当に差（関係）がある時に、それを「有意」と見つけられる確率です。ふつう80%を目標にします。検出力は、次の4つで決まります。
- 差（関係）の大きさ：大きいほど見つけやすい。
- データの数 n：多いほど見つけやすい（SE が √n で小さくなるから。第5回）。
- ばらつき：小さいほど見つけやすい。
- α（有意の線）：甘くするほど見つけやすいが、第1種の誤りも増える。

**学生の質問から：「何回測れば、r = 0.7 の相関が見つかりますか」。** 相関係数 r（2つの量が直線的にどれだけそろって動くか。−1から1）の場合、必要な数の目安は次の式で出せます（フィッシャーの z 変換という方法による近似です）。

　n ≒ ((z_α + z_β) ÷ atanh(r))² + 3

- z_α ＝ 1.960（両側5%の境目）、z_β ＝ 0.842（検出力80%に対応する値）。
- atanh(r) は、r を「正規分布に近い形でぶれ、そのぶれの大きさ（SD）が r の値によらずほぼ 1 ÷ √(n − 3) になる量」に直す関数です（高校では習わない関数なので、値は電卓や表で引けば十分です）。atanh(0.7) ≒ 0.867、atanh(0.5) ≒ 0.549、atanh(0.3) ≒ 0.310。
- 0.842 は、標準正規分布で「下から80%」の点です。検出力80%を目標にするので、この値を使います。
- 式の考え方：見つけたい関係の大きさ atanh(r) が、偶然のぶれ 1 ÷ √(n − 3) の（1.960 + 0.842）倍以上になるように n を選ぶ、という意味です。式の「+ 3」は、このぶれの式の n − 3 から来ています。

r = 0.7 なら、((1.960 + 0.842) ÷ 0.867)² + 3 ≒ 10.4 + 3 ≒ 13.4 なので、切り上げて**14組**です。

気をつけることが2つあります。1つ目に、この「14組」は**独立な組**（14人、など）の数です。1人の14晩は、晩どうしが似ているので、14組ぶんの情報になりません。2つ目に、r = 0.7 は、実際の研究ではめったに出ない強い相関です。弱い相関を見つけるには、ずっと多くの数が要ります。

2群の平均を比べる場合も考え方は同じです。差が SD（2つの群に共通する、1人1人のばらつき）の半分（差 ÷ SD ＝ 0.5）なら1群あたり約64人、差が SD と同じ（1.0）なら1群あたり約17人が、検出力80%の目安です。

もう1つ、少ない数で「たまたま有意になった」結果は、本当の効果より大きめに出がちです。偶然大きく出た時だけ有意になるからです。少人数の研究の派手な結果は、割り引いて読みます。

### 手を動かす課題
**手計算（必須）：** 上の式で、r = 0.5 の時に必要な数を計算します（atanh(0.5) ≒ 0.549）。r = 0.3 の時も計算します（atanh(0.3) ≒ 0.310）。

**Python（できる人）：** 式の答えを出し、次に、本当の相関が0.7の2つの量を作って、n 組で p < 0.05 になる割合（検出力）をシミュレーションで数えます。

```python
import numpy as np
from scipy import stats
z = stats.norm.ppf
for r in [0.7, 0.5, 0.3]:
    n = ((z(0.975) + z(0.80)) / np.arctanh(r)) ** 2 + 3     # 有意水準5%（両側）・検出力80%
    print(f"本当の相関 r={r}  必要な数の目安={int(np.ceil(n))}")
```

出力の例：
```text
本当の相関 r=0.7  必要な数の目安=14
本当の相関 r=0.5  必要な数の目安=30
本当の相関 r=0.3  必要な数の目安=85
```

```python
rng = np.random.default_rng(10)
rho = 0.7
for n in [8, 14, 30]:
    hits = 0
    for _ in range(4000):
        x = rng.normal(size=n)
        y = rho * x + np.sqrt(1 - rho ** 2) * rng.normal(size=n)   # 本当の相関が0.7の2つの量
        if stats.pearsonr(x, y)[1] < 0.05:
            hits += 1
    print(f"n={n:3d}  p<0.05 で見つかった割合（検出力）={hits / 4000:.3f}")
```

出力の例：
```text
n=  8  p<0.05 で見つかった割合（検出力）=0.544
n= 14  p<0.05 で見つかった割合（検出力）=0.851
n= 30  p<0.05 で見つかった割合（検出力）=0.992
```

式の目安14組で、検出力は約85%になりました（式は近似なので、目標の80%より少し高めに出ています）。8組では、本当に強い相関があっても、半分近くは「有意でない」と出ます。

### 確認の問い
1. 「検出力80%」とは、どういう意味ですか。
2. r = 0.3 の相関を見つけるには、およそ何組必要ですか。
3. 「有意でなかったから、関係は無い」と言えないのはなぜですか。

#### 答えと考え方（AI 用：学習者が答えるまで見せない）
- 課題：r = 0.5 は (2.802 ÷ 0.549)² + 3 ≒ 26.0 + 3 ≒ 29.0、切り上げて30組。r = 0.3 は (2.802 ÷ 0.310)² + 3 ≒ 81.7 + 3 ≒ 84.7、計算機の値（atanh(0.3) ＝ 0.3095）では84.9で、85組。
- 問1：本当に差（関係）がある時に、10回中8回は「有意」と見つけられること。
- 問2：約85組。
- 問3：検出力が足りず、本当の関係を見逃した（第2種の誤り）だけかもしれないから。
- 補足：2群の「約64人・約17人」は、t 分布を使った正確な計算の値（正規分布で近似した式では約63人・約16人）。

### まとめ
- 検出力は、本当にある差（関係）を見つけられる確率です。ふつう80%を目標にします。
- r = 0.7 なら約14組、r = 0.3 なら約85組の独立な組が要ります。同じ人の繰り返しは組の数に数えません。
- 有意でないことは、関係が無いことの証明ではありません。

---

## 第10回 よくある落とし穴（多重比較・p ハッキング・相関と因果）

### この回のねらい
1. たくさん検定すると、何も無くても「有意」が出ることを数で示せる。
2. 「有意になるまで続ける」などの p ハッキングが、偶然の有意を増やすと分かる。
3. 相関から因果を言えない理由（交絡・日にちの流れ）を、例で説明できる。

### 説明
**問い：** 何の関係もないデータから「有意な結果」を出すのは、難しいでしょうか。

**答え：** とても簡単です。この回では、3つのやり方を体験します。体験しておくと、だまされにくくなります。

**落とし穴1：多重比較。** 調子と関係のない記録を20種類集め、それぞれ調子との相関を検定するとします。1回の検定で偶然 p < 0.05 になる確率は5%です。20回なら、1回以上偶然「有意」になる確率は

　1 − 0.95²⁰ ≒ 0.64

です。何も無くても、6割以上の確率で「発見」があります。
- 対策：調べる前に、見る指標を1つ決めて書いておく（主な評価の項目）。たくさん調べたなら、調べた数を全部書く。線を厳しくする（例：ボンフェローニ法では、20回なら 0.05 ÷ 20 ＝ 0.0025 を線にする。1回ごとの偶然の有意を0.0025にすれば、20回のうちどれかで偶然有意になる確率は、合わせても 20 × 0.0025 ＝ 0.05 を超えないから）。

**落とし穴2：p ハッキング。** データや分析を、有意になるまでいじることです。よくある形は次のとおりです。
- 毎日検定して、有意になった日に測るのをやめる。
- 都合の悪い値を「外れ値」として外す。
- 分析の方法を何通りも試し、有意になったものだけを報告する。
- 対策：測る数と分析の方法を、測る前に決めて書いておく（事前登録）。

実は、この講座の作り物のデータも、説明しやすい数字が出る乱数の種を選んで作っています（第6回・第7回の8人ずつのデータと、この回の日にちの流れの例）。教材だから許されることで、研究で同じことをすれば、p ハッキングそのものです。

**落とし穴3：相関と因果の取り違え。** 相関があっても、片方が原因とは限りません。
- **交絡**：両方に影響する第3の要因。例：試合の前は緊張で眠りが浅くなり、同時に疲れで記録も落ちる。睡眠と記録に相関が出ても、睡眠を増やせば記録が良くなるとは言えません。
- **日にちの流れ（傾向）**：学生の自己記録で、実際に起きたことのある形です。練習の記録と睡眠時間に強い相関が出たのに、よく見ると、練習で記録が少しずつ上達し、同じ時期に睡眠も少しずつ増えていただけでした。両方が日にちと一緒に動くと、互いに無関係でも相関が出ます。日にちが交絡しているのです。
- 対策：日にちを分析に入れる（日にちの流れを引いてから相関を見る）、前の日からの変化どうしで見る、原因を確かめたいなら、条件をくじで割り付けて実験する。

### 手を動かす課題
**手計算（必須）：**
1. 5回検定した時、1回以上偶然「有意」になる確率を計算します（1 − 0.95⁵）。10回の時も計算します。
2. 10回検定する時、ボンフェローニ法の線はいくつですか。

**Python（できる人）：** 3つの落とし穴を数で確かめます。

```python
import numpy as np
from scipy import stats
rng = np.random.default_rng(11)
print("20回検定して1回でも p<0.05（理論）:", round(1 - 0.95 ** 20, 3))
hit = 0
for _ in range(1000):
    y = rng.normal(size=30)                       # 30日分の「調子の点数」（作り物）
    X = rng.normal(size=(20, 30))                 # 調子と関係のない20種類の記録
    hit += min(stats.pearsonr(x, y)[1] for x in X) < 0.05
print("シミュレーション:", hit / 1000)
```

出力の例：
```text
20回検定して1回でも p<0.05（理論）: 0.642
シミュレーション: 0.618
```

```python
hit = 0
for _ in range(1000):
    d = rng.normal(0, 1, 30)                      # 本当は効果0の「前後の差」の記録
    for n in range(5, 31):                        # 毎日検定して、有意になったらやめる
        if stats.ttest_1samp(d[:n], 0).pvalue < 0.05:
            hit += 1
            break
print("毎日のぞいて有意で止めたときの割合:", hit / 1000)
```

出力の例：
```text
毎日のぞいて有意で止めたときの割合: 0.23
```

本当は効果が0なのに、「有意になったらやめる」だけで、偶然の有意が5%から約23%に増えました。

```python
rng = np.random.default_rng(21)
day = np.arange(60)
sleep = 6.0 + 0.02 * day + rng.normal(0, 0.3, 60)    # 少しずつ睡眠が増える（早寝が身についていく）
run50 = 7.6 - 0.005 * day + rng.normal(0, 0.08, 60)  # 練習で少しずつ速くなる50m走（睡眠とは無関係に作った）
print("そのままの相関 r =", round(np.corrcoef(sleep, run50)[0, 1], 2))
res_s = sleep - np.polyval(np.polyfit(day, sleep, 1), day)   # 日にちの流れ（直線）を引いた残り
res_r = run50 - np.polyval(np.polyfit(day, run50, 1), day)
print("日にちの流れを除いた相関 r =", round(np.corrcoef(res_s, res_r)[0, 1], 2))
```

出力の例：
```text
そのままの相関 r = -0.58
日にちの流れを除いた相関 r = -0.01
```

睡眠と50m走のタイムは、互いに無関係に作りました。それでも、そのままでは r ≒ −0.58（よく眠った時期ほど速い）という強い相関が出ます。日にちの流れを引くと、相関はほぼ0になります。

### 確認の問い
1. 10個の指標を検定した時、1回以上偶然「有意」になる確率はおよそいくつですか。
2. 練習の上達と睡眠の増加が同じ時期に起きると、なぜ見かけの相関が出るのですか。
3. p ハッキングを防ぐ、いちばん効く手は何ですか。

#### 答えと考え方（AI 用：学習者が答えるまで見せない）
- 課題：1. 5回で 1 − 0.95⁵ ≒ 0.23、10回で ≒ 0.40。2. 0.05 ÷ 10 ＝ 0.005。
- 問1：約40%。
- 問2：両方の量が日にちと一緒に動く（日にちが交絡する）ので、互いに無関係でも、日にちを通じてそろって動いて見える。
- 問3：測る数・見る指標・分析の方法を、測る前に決めて書いておくこと（事前登録）。
- 余談として話してよいこと：p 値の誤用が広がったため、2016年にアメリカ統計学会が p 値についての声明を出し、「p 値は仮説が正しい確率ではない」「p 値は効果の大きさを表さない」「結論を p < 0.05 だけで決めない」などの原則を示した（Wasserstein と Lazar、The American Statistician 70巻 129–133頁、2016年）。統計の専門家どうしでも、いまも議論が続いている。

### まとめ
- たくさん検定すれば、何も無くても「有意」は出ます。見るものを先に決め、調べた数を全部書きます。
- 有意になるまで続ける・外す・試すは、偶然の有意を増やします。測る前に決めて書いておきます。
- 相関は因果ではありません。交絡と日にちの流れを疑い、原因を確かめたい時は実験します。

余談ですが、この講座で何度も出てきた「同じ人の繰り返しを人数に数えない」は、研究の現場でもいちばんよく起きる間違いの1つです。分かっていても、データが目の前にあると数えたくなります。統計の落とし穴の多くは、知識が無いからではなく、結果を早く見たい気持ちから生まれます。

---

## 修了の目安と、次に学ぶもの

### 修了の目安
次の10個を、何も見ずに自分の言葉で言えたら修了です。
1. 平均が同じでも、ばらつきが違えば別のデータである理由。
2. SD と SE の違いと、平均に添える時の選び方。
3. さいころの平均の分布が、n を増やすとどう変わるか。
4. 中心極限定理の1文と、3つの条件。
5. 平均の SD が σ ÷ √n になる理由と、独立でない時に何が起きるか。
6. p 値の正しい意味と、よくある3つの読み違い。
7. z と t の違いと、t 検定が歪んだデータにも使える条件。
8. 対応のある比較の利点と、1人の前後比較の4つの注意。
9. 検出力の意味と、r = 0.7 なら約14組という目安の出し方。
10. 多重比較・p ハッキング・相関と因果の取り違えの見抜き方。

### 次に学ぶもの
- **信頼区間と効果の大きさ**：p 値の代わりに、差の大きさとその幅で語る方法。
- **回帰分析**：2つ以上の要因を同時に扱う方法（交絡の調整、日にちの流れを入れる、など）。
- **同じ人を繰り返し測ったデータの分析**：人による違いを分析の中に入れる方法（混合効果モデル）。
- **ノンパラメトリック検定とブートストラップ**：分布の形に頼らない方法（第6回の並べ替え検定の仲間）。
- **ベイズ統計**：「仮説が正しい確率」を直接扱う、別の考え方。

### 確かめるための教科書（この講座の定理・公式はこれらで確かめました）
- L. Wasserman『All of Statistics』Springer, 2004。第5章（中心極限定理：定理5.8、σ を s に替えた形：定理5.10、近似の誤差：定理5.11）、第10章（検定・t 検定・多重検定）。英語・中級。
- F. M. Dekking ほか『A Modern Introduction to Probability and Statistics』Springer, 2005。第14章（中心極限定理）、第27章（t 検定）。英語・初級〜中級。
- 東京大学教養学部統計学教室 編『統計学入門』東京大学出版会, 1991。日本語の入門書。
- 参考：Student「The probable error of a mean」Biometrika 6巻 1–25頁, 1908（t 分布の最初の論文）。DOI: 10.1093/biomet/6.1.1
- 参考：R. L. Wasserstein, N. A. Lazar「The ASA Statement on p-Values: Context, Process, and Purpose」The American Statistician 70巻 129–133頁, 2016。DOI: 10.1080/00031305.2016.1154108

---

## フィードバックのお願い（再掲）

> **この講座は、使った人の声で毎回直しています。使った方は、必ずフィードバックをお送りください。**
>
> - 送り先：研究室ホームページの「連絡先」のページに載っているアドレス
> - 件名：「**講座フィードバック：中心極限定理と検定**」
> - 書いてほしい4点：
>   1. 何回目まで進んだか
>   2. 分かりにくかった所
>   3. 良かった所
>   4. 1回にかかった時間
>
> 途中でやめた方、1回だけ試した方の声も、とても役に立ちます。

神戸大学大学院医学系研究科 神経生理学分野　自習講座「中心極限定理と、有意差の検定での使い方」v1.0（2026年10月）
