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개의 그룹, 같은 개체 또는 짝을 이루는 개체들의 두 관측치 간의 평균 차이를 비교하는 검정

 

 

 

 

 

 

 

 

 

 추론 Infer 활용한 독립표본 t-검정 independent samples t-test 실습

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

  • 추론 방식을 사용하여 t-검정을 실시할 때는 부트스트래핑 방법을 활용할 수 있음
    • 부트스트래핑: 데이터에서 여러 개의 샘플을 반복적으로 추출하여 새로운 분포를 만들어 내고, 이를 활용하여 통계적 추정이나 가설 검정을 수행하는 방법
  • 사용되는 함수
    • specify(): 어떤 데이터를 가져올거야?
    • generate(): 데이터에서 가상의 샘플들을 뽑아줘
    • calculate(): 각각의 통계치 계산해
    • visualize(): 새로운 분포 그래프 만들기
    • hypothesize(): 귀무가설 가정
  • 두 가지 방법 있음: 표본평균 활용, t값 활용
  • 대응표본 t-검정 같은 집단에 대해 두 번의 측정을 수행했을 때, 두 측정 결과 사이의 평균 차이가 유의미한지를 검정하는 방법이다. 즉, 처치 전후, 훈련 전후, 시술 전후 등 같은 대상에 대한 변화를 비교하는 데 사용된다.
  • 독립표본 t-검정의 경우 서로 다른 두 집단을 데리고 오기 때문에 둘의 분산이 동질한지 검정할 필요가 있었으나(등분산 검정), 대응표본 t-검정에서는 같은 집단의 처치 전후를 비교하기 때문에 필요가 없다.

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

 

 

 

 

 

 

 

 

 차례

- 패키지 설치 및 불러오기, 데이터 불러오기, 변수 설정

- 1번 방법: 표본평균 활용

1) 통계치 확인 및 새로운 분포 생성

2) 신뢰구간 계산

3) p값 확인 및 시각화

- 2번 방법: t값 활용

1) 가설 설정 및 통계량 계산

2) 신뢰구간 계산 및 시각화

 

 

 

 

 

 

패키지 설치 및 불러오기, 데이터 불러오기, 변수설정

  • 오늘의 실습을 위해 필요한 R 패키지. 패키지는 한 번 설치하면 다음에 다시 설치할 필요 없음. 그러나 라이브러리는 매번 불러와야 함!
  • 오늘 실습에서는 한 집단을 대상으로 다이어트 복용 전과 복용 후(3개월 후) 체중을 비교해 본다.
  • 우리가 알고자하는 것은 섭취 전과 후의 몸무게 차이이기 때문에(섭취전 몸무게 - 섭취후 몸무게) 둘의 몸무게 차이값을 새로운 변수로 설정함
# 패키지 설치
install.packages("tidyverse") #쌍따옴표 주의
install.packages("tidymodels")
install.packages("rstatix")

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

# 데이터 불러오기
pst_tb <- read_csv("07.pst.csv",
                   col_names = T,
                   na = ".",
                   locale = locale("ko", encoding = "euc-kr")) #원데이터의 변수명이 한글이라

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

 

 

 

 

 

 

 

 

 

1번 방법: 표본평균(Xbar) 활용

 

 1. 통계치 확인 및 새로운 분포 생성

x_bar <- pst_tb %>%
  specify(response = 차이) %>%
  calculate(stat = "mean") %>%
  print()

null_dist_x <- pst_tb %>% 
  specify(response = 차이) %>%
  hypothesize(null = "point",
              mu = 0) %>% 
  generate(reps = 1000, 
           type = "bootstrap") %>%
  calculate(stat = "mean")%>%
  print()

위를 실행시키면 아래와 같이 출력됨. 1000번 추출한 샘플들 각각의 평균을 보여줌

Response: 차이 (numeric)
Null Hypothesis: point
# A tibble: 1,000 × 2
   replicate   stat
       <int>  <dbl>
 1         1 -1.2  
 2         2 -0.200
 3         3 -0.2  
 4         4  0.200
 5         5 -1.4  
 6         6  0.150
 7         7 -0.200
 8         8 -0.35 
 9         9 -0.85 
10        10  0.200

 

 

 

 

 

 

 

 2. 신뢰구간 계산

# 신뢰구간 계산: 이 구간 안에 값이 들어와야 귀무가설 채택 가능
null_dist_ci <- null_dist_x %>% 
  get_ci(level = 0.95,
         type = "percentile") %>%
  print() 

아래가 신뢰구간

# A tibble: 1 × 2
  lower_ci upper_ci
     <dbl>    <dbl>
1    -1.45     1.30

 

 

 

 

 

 

 

 

 3. p값 확인 및 시각화

null_dist_x %>%
  visualize() + 
  shade_p_value(obs_stat = x_bar, 
                direction = "less") + # 섭취 후의 몸무게가 줄어들었는지를 보기 때문에 less
  shade_confidence_interval(endpoints = null_dist_ci)

빨간 선이 p-value, 초록영역이 신뢰구간. 신뢰구간 안에 관측치가 들어와야 귀무가설 채택, 아래를 보면 아닌 것을 알 수 있음

-> 대체가설 채택(다이어트 약 복용 전후 몸무게 차이가 있다!)

 

 

 

 

 

 

 

 

 

 

2번 방법: t값 활용

 

 1. 통계치 계산 및 분포 생성

t_cal <- pst_tb %>%
  specify(response = 차이) %>%
  hypothesize(null = "point",
              mu = 0) %>%
  calculate(stat = "t") %>%
  print()

null_dist_t <- pst_tb %>% # 귀무가설 가정
  specify(response = 차이) %>%
  hypothesize(null = "point",
              mu = 0) %>% # 검증값을 0으로 설정(복용 전후 몸무게 차이=0)
  generate(reps = 1000, # 1000개 샘플링
           type = "bootstrap") %>%
  calculate(stat = "t")%>%
  print() # 저장과 동시에 프린트

 

 

 

 2. 신뢰구간 계산 및 시각화

ull_dist_ci <- null_dist_t %>% 
  get_ci(level = 0.95,
         type = "percentile") %>%
  print() 

null_dist_t %>%
  visualize(method = "both") + #both를 넣으면 이론적 분포(라인그래프)와 샘플의 값(히스토그램)을 비교  
  shade_p_value(obs_stat = t_cal, # obs_stat 관측치
                direction = "less") + # 값이 너무 많이 떨어져 있어, 귀무가설 기각
  shade_confidence_interval(endpoints = null_dist_ci)

아래의 그래프가 생성됨 → 귀무가설 기각

 

 

 

 

 

 

 

 

 

 

 

Contents

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

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