Tomato [R_tidyverse] t-검정: 대응표본 t-검정 paired sample t-test ①

새소식

Programs/R

[R_tidyverse] t-검정: 대응표본 t-검정 paired sample t-test ①

  • -

  • 통계분석의 종류는 목적에 따라 크게 (그룹 간) 차이검정, (변수 간) 관계검정 으로 나눌 수 있고, t-검정은 전자에 해당함
  • 그룹 간 차이검정 방법은 t검정과 분산분석(ANOVA) 이 있음, t-검정은 그룹이 1~2개일 때, ANOVA는 3개 이상일 때 사용
  • t-검정의 종류
   
단일표본 t-검정
one sample t-test
1개의 그룹, 단일 집단의 평균을 특정 값과 비교하는 검정
독립표본 t-검정 independent samples t-test 2개의 그룹, 단일 집단의 평균을 특정 값과 비교하는 검정
대응표본 t-검정
paired sample t-test
2개의 그룹, 같은 개체 또는 짝을 이루는 개체들의 두 관측치 간의 평균 차이를 비교하는 검정

 

 

 

*tidyverse 패키지를 활용한 분석방법

대응표본 t-검정은 같은 집단에 대해 두 번의 측정을 수행했을 때, 두 측정 결과 사이의 평균 차이가 유의미한지를 검정하는 방법이다.

즉, 처치 전후, 훈련 전후, 시술 전후 등 같은 대상에 대한 변화를 비교하는 데 사용된다.

독립표본 t-검정의 경우 서로 다른 두 집단을 데리고 오기 때문에 둘의 분산이 동질한지 검정할 필요가 있었으나(등분산 검정),

대응표본 t-검정에서는 같은 집단의 처치 전후를 비교하기 때문에 필요가 없다.

오늘 실습에서는 한 집단을 대상으로 다이어트 복용 전과 복용 후(3개월 후) 체중을 비교해본다.
귀무가설: 복용 전후 몸무게 차이가 없다

 

 

 

 

 

 

1. 패키지 설치 및 불러오기
2. 데이터 불러오기
3. 데이터 형태 변환 및 새로운 변수 설정
4. 기술통계 및 그래프그리기
5. 이상치 제거
6. 샤피로 테스트: 정규분포 검정
7. 통계분석
8. 효과 크기 effect size (cohens d)

 

 

 

오늘의 실습을 위해 필요한 R 패키지. 패키지는 한 번 설치하면 다음에 다시 설치할 필요 없음. 그러나 라이브러리는 매번 불러와야 함!

# 패키지 설치 install.packages("tidyverse") #쌍따옴표 주의 install.packages("tidymodels") install.packages("rstatix") install.packages("rskim") #설치한 패키지 불러오기 (라이브러리) library(tidyverse) #쌍따옴표 없음 library(tidymodels) library(rstatix) library(rskim)

 

 

 

 

# 데이터 불러오기 pst_tb <- read_csv("07.pst.csv", col_names = T, na = ".", locale = locale("ko", encoding = "euc-kr")) # 한글로 된 변수명을 읽어오기 위해 # 데이터 파악 str(pst_tb) skim(pst_tb) pst_tb

 

 

 

 

 


tidyverse 패키지에서는 tibble이라는 기본 데이터 형식으로 분석을 진행함

tibble 데이터는 wide형과 long형이라는 두 가지 형식으로 표현될 수 있음

통계분석 시에는 long형 데이터를 사용하고, 기초통계 파악이나 그래프 그릴 때에는 wide형 데이터를 사용함

각 변수(특징, 속성)가 한 개의 열로 표현되는 형식. 다음과 같은 데이터는 Wide형.

#> # A tibble: 3 x 4 #> id gender age height #> <dbl> <chr> <dbl> <dbl> #> 1 1 남성 20 170 #> 2 2 여성 25 160 #> 3 3 남성 30 180

각 변수가 한 개의 행으로 표현되는 형식. 위 데이터를 Long형으로 변환하면 다음과 같음.

#> # A tibble: 9 x 3 #> id 변수 값 #> <dbl> <chr> <dbl> #> 1 1 gender 남성 #> 2 2 gender 여성 #> 3 3 gender 남성 #> 4 1 age 20 #> 5 2 age 25 #> 6 3 age 30 #> 7 1 height 170 #> 8 2 height 160 #> 9 3 height 180

 

 

현재 우리의 데이터는 아래와 같은 형태임. 위를 참고하면 이 데이터는 지금 wide형인데 통계분석하려면 long형 데이터로 변환해줘야 함.

즉, 우리가 비교하려는 섭취전/섭취후라는 변수가 열이 아니라 행으로 표현되어야 함.

# A tibble: 20 × 3 id 섭취전 섭취후 <dbl> <dbl> <dbl> 1 1 82 75 2 2 54 50 3 3 74 74 4 4 75 71 5 5 71 69 6 6 76 73 7 7 70 68 8 8 62 62 9 9 77 68 10 10 75 72 11 11 72 70 12 12 83 77 13 13 78 71 14 14 74 74 15 15 68 67 16 16 76 73 17 17 75 77 18 18 75 71 19 19 75 76 20 20 71 74

아래의 코드를 실행하면 long형으로 변환할 수 있음.

#long형 데이터 변환 pst_tb_long <- pst_tb %>% pivot_longer(c("섭취전","섭취후"), names_to = "시간", #섭취전/섭취후 를 '시간'이라는 변수명으로 묶음 values_to = "몸무게") #기존 섭취전/섭취후 각각의 변수들 안에 있던 값을 '몸무게'라는 변수명으로 묶어냄 pst_tb_long

실행시키면 아래와 같이 long 형 데이터가 만들어짐. 이제 통계분석 시에는 pst_tb_long을 활용할 것임

# A tibble: 40 × 3 id 시간 몸무게 <dbl> <chr> <dbl> 1 1 섭취전 82 2 1 섭취후 75 3 2 섭취전 54 4 2 섭취후 50 5 3 섭취전 74 6 3 섭취후 74 7 4 섭취전 75 8 4 섭취후 71 9 5 섭취전 71 10 5 섭취후 69 # ℹ 30 more rows # ℹ Use `print(n = ...)` to see more rows

우리가 알고자하는 것은 섭취 전과 후의 몸무게 차이이기 때문에(섭취전 몸무게 - 섭취후 몸무게) 둘의 몸무게 차이값을 새로운 변수로 설정

# 차이값 추가 변수 설정 pst_tb <- pst_tb %>% mutate(차이 = 섭취후 - 섭취전) %>% print()

 

 

 

 

 

기술통계분석과 그래프 그리기는 기존의 wide형 데이터를 활용하면 됨(pst_tb)

# 기술통계분석 skim(pst_tb) pst_tb%>% get_summary_stats(섭취전, 섭취후, 차이) # 그래프 그리기 ## box-plot과 histogram을 그려서 데이터의 이상치와 분포 확인하기 pst_tb %>% ggplot(mapping = aes(y = 차이)) + geom_boxplot() pst_tb %>% ggplot(mapping = aes(x = 차이)) + geom_histogram(binwidth = 3, color = "white", fill = "steelblue")

 

 

 

아래 코드 실행해보면 이상치 없음. 넘어감.

# 이상치 제거 pst_tb %>% identify_outliers(차이)

 

 

 

 

 

 

 

 

  • 통계분석은 데이터의 분포가 정규분포일 것을 가정하고 이루어짐. 따라서 통계분석을 위해서는 이 데이터의 분포가 정규분포를 따르는지 검정해보아야 함.
  • 그럴때 사용되는 것이 샤피로 테스트. 샤피로 테스트의 귀무가설은 '이 데이터의 분포가 정규분포를 따른다'는 것이고, 반대되는 대체가설은 '정규분포를 따르지 않는다' 가 됨. 샤피로 테스트의 p밸류 값이 0.05 이상이라면 귀무가설이 채택되면서 정규분포를 따른다고 볼 수 있음
  • shapiro_test() 함수를 활용하면 됨
pst_tb %>% shapiro_test(차이)

 

위의 코드 입력 결과 아래와 같이 출력됨. p밸류 0.05 이상이기 때문에 귀무가설이 채택됨. 즉, 이 데이터의 분포가 정규분포라고 받아들일 수 있음

# A tibble: 1 × 3 variable statistic p <chr> <dbl> <dbl> 1 차이 0.977 0.883

 

 

 

 

 

 

이 검정에서 귀무가설은 “다이어트약 복용 전후의 몸무게 차이가 없다” 임

pst_tb_long %>% t_test(formula = 몸무게 ~ 시간, ref.group = "섭취후", # 섭취후를 기준으로 paired = T, # 각 사람의 관측치를 짝지을 것인지 -> 대응표본이기 때문에 TRUE alternative = "less", # 섭취 후의 값이 줄어들었는가를 보기 때문에 detailed = T)

p값 = 0.00088 → 0.05 보다 작음 → 귀무가설 기각 → 다이어트약 복용전후 몸무게 차이 있다!

# A tibble: 1 × 13 estimate .y. group1 group2 n1 n2 statistic p df conf.low conf.high method alternative * <dbl> <chr> <chr> <chr> <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr> 1 -2.55 몸무게 섭취후 섭취전 20 20 -3.64 0.00088 19 -Inf -1.34 T-test less

 

 

 

 

검증한 값의 효과가 얼마나 크냐(귀무가설과 대체가설의 차이) 볼때 cohens d - 이펙트 사이즈 를 봄
pst_tb_long %>% cohens_d(formula = 몸무게 ~ 시간, paired = T)

 

실행시키면 아래와 같이 출력. large 정도의 큰 차이, 큰 효과 크기
# A tibble: 1 × 7 .y. group1 group2 effsize n1 n2 magnitude * <chr> <chr> <chr> <dbl> <int> <int> <ord> 1 몸무게 섭취전 섭취후 0.813 20 20 large

 

 

 

 

 

 

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.