[R] T-Test 가설검정
t-테스트(t-test, 또는 ‘t-검증’)은 모집단의 분산이나 표준편차를 알지 못할 때, 표본으로부터 추정된 분산이나 표준편차를 이용하여 두 모집단의 평균에 통계적으로 유의한 차이가 있는지 알아볼 때 사용하는 통계 분석 기법 입니다.
R에는 t검정을 위한 함수가 내장되어 있기 때문에 특별한 패키지 설치 없이 수행할 수 있습니다.
#01. One-Sample T-test(단일 표본 t-검정)
- 하나의 모집단 평균이 이전보다 커졌는지/작아졌는지/달라졌는지를 통계적으로 알아보기 위해 사용한다.
- 하나의 양적 자료가 사용된다.
학생들의 평균키 검증
💡 전체 학생들 중 20명의 학생들을 추려 키를 측정해서 전체 학생들의 평균 키가 175cm인지 아닌지 알아보고 싶다.
가설설정
가설 | 내용 | 의미 |
---|---|---|
귀무가설 | 학생들의 평균키가 175와 차이가 없다. | 학생들의 평균 키가 175cm가 맞다. |
대립가설 | 귀무가설을 부정 | 학생들의 평균키가 175보다 크다/작다/다르다. |
T테스트의 의미
이름 | 현상 | 해석 |
---|---|---|
귀무가설이 참인 경우 | 관측된 p-value가 0.05 이상인 경우 | 학생들의 평균키는 175cm와 차이가 없다. 그러므로 평균키는 175다. 대립가설을 기각한다. |
귀무가설이 거짓인 경우 | 관측된 p-value가 0.05보다 작은 경우 | 학생들의 평균 키는 175cm와 차이가 있다. 그러므로 평균은 175가 아니다. (alternative값에 따라 크다, 작다로 판별될 수 있음) 대립가설을 채택한다. |
구문 설명
t.test(데이터,
alternative = c("two.sided", "less", "greater"),
mu = 0,
conf.level = 0.95)
파라미터 | 설명 |
---|---|
alternative |
양쪽이 차이가 없다.(two.sided), 작다(less), 크다(greater) |
mu |
귀무가설이 참일 때의 모평균 |
conf.level |
신뢰수준 (95% 기본값) |
t테스트 수행
학생 20명에 대한 키를 리스트 구성 (랜덤배치)
height = c(164, 163, 173, 165, 180, 173, 175, 167, 176, 166, 181, 163, 173,170, 172, 171, 178, 168, 170, 166)
학생 20명의 평균키가 175와 차이가 없다”라는 귀무가설에 대한 t-test
t.test(height, alternative="two.sided", mu=175)
💻 출력결과
One Sample t-test
data: height
t = -3.5042, df = 19, p-value = 0.002373
alternative hypothesis: true mean is not equal to 175
95 percent confidence interval:
168.1316 173.2684
sample estimates:
mean of x
170.7
💻 출력결과 해석
💡 유의확률(p-value) 0.002373이므로 유의수준 0.05(95percent)에서 귀무가설을 기각한다. 즉, 학생들의 평균키는 175가 아니다.
#02. Independent two sample T-test(독립 표본 t-검정)
- 서로 다른 두개의 그룹 간 평균의 차이가 유의미한지 여부를 판단.
- 두 개의 독립적 데이터로 이루어진다.
- 두개의 표본이 “독립”적 이기 위해서는 아래 조건을 만족해야 한다.
- 두개의 표본이 서로 관계 없는 모집단에서 추출 되었을 것
- 표본 간에는 아무런 관계가 없을 것
- p-value가 0.05보다 작은 경우 귀무가설을 기각하고 대립가설 채택
두 집단간의 키가 같은지 분석
💡 집단 1과 집단 2에서 각각 20명의 학생들을 추려, 각 집단의 키가 같은지, 다른지 알아보고 싶다.
가설설정
가설 | 내용 | 의미 |
---|---|---|
귀무가설 | 두 집단의 평균 키는 차이가 없다. | 그러므로 두 집단의 평균은 같다. |
대립가설 | 귀무가설의 부정 | 두 집단의 평균은 같지 않다. |
구문설명
단일 표본 t-검정구문에서 데이터를 두 개로 구분짓고 모집단의 평균을 의미하는 mu
대신 두 집단의 분산 동일성 여부가 같은지 다른지에 대한 옵션인 var.equal
파라미터를 지정한다.
t.test(데이터1, 데이터2,
alternative = c("two.sided", "less", "greater"),
var.equal = FALSE,
conf.level = 0.95)
파라미터 | 설명 |
---|---|
alternative |
양쪽이 차이가 없다.(two.sided), 데이터1이 더 작다(less), 데이터1이 더 크다(greater) |
mu |
귀무가설이 참일 때의 모평균 |
conf.level |
신뢰수준 (95% 기본값) |
독립 표본 T 테스트 수행
두 집단의 키 샘플링하기
# 랜덤값을 사용하고 있기 때문에 실행시마다 결과가 다를 수 있다.
group1Heights <- sample(157:178, 20)
group2Heights <- sample(162:182, 20)
print(group1Heights)
print(group2Heights)
💻 출력결과
[1] 164 173 176 160 161 174 168 175 172 167 162 177 178 157 171 158 170 166 163 165
[1] 174 169 166 173 178 164 176 167 180 171 182 179 170 177 172 181 163 175 162 165
Case 1 - 두 집단의 평균키가 차이가 없다.
t.test(group1Heights, group2Heights,
alternative = "two.sided",
var.equal = FALSE,
conf.level = 0.95)
💻 출력결과
Welch Two Sample t-test
data: group1Heights and group2Heights
t = -2.5327, df = 37.91, p-value = 0.01558
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-9.086765 -1.013235
sample estimates:
mean of x mean of y
167.30 172.35
💻 출력결과 해석
💡 p-value가 0.01558이므로 (0.05보다 작으므로) 귀무가설을 기각하고 대립가설을 채택<br> 두 집단의 평균키는 같지 않다.
Case 2 - group1Heights는 group2Heights보다 작지 않다.
t.test(group1Heights, group2Heights,
alternative = "less",
var.equal = FALSE,
conf.level = 0.95)
💻 출력결과
Welch Two Sample t-test
data: group1Heights and group2Heights
t = -2.5327, df = 37.91, p-value = 0.00779
alternative hypothesis: true difference in means is less than 0
95 percent confidence interval:
-Inf -1.688167
sample estimates:
mean of x mean of y
167.30 172.35
💻 출력결과 해석
💡 p-value가 0.00779이므로 (0.05보다 작으므로) 귀무가설(두 집단의 평균에 차이가 없음/평균이 같음)을 기각하고 대립가설을 채택
#03. Paired T-test(대응 표본 t-검정)
표본의 각 사례마다 대응하는 2개의 관측치가 있다.
다이어트 보조제의 효과 분석
💡 어느 제약회사가 개발 중인 약은 3개월 동안 이 약을 먹으며 고지한 생활규칙을 지키면 2kg 이상의 효과를 볼 수 있다고 자신하고 있을 때, 다이어트 보조제를 복용한 사람들 중 20명을 추려 복용 전/후의 체중 차이가 유의미한지 알아보고 싶다.
가설설정
가설 | 내용 | 해석 |
---|---|---|
귀무가설 | 복용 전/후의 체중 차이가 없다. | 그러므로 이 약은 다이어트에 효과가 없다. |
대립가설 | 귀무 가설을 부정 | 이 약은 다이어트에 효과가 있다. |
구문설명
단일 표본 t-검정구문에서 데이터를 두 개로 구분짓고 모집단의 평균을 의미하는 mu
대신 두 집단의 분산 동일성 여부가 같은지 다른지에 대한 옵션인 var.equal
파라미터를 지정한다.
t.test(데이터1, 데이터2,
mu=2,
alternative = c("two.sided", "less", "greater"),
conf.level = 0.95,
paired=TRUE)
파라미터 | 설명 |
---|---|
alternative | 양쪽이 차이가 없다.(two.sided), 데이터1이 더 작다(less), 데이터1이 더 크다(greater) |
mu=0 | 데이터1이 데이터2보다 mu 값 만큼 더 alternative 하다. |
conf.level | 신뢰수준 (95% 기본값) |
paired=TRUE | 대응 표본 T테스트 수행 |
대응 표본 t테스트 수행
보조제 복용전 몸무게 데이터 샘플링
beforeWeight <- sample(60:90, 20)
print(beforeWeight)
💻 출력결과
[1] 84 89 60 69 87 88 90 65 80 83 67 74 64 76 79 73 72 61 71 62
보조제 복용 후의 몸무게 랜덤 계산
afterWeight <- beforeWeight
x <- sample(2:3, 20, replace=T)
for (i in seq(0:19)) {
afterWeight[i] <- afterWeight[i] - x[i]
}
print(afterWeight)
💻 출력결과
[1] 82 86 57 66 85 85 87 62 77 81 65 72 62 74 77 71 70 58 68 59
대응 표본 t-검정 확인
# before가 after보다 mu=2 만큼 greater 하다.
t.test(beforeWeight, afterWeight, mu=2, alternative="greater", paired=TRUE)
💻 출력결과
Paired t-test
data: beforeWeight and afterWeight
t = 4.3589, df = 19, p-value = 0.0001689
alternative hypothesis: true difference in means is greater than 2
95 percent confidence interval:
2.301655 Inf
sample estimates:
mean of the differences
2.5
💻 출력결과 해석
💡 p-value가 0.0004366이므로 (0.05보다 작으므로) 귀무가설(두 집단의 평균에 차이가 없음/평균이 같음)을 기각하고 대립가설을 채택.
그러므로 이 약을 먹기 전이 먹은 후 보다 2kg정도 몸무게가 더 많이 나간다.
즉, 이 약은 다이어트에 효과가 있다
#04. One-Sample T-test(단일 표본 t-검정) 예제
1) chickwts 데이터 셋 예제
데이터 확인하기
head(chickwts)
💻 출력결과
T-test 수행
t.test(chickwts$weight)
💻 출력결과
💻 출력결과 해석
- 전체 관측치 수는 71개이다. (df + 1)
- 99% 신뢰구간을 구하기 위해서는 “conf.level=0.99”라는 옵션을 사용할 수 있다.
- 닭 무게의 점 추정량은 261.3이며, 95% 신뢰구간은 242.8에서 279.8이다.
- 닭 무게에 대한 p-value는
p-value<2.2e-16
이므로 귀무가설이 기각된다.
2) Wage 데이터셋 예제
패키지 가져오기
REPO_URL <- "https://cran.seoul.go.kr/"
if (!require("ISLR")) { install.packages("ISLR", repos=REPO_URL) }
library(ISLR)
t-test 수행
모집단의 평균을 100으로 지정하여 t-test 수행
t.test(Wage$wage, mu=100)
💻 출력결과
💻 출력결과 해석
- 한 집단의 평균에 대한 t-test(one-sample t-test)이다.
- 양측검정 결과를 보여주고 있다.
- t-test의 자유도(df)는 2999이다.
- 평균에 대한 95% 신뢰구간은 귀무가설에서 설정한 평균의 참값을 포함한다.