데이터분석/R

R 프로그래밍 10 - T-TEST(독립표본 t-test)

devbean 2021. 12. 26. 01:52
반응형

https://kbkb456.tistory.com/90

 

R 프로그래밍 9 - dplyr을 활용하여 깔끔한 코드로 데이터 전처리하기(filter, arrange, mutate, select, summa

https://kbkb456.tistory.com/62 R 프로그래밍 8 - R 데이터 프레임을 피벗 테이블 처럼 활용하기(dcast, melt) 오늘은 R의 데이터 프레임을 피벗테이블처럼 활용하는 법에 대해서 알아보도록 하겠습니다. 여

kbkb456.tistory.com

저번 시간까지 데이터를 가공하고 요약하는 법에 대해서 배웠습니다.

오늘은 T-TEST에 대해서 알아보도록 합시다.

 

필요한 라이브러리 불러오기

library(lawstat)
library(dplyr)

 

T-TEST?

두 집단간 평균을 비교하는 대표적인 방법입니다.

 

t-test는 분석을 위해서 여러 가지 가정을 하게 됩니다.

 

T-TEST의 기본가정

1. 두 집단의 분포가 정규분포이다.(정규성)

2. 두 집단의 분포는 같은 분산을 가지고 있다(등분 산성)

3. 실험은 서로 독립적으로 이루어졌을 것이다.(독립성)

 

TTEST 기본 가정

위의 그림에서 sample A와 sample b가 똑같이 정규분포를 가지고 같은 분포의 모양(분산)인 것을 알 수 있습니다. 이렇게 같을 때 x축에서 서로 평균값을 비교한다고 보시면 됩니다.

 

즉, 서로 같은 모양의 정규분포를 따를 때 서로의 평균을 비교하겠다는 것입니다.

(물론 정규성을 따르지 않아도 비모수적인 방법이나 분산이 같지 않은 경우, 서로 같은 샘플을 활용했을 시에도 분석방법은 다 있습니다.)

 

제가 아래와 같은 실험을 설계해서 분석을 한다고 가정해봅시다.

시험을 친다고 했을 때 청심환을 먹고 시험을 친 시험군과 아닌 시험군의 점수를 비교하고 싶다고 해봅시다. 

 

실험 설계

그룹 처리
A군(비교군) 청심환을 먹고 시험을 보는 10명의 학생
B군(대조군) 청심환을 안먹고 시험을 보는 10명의 학생
측정 대상
비교해야할 것 시험 점수

비교해야 할 건 A, B 그룹 간 평균 점수의 차이입니다.

 

3가지 가정을 검정

예시 데이터 셋

#데이터 프레임생성
df <- data.frame(score=c(2.5,2.49,2.51,2.59,2.56,2.61,2.86,2.7,2.69,2.76,1.44,1.44,1.43,1.4,1.49,1.56,1.78,1.62,1.59,1.68),
                 test_type = c(rep("A",10),rep("B",10)))

 

예시 데이터셋

 

- 독립성: 서로 다른 집단에게 청심환을 먹고 안 먹고를 나눴으니 독립적으로 실험된 게 맞다.

 

- 정규성: Shapiro-Wilk test를 이용한 검정

 

Shapiro-Wilk test는 아래의 수식을 가지고 계산이 되는데 그냥 편하게 정규성을 검정해주는 함수라고 보시면 됩니다.

shapiro-wlik 테스트 수식

https://en.wikipedia.org/wiki/Shapiro%E2%80%93Wilk_test

 

Shapiro–Wilk test - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search The Shapiro–Wilk test is a test of normality in frequentist statistics. It was published in 1965 by Samuel Sanford Shapiro and Martin Wilk.[1] The Shapiro–Wilk test tests the null

en.wikipedia.org

Shapiro-Wilk test를 통해서 분포가 정규성을 검정해보도록 하겠습니다.

#a정규성 검정
a_score <- df %>% filter(test_type == 'A') %>% select(score)
shapiro.test(a_score$score)

#b정규성 검정
b_score <- df %>% filter(test_type == 'B') %>% select(score)
shapiro.test(b_score$score)

 

dplyr에서 배운 chain 함수를 이용해서 필요한 칼럼만 가져오도록 하겠습니다.

a_score 예시

저렇게 필터 쳐온 데이터를 shapiro.test 함수에 에 넣어서 실행하면 이런 결과가 나오게 됩니다.

Shapiro-Wilk test 결과

보통 p-value가 0.05보다 크면 정규분포를 따른다고 하고 있습니다.

따라서 현재 a, b 두 집단은 정규분포를 따른다고 가정할 수 있습니다.

 

- 등분 산성:  Levene's test를 이용한 검정

#a와 b간의 levene test
levene.test(df$score,df$test_type,location='mean')

문법: levene.test(비교할 점수 데이터, 그룹 데이터, location= 비교하는 방법)

 

 

이제 a, b간의 등분산을 보도록 하겠습니다.

levene.test

보통 p-value가 0.05보다 크면 서로 집단의 분산(분포 모양)은 같다고 보고 있습니다.

따라서 현재 a,b 두 집단의 분산은 같다고 가정하겠습니다.

 

T-TEST를 해보자

t.test(a_score$score, b_score$score, var.equal=TRUE)

문법: t.test(a집단의 score, b집단의 socre,  var.equal=등분산이면 TRUE 아니면 FALSE)

아까 만들어 두었던 위의 집단 데이터를 활용해서 t-test를 진행해봅시다.

 

가설

H0: 두 집단의 점수 평균차이는 없을 것이다.

H1: 두집단의 점수 평균 차이가 있을 것이다.

 

실행결과

TTEST 실행결과

p-value가 0.05보다 작기 때문에 H1의 가설이 채택되어서 "두 집단 간의 평균의 차이는 있다."로 볼 수 있는데요.

 

평균값을 보면 x에 해당하는 값이 2.627, y에 해당하는 값은 1.543으로 x에 해당하는 a집단의 평균이 b집단보다 통계적으로 유의미하게 높다는 결론을 도출할 수 있겠습니다.

 

오늘은 독립 표본에 대한 t-test에 대해서 알아봤습니다. 다음엔 이것 말고도 대응 표본이나 정규분포를 따르지 않는 경우, 혹은 등분산을 따르지 않는 경우 t-test를 어떻게 하는지 알아보도록 하겠습니다.

 

반응형