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

새소식

Programs/R

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

  • -

 t-검정

  • 통계분석의 종류는 목적에 따라 크게 (그룹 간) 차이검정, (변수 간) 관계검정 으로 나눌 수 있고, 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개의 그룹, 같은 개체 또는 짝을 이루는 개체들의 두 관측치 간의 평균 차이를 비교하는 검정

 

 

 

 

 

 

 

 대응표본 t-검정 paired sample t-test 실습

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

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

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

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

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

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

 

 

 

 

 

 

 차례

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

 

 

 

1. 패키지 설치 및 불러오기

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

# 패키지 설치
install.packages("tidyverse") #쌍따옴표 주의
install.packages("tidymodels")
install.packages("rstatix")
install.packages("rskim")

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

 

 

 

 

2. 데이터 불러오기

# 데이터 불러오기
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

 

 

 

 

 

3. 데이터 형태 변환 및 새로운 변수 설정


참고: tibble 데이터의 두 가지 형식

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

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

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

 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형

각 변수가 한 개의 행으로 표현되는 형식. 위 데이터를 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()

 

 

 

 

 

4. 기술통계 및 그래프그리기

기술통계분석과 그래프 그리기는 기존의 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")

 

 

 

5. 이상치 제거

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

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

 

 

 

 

 

 

 

 

6. 샤피로 테스트: 정규분포 검정

  • 통계분석은 데이터의 분포가 정규분포일 것을 가정하고 이루어짐. 따라서 통계분석을 위해서는 이 데이터의 분포가 정규분포를 따르는지 검정해보아야 함.
  • 그럴때 사용되는 것이 샤피로 테스트. 샤피로 테스트의 귀무가설은 '이 데이터의 분포가 정규분포를 따른다'는 것이고, 반대되는 대체가설은 '정규분포를 따르지 않는다' 가 됨. 샤피로 테스트의 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

 

 

 

 

 

 

7. 통계분석

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

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 

 

 

 

8. 효과크기 effect size

 

검증한 값의 효과가 얼마나 크냐(귀무가설과 대체가설의 차이) 볼때 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

 

 

 

 

 

 

Contents

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

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