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
'Programs > R' 카테고리의 다른 글
[R_tidyverse] t-검정: 대응표본 t-검정 paired sample t-test ① (2) | 2024.02.19 |
---|---|
[R_tidyverse] t-검정: 독립표본 t-검정 independent samples t-test ② (4) | 2024.02.16 |
[R] 맥 Mac 에서 R로 ggplot 그래프 만들 때 한글 깨짐 해결방법 (0) | 2024.02.15 |
[R_tidyverse] t-검정: 단일표본 t-검정 one sample t-test ② (2) | 2024.02.14 |
[R_tidyverse] t-검정: 단일표본 t-검정 one sample t-test ① (0) | 2024.02.13 |
Contents
소중한 공감 감사합니다