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

새소식

Programs/R

[R_tidyverse] t-검정: 독립표본 t-검정 independent samples 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-검정 independent sample t-test 실습

 

독립표본 t-검정은 지난번 실습한 단일표본 t-검정과 거의 동일한 절차로 이루어지지만,

독립표본의 경우 서로 다른 두 집단을 데리고 오기 때문에 둘의 분산이 동질한지 검정할 필요가 있다.
따라서 <등분산 검정> 과정이 추가된다.
 
오늘 실습에서는 A자동차 회사와 B자동차 회사의 타이어수명에 차이가 있는지를 확인해볼 것임
귀무가설: 차이가 없다(m1-m2 =0)
 
 
 
 
 
 

차례

1. 패키지 설치 및 불러오기
2. 데이터 불러오기, 기술통계, 그래프 그리기
3. 이상치 제거
4. 샤피로 테스트: 정규분포 검정
5. 등분산 검정
6. 통계분석: 차이검정(등분산일 경우)
7. 효과크기 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. 데이터 불러오기, 기술통계, 그래프 그리기

# 데이터 불러오기
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자동차"))) # 이렇게 바꿔줘 

 

# 기술통계
str(ist_tb)
ist_tb
skim(ist_tb)

## 그룹쪼개서 확인해보기(A자동차, B자동차)
ist_tb %>%
  group_by(자동차회사) %>% # group_by 로 자동차회사 안의 범주들의 그룹을 나눔
  get_summary_stats(타이어수명) 

ist_tb %>%
  group_by(자동차회사) %>%
  skim(타이어수명)

 

# 그래프 그리기
## box-plot과 histogram을 그려서 데이터의 이상치와 분포 확인하기
ist_tb %>%
  ggplot(mapping = aes(x = 자동차회사,
                       y = 타이어수명)) +
  geom_boxplot()

ist_tb %>%
  ggplot(mapping = aes(x = 타이어수명)) +
  geom_histogram(bins = 10, # 10개의 바를 만들어줘
                 color = "white", # 바의 테두리 색깔 지정
                 fill = "steelblue") + # 바를 채우는 색깔지정
  facet_wrap(~ 자동차회사) # 두 개 그룹 간 비교가 필요하니, 쪼개서 각각의 그래프 확인

 

 

 

 

 

 

 

 

3. 이상치 제거 

통계분석을 위해 분포에서 벗어나는 극단적인 값, 이상치를 제거해야 함. identify_outliers() 함수를 활용하면 간단히 파악 가능. 
박스플랏에 나타나지 않았던 이상치가 나타나기도 함.
# 각각의 그룹을 나누어서 이상치 확인
ist_tb %>%
  group_by(자동차회사) %>%
  identify_outliers(타이어수명)
 
A자동차는 38214, B자동차는 41852 아웃라이어
# A tibble: 2 × 4
  자동차회사 타이어수명 is.outlier is.extreme
  <fct>           <dbl> <lgl>      <lgl>     
1 A자동차         38214 TRUE       FALSE     
2 B자동차         41852 TRUE       FALSE     
 
filter 함수를 활용하여 각각의 그룹에서 이상치 제거
# 이상치 제거
ist_tb <- ist_tb %>%
  filter(!(자동차회사 == "A자동차" & 타이어수명 <= 38214)) %>%
  filter(!(자동차회사 == "B자동차" & 타이어수명 <= 41852))

# 제거되었는지 확인
ist_tb %>%
  group_by(자동차회사) %>%
  identify_outliers(타이어수명)
 
아웃라이어가 제거됨. 경우에 따라 새로운 아웃라이어가 뜨기도 하는데 재량껏 제거해주면 됨.
[1] 자동차회사 타이어수명 is.outlier is.extreme
<0 rows> (or 0-length row.names)
 
다시 박스플랏 그려서 이상치 확인해보기
ist_tb %>%
  ggplot(mapping = aes(x = 자동차회사,
                       y = 타이어수명)) +
  geom_boxplot()

 

 

 

 

 

 

 

 

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

  • 통계분석은 데이터의 분포가 정규분포일 것을 가정하고 이루어짐. 따라서 통계분석을 위해서는 이 데이터의 분포가 정규분포를 따르는지 검정해보아야 함.
  • 그럴때 사용되는 것이 샤피로 테스트.  샤피로 테스트의 귀무가설은 '이 데이터의 분포가 정규분포를 따른다'는 것이고, 반대되는 대체가설은 '정규분포를 따르지 않는다' 가 됨. 샤피로 테스트의 p밸류 값이 0.05 이상이라면 귀무가설이 채택되면서 정규분포를 따른다고 볼 수 있음
  • shapiro_test() 함수를 활용하면 됨
  • 독립표본 t-검정에서는 각각의 그룹에 대해 확인해야 함
ist_tb %>%
  group_by(자동차회사) %>%
  shapiro_test(타이어수명)
 
위의 코드 입력 결과 아래와 같이 출력됨. 둘 다 p밸류 0.05 이상이기 때문에 귀무가설이 채택됨. 즉, 이 데이터의 분포가 정규분포라고 받아들일 수 있음
# A tibble: 2 × 4
  자동차회사 variable   statistic     p
  <fct>      <chr>          <dbl> <dbl>
1 A자동차    타이어수명     0.992 0.997
2 B자동차    타이어수명     0.965 0.445
 
 
 

 

 

 

 

5. 등분산 검정

등분산이냐 이분산이냐에 따라 계산방법이 달라지기 때문에 독립표본 t-검정에서 필요한 과정

levene test 시행: 귀무가설은 “두 그룹간 분산의 동질성이 있다”
ist_tb %>%
  levene_test(타이어수명 ~ 자동차회사) # 자동차회사 변수의 그룹 간 타이어수명 분포의 동질성을 본다
 
p값 0.05 이상 → 귀무가설 채택 → “두 그룹간 분산의 동질성이 있다" → 등분산!
# A tibble: 1 × 4
    df1   df2 statistic     p
  <int> <int>     <dbl> <dbl>
1     1    56     0.754 0.389

 

 

 

 

 

 

 

 

 

 

 

6. 통계분석: 차이검정(등분산일 경우)

이 검정에서 귀무가설은 “두 자동차 회사 간 타이어수명의 차이가 없다.” 임
ist_tb %>%
  t_test(formula = 타이어수명 ~ 자동차회사, # 자동차회사 종류에 따른 타이어수명 
         comparisons = c("A자동차","B자동차"), # A자동차와 B자동차와 비교
         var.equal = T, # 등분산 TRUE
         alternative = "two.sided", # 양측검정 실시
         detailed = T)
 
p값 = 0.00503 → 0.05 보다 작음 → 귀무가설 기각 → 두 자동차 회사 간 타이어 수명의 차이는 있다!
# A tibble: 1 × 15
  estimate estimate1 estimate2 .y.   group1  group2    n1    n2 statistic       p    df conf.low
*    <dbl>     <dbl>     <dbl> <chr> <chr>   <chr>  <int> <int>     <dbl>   <dbl> <dbl>    <dbl>
1   -2675.    49031.    51706. 타이… A자동차 B자동…    29    29     -2.92 0.00503    56   -4510.
# ℹ 3 more variables: conf.high <dbl>, method <chr>, alternative <chr>

 

 

 

 

 

 

 

 

 

7. 효과크기 effect size (cohens d)

 

 

검증한 값의 효과가 얼마나 크냐(귀무가설과 대체가설의 차이) 볼때 cohens d - 이펙트 사이즈 를 봄

 

ist_tb %>%
  cohens_d(formula = 타이어수명 ~ 자동차회사,
           var.equal = T)
 
실행시키면 아래와 같이 출력. moderate 정도의 효과 크기
# A tibble: 1 × 7
  .y.        group1  group2  effsize    n1    n2 magnitude
* <chr>      <chr>   <chr>     <dbl> <int> <int> <ord>    
1 타이어수명 A자동차 B자동차  -0.767    29    29 moderate​
 
 
 
 
 
 

 

 

 

Contents

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

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