pbj0812의 코딩 일기

[통계학] python을 이용한 부트스트랩 구현 본문

Science/통계학

[통계학] python을 이용한 부트스트랩 구현

pbj0812 2020. 8. 28. 00:30

0. 목표

 - python을 이용한 부트스트랩 구현

1. 이론

 1) 샘플 값을 하나 뽑아서 기록하고 제자리에 놓는다.

 2) n번 반복한다.

 3) 재표본추출된 값의 평균을 길록한다.

 4) 1~3단계를 R번 반복한다.

 5) R개의 결과를 사용하여

  (1) 표준편차 계산

  (2) 히스토그램 or 상자그림

  (3) 신뢰구간 찾기

2. 실습

 1) library 호출

import numpy as np

 2) 평균

def mean(inp):
    result = 0
    len_inp = len(inp)    
    for i in inp:
        result += i
    result = result / len_inp
    return result

 3) 모수생성

  - 정규 분포를 따르는 백만개의 수 생성

mom = list(np.random.normal(size = 1000000))

 4) 표본생성

  - 모수에서 무작위 만개 추출

random_index = np.random.permutation(len(mom))
random_index = random_index[:10000]
son = []
for i in random_index:
    son.append(mom[i])

 5) 샘플링

  - 무작위 천개 추출

# inp : son
def sample(inp):
    random_index = np.random.permutation(len(inp))
    random_index = random_index[:1000]
    result = []
    for i in random_index:
        result.append(inp[i])
    return result

 6) 샘플링 평균

# inp1 : son, inp2 : number of repetitions
def accumulation(inp1, inp2):
    result = []
    for i in range(inp2):
        son = mean(sample(inp1))
        result.append(son)
    result = mean(result)
    return result

 7) 횟수에 따른 평균

# inp1 : son, inp2 : list of (number of. epetitions)
def compare(inp1, inp2):
    for i in inp2:
        result = accumulation(inp1, i)
        print(str(i) + ":" + str(result))

3. 결과

 1) 사이클 지정

cycle= [100, 1000, 10000, 100000]

 2) 실행

  - 결과

100:-0.013589418345736633

1000:-0.011442257800435628

10000:-0.010929350023038612

100000:-0.011151858954628847

* 모수. 및 표본의 평균

모수 : -4.374006265719635e-05

표본 : -0.011050412490189586

compare(son, cycle)

4. 참고

 - 데이터 과학을 위한 통계(피터 브루스, 앤드루 브루스)

Comments