[Python] 중심극한정리

김혜은·2024년 12월 25일

🐍 Python

목록 보기
4/6

중심 극한 정리

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 모집단 및 표본 크기 설정
population_size = 10000  # 모집단 크기
sample_sizes = [5, 10, 20, 50, 100, 500]
num_samples = 1000  # 각 표본 크기당 추출할 표본 수

# 모집단 생성
np.random.seed(0)
population = np.random.randint(1, 13, population_size)

# 모집단 히스토그램
plt.figure(figsize=(8, 4))
sns.histplot(population, bins=12, kde=True, color='purple')
plt.title("Population Distribution (12-sided Die)")
plt.xlabel("Value")
plt.ylabel("Frequency")
plt.show()

# 표본 크기별 표본 평균 분포 시각화
for sample_size in sample_sizes:
    sample_means = []
    for _ in range(num_samples):
        sample = np.random.choice(population, size=sample_size, replace=True)
        sample_means.append(np.mean(sample))

    # 표본 평균 히스토그램
    plt.figure(figsize=(8, 4))
    sns.histplot(sample_means, bins=30, kde=True, color='skyblue')
    plt.title(f"Distribution of Sample Means (Sample Size = {sample_size})")
    plt.xlabel("Sample Mean")
    plt.ylabel("Frequency")
    plt.show()

Shapiro-Wilk 테스트

import numpy as np
import pandas as pd
from scipy.stats import shapiro

# 모집단 설정
np.random.seed(0)
population = np.random.randint(1, 13, 10000)  # 모집단 생성

# 표본 크기 목록 및 결과 저장 리스트
sample_sizes = [5, 10, 20, 50, 100, 500]
shapiro_results = []

# 각 표본 크기별로 표본 평균을 계산하고 Shapiro-Wilk 테스트 수행
for sample_size in sample_sizes:
    # 각 표본 크기에서 평균 추출
    sample_means = []
    for _ in range(1000):
        sample = np.random.choice(population, size=sample_size, replace=True)
        sample_means.append(np.mean(sample))

    # Shapiro-Wilk 테스트 수행
    stat, p_value = shapiro(sample_means)
    shapiro_results.append((sample_size, stat, p_value))

# 데이터프레임 변환
shapiro_df = pd.DataFrame(shapiro_results, columns=["Sample Size", "W Statistic", "p-value"])

# 결과 출력
print(shapiro_df)

0개의 댓글