주어진 상황에 대해서, 하고자하는 주장이 맞는지 아닌지를 판정하는 과정.
모집단의 실제 값에 대한 sample의 통계치를 사용해서 통계적으로 유의한지 아닌지 여부를 판정한다.
wikipedia'Statistical hypothesis testing
A statistical hypothesis is a hypothesis that is testable on the basis of observed data.
내가 하고자하는 주장이 사실인지 아닌지 판단하기 위해서 통계적으로 유의한지 아닌지 보고 그 값을 보고 내 주장이 사실인지를 판단하기 위해서 하는 작업이 가설검증이다.
(말이 복잡하지만 내가 하고자하는 주장(귀무가설, 대립가설을 통해 내 주장을 나타내고) 통계적으로 유의한지 살펴보고(유의수준 정하고 가설을 보고 단측/양측검정 방법 정해서 모집단에서 샘플을 뽑아서 검정통계량 계산후 나온 p값 계산) 그 값(검정통계량, p값)을 보고 내 주장이 사실인지 아닌지 판단(내 주장이 보통 들어가는 대립가설 채택 혹은 기각)하는 작업이라고 할 수 있다.)
가설검증이라는 것은 전체 데이터의 일부만을 추출하여 평균을 내고, 그 평균이 전체 데이터의 평균을 잘 반영한다는 가정 하에 전체 데이터의 평균을 구하는 작업이라고 할 수 있다.
모집단 전체에 대한 값을 알면 가장 정확한 값을 알 수 있겠지만 그렇기에는 시간과 돈이 너무 많이 든다. 따라서 몇 개를 추출해서 샘플을 만들어서 검정을 하는 것이다. 이때, 몇 개를 추출할 것인가(샘플 사이즈)에 따라 우연성의 오류를 잡아줄 수 있다.
동전을 던져서 앞면과 뒷면이 나오는 확률은 베르누이 분포(binominal, 결과가 두 가지만 나오는 것, 오른쪽신발 왼쪽신발처럼.) 를 생각해보면 50%로 같겠지만 동전을 던지는 횟수에 따라 달라질 수 있는 것이다. 10번을 던져서 8번 앞면이 나오면 앞면이 나올 확률이 80%가 되어버리는 오류가 생긴다. 이러한 우연성의 오류를 잡아줄 수 있는 것이 동전을 던지는 횟수가 큰 것이다.
샘플의 사이즈는 우연성의 오류를 잡아줄 수 있는데 샘플의 사이즈가 크면 클수록 더 정확한 값이 나온다. 더 많은 정보를 활용하면 무작위성을 고려하더라도 더 적은 정보를 사용했을 때보다 더 높은 신뢰성을 확보할 수 있는 것이다.
보통은 30 이상의 샘플 사이즈 정도는 되어야 우연성의 오류에 영향을 덜 받는 것으로 알고 있다.
예전에 교수님이 T-test를 할 때 30개 이상의 사이즈로 해야 좋다고 하셨던 것 같다.
이러한 Sample Size의 중요성을 아래의 식, 표본 평균의 표준오차로서 나타낼 수 있다.
표본 평균의 표준 오차 (Standard Error of the Sample Mean)
표본평균의 표준오차는 표본의 표준편차(우측의 S, 표본의 표준편차, sample standard deviation)을 표본의 수(우측의 n, sample size)의 루트값이라고 할 수 있다. 표준편차의 표준오차를 구하다보니 n에 루트가 씌워진 것 같다.
(참고로 𝑥¯= 표본의 평균)
여기에서 알 수 있듯이 표본의 수가 더욱 많아질수록, 추측이 더 정확해지고 (평균) 높은 신뢰도를 바탕으로 모집단에 대해 예측할 수 있도록 한다.
가설(Hypothesis)란 검정을 목적으로 제시된 모집단 모수의 수치에 대한 주장
가설검정자료
설정된 가설이 잘못되었다는 증거가 나오기 전까지 옳다고 받아들여지는 가설.
일반적으로 연구에서 검증하는 가설을 귀무가설이라고 한다.
귀무가설이 잘못되었다는 증거가 나오면 옳다고 받아들여지는 가설.
연구자가 연구를 통해 입증되기를 기대하는 예상이나 주장하는 내용이다.
내가 주장하고 싶은 것을 여기에 넣는 것이 일반적으로 계산하기가 더 쉬웠다.
귀무가설에 설정된 값을 기준으로 어느 한 쪽에 위치한 모든 값을 포함하는 대립가설.
H0: 서울특별시의 구별 사과나무는 평균적으로 400그루보다 적거나 같다.
H1: 서울특별시의 구별 사과나무는 평균적으로 400그루보다 많다.
귀무가설에 설정된 값을 기준으로 양쪽에 위치한 모든 값을 포함하는 대립가설.
H0: 서울특별시의 구별 배나무는 평균적으로 400그루이다.
H1: 서울특별시의 구별 배나무는 평균적으로 400그루가 아니다.(=400그루보다 적거나 많다. 400을 기준으로 나뉘는 양쪽이 생긴다.)
1️⃣ 가설 세우기
2️⃣ 유의수준 정하기(기본 신뢰도 95% 많이 사용)
3️⃣ 단측검정이나 양측검정 정하기
4️⃣ 샘플링 후 검정통계량(확률변수) 계산 후 p값 계산
5️⃣ 결론(계산한 P값<=유의수준이면 귀무가설 기각, 반대면 채택)
표본 데이터에서 계산되어 가설 검정에 사용되는 랜덤 변수이다.
검정 통계량들은 거의 대부분이 귀무가설을 가정하고 얻게되는 값이기 때문에 검정 통계량을 사용하여 귀무 가설의 기각 여부를 확인할 수 있다. 검정 통계량은 데이터를 귀무 가설 하에서 기대되는 값과 비교하여 데이터의 표본과 귀무 가설 사이의 합치도를 측정한다. 검정통계량 값은 랜덤 표본별로 다르게 관측되기 때문에
가설 검정마다 귀무 가설에서 가정된 확률 모형을 기반으로 각기 다른 검정 통계량을 사용한다. Z검정을 할 때는 Z통계량, T검정을 할 때는 T통계량, 분산분석(Anova)를 할 때는 F통계량, 카이제곱검정을 할 때는 카이제곱통계량을 사용한다.
검정 통계량은 p-값을 계산하기 위해 사용하는 경우가 많다.
연구 결과의 유의성을 확인하기 위해 매우 필요한 도구!
p-value는 검정 통계량에 관한 확률로, 귀무가설이 맞다는 전제 하에 통계값(statistics, 분포로부터 계산되는 값으로 흔히 평균, 또는 평균의 차이, 분산, nth moment 등이 있을 수 있다.)이 실제로 관측될 값 이상일 확률이다.
일반적으로 p-value는 어떤 가설을 전제로, 그 가설(귀무가설)이 맞는다는 가정 하에 내가 현재 구한 통계값이 얼마나 자주 나올 것인가를 의미한다고 할 수 있다. 즉, P 값은 특정 값이 정규 분포(확률 분포)의 어딘가에 해당하는지 나타내는 확률 혹은 귀무가설이 참인지 거짓인지 측정하는 척도로 사용될 수 있다.
p-value는 가설검정이 전체 데이터를 갖고 하는 것이 아니라 모분포로부터 sampling 된 데이터(sample)를 통해 모분포의 특성을 추정하는 절차라는 점에서 필요하다.
우연히 발생할 가능성이 매우 희박한 사건이 실제로 발생했을 경우, 그것은 우연이 아니라고 생각하는 경향이 있고, p-value 역시 그와 같은 경향을 따른 것이기 때문에 필요하다고 할 수 있다.(마치 로또를 연속 10번 맞춘 사람이 있다면, 우연히 그런 일이 일어날 가능성은 매우 작으므로 그 일은 우연이 아니라고 생각하고, 뭔가 모종의 음모가 있다고 의심해 보게 된다.)
p-value는 검정통계량이 압축적으로 담고있던 정보를 더 압축한 것이다.
p-value는 효과의 크기(effect size)와 표본의 크기의 정보를 한꺼번에 담고 있기 때문에 효과의 크기가 커지거나 표본의 크기가 커지거나 둘 중 하나만 변하더라도 p-value는 마치 유의한 차이를 담보할수 있을 것 마냥 작아질 수 있다.
알파 = 0.05나 0.01 이런 식으로 설정되는 값으로 표현할 수 있다.
"임계치로서의 P 값"이라고 할 수 있다.
귀무가설이 참인지 거짓인지 측정하는 척도가 p값이라고 할 수 있으니 귀무가설이 '그렇게 다르지 않다'라고 한다면 p는 그렇게 다르지 않을 확률을 나타내는 수치이다. 그리고 '그렇게 다르지 않다.'의 '그렇게'를 구체적으로 확인하기 위한 값이 p값의 임계값, 즉 유의수준이다.
가설 검정 방법에는 여러가지가 있다.
Student T-Test , Chi-Square Test, Anova 등이 바로 가설검정 방법이다.
가설을 어떻게 세웠느냐에 따라 방법을 적재적소에 사용해야한다.
T-test 는 정규모집단에서 추출한 소표본(small size sample)의 평균을 특정값(모집단과 관련된)과 비교하는 검정방법이다. 독립된 또는 종속된(대응된) 두 집단의 비교에서 유용하게 쓰인다고 한다.
두 집단이 같은지 다른지 비교하면서 두 집단의 평균값이 통계적으로 같은지 다른지 확인한다. 만약 A 대학의 남학생들 평균키가 178.5cm이고 B대학 남학생의 평균키가 179.9cm라고 했을 때 두 대학 남학생의 키가 같다고 할 수 있을까? 굉장히 애매할 것이다. 그래서 t-test를 통해 두 대학의 남학생들의 키가 같다고 할 수 있는지 비교할 수 있다. 이를 위한 질문은 다음과 같이 할 수 있다. A 대학 남학생의 평균키와 B대학 남학생 평균키가 우연히 같을 확률은 얼마나 될까?, 혹은 A대학과 B대학의 남학생 평균키 차이인 1.4cm가 우연히 발생했을 확률은 얼마나 될 수 있는가? 이러한 질문에서 비롯하여 가설을 세우고 두 집단의 평균을 비교하는 검정 방법이 T-test라고 할 수 있다.
비교하는 sample의 개수에 따라
(sample의 개수와 sample의 사이즈는 다르다.)
One-sample T-test : 1개의 sample 값을 비교하는 T-test
Two-sample T-test : 2개의 sample 값을 비교하는 T-test
검정하는 것에 따라
Two-tailed(side/direction) test(양측검정): 샘플 데이터의 평균이 "X"와 같다 / 같지 않다. 를 검정하는 내용
One-tailed test(단측검정) : 샘플 데이터의 평균이 "X"보다 크다 혹은 작다 / 크지 않다 작지 않다. 를 검정하는 내용
여기서 "X"는 모집단의 평균.
각주 T-test의 4가지 조건
-자료는 모두 동일 간격을 가진 연속형 수치여야한다.(identical interval and continuity)
-두 집단은 서로 독립적이어야한다.(independence)
-자료의 수치는 정규성을 가져야한다.(정규분포를 따라야한다., normality)
-두 집단 각각에서 추정된 분산은 동일해야한다. (equal variance)
+) 만약 4가지 조건을 만족하지 않는다면?
1개의 sample 값들의 평균이 특정값과 동일한지(2tail), 혹은 크거나 작은지(1tail) 비교
from scipy import stats
stats.ttest_1samp(샘플의데이터, 비교하려는 평균값, axis=0, nan_policy='propagate', alternative={'two-sided', ‘less’, ‘greater’})
alternative에 H1을 표현한다.
2개의 sample 값들의 평균이 서로 동일한지 혹은 크거나 작은지 비교
두 개의 정규 모집단이 동일한 분산(등분산)을 가질 때 소표본으로부터 모집단의 평균을 비교하기.
자유도 : 표본1의개수 + 표본2의개수 - 2
자유도가 클수록 표준정규분포(standard normal distribution)에 가까워진다.
from scipy import stats
stats.ttest_ind(샘플의데이터1,샘플의데이터2, axis=0, equal_var=True, nan_policy='propagate',Alternative={‘two-sided’, ‘less’, ‘greater’})
alternative에 H1을 표현한다.
: 그룹이 3개 이상인 경우 그룹이 같은지, 다른지 확인할 때 사용
참고블로그
종속변인은 1개이며, 독립변인의 집단도 1개인 경우.
한 가지 변수의 변화가 결과 변수에 미치는 영향을 확인하기 위해 사용된다.(=F값구하기)
H0: μ 1 = μ 2 =...= μ k (k=그룹의 개수)
H1: μ i != μ j (적어도 한 그룹의 평균은 다르다.)
(자유도 : n-1 (첫번째 분산의 자유도 + 두번째 분산의 자유도))
독립변인의 집단이 두 개 이상일 때, 집단 간 차이가 유의미한지 확인하기 위해 사용.
두 개의 분산의 비율
첫 번째 분산 / 두 번째 분산
전체 평균으로부터 각 그룹의 평균 사이의 분산 (Between Variance)
자유도1: df1 = k-1 (k=그룹의 개수)
크면 클수록 전체 평균으로부터 각 그룹의 평균이 멀리 떨어져있다. = 적어도 어떤 그룹 한 개는 다른 그룹과 평균이 다를 수 있다.
이 첫 번째 분산이 우연히 클 수도 있고 얼마나 커야 통계적으로 큰지 확인하기 위해 두 번째 분산이 필요.
전체 그룹 내의 분산 (Within Variance)
자유도2: df2 = n-k (n=샘플의 크기, K=그룹의 개수)
T-test에서의 분모의 표준편차와 같은 의미!
Between Variance 가 Within Variance보다 충분히 커야 우리는 Between Variance가 통계적으로 크다고 말할 수 있고, 이것은 적어도 어느 한 그룹의 평균값이 전체 평균과는 다르다고 할 수 있다.
statsmoel로 Anova test하기
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
ex)아기 3명의 머리둘레 차이
formula = 'head_size ~ C(fetus) + C(observer) + C(fetus):C(observer)'
lm = ols(formula, df).fit()
print(anova_lm(lm))