pbj0812의 코딩 일기

[통계학] 부트스트랩을 통한 신뢰구간 만들기 본문

Science/통계학

[통계학] 부트스트랩을 통한 신뢰구간 만들기

pbj0812 2023. 5. 22. 02:07

0. 이론

 -  준비한 데이터에서 복원 추출을 반복해 많은 재표본을 생성하고, 그 통계량에서 모수를 추정

1. 실습

 1) library 호출

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import random
import statistics

 2) 데이터 생성

  - t 분포를 활용한 신뢰구간 : 1.03 ~ 4.97

x = [1, 2, 3, 4, 5] 

print('신뢰구간 : ', round(np.mean(x) - 2.78 * 0.71, 2), ' ~ ', round(np.mean(x) + 2.78 * 0.71, 2))

 3) 부트스트랩

  - 5개씩 뽑아서(복원추출) 평균을 만들고 해당 데이터들을 통해 신뢰구간 구현

var = []
stdev = []
mean = []
for i in range(10000):
    tmp = [random.randrange(1, 6) for i in range(5)]
    mean.append(np.mean(tmp))
    
print('100번 돌렸을 때 신뢰구간 : ', round(np.mean(mean[:99]) - 2.78 * statistics.stdev(mean[:99]), 2), ' ~ ', round(np.mean(mean[:99]) + 2.78 * statistics.stdev(mean[:99]), 2))
print('1000번 돌렸을 때 신뢰구간 : ', round(np.mean(mean[:999]) - 2.78 * statistics.stdev(mean[:999]), 2), ' ~ ', round(np.mean(mean[:999]) + 2.78 * statistics.stdev(mean[:999]), 2))
print('2000번 돌렸을 때 신뢰구간 : ', round(np.mean(mean[:1999]) - 2.78 * statistics.stdev(mean[:1999]), 2), ' ~ ', round(np.mean(mean[:1999]) + 2.78 * statistics.stdev(mean[:1999]), 2))
print('5000번 돌렸을 때 신뢰구간 : ', round(np.mean(mean[:4999]) - 2.78 * statistics.stdev(mean[:4999]), 2), ' ~ ', round(np.mean(mean[:4999]) + 2.78 * statistics.stdev(mean[:4999]), 2))
print('10000번 돌렸을 때 신뢰구간 : ', round(np.mean(mean[:9999]) - 2.78 * statistics.stdev(mean[:9999]), 2), ' ~ ', round(np.mean(mean[:9999]) + 2.78 * statistics.stdev(mean[:9999]), 2))

100번 돌렸을 때 신뢰구간 : 1.15 ~ 4.91

1000번 돌렸을 때 신뢰구간 : 1.22 ~ 4.78

2000번 돌렸을 때 신뢰구간 : 1.23 ~ 4.76

5000번 돌렸을 때 신뢰구간 : 1.22 ~ 4.76

10000번 돌렸을 때 신뢰구간 : 1.24 ~ 4.76

 

2. 참고

 - 통계학 도감(쿠리하라 신이치, 마루야마 아츠시)

Comments