Pythonで可視化する大標本理論

# 大標本(漸近)理論における主要な定理や法則について

大標本(漸近)理論は、標本サイズが無限大に近づくときの統計的性質を研究する分野です。以下にその主要な概念を説明します。

1. 大数の法則（Law of Large Numbers）: 標本平均は確率収束するという概念で、標本サイズが増えると、標本平均は母平均に収束します。

2. 中心極限定理（Central Limit Theorem）: 標準化された和が正規分布に収束するという概念です。これは、大量のランダム変数の和（または平均）が、一定の条件下で正規分布に近づくという事実を表しています。

3. 連続写像定理（Continuous Mapping Theorem）: 収束する列の関数も収束するという概念です。つまり、確率変数列が収束すると、その列の関数も同じように収束します。

4. スルツキーの定理（Slutsky's Theorem）: 収束する列の組み合わせも収束するという概念です。これは、確率収束と分布収束の列の和や積が収束するという事実を表しています。

5. 支配収束定理（Dominated Convergence Theorem）: 収束する列の期待値も収束するという概念です。つまり、確率変数列が収束すると、その列の期待値も同じように収束します。

```mermaid
graph TB
  LS["Large Sample Asymptotics"]
  LS --> LLN["Law of Large Numbers"]
  LS --> CLT["Central Limit Theorem"]
  LS --> CMT["Continuous Mapping Theorem"]
  LS --> SLT["Slutsky's Theorem"]
  LS --> DCT["Dominated Convergence Theorem"]
  LLN -- "Convergence in Probability" --> CP["Sample Mean to Population Mean"]
  CLT -- "Convergence in Distribution" --> CD["Standardized Sum to Normal Distribution"]
  CMT -- "Function of Convergent Sequence" --> FC["Convergence of Function"]
  SLT -- "Combination of Convergent Sequences" --> CC["Convergence of Combination"]
  DCT -- "Expectation of Convergent Sequence" --> EC["Convergence of Expectation"]
  linkStyle 0 stroke:#2ecd71,stroke-width:2px;
  linkStyle 1 stroke:#2ecd71,stroke-width:2px;
  linkStyle 2 stroke:#2ecd71,stroke-width:2px;
  linkStyle 3 stroke:#2ecd71,stroke-width:2px;
  linkStyle 4 stroke:#2ecd71,stroke-width:2px;
  linkStyle 5 stroke:#2ecd71,stroke-width:2px;
  linkStyle 6 stroke:#2ecd71,stroke-width:2px;
  linkStyle 7 stroke:#2ecd71,stroke-width:2px;
  linkStyle 8 stroke:#2ecd71,stroke-width:2px;
  linkStyle 9 stroke:#2ecd71,stroke-width:2px;
```

# 大標本漸近理論を学ぶ動機
大標本漸近理論は、統計学と計量経済学において非常に重要な役割を果たします。私自身は大学の講義で渋々習ったのですが、計量経済系の研究やデータサイエンティスト、アナリストの方々の実務にも役立ちそうです。以下は学ぶ動機となるものをいくつか挙げています。

1. **推定量の性質を理解する**: 大標本漸近理論は、推定量の性質、特に一貫性や漸近正規性などを理解するのに役立ちます。これらの性質は、推定量が真のパラメータにどのように近づくか、また大標本での分布がどのようになるかを理解するのに重要です。

2. **仮説検定の理解**: 大標本漸近理論は、仮説検定の理論的基礎を提供します。特に、検定統計量の分布やp値の計算など、仮説検定の重要な概念を理解するのに役立ちます。

3. **複雑なモデルの理解**: 多くの統計的・計量経済的モデルは、小標本特性を直接解析するのが難しいです。しかし、大標本漸近理論を用いると、これらのモデルの性質を理解することが可能になります。

4. **統計的手法の適用と解釈**: 大標本漸近理論は、統計的手法を適用し、その結果を解釈する際のガイドラインを提供します。例えば、信頼区間の計算やモデル選択の基準など、多くの統計的手法は大標本漸近理論に基づいています。

5. **新たな手法の開発**: 大標本漸近理論は、新たな統計的手法やモデルを開発する際の重要なツールです。新たな手法が提案されたとき、その手法が大標本で良好な性質を持つことを示すために、大標本漸近理論がしばしば用いられます。



## 1. 大数の法則（Law of Large Numbers）
大数の法則（Law of Large Numbers）は、確率論と統計学の基本的な概念で、**大量の試行を行うと、平均結果が期待値に収束する**という法則です。これは、サンプルサイズが大きくなるにつれて、サンプル平均が母平均に近づくという事実を表しています。

以下のコードは、平均0、標準偏差1の正規分布からランダムにサンプルを抽出し、サンプルサイズが増えるにつれてサンプル平均がどのように変化するかを示しています。グラフは、サンプルサイズ（x軸）に対するサンプル平均（y軸）をプロットしています。サンプルサイズが増えるにつれて、サンプル平均は母平均（赤線）に収束していくことがわかります。これが大数の法則の視覚的な表現です。

```python
import numpy as np
import matplotlib.pyplot as plt

# 平均0、標準偏差1の正規分布からのランダムサンプル
mu, sigma = 0, 1
sample_sizes = np.arange(1, 5001)
sample_means = []

for sample_size in sample_sizes:
    sample = np.random.normal(mu, sigma, sample_size)
    sample_means.append(np.mean(sample))

# グラフの描画
plt.figure(figsize=(10, 6))
plt.plot(sample_sizes, sample_means, label='Sample Mean')
plt.axhline(y=mu, color='r', linestyle='-', label='Population Mean')
plt.xlabel('Sample Size')
plt.ylabel('Mean')
plt.title('Law of Large Numbers')
plt.legend()
plt.show()
```
![](https://storage.googleapis.com/zenn-user-upload/523d7cc85f80-20230605.png)

## 2. 中心極限定理（Central Limit Theorem）
中心極限定理（Central Limit Theorem）は、**大量の試行を行うと、標本平均の分布が正規分布に近づく**という法則です。これは、サンプルサイズが大きくなるにつれて、標本平均の分布が正規分布に収束するという事実を表しています。

以下のコードは、平均0、標準偏差1の正規分布からランダムにサンプルを抽出し、サンプルサイズが増えるにつれてサンプル平均の分布がどのように変化するかを示しています。グラフは、サンプル平均（x軸）に対する頻度（y軸）をプロットしています。サンプルサイズが増えるにつれて、サンプル平均の分布は正規分布（黒線）に収束していくことがわかります。これが中心極限定理の視覚的な表現です。

```python
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm


# 平均0、標準偏差1の正規分布からのランダムサンプル
mu, sigma = 0, 1
sample_sizes = np.arange(1, 5001)
sample_means = []

for _ in range(1000):
    sample = np.random.normal(mu, sigma, 5000)
    sample_means.append(np.mean(sample))

# グラフの描画
plt.figure(figsize=(10, 6))
plt.hist(sample_means, bins=30, density=True, alpha=0.6, color='g')

# 正規分布の描画
xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = norm.pdf(x, mu, sigma)
plt.plot(x, p, 'k', linewidth=2)

plt.title('Central Limit Theorem')
plt.show()
```
![](https://storage.googleapis.com/zenn-user-upload/00591cf38cd8-20230605.png)

##  3. 連続写像定理（Continuous Mapping Theorem）
連続写像定理（Continuous Mapping Theorem）は、**確率変数の列が収束するとき、その確率変数の列に連続関数を適用した列も収束することを保証する**定理です。以下に、この定理を数式で表現し、具体的な例をPythonコードで示します。

**数式での表現**

連続写像定理は以下のように表現されます。

もし確率変数の列 $X_n$ が確率変数$X$に収束し（つまり、$X_n \rightarrow X$）、関数$g$が連続であるならば、$g(X_n)$は$g(X)$に収束します（つまり、$g(X_n) \rightarrow g(X)$）。

**Pythonコードでの具体例**

以下のPythonコードは、連続写像定理を示す一例です。ここでは、確率変数の列 $X_n$を生成し、それに対して連続関数 $g(x) = x^2$ を適用します。そして、$X_n$と $g(X_n)$の収束を視覚的に確認します。

```python
import numpy as np
import matplotlib.pyplot as plt

# 確率変数の列 Xn を生成
n = np.arange(1, 101)
Xn = 1 / n

# 連続関数 g(x) = x^2 を適用
g_Xn = Xn ** 2

# Xn と g(Xn) の収束を視覚的に確認
plt.figure(figsize=(12, 6))

plt.subplot(1, 2, 1)
plt.plot(n, Xn)
plt.title('Convergence of Xn')

plt.subplot(1, 2, 2)
plt.plot(n, g_Xn)
plt.title('Convergence of g(Xn)')

plt.show()
```





このコードを実行すると、$X_n$ と $g(X_n)$ が収束していることが視覚的に確認できます。つまり、連続写像定理により、$X_n$ が収束するとき、$g(X_n)$ も収束することが示されます。

![](https://storage.googleapis.com/zenn-user-upload/6ff4f639894e-20230605.png)

## 4. スルツキーの定理（Slutsky's Theorem）
スルツキーの定理（Slutsky's Theorem）は、確率変数の列の収束に関する重要な定理の一つです。この定理は、**確率変数の列が収束するとき、その確率変数の列に演算を適用した列も収束することを保証**します。

**スルツキーの定理の数式表現**

スルツキーの定理は以下のように表現されます。

もし確率変数の列 $X_n$ が確率変数 $X$ に収束し（つまり、$X_n \rightarrow X$）、確率変数の列 $Y_n$ が確率変数 $c$ に収束するならば（つまり、$Y_n \rightarrow c$）、以下の収束が成り立ちます。

1. $X_n + Y_n \rightarrow X + c$
2. $X_n - Y_n \rightarrow X - c$
3. $X_nY_n \rightarrow Xc$
4. $X_n/Y_n \rightarrow X/c$ （ただし、$c \neq 0$）

**Pythonコードでの具体例**

以下のPythonコードは、スルツキーの定理を示す一例です。ここでは、確率変数の列 $X_n$ と $Y_n$ を生成し、それらに対して加算、減算、乗算、除算を適用します。そして、それぞれの演算結果の収束を視覚的に確認します。

```python
import numpy as np
import matplotlib.pyplot as plt

# 確率変数の列 Xn, Yn を生成
n = np.arange(1, 101)
Xn = 1 / n
Yn = np.full(100, 0.5)

# 演算を適用
add = Xn + Yn
sub = Xn - Yn
mul = Xn * Yn
div = Xn / Yn

# 各演算結果の収束を視覚的に確認
plt.figure(figsize=(12, 8))

plt.subplot(2, 2, 1)
plt.plot(n, add)
plt.title('Convergence of Xn + Yn')

plt.subplot(2, 2, 2)
plt.plot(n, sub)
plt.title('Convergence of Xn - Yn')

plt.subplot(2, 2, 3)
plt.plot(n, mul)
plt.title('Convergence of Xn * Yn')

plt.subplot(2, 2, 4)
plt.plot(n, div)
plt.title('Convergence of Xn / Yn')

plt.tight_layout()
plt.show()
```
以下のグラフを見ると、$X_n + Y_n$、$X_n - Y_n$、$X_n * Y_n$、$X_n / Y_n$ がそれぞれ収束していることが視覚的に確認できます。つまり、スルツキーの定理により、これらの演算結果も収束することが示されています。

![](https://storage.googleapis.com/zenn-user-upload/37a3d5d4e0d5-20230605.png)

##  5. 支配収束定理（Dominated Convergence Theorem）
支配収束定理（Dominated Convergence Theorem）は、積分と極限の交換を可能にする重要な定理の一つです。具体的には、**ある関数列が収束し、その絶対値がある可積分関数によって「支配」される場合、関数列の積分の極限は、極限関数の積分と等しくなる**ことを保証します。

以下に、この定理を視覚化するためのPythonコードを示します。ここでは、関数列として $\frac{1}{n}x^n$ を考え、その収束先として $0$ を取ります。また、支配関数として $1$ を取ります。

```python
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 1, 100)
n_values = [1, 2, 4, 8, 16]

plt.figure(figsize=(10, 6))

for n in n_values:
    y = (1/n) * x**n
    plt.plot(x, y, label=f'n={n}')

plt.plot(x, np.zeros_like(x), 'k--', label='Limit function: 0')
plt.plot(x, np.ones_like(x), 'r--', label='Dominating function: 1')

plt.legend()
plt.title('Demonstration of Dominated Convergence Theorem')
plt.xlabel('x')
plt.ylabel('y')
plt.show()
```
このコードを実行すると、各 $n$ に対する関数列 $\frac{1}{n}x^n$ のグラフが描画されます。また、極限関数 $0$ と支配関数 $1$ も描画されます。関数列が $0$ に収束し、その全てが支配関数 $1$ によって支配されていることが視覚的に確認できます。これは、支配収束定理の条件を満たしています。
![](https://storage.googleapis.com/zenn-user-upload/a90fbe313562-20230605.png)