Programs/R

[R_tidyverse] t-검정: 단일표본 t-검정 one sample t-test ①

도마도다 2024. 2. 13. 17:17

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-검정 one sampel t-test 실습

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

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

# <데이터 불러오기>
## R스크립트와 csv파일이 같은 폴더에 있을 경우의 코드
## 티블형식 데이터는 read.csv 아니라 read_csv 활용
ost_tb <- read_csv("05.ost.csv", # csv 파일명
                   col_names = TRUE, # 데이터의 첫번째 행을 변수명으로 설정하겠다는 뜻
                   na = ".") # 결측치를 . 으로 설정하겠다는 뜻
                   
# <기초통계분석>
## 아래의 함수를 활용하여 데이터의 기초통계 파악 가능
str(ost_tb)
glimpse(ost_tb)
ost_tb
skim(ost_tb)

ost_tb %>%
  get_summary_stats(weight) # 보고자하는 변수명을 괄호 안에 기입, 여기서는 weight


# <그래프 그리기>
## boxplot 그려서 이상치 파악하기
ost_tb %>%
  ggplot(mapping = aes(y = weight)) + # y축을 weight로 설정
  geom_boxplot() + # 박스플랏 그리는 함수
  labs(y = "그램수") # labs(): 그래프에 보일 변수명을 설정해주는 함수 

## histogram 그려서 데이터의 분포 파악하기
ost_tb %>%
  ggplot(mapping = aes(x = weight)) + # x축을 weight로 설정
  geom_histogram(binwidth = 10) + # 히스토그램 그리는 함수, binwidth로 구간을 10단위로 자름
  coord_cartesian(xlim = c(200,400),
                  ylim = c(0,30)) # 그래프에 나타낼 x,y 값의 범위 설정

boxplot / histogram

 

 

 

3. 이상치 제거

통계분석을 위해 분포에서 벗어나는 극단적인 값, 이상치를 제거해야 함. identify_outliers() 함수를 활용하면 간단히 파악 가능. 박스플랏에 나타나지 않았던 이상치가 나타나기도 함.

# 이상치 파악
ost_tb %>%
  identify_outliers(weight)

 

위의 코드를 실행시켰더니 아래와 같이 출력됨. weight = 242가 아웃라이어이지만 익스트림하게 벗어난 값은 아님. 익스트림값이 아닌 경우 굳이 제거하지 않기도 함. 결국 아웃라이어를 제거할지 말지는 각자의 판단. 이번에는 실습을 위해 제거해볼 것임.

> # 이상치 파악
> ost_tb %>%
+   identify_outliers(weight)
# A tibble: 1 × 3
  weight is.outlier is.extreme
   <dbl> <lgl>      <lgl>     
1   242. TRUE       FALSE

 

filter 함수를 활용하여 weight 242 값을 제거함.

# 이상치 제거
ost_tb <- ost_tb %>%
  filter(!(weight <= 242)) # !는 not의 의미, weight 242 값을 제거하겠다는 의미.

# 제거되었는지 확인
ost_tb %>%
  identify_outliers(weight)

 

아웃라이어가 제거됨. 경우에 따라 새로운 아웃라이어가 뜨기도 하는데 재량껏 제거해주면 됨.

> ost_tb %>%
+   identify_outliers(weight)
[1] weight     is.outlier is.extreme
<0 rows> (or 0-length row.names)

 

다시 박스플랏 그려서 이상치 확인해보기

ost_tb %>%
  ggplot(mapping = aes(y = weight)) +
  geom_boxplot() +
  labs(y = "그램수")

 

 

 

 

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

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

 

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

> ost_tb %>%
+   shapiro_test(weight) 
# A tibble: 1 × 3
  variable statistic     p
  <chr>        <dbl> <dbl>
1 weight       0.987 0.422

 

 

 

 

5. 통계분석: 차이검정

이 검정에서 귀무가설은  '그램 수가 320이다' , 대체가설은 '그램 수가 320이 아니다'

ost_tb %>%
  t_test(formula = weight ~ 1, # 데이터가 하나다
         alternative = "two.sided", # alternative = 대체가설, 귀무가설을 대체. two. sided (양측검정))
         mu = 320, # 검증값
         conf.level = 0.95, # 신뢰구간 
         detailed = TRUE) # 디테일한 정보 알려줌

 

위의 코드를 실행시켜보니 p = 1.27e-21 로 엄청 작은 숫자나옴. p값이 0.05보다 작아서 귀무가설 기각 -> 대체가설 채택 (320그램 아니다)

> ost_tb %>%
+   t_test(formula = weight ~ 1, # 데이터가 하나다
+          alternative = "two.sided", # alternative = 대체가설, 귀무가설을 대체. two. sided (양측검정))
+          mu = 320, # 검증값
+          conf.level = 0.95,
+          detailed = T)
# A tibble: 1 × 12
  estimate .y.    group1 group2         n statistic        p    df conf.low conf.high method alternative
*    <dbl> <chr>  <chr>  <chr>      <int>     <dbl>    <dbl> <dbl>    <dbl>     <dbl> <chr>  <chr>      
1     296. weight 1      null model    99     -12.3 1.27e-21    98     292.      300. T-test two.sided

 

 

 

 

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

 

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

ost_tb %>%
  cohens_d(formula = weight ~ 1,
           mu = 320)

 

실행시키면 아래와 같이 출력.

effsize -1.24, magnitude large -> 검증값과 큰 차이가 난다, 효과가 크다!

> ost_tb %>%
+   cohens_d(formula = weight ~ 1,
+            mu = 320)
# A tibble: 1 × 6
  .y.    group1 group2     effsize     n magnitude
* <chr>  <chr>  <chr>        <dbl> <int> <ord>    
1 weight 1      null model   -1.24    99 large