T-Test
두 그룹의 평균이 같은지/다른지 확인하는 방법이다. 자료가 정규분포라는 것을 전제로 한다.
어떤 data가 정규분포를 따른다면,
정규분포 곡선은 다 비슷하게 생겼다. 얼마나 벌어졌는지(표준편차)와 중심점(평균)이 어디 있는지만 다를 뿐이다.
- data에서 표준편차를 빼고 분산으로 나누면 대충 0을 평균으로 하고 표준편차가 1인 표준정규분포(Z-분포)로 변형이 가능하다.
- 그 후 내가 가진 값도 동일한 변형을 거치면 어떤 계산값(Z-score)이 나올 것이고, 이 값이 Z-분포에서 어느 정도 귀퉁이에 있는지 확인할 수 있다.
- 얼마나 귀퉁이에 있는지 보는 것으로 얼마나 rare한지를 추측할 수 있고,
5% 확률 미만이면 (p<0.05) 기각한다거나, 1% 확률 미만이면 (p<0.01) 기각한다거나, 그런 판단을 할 수 있다.
그런데 sample size (data point)가 많지 않다면 Z-분포로 변형할 때 왜곡이 발생한다. (참고: 자유도)
이게 W. S. Gosset이라는 Guinness 맥주 직원에게는 큰 문제였는데,
- 맥주 발효 샘플이 많으면 많을수록 테스트가 어려워진다.
- 그래서 적은 수의 샘플로도 유효한 방법을 찾다가 Z-분포를 약간 변형한 T-분포를 창안했고, 이 변형된 통계량을 T-score라고 불렀으며,
본인이 고안한 방법을 학술지에 발표했는데, Guinness에서는 직원이 연구결과를 학술지에 발표하는 것을 반대(당연하지!)했기 때문에,
- Student라는 필명을 썼고, 그래서 우리는 이 방법을 Student's T-Test라고 부른다.
차례
Two-Sample T-Test
두 그룹간의 평균을 비교하는 검정이다.
- 2019년 11월과 2020년 05월의 서울시 미세먼지를 비교해보자.
Data 준비
서울시 일별 평균 대기오염도 정보페이지에서 [내려받기(CSV)]를 클릭하여 자료를 내려받고 다음을 실행하자.
1 df <- read.csv(file.choose(), fileEncoding = 'euc-kr')
2 df <- df[ grep('구$', df$측정소명), ]
3
4 dust19 <- data.frame(month = as.factor('2019.11'),
5 pm10 = df[ grep('^201911', df$측정일시) , '미세먼지.....' ])
6 dust20 <- data.frame(month = as.factor('2020.05'),
7 pm10 = df[ grep('^202005', df$측정일시) , '미세먼지.....' ])
8
9 dust = rbind(dust19, dust20)
10 summary(dust)
11 boxplot(pm10 ~ month, data=dust, col=c('brown2','deepskyblue'))
정규성 검정
T-test는 정규분포곡선과 비슷하게 생긴 자료임을 전제로 개발되었다.
자료가 정규분포를 따라야 T분포로 변환이 되고, T-score를 계산할 수 있다.
자료의 정규성 여부는 Shapiro-Wilk test를 통해 구할 수 있다.
R에서는 함수 shapiro.test()를 사용한다.
계산 결과 얻어지는 p-value는 자료가 정규분포를 따를 확률이다.
혹은 위 두 줄을 by( ) 함수를 사용하여 한 줄로 표현할 수 있다.
1 by(dust$pm10, dust$month, shapiro.test)
두 경우 모두 p < 2.2e-16 로 정규성은 눈꼽만큼도 없으니 Mann-Whitney test를 하기로 한다.
Mann-Whitney Test
Mann-Whitney test(동의어: Wilcoxon rank sum test)는 자료가 정규성이 없을 때 Two-sample T-test 대신 쓰는 비모수 검정법이다
R에서는 wilcox.test( )함수를 사용하여 계산한다.
[주의] wilcox.test( )에 paired=TRUE 옵션을 주면 (유사품)Wilcoxon signed-rank test가 된다.
(유사품)Wilcoxon signed-rank test는 Paired T-test 대신 쓰는 검정법이다 (뒤에 나옴)
paired 옵션을 안 주면 Wilcoxon rank sum test (Two-sample T-test 대용)으로 간주한다.
Two-Sample T-Test
이 미세먼지 데이타는 정규성 테스트를 통과하지 못 했지만, 혹시 예를 들어 정규성을 통과했다면 다음과 같이 T-test를 사용할 수 있다.
주의! 두 그룹의 분산이 같은지 다른지에 따라 결과가 아주 약간 달라진다.
분산이 같다면 전통적인 Student's T-test 를 쓰면 됨.
분산이 다르다면 Welch's T-test를 씀.
R 에서는 var.equal=TRUE/FALSE 옵션으로 간단히 구분함.
- 분산이 같은지 다른지만 알려주세요.
두 그룹의 분산은 F-test로 비교할 수 있고, R에서는 var.test( )가 담당함.
1 var.test(pm10 ~ month, data=dust)
p>0.05 로 분산이 같다면(대립가설 버림) var.equal=TRUE 옵션과 함께 t-test를 한다
p<0.05 로 분산이 다르다는 대립가설이 채택되면 var.equal=FALSE 옵션과 함께 t-test를 한다
- var.equal를 지정 안 하면 FALSE라고 간주하므로 굳이 안 써도 되는 옵션이다.
- Welch's T-test 라고 한다.
One-Sample T-Test
모집단의 평균이 알려졌을 때, 내 sample이 그 모집단에서 온 것인지 추측하는 문제.
- 내 sample의 평균은 항상 모집단의 평균과 다르다 (같을 확률이 까마득하게 작다)
- 다르긴 다른데 이게 통계적으로 유의미한게 다른 것인지...?
- 아님 그냥 무시해도 될 정도로 다른 것인지..?
한국 20살 남자 키 평균은 175cm 이다.
- 고1 학급의 남학생 13명의 키를 조사했더니 다음과 같았고 평균은 171cm 이었다.
- 이 고1 학생들은 성인과 키가 비슷하다고 말 할 수 있는가?
- 평균 4cm 의 차이는 통계적으로 유의미한 차이인가?
정규성 test
1 shapiro.test(myClassHeight)
p-value = 0.9946 로 매우 정규분포를 따를 것처럼 보이므로 T-test로 넘어가자.
- histogram도 bell-shape의 정규분포처럼 보였었다.
One-Sample T-test
결과:
One Sample t-test
data: myClassHeight
t = -3.3136, df = 12, p-value = 0.006183
alternative hypothesis: true mean is not equal to 175
95 percent confidence interval:
167.9874 173.5511
sample estimates:
mean of x
170.7692
- 이 sample의 평균은 170.7692 이다.
- 그런데 이 평균은 이 학급이 우연히도 키 작은 애들만 모여 있어서 나온 것일 수도 있고, 그 반대일 수도 있다.
- 이런 sample을 무한정 모으면 (전국 고1 전수조사) 실제 고1 남학생의 평균키는 95% 확률로 167.98~173.55 사이에 존재할 것이다.
- 고1 남학생의 키 평균이 성인의 키 (175)와 같을 확률은 95% 확률 범위 안에 없다 (5% 미만이다).
- 고1 키와 성인 키가 같을 것이라는 가설은 기각(거부)한다.
Confidence level(유의수준)을 더 넓게 잡을 수도 있다.
1 t.test(myClassHeight, mu=175, conf.level=0.99)
결과:
One Sample t-test
data: myClassHeight
t = -3.3136, df = 12, p-value = 0.006183
alternative hypothesis: true mean is not equal to 175
99 percent confidence interval:
166.8692 174.6692
sample estimates:
mean of x
170.7692
- 이런 sample을 무한정 모으면 (전국 고1 전수조사) 실제 고1 남학생의 평균키는 99% 확률로 166.87~174.66 사이에 존재할 것이다.
- 고1 남학생의 키 평균이 성인의 키 (175)와 같을 확률은 99% 확률 범위 안에 없다 (1% 미만이다).
- 고1 키와 성인 키가 같을 것이라는 가설은 기각(거부)한다.
'다르다'는 '크다'와 '작다'를 함께 부르는 말이다.
- 다를 확률 대신 클 확률만 보고 싶다면 이렇게 지정한다.
- 단측검정이라고 한다 (반댓말: 양측검정)
1 t.test(myClassHeight, mu=175, conf.level=0.99, alter="greater")
Paired T-Test
약물 처리 전 후 차이가 유의미한 차이인지 보는 테스트이다.
- 약물 처리 전 후 데이타가 쌍으로 있어야 한다.
- 약물 처리 전 후 데이타가 차이가 없다면 (약물이 효과가 없다면), 전-후 데이타의 차이는 0에 가까울 것이다.
- 약물 처리 전 후 차이가 없더라도 전-후 데이터 차이가 모조리 기계적으로 0일 수는 없고, 어느 정도 차이가 관찰될 것이다.
- 약물 처리 전 후의 데이타 차이가 정규분포 곡선을 따른다면 T-test가 가능하다.
만약 정규분포를 따르지 않는 데이타라면, raw data 대신 서열(rank)을 가지고 계산하는 Wilcoxon Signed-Rank Test를 한다.
- 결국 One-Sample T-test의 변형인 셈이다.
운동 전후 심박수를 재서 기록했다.
정규성 test
p-value = 0.03814 로 정규분포를 따르지 않는 것처럼 보이므로 Wilcoxon signed-rank test를 하겠다.
- histogram도 이상하게 보인다.
Wilcoxon Signed Rank test
R 함수 wilcox.test( )를 사용한다.
wilcox.test( ) 안에 vector 하나가 있으면 Wilcoxon signed rank test를 계산한다.
wilcox.test( ) 안에 vector 두개를 넣고 paired=TRUE라고 하면 Wilcoxon signed rank test를 계산한다.
- 그 외의 경우는 Wilcoxon rank sum test(Mann-Whitney test)를 계산한다.
결과:
Wilcoxon signed rank test with continuity correction
data: diff
V = 28, p-value = 0.0213
alternative hypothesis: true location is not equal to 0
Warning messages:
1: In wilcox.test.default(diff) : cannot compute exact p-value with ties
2: In wilcox.test.default(diff) : cannot compute exact p-value with zeroes
p < 0.05 이므로 대립가설 (전 후 차이가 0이 아니다) 채택
- 운동 효과 있음
마지막에 보이는 Warnings은 같은 순위에 rank된 데이타에 의해서 생긴 메세지이다.
- 보기 싫으면 exact=FALSE 옵션을 준다.
1 wilcox.test(afterHR, beforeHR, paired=TRUE, exact=FALSE)
Paired T-test
만약 shapiro.test()에서 p>0.05로 정규성이 확인되면 T-test를 할 수 있다.
t.test( )를 사용하면 되는데, 사용법은 wilcox.test( )와 같다.
정리
- 두 그룹의 평균을 비교할 때는 T-test(혹은 유사품)을 쓴다.
- 표준정규분포로 변환이 가능해야 T-test가 된다.
정규분포를 보이는 자료를 이용한 계산을 parametric 통계 (모수 통계)라고 한다.
p < 0.05 면 평균이 유의미하게 다르다고 생각 (95% 신뢰수준에서)
자료가 정규분포를 보이지 않으면 wilcox.test() 를 쓴다.
- 비모수 통계 (non-parametric statistics) 라고 한다.
- 자료값에 순위(rank)를 매긴 후 이 rank를 비교하는 방법이다.
p < 0.05 면 평균이 유의미하게 다르다고 생각 (95% 신뢰수준에서)
- 기타
자료가 정규성을 띄는지는 shapiro.test() 로 계산한다.
p < 0.05 면 정규분포와 유의미하게 다른 분포라고 생각
분산은 var.test()로 비교한다.
p < 0.05 면 분산이 유의미하게 서로 다르다고 생각
|
정규분포(O): 모수통계 (parametric) |
정규분포(X): 비모수 (non-parametric) |
|
두 그룹이 독립적 |
Two sample T-test |
분산이 같다: Student's T-test |
Mann-Whitney Test |
분산이 다르다: Welch's T-test |
|||
두 그룹이 서로 엮임 |
Paired T-test |
Wilcoxon Signed Rank test |
|