ホーム » コードあり » 2018 Q1(1)

投稿一覧

2018 Q1(1)

不偏分散が母分散の不偏推定量であることを示しました。

 

コード

nを2~100に変化させて、不偏分散と標本分散を比較してみます。

import numpy as np
import matplotlib.pyplot as plt

# パラメータ設定
mu = 0      # 母集団平均
sigma = 2   # 母集団標準偏差
sigma_squared = sigma ** 2  # 真の母分散
n_values = range(2, 101, 2)  # サンプルサイズ n を2から100まで2ステップで変化させる
num_trials = 3000  # 各 n に対して100回の試行を行う

# 不偏分散 (1/(n-1)) と 標本分散 (1/n) を計算するためのリスト
unbiased_variances = []
biased_variances = []

# 各サンプルサイズ n で分散を計算
for n in n_values:
    unbiased_variance_sum = 0
    biased_variance_sum = 0
    
    # 各サンプルサイズ n に対して複数回試行して平均を計算
    for _ in range(num_trials):
        # 正規分布に従うサンプルを生成
        sample = np.random.normal(mu, sigma, n)
        
        # 標本平均
        sample_mean = np.mean(sample)
        
        # 不偏分散 (1/(n-1))
        unbiased_variance = np.sum((sample - sample_mean) ** 2) / (n - 1)
        unbiased_variance_sum += unbiased_variance
        
        # 標本分散 (1/n)
        biased_variance = np.sum((sample - sample_mean) ** 2) / n
        biased_variance_sum += biased_variance
    
    # 各 n に対する平均分散をリストに追加
    unbiased_variances.append(unbiased_variance_sum / num_trials)
    biased_variances.append(biased_variance_sum / num_trials)

# グラフを描画
plt.plot(n_values, unbiased_variances, label="不偏分散 (1/(n-1))", color='blue', marker='o')
plt.plot(n_values, biased_variances, label="標本分散 (1/n)", color='red', linestyle='--', marker='x')

# 真の分散を水平線で描画
plt.axhline(y=sigma_squared, color='green', linestyle='-', label=f'真の分散 = {sigma_squared}')

# グラフの設定
plt.title('サンプルサイズに対する標本分散と不偏分散の比較')
plt.xlabel('サンプルサイズ n')
plt.ylabel('分散')
plt.legend()
plt.grid(True)
plt.show()

標本分散には不偏性はなく、不偏分散には不偏性があることが確認できました。