pbj0812의 코딩 일기

[통계학] python으로 F 분포 그래프 그리기 본문

Science/통계학

[통계학] python으로 F 분포 그래프 그리기

pbj0812 2020. 8. 19. 23:04

0. 목표

 - python으로 F 분포 그래프 그리기

 - 독립된 두 카이제곱 분포를 따르는 확률변수 비의 분포, 등분산검정과 분산분석 등에 주로 이용

 - F 값 = (카이제곱 / 자유도) / (카이제곱 / 자유도)

1. 실습

 1) library 호출

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

 2) 카이제곱 리스트 연산 함수

  - 1000번 시행

def normal(inp):
    result = []
    for i in range(1,1001):
        tmp = np.random.normal(size = inp)
        dummy = 0
        for i in range(inp):
            tmp2  = tmp[i] ** 2
            dummy += tmp2
        result.append(dummy)
    return result

 3) F 값 연산 함수

def f(inp1, inp2):
    result1 = np.array(normal(inp1)) / inp1
    result2 = np.array(normal(inp2)) / inp2
    result = result1 / result2
    return result

 4) 데이터 프레임화

def make_group(inp):
    num_0 = 0
    num_1 = 0
    num_2 = 0
    num_3 = 0
    num_4 = 0
    num_5 = 0
    num_6 = 0
    num_7 = 0
    num_8 = 0
    num_9 = 0
    num_10 = 0
    num_11 = 0
    num_12 = 0
    num_13 = 0
    num_14 = 0
    num_15 = 0
    num_16 = 0
    num_17 = 0
    num_18 = 0
    num_19 = 0
    num_20 = 0
    for i in inp:
        if i >= 20:
            num_20 += 1
        elif i >= 19:
            num_19 += 1
        elif i >= 18:
            num_18 += 1
        elif i >= 17:
            num_17 += 1
        elif i >= 16:
            num_16 += 1
        elif i >= 15:
            num_15 += 1
        elif i >= 14:
            num_14 += 1
        elif i >= 13:
            num_13 += 1
        elif i >= 12:
            num_12 += 1
        elif i >= 11:
            num_11 += 1
        elif i >= 10:
            num_10 += 1
        elif i >= 9:
            num_9 += 1
        elif i >= 8:
            num_8 += 1
        elif i >= 7:
            num_7 += 1
        elif i >= 6:
            num_6 += 1
        elif i >= 5:
            num_5 += 1
        elif i >= 4:
            num_4 += 1
        elif i >= 3:
            num_3 += 1
        elif i >= 2:
            num_2 += 1
        elif i >= 1:
            num_1 += 1
        elif i >= 0:
            num_0 += 1
    result = pd.DataFrame({
        'standard' : ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', 'over20'],
        'result' : [num_0, num_1, num_2, num_3, num_4, num_5, num_6, num_7, num_8, num_9, num_10,
                   num_11, num_12, num_13, num_14, num_15, num_16, num_17, num_18, num_19, num_20]
    })
    return result

 2. 결과

 1) F(1, 10)

result = make_group(f(1, 10))
plt.bar(result['standard'], result['result'])

 2) F(1, 1000)

 3) F(10, 1)

 4) F(1000, 1)

 5) F(1, 1)

 6) F(20, 20)

 7) F(1000, 1000)

3. 참고

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

Comments