데이터분석/통계

모평균 구간추정(모 표준편차를 알때(z), 모를때(t)) 파이썬 코드

씩씩한 IT블로그 2022. 9. 5. 01:51
반응형

모평균 구간추정

모평균의 구간추정을 한다.

이때 모 표준편차를 아는 상태(z검정)와 모르는 상태(t검정)로 나누어서 모평균의 구간을 추정한다.

데이터는 아래와 같이 생성하였다.

data = np.random.randint(1,100,size=(100))

 

모 표준편차를 알 때 모평균 구간 추정(Z검정)

1. 계산식

* 이때 모표준편차의 식은 다음과 같다

2. 코드(직접계산)

import numpy as np
import pandas as pd
from scipy.stats import norm,sem

# 평균, 표준편차, 표본수
sample_mean = np.mean(data)
sample_std = np.std(data)
size = len(data)

# z통계량
z_95_left = norm(0, 1).ppf(0.025) # 누적 분포가 2.5인 x값
z_95_right = norm(0, 1).ppf(0.975) # 누적 분포가 2.5인 x값

L = sample_mean + z_95_left*(sample_std/np.sqrt(size))
R = sample_mean + z_95_right*(sample_std/np.sqrt(size))

print(L,R)

 

3. stats 모듈사용

from scipy.stats import sem

sample_mean = np.mean(data)
sample_std = np.std(data)
std_err_of_mean = sample_std/np.sqrt(len(data)) 
# print(std_err_of_mean==sem(data, ddof=0)) #sem이란 함수를 이용하여 계산 가능, ddof=0이면 자유도는 size

norm.interval(0.95, sample_mean, scale=std_err_of_mean) # 신뢰도, 평균, std_error_of_mean

 

모 표준편차를 모를 때 모평균 구간 추정(t검정)

1. 계산식

* 이때 모표준편차의 식은 다음과 같다

2. 직접계산

from scipy.stats import t

def var(data):
    sample_mean = data.mean()
    df=len(data)-1
    error_sum = 0
    for d in data:
        error_sum += (d-sample_mean)**2
    sample_var = error_sum/df
    return sample_var

sample_mean = data.mean()
sample_std = np.sqrt(var(data))
size = len(data)
# standard_error_of_mean = sample_std/np.sqrt(size)

# t통계량
t_95_right = t(df).ppf(0.975)
t_95_left = t(df).ppf(0.025)

L = sample_mean + t_95_left*(sample_std/np.sqrt(size))
R = sample_mean + t_95_right*(sample_std/np.sqrt(size))

print(L,R)

 

3. 모듈이용

from scipy.stats import t

def var(data):
    # 표본 표준편차를 계산한다.
    sample_mean = data.mean()
    df=len(data)-1
    error_sum = 0
    for d in data:
        error_sum += (d-sample_mean)**2
    sample_var = error_sum/df
    return sample_var

sample_mean = data.mean()
sample_std = np.sqrt(var(data))
size = len(data)
standard_error_of_mean = sample_std/np.sqrt(size)
# print(standard_error_of_mean==sem(data,ddof=1)) #sem이란 함수를 이용하여 계산 가능, ddof=1이면 자유도는 size-1

L,R = t.interval(0.95, size-1, sample_mean, scale=standard_error_of_mean) # 신뢰도, 자유도, 평균, scale

print(L,R)

 

반응형