[R_tidyverse] t-검정: 대응표본 t-검정 paired 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-검정 paired sample t-test 실습
*tidyverse 패키지를 활용한 분석방법
대응표본 t-검정은 같은 집단에 대해 두 번의 측정을 수행했을 때, 두 측정 결과 사이의 평균 차이가 유의미한지를 검정하는 방법이다.
즉, 처치 전후, 훈련 전후, 시술 전후 등 같은 대상에 대한 변화를 비교하는 데 사용된다.
독립표본 t-검정의 경우 서로 다른 두 집단을 데리고 오기 때문에 둘의 분산이 동질한지 검정할 필요가 있었으나(등분산 검정),
대응표본 t-검정에서는 같은 집단의 처치 전후를 비교하기 때문에 필요가 없다.
오늘 실습에서는 한 집단을 대상으로 다이어트 복용 전과 복용 후(3개월 후) 체중을 비교해본다.
귀무가설: 복용 전후 몸무게 차이가 없다
차례
1. 패키지 설치 및 불러오기
2. 데이터 불러오기
3. 데이터 형태 변환 및 새로운 변수 설정
4. 기술통계 및 그래프그리기
5. 이상치 제거
6. 샤피로 테스트: 정규분포 검정
7. 통계분석
8. 효과 크기 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. 데이터 불러오기
# 데이터 불러오기
pst_tb <- read_csv("07.pst.csv",
col_names = T,
na = ".",
locale = locale("ko", encoding = "euc-kr")) # 한글로 된 변수명을 읽어오기 위해
# 데이터 파악
str(pst_tb)
skim(pst_tb)
pst_tb
3. 데이터 형태 변환 및 새로운 변수 설정
참고: tibble 데이터의 두 가지 형식
tidyverse 패키지에서는 tibble이라는 기본 데이터 형식으로 분석을 진행함
tibble 데이터는 wide형과 long형이라는 두 가지 형식으로 표현될 수 있음
통계분석 시에는 long형 데이터를 사용하고, 기초통계 파악이나 그래프 그릴 때에는 wide형 데이터를 사용함
Wide형
각 변수(특징, 속성)가 한 개의 열로 표현되는 형식. 다음과 같은 데이터는 Wide형.
#> # A tibble: 3 x 4
#> id gender age height
#> <dbl> <chr> <dbl> <dbl>
#> 1 1 남성 20 170
#> 2 2 여성 25 160
#> 3 3 남성 30 180
Long형
각 변수가 한 개의 행으로 표현되는 형식. 위 데이터를 Long형으로 변환하면 다음과 같음.
#> # A tibble: 9 x 3
#> id 변수 값
#> <dbl> <chr> <dbl>
#> 1 1 gender 남성
#> 2 2 gender 여성
#> 3 3 gender 남성
#> 4 1 age 20
#> 5 2 age 25
#> 6 3 age 30
#> 7 1 height 170
#> 8 2 height 160
#> 9 3 height 180
현재 우리의 데이터는 아래와 같은 형태임. 위를 참고하면 이 데이터는 지금 wide형인데 통계분석하려면 long형 데이터로 변환해줘야 함.
즉, 우리가 비교하려는 섭취전/섭취후라는 변수가 열이 아니라 행으로 표현되어야 함.
# A tibble: 20 × 3
id 섭취전 섭취후
<dbl> <dbl> <dbl>
1 1 82 75
2 2 54 50
3 3 74 74
4 4 75 71
5 5 71 69
6 6 76 73
7 7 70 68
8 8 62 62
9 9 77 68
10 10 75 72
11 11 72 70
12 12 83 77
13 13 78 71
14 14 74 74
15 15 68 67
16 16 76 73
17 17 75 77
18 18 75 71
19 19 75 76
20 20 71 74
아래의 코드를 실행하면 long형으로 변환할 수 있음.
#long형 데이터 변환
pst_tb_long <- pst_tb %>%
pivot_longer(c("섭취전","섭취후"),
names_to = "시간", #섭취전/섭취후 를 '시간'이라는 변수명으로 묶음
values_to = "몸무게") #기존 섭취전/섭취후 각각의 변수들 안에 있던 값을 '몸무게'라는 변수명으로 묶어냄
pst_tb_long
실행시키면 아래와 같이 long 형 데이터가 만들어짐. 이제 통계분석 시에는 pst_tb_long을 활용할 것임
# A tibble: 40 × 3
id 시간 몸무게
<dbl> <chr> <dbl>
1 1 섭취전 82
2 1 섭취후 75
3 2 섭취전 54
4 2 섭취후 50
5 3 섭취전 74
6 3 섭취후 74
7 4 섭취전 75
8 4 섭취후 71
9 5 섭취전 71
10 5 섭취후 69
# ℹ 30 more rows
# ℹ Use `print(n = ...)` to see more rows
우리가 알고자하는 것은 섭취 전과 후의 몸무게 차이이기 때문에(섭취전 몸무게 - 섭취후 몸무게) 둘의 몸무게 차이값을 새로운 변수로 설정
# 차이값 추가 변수 설정
pst_tb <- pst_tb %>%
mutate(차이 = 섭취후 - 섭취전) %>%
print()
4. 기술통계 및 그래프그리기
기술통계분석과 그래프 그리기는 기존의 wide형 데이터를 활용하면 됨(pst_tb)
# 기술통계분석
skim(pst_tb)
pst_tb%>%
get_summary_stats(섭취전, 섭취후, 차이)
# 그래프 그리기
## box-plot과 histogram을 그려서 데이터의 이상치와 분포 확인하기
pst_tb %>%
ggplot(mapping = aes(y = 차이)) +
geom_boxplot()
pst_tb %>%
ggplot(mapping = aes(x = 차이)) +
geom_histogram(binwidth = 3,
color = "white",
fill = "steelblue")
5. 이상치 제거
아래 코드 실행해보면 이상치 없음. 넘어감.
# 이상치 제거
pst_tb %>%
identify_outliers(차이)
6. 샤피로 테스트: 정규분포 검정
- 통계분석은 데이터의 분포가 정규분포일 것을 가정하고 이루어짐. 따라서 통계분석을 위해서는 이 데이터의 분포가 정규분포를 따르는지 검정해보아야 함.
- 그럴때 사용되는 것이 샤피로 테스트. 샤피로 테스트의 귀무가설은 '이 데이터의 분포가 정규분포를 따른다'는 것이고, 반대되는 대체가설은 '정규분포를 따르지 않는다' 가 됨. 샤피로 테스트의 p밸류 값이 0.05 이상이라면 귀무가설이 채택되면서 정규분포를 따른다고 볼 수 있음
- shapiro_test() 함수를 활용하면 됨
pst_tb %>%
shapiro_test(차이)
위의 코드 입력 결과 아래와 같이 출력됨. p밸류 0.05 이상이기 때문에 귀무가설이 채택됨. 즉, 이 데이터의 분포가 정규분포라고 받아들일 수 있음
# A tibble: 1 × 3
variable statistic p
<chr> <dbl> <dbl>
1 차이 0.977 0.883
7. 통계분석
이 검정에서 귀무가설은 “다이어트약 복용 전후의 몸무게 차이가 없다” 임
pst_tb_long %>%
t_test(formula = 몸무게 ~ 시간,
ref.group = "섭취후", # 섭취후를 기준으로
paired = T, # 각 사람의 관측치를 짝지을 것인지 -> 대응표본이기 때문에 TRUE
alternative = "less", # 섭취 후의 값이 줄어들었는가를 보기 때문에
detailed = T)
p값 = 0.00088 → 0.05 보다 작음 → 귀무가설 기각 → 다이어트약 복용전후 몸무게 차이 있다!
# A tibble: 1 × 13
estimate .y. group1 group2 n1 n2 statistic p df conf.low conf.high method alternative
* <dbl> <chr> <chr> <chr> <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr>
1 -2.55 몸무게 섭취후 섭취전 20 20 -3.64 0.00088 19 -Inf -1.34 T-test less
8. 효과크기 effect size
pst_tb_long %>%
cohens_d(formula = 몸무게 ~ 시간,
paired = T)
# A tibble: 1 × 7
.y. group1 group2 effsize n1 n2 magnitude
* <chr> <chr> <chr> <dbl> <int> <int> <ord>
1 몸무게 섭취전 섭취후 0.813 20 20 large
'Programs > R' 카테고리의 다른 글
[R_tidyverse] 분산분석 ANOVA: 일원분산분석 one-way ANOVA ① (4) | 2024.02.22 |
---|---|
[R_tidyverse] t-검정: 대응표본 t-검정 paired sample t-test ② (0) | 2024.02.20 |
[R_tidyverse] t-검정: 독립표본 t-검정 independent samples t-test ② (4) | 2024.02.16 |
[R_tidyverse] t-검정: 독립표본 t-검정 independent samples t-test ① (4) | 2024.02.15 |
[R] 맥 Mac 에서 R로 ggplot 그래프 만들 때 한글 깨짐 해결방법 (0) | 2024.02.15 |
소중한 공감 감사합니다