[R_tidyverse] t-검정: 단일표본 t-검정 one 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-검정 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 값의 범위 설정
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