One Sample T Test – statistics

One Sample T Test 란 t 분포에 가정하여 가설을 검정하는 방법이고, 1변량에 대한 검정이다.

예제 1 : 과자 2봉지를 뜯었는데 집에 있는 저울로 과자의 내용량을 측정해보니 첫 번째 봉지는 55g 이었고, 두 번째 봉지는 44g이었으며 평균 내용량은 49.5g 이었다. 평균내용량이 50g는 아니였지만 이것은 의미 있는 차이인가?

귀무가설 : 봉지 과자의 평균중량은 50g 이다

대립가설 : 봉지 과자의 평균중량은 50g 가 아니다.

T test 는 모분산을 알수 없고, 샘플수가 30개 미만 일 때 검겅하는 방법이다.

one sample t test 의 기각역

귀무가설 $H_{0}$ 를 기각하도록 하는 검정통계량의 관측값이다.

기각역의 범위는 귀무가설에 따라 달라진다.

귀무가설 대립가설

예제 1 의 같은 경우 $H_{0} : \mu = 50, H_{1} : \mu \neq 50$ 가 된다.

귀무가설은은 틀리다는 것을 입증하고자 하는 가설로 “봉지과지의 무게가 50g “라는 귀무가설을 가지고 있다.

여기서 $\bar{X}$ 값이 작거나 클수록 $H_{1} :  \mu \neq 30$ 을 지지하는 충분한 증거가 된다.

1종 오류 2종 오류

1 종 오류는 귀무가설이 사실일 때 기각하는 오류로 $\alpha$ 로 나타낸다

2종 오류는 귀무가설이 사실이 아닐 때 귀무가설을 기각하지 못하는 오류로 $\beta$ 로 나타낸다.

유의 수준

최대 허용한계로 $\alpha = 0.01, \alpha = 0.05, \alpha = 0.10$ 을 사용하여 1종 오류를 범할 확률이 $\alpha$ 이하인 검정법이다.

예제 1 의 경우로 20개의 과자봉지에 대한 무게를 측정하였을 때 평균은 $\bar{X} = 55.385$ 이였을 때

$P(\bar{X} = 55.385) = P(\dfrac{\bar{X} – \mu}{S} \le \dfrac{55.385 – \mu}{S}) = P(T \le \dfrac{55.385-\mu}{S})$

$P(|T| \ge \dfrac{55.385 – 50}{8.756 / \sqrt{20}}) = P(|T| \ge 2.750) =  0.0127$ 자유도(19) 가 된다.

즉 유의수준 5%로 $\bar{X}$ 의 값이 55.385 값으로  귀무가설을 기각하게 된다는 의미 이다.

유의 확률 ( p-value )

p-value 는 귀무가설이 맞다고 가정할 때 얻은 결과보다 극단적인 결과가 실제로 관측될 확률이다

예제 1 에서 표본평균 $\bar{X}= 55.385$ 일 때 유의 수준 $\alpha = 0.05$

$P(\bar{X} \ge 55.385) = P(|T| \ge \dfrac{55.385- 50}{8.756 / \sqrt{20}}) = 0.0127$

즉 유의 수준보다 작으면 유의 수준 $\alpha$ 하에서 귀무가설을 기각하게 된다.

one sample t test 의 t 값 계산

$t = \dfrac{표본평균 – 비교대상값}{표준편차 \div \sqrt{샘플사이즈}} = \dfrac{표본평균 – 비교대상값}{표준오차}$

ex1 의 기준으로 $t = \dfrac{표본평균 – 50}{표준오차}$ 이다.

하지만 귀무가설에 따라 기각역을 아래와 같이 달라진다.

즉 귀무가설에 의하여 단측검정, 양측검정으로 나눠진다.

One Sample T Test

통계적 가설 검정

In [1]:
### T Test
In [1]:
import numpy as np
import pandas as pd
import scipy as sp
from scipy import stats

from matplotlib import pyplot as plt
import seaborn as sns
sns.set()

%precision 3

%matplotlib inline
In [2]:
junk_food = pd.read_csv("./data/junk-food-weight.csv")["weight"]
junk_food.head()
Out[2]:
0    58.529820
1    52.353039
2    74.446169
3    52.983263
4    55.876879
Name: weight, dtype: float64

t 값 계산

In [3]:
# 표본평균
mu = sp.mean(junk_food)
mu
/Users/kimseongmog/opt/anaconda3/envs/statics/lib/python3.7/site-packages/ipykernel_launcher.py:2: DeprecationWarning: scipy.mean is deprecated and will be removed in SciPy 2.0.0, use numpy.mean instead
  
Out[3]:
55.38496619666667
In [4]:
# 자유도
df = len(junk_food) - 1
df
Out[4]:
19
In [5]:
# 표준오차
sigma = sp.std(junk_food, ddof = 1)
se = sigma / sp.sqrt(len(junk_food))
se
/Users/kimseongmog/opt/anaconda3/envs/statics/lib/python3.7/site-packages/ipykernel_launcher.py:2: DeprecationWarning: scipy.std is deprecated and will be removed in SciPy 2.0.0, use numpy.std instead
  
/Users/kimseongmog/opt/anaconda3/envs/statics/lib/python3.7/site-packages/ipykernel_launcher.py:3: DeprecationWarning: scipy.sqrt is deprecated and will be removed in SciPy 2.0.0, use numpy.lib.scimath.sqrt instead
  This is separate from the ipykernel package so we can avoid doing imports until
Out[5]:
1.9579276805755885
In [6]:
# t 값
t_value = (mu - 50) / se
t_value
Out[6]:
2.7503396831713434

p 값 계산

In [7]:
# p값
alpha = stats.t.cdf(t_value, df = df)
(1 - alpha) * 2
Out[7]:
0.012725590012524268

scipy 를 이용한 one sample t test

In [8]:
# scipt 를 이용한 t 검정
stats.ttest_1samp(junk_food, 50)
Out[8]:
Ttest_1sampResult(statistic=2.750339683171343, pvalue=0.012725590012524182)

답글 남기기

이메일 주소는 공개되지 않습니다.