Programs/R

[R_tidyverse] t-검정: 독립표본 t-검정 independent samples t-test ②

도마도다 2024. 2. 16. 10:29

 

 

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

*tidyverse 패키지를 활용한 분석방법
  • 추론 방식을 사용하여 t-검정을 실시할 때는 부트스트래핑 방법을 활용할 수 있음
    • 부트스트래핑: 데이터에서 여러 개의 샘플을 반복적으로 추출하여 새로운 분포를 만들어 내고, 이를 활용하여 통계적 추정이나 가설 검정을 수행하는 방법
  • 사용되는 함수
    • specify(): 어떤 데이터를 가져올거야?
    • generate(): 데이터에서 가상의 샘플들을 뽑아줘 
    • calculate(): 각각의 통계치 계산해
    • visualize(): 새로운 분포 그래프 만들기
    • hypothesize(): 귀무가설 가정
  • 두 가지 방법 있음: 표본평균 활용, t값  활용

 

 

 

 

 

차례

  • 패키지 설치 및 불러오기, 데이터 불러오기
  • 1번 방법: 표본평균 활용
    1. 통계치 확인 및 새로운 분포 생성
    2. 신뢰구간 계산
    3. p값 확인 및 시각화
  • 2번 방법: t값 활용
    1. 통계치 계산 및 분포생성
    2. 신뢰구간 계산 및 시각화
  • 부록: 비모수통계분석
 

 

 

 

 

 

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

  • 오늘의 실습을 위해 필요한 R 패키지. 패키지는 한 번 설치하면 다음에 다시 설치할 필요 없음. 그러나 라이브러리는 매번 불러와야 함!
  • A자동차회사와 B자동차 회사의 타이어수명에 차이가 있는지 보고자 함
# 패키지 설치
install.packages("tidyverse") #쌍따옴표 주의
install.packages("tidymodels")
install.packages("rstatix")

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

# <데이터 불러오기>
## R스크립트와 csv파일이 같은 폴더에 있을 경우의 코드
ist_tb <- read_csv("06.ist.csv",
                   col_names = T,
                   na = ".",
                   locale = locale("ko", encoding = "euc-kr")) %>% # 원데이터의 변수명이 한글이라 불러올 때 변환절차 필요함
  mutate_if(is.character, as.factor) %>% # character를 factor로 바꿔
  mutate(자동차회사 = factor(자동차회사, # 자동차회사 라는 변수 내에 있는
                           levels = c(1,2), # 범주 1, 2의 이름을
                           labels = c("A자동차", "B자동차"))) # 이렇게 바꿔줘

 

 

 

 

 

 

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

 

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

x_bar <- ist_tb %>%
  specify(formula = 타이어수명 ~ 자동차회사) %>% # 자동차회사 그룹에 따른 타이어수명
  calculate(stat = "diff in means", # 두 그룹 간 평균의 차이 보고자 함
            order = c("A자동차","B자동차")) %>% # A자동차가 기준점이 됨
  print()

null_dist_x <- ist_tb %>%
  specify(formula = 타이어수명 ~ 자동차회사) %>%
  hypothesize(null = "independence") %>% # 평균 간 차이를 보는데 각각의 독립적인 값을 활용하겠다는 뜻
  generate(reps = 1000,
           type = "permute") %>% # 퍼뮤트 방법 사용
  calculate(stat = "diff in means",
            order = c("A자동차","B자동차")) %>%
  print()
 
위를 실행시키면 아래와 같이 출력됨. 1000번 추출한 샘플들 각각의 평균을 보여줌
Response: 타이어수명 (numeric)
Explanatory: 자동차회사 (factor)
Null Hypothesis: independence
# A tibble: 1,000 × 2
   replicate     stat
       <int>    <dbl>
 1         1 -1642.  
 2         2 -1879.  
 3         3  -551.  
 4         4   174.  
 5         5 -1630.  
 6         6 -1173.  
 7         7   781.  
 8         8     3.14
 9         9    70.4 
10        10 -1601.  
# ℹ 990 more rows
# ℹ Use `print(n = ...)` to see more rows
 
 
 
 
 
 
 
 
 
 
 

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     316.     324.
 
 
 
 
 
 
 
 
 

3. p값 확인 및 시각화

null_dist_x %>%
  get_p_value(obs_stat = x_bar,
              direction = "two-sided") # p밸류 0.05보다 작음 -> 귀무가설 기각 -> 차이가 있다!

null_dist_x %>%
  visualize() +
  shade_p_value(obs_stat = x_bar,
                direction = "two-sided") +
  shade_confidence_interval(endpoints = null_dist_ci) # 신뢰구간 벗어남 -> 귀무가설 기각    
 
빨간 선이 p-value, 초록영역이 신뢰구간. 신뢰구간 안에 관측치가 들어와야 귀무가설 채택, 아래를 보면 아닌 것을 알 수 있음  
 
-> 대체가설 채택(두 회사 간 타이어수명에는 차이가 있다)
 

 

 

2번 방법: t값 활용

 

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

t_cal <- ist_tb %>%
  specify(formula = 타이어수명 ~ 자동차회사) %>%
  calculate(stat = "t",
            order = c("A자동차","B자동차")) %>% # A자동차가 기준점이 됨
  print() # -2.92, 이미 1.96을 벗어남


null_dist_t <- ist_tb %>%
  specify(formula = 타이어수명 ~ 자동차회사) %>%
  hypothesize(null = "independence") %>% # 평균 간 차이이기 때문에 각각의 독립적인 값을 활용하겠다는 뜻
  generate(reps = 1000,
           type = "permute") %>% # 퍼뮤트 방법 사용하겠다!
  calculate(stat = "t",
            order = c("A자동차","B자동차")) %>%
  print()

 

 

 

 

 

 

 

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

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

null_dist_x %>%
  get_p_value(obs_stat = t_cal,
              direction = "two-sided") # p밸류 0.05보다 작음 -> 귀무가설 기각 -> 차이가 있다!

null_dist_t %>%
  visualize(method = "both") +
  shade_p_value(obs_stat = t_cal,
                direction = "two-sided") +
  shade_confidence_interval(endpoints = null_dist_ci) # 신뢰구간 벗어남 -> 귀무가설 기각    
 
아래의 그래프가 생성됨 → 귀무가설 기각
 
 
 
 
 
 
 
 
 
 

부록: 비모수통계분석

 

샤피로 테스트에서 정규분포가 아니라고 나왔을 때는 모수통계분석이 불가능하기 때문에 비모수통계분석 진행

# 비모수 통계분석 방법
## 샤피로 테스트에서 정규분포가 아니라고 나왔을 때 -> Wilcox_test 진행
## 귀무가설: 두 그룹 간 차이가 없다
ist_tb %>%
  wilcox_test(formula = 타이어수명 ~ 자동차회사,
              alternative = "two.sided") # 귀무가설 기각!