サンプルサイズ、標準誤差、標準偏差、母集団の標準偏差について
統計学において、母集団全体の特性を理解するためにサンプルを抽出し、そこから得られる情報を元に推定を行います。このプロセスで重要な概念が、サンプルサイズ、標準誤差、標準偏差、そして母集団の標準偏差です。
サンプルサイズ
サンプルサイズとは、母集団から取り出されたデータの数を指します。サンプルサイズが大きくなるほど、サンプル平均は母集団平均に近づきやすくなります。これは、大きなサンプルがより多くの情報を含んでおり、母集団全体をより正確に反映する可能性が高くなるためです。
標準誤差
標準誤差(Standard Error, SE)は、サンプル平均がどの程度母集団平均から離れているかを示す不確実性の指標です。標準誤差は次の式で計算されます:
- 標準誤差 (Standard Error, SE) の式:
SE = \frac{\sigma}{\sqrt{n}}
ここで、
σ は母集団の標準偏差、n はサンプルサイズです。
この式からわかるように、サンプルサイズが大きくなると、標準誤差は小さくなります。つまり、サンプル平均が母集団平均により近づくことを意味します。逆に、サンプルサイズが小さいと標準誤差は大きくなり、サンプル平均のばらつきが増えるため、推定の信頼性が低下します。
標準偏差
標準偏差(Standard Deviation, SD)は、サンプル内のデータポイントがサンプル平均からどれだけ離れているかを示す指標です。標準偏差は、データのばらつきそのものを表し、次の式で計算されます:
2. 標本標準偏差 の式:
s = \sqrt{\frac{1}{n-1} \sum_{i=1}^{n} (x_i - \bar{x})^2}
母集団の標準偏差
σは、母集団全体におけるデータのばらつきを表します。母集団全体のデータが利用できる場合、この値は計算できますが、実際には母集団全体のデータが得られないことが多いため、通常はサンプルから推定されます。
まとめ
サンプルサイズが増加すると、標準誤差は小さくなり、サンプル平均が母集団平均に近づくことが期待されます。標準偏差は、サンプル内のデータのばらつきを示し、母集団の標準偏差が未知の場合は標本標準偏差を用いて推定されます。これらの概念は、統計的推定の精度や信頼性を理解するために非常に重要です。
具体例
上記のプロットは、サンプルサイズと標準誤差の関係を示しています。サンプルサイズが増えると、標準誤差が小さくなることが視覚的に確認できます。
具体的な標準誤差の値は以下の通りです:
サンプルサイズ 10: 標準誤差 ≈ 3.98
サンプルサイズ 50: 標準誤差 ≈ 1.44
サンプルサイズ 100: 標準誤差 ≈ 0.90
サンプルサイズ 500: 標準誤差 ≈ 0.44
サンプルサイズ 1000: 標準誤差 ≈ 0.32
サンプルサイズ 5000: 標準誤差 ≈ 0.14
サンプルサイズ 10000: 標準誤差 ≈ 0.10
この例では、母集団の平均身長が 170cm、標準偏差が 10cm である仮想の人口を考えました。サンプルサイズが大きくなるほど、標準誤差が小さくなり、サンプル平均が母集団平均に近づくことがわかります。これにより、サンプルサイズを大きくすることで推定の精度が向上することが確認できます。
Pythonのコード全文
import numpy as np
import matplotlib.pyplot as plt
# Define parameters
population_mean = 170 # cm
population_std_dev = 10 # cm
population_size = 1000000
# Generate a population with a normal distribution
np.random.seed(42)
population = np.random.normal(population_mean, population_std_dev, population_size)
# Sample sizes to consider
sample_sizes = [10, 50, 100, 500, 1000, 5000, 10000]
# Store the standard errors for different sample sizes
standard_errors = []
for size in sample_sizes:
samples = np.random.choice(population, size, replace=False)
sample_mean = np.mean(samples)
sample_std_dev = np.std(samples, ddof=1) # ddof=1 for sample standard deviation
standard_error = sample_std_dev / np.sqrt(size)
standard_errors.append(standard_error)
# Plotting the standard error against sample size
plt.figure(figsize=(10, 6))
plt.plot(sample_sizes, standard_errors, marker='o')
plt.title('Standard Error vs. Sample Size')
plt.xlabel('Sample Size')
plt.ylabel('Standard Error')
plt.grid(True)
plt.xscale('log') # Log scale for better visualization
plt.show()
standard_errors, sample_sizes