Post

[R] T-Test 가설검정

[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값에 따라 크다, 작다로 판별될 수 있음)
대립가설을 채택한다.

구문 설명

1
2
3
4
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명에 대한 키를 리스트 구성 (랜덤배치)

1
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

1
t.test(height, alternative="two.sided", mu=175)

💻 출력결과

1
2
3
4
5
6
7
8
9
10
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 파라미터를 지정한다.

1
2
3
4
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 테스트 수행

두 집단의 키 샘플링하기

1
2
3
4
5
# 랜덤값을 사용하고 있기 때문에 실행시마다 결과가 다를 수 있다.
group1Heights <- sample(157:178, 20)
group2Heights <- sample(162:182, 20)
print(group1Heights)
print(group2Heights)

💻 출력결과

1
2
 [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 - 두 집단의 평균키가 차이가 없다.

1
2
3
4
t.test(group1Heights, group2Heights,
        alternative = "two.sided",
        var.equal = FALSE,
        conf.level = 0.95)

💻 출력결과

1
2
3
4
5
6
7
8
9
10
11
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보다 작지 않다.

1
2
3
4
t.test(group1Heights, group2Heights,
        alternative = "less",
        var.equal = FALSE,
        conf.level = 0.95)

💻 출력결과

1
2
3
4
5
6
7
8
9
10
11
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 파라미터를 지정한다.

1
2
3
4
5
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테스트 수행

보조제 복용전 몸무게 데이터 샘플링

1
2
beforeWeight <- sample(60:90, 20)
print(beforeWeight)

💻 출력결과

1
[1] 84 89 60 69 87 88 90 65 80 83 67 74 64 76 79 73 72 61 71 62

보조제 복용 후의 몸무게 랜덤 계산

1
2
3
4
5
6
7
8
9
afterWeight <- beforeWeight

x <- sample(2:3, 20, replace=T)

for (i in seq(0:19)) {
    afterWeight[i] <- afterWeight[i] - x[i]
}

print(afterWeight)

💻 출력결과

1
[1] 82 86 57 66 85 85 87 62 77 81 65 72 62 74 77 71 70 58 68 59

대응 표본 t-검정 확인

1
2
# before가 after보다 mu=2 만큼 greater 하다.
t.test(beforeWeight, afterWeight, mu=2, alternative="greater", paired=TRUE)

💻 출력결과

1
2
3
4
5
6
7
8
9
10
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 데이터 셋 예제

데이터 확인하기

1
head(chickwts)

💻 출력결과

img

T-test 수행

1
t.test(chickwts$weight)

💻 출력결과

img

💻 출력결과 해석

  • 전체 관측치 수는 71개이다. (df + 1)
  • 99% 신뢰구간을 구하기 위해서는 “conf.level=0.99”라는 옵션을 사용할 수 있다.
  • 닭 무게의 점 추정량은 261.3이며, 95% 신뢰구간은 242.8에서 279.8이다.
  • 닭 무게에 대한 p-value는 p-value<2.2e-16이므로 귀무가설이 기각된다.

2) Wage 데이터셋 예제

패키지 가져오기

1
2
3
REPO_URL <- "https://cran.seoul.go.kr/"
if (!require("ISLR")) { install.packages("ISLR", repos=REPO_URL) }
library(ISLR)

t-test 수행

모집단의 평균을 100으로 지정하여 t-test 수행

1
t.test(Wage$wage, mu=100)

💻 출력결과

img

💻 출력결과 해석

  • 한 집단의 평균에 대한 t-test(one-sample t-test)이다.
  • 양측검정 결과를 보여주고 있다.
  • t-test의 자유도(df)는 2999이다.
  • 평균에 대한 95% 신뢰구간은 귀무가설에서 설정한 평균의 참값을 포함한다.
This post is licensed under CC BY 4.0 by the author.