- POSTECH에서 제공하는 MOOC 중, 빅데이터분석과 R프로그래밍 Ⅱ 과정입니다.
Ⅶ. R을 이용한 통계분석
1. 두 그룹간 평균비교(t-test)
단일표본의 평균검정
t.test(변수, mu=검정하고자 하는 평균값)
- 가설 1: G3(최종성적)의 평균은 10인가?
- H
0(null Hypothesis: 귀무가설): μ = 101
2
3stud<-read.csv("week7_1/stud_math.csv",stringsAsFactors = TRUE)
attach(stud)1
2# single t-test
t.test(G3, mu=10)
- H
- 가설 1: G3(최종성적)의 평균은 10인가?
결과 해석
- t: t검정통계량, df: 자유도, p-value
- p-value 유의 수준 0.05에서는 G3 평균이 10이라고 할 수 있는 근거가 있음
- alternative hypothesis 대립가설: 모형균은 10이 아니다
- 95% 신뢰구간: (9.96, 10.86), 표본평균값: 10.415
- t: t검정통계량, df: 자유도, p-value
두 집단의 평균검정
두 평균 차이 비교
두 집단 표본평균 비교검정: t.test(타겟변수~범주형변수, data= )
- 가설 2: 거주지역(R, U)에 따른 G3(최종성적) 평균에 차이가 있는가?
1 | # to test whether or not mean of G3 is same between Urban and Rural |
- 결과 해석
- p-value=0.03으로 유의수준 0.05에서 거주지역에 따라 G3은 유의한 차이가 있다고 할 수 있음
- 단측검정: 기각역이 한 쪽에만 있는 경우, alternative=c(“less”) or alternative=c(“greater”)
- 같으냐 다르냐가 아니라, 도심지역이 더 높으냐에 관해 test 하고 싶은 경우
1
2# alternative H : mu(Rural)< mu(Urban)
t.test(G3~address, data=stud, alternative = c("less"))
- 같으냐 다르냐가 아니라, 도심지역이 더 높으냐에 관해 test 하고 싶은 경우
- 결과 해석
- p-value=0.018로 유의수준을 0.05로 했을 때, 성적(Rural) < 성적(Urban)이라고 할 수 있음
- 가설 3: 방과후 활동 여부(yes, no)에 따른 G3(최종성적) 평균에 차이가 있는가?
1
2
3# to test whether or not mean of G3 is equal for activities
t.test(G3~activities, data=stud)
boxplot(G3~activities, boxwex = 0.5, col = c("blue", "red"))- 결과 해석
- p-value=0.75로 유의수준 0.05보다 많이 큼
= 검정통계량 값이 기각역에 있지 않다
= 귀무가설(평균이 같다)을 기각할 수 없다
= 방과후 활동 여부는 G3에 유의한 영향이 없다는 결론 - 신뢰구간(-1.05, 0.79) 사이에 0값이 있으면 차이가 없음을 의미
두 집단의 비모수적 비교검정
- 두 모집단의 비모수적 방법(Wilcoxon rank sum Test): wilcox.test(x,y)
- wilcos.test는 타겟변수가 등간척도(통증 정도, 만족도,,)일 때 사용 가능
1 | # wilcoxon signed-rank test |
퀴즈
1 | t.test(G3~internet, data=stud) |
2. 짝을 이룬 그룹 간 비교
짝을 이룬 그룹 간 비교(paired t-test)
paired t-test: t.test(before, after, mu=0, paired=T)
- 특정 처리(treatment)의 효과를 비교분석할 때 사용
- 동일한 실험표본 before & after 측정
- 예제: 혈압강하제 투약 효과, 방과후 프로그램 성과, 다이어트 프로그램 효과, 직무교육 후 생산성 향상 효과
- 방식: Before/After 차이를 구한 뒤, 평균과 편차를 계산해서 검정통계량을 구함
paired: 양측 검정, 유의한 차이가 있는지 없는지를 검정
- 예제 1: 고혈압 환자 10명에게 혈압강하제를 12주 동안 투여한 후, 복용 전의 혈압과 복용 후의 혈압을 비교하였다. 새로운 혈압강하제가 효과 있다고 말할 수 있는가?
1 | bp<-read.csv("week7_2/bp.csv") |
- 결과 해석
- p-value = 0.0015(매우 작음)로 유의수준 0.05보다 작기 때문에 H
0를 기각
→ 투약 전과 투약 후 혈압에 유의한 차이가 있다고 볼 수 있음
- p-value = 0.0015(매우 작음)로 유의수준 0.05보다 작기 때문에 H
- 단측검정 옵션 주기
- paired t-test: t.test(before, after, mu=0, alternative=”greater”, paired=T)
- 혈압(투약 전 - 투약 후) 차이가 0보다 큰가?
1
2# paired t-test (one-sided)
t.test(bp_pre, bp_post, mu=0, alternative="greater", paired=T)
- 결과 해석
- p-value=0.0007로 유의수준 0.05보다 매우 작으므로 H
0를 기간
→ 투약효과가 매우 유의하다고 볼 수 있음
- p-value=0.0007로 유의수준 0.05보다 매우 작으므로 H
- 예제 2: 비만 대상자(성인)들에게 12주 동안 극저 칼로리 식이요법(very low-calorie diet: VLCD)을 실시한 후 효과를 비교하였다. 이 프로그램에 체중감소에 효과가 있다고 할 수 있는가?
1 | diet <- read.csv("week7_2/weight.csv") |
- 결과 해석
- p-value: 0.000001357 (0.001 = 1e-3)
3. 분산분석(ANOVA)
분산분석의 개념
- ANOVA(Analysis of Variance)
- 전체 분산(variance)을 분할(분석, analysis)하여 어떤 요인(factor)의 영향이 유의(significant)한지 검정하는 방법
factor가 한 개일 때
- 분산분석모형 적용
- 거주 지역에 따른 학업성취도: 거주지역(factor: R/U), 학업성적(1-20)
- 가설 1: 거주지역에 따라 G3에 유의한 차이가 있나?
- aov(타겟변수~factor)
1
2
3# ANOVA
a1 <- aov(G3~address)
summary(a1)
- 거주 지역에 따른 학업성취도: 거주지역(factor: R/U), 학업성적(1-20)
- 결과 해석
- p-value=0.035로 유의수준을 0.05로 할 때, 0,05보다 작으므로 거주지역에 따른 학업성적에 유의한 차이가 있다고 할 수 있음
1 | # tapply - give FUN value by address |
- 통학 시간에 따른 학업성취도: 통학시간(factor: 1-4), 학업성적(1-20)
- 가설 2: 통학 시간에 따라 G3에는 유의한 차이가 있나?
1
2
3
4traveltime<-as.factor(traveltime)
a2 <- aov(G3~traveltime)
summary(a2) - 결과 해석
- 가설 2: 통학 시간에 따라 G3에는 유의한 차이가 있나?
- p-value=0.139로 유의수준 0.05 하에서는 통학 시간에 따른 학업성적에는 유의한 차이가 없다고 할 수 있음
- 단, p-value가 0.139로 너무 크지 않기 때문에 어느정도 차이가 존재함을 알 수 있음
1 | # tapply - give FUN value by address |
사후검정(post-hoc analysis)
- 사후검정: ANOVA에서 어떤 factor의 유의성이 검정되면, 그 이후에 하는 검정
- Tukey’s Honest Significant Difference Test
1
2
3# should be foctor for Tukey's Honest Significant Difference test
TukeyHSD(a2, "traveltime", ordered=TRUE)
plot(TukeyHSD(a2, "traveltime"))
- Tukey’s Honest Significant Difference Test
- 결과 해석
- 모든 pairwise 신뢰구간에 0이 포함됨
→ 유의한 차이가 없음
- 모든 pairwise 신뢰구간에 0이 포함됨
- 추가 예제: 분산분석
- 연애경험 여부에 따른 학업성취도: 연애경험(yes, no), 학업성적(1-20)
1
2
3
4
5
6
7
8
9
10
11
12
13# 4. ANOVA by romantic
a4 <- aov(G3~romantic)
summary(a4)
# tapply - give FUN value by address
round(tapply(G3,romantic, mean),2)
# boxplot
boxplot(G3~romantic, boxwex = 0.5, col = c("yellow", "coral"), main="G3 by romantic")
# posthoc analysis
TukeyHSD(a4, "romantic", ordered=TRUE)
plot(TukeyHSD(a4, "romantic"))퀴즈
studytime <- as.factor(studytime)
- 연애경험 여부에 따른 학업성취도: 연애경험(yes, no), 학업성적(1-20)
a0 <- aov(G3~studytime)
summary(a0)
tapply(G3, studytime, mean)
4. 이원분산분석
이원분산분석(two-way ANOVA)
데이터: High-Density Lipoprotein (HDL) 콜레스테롤
- HDL(고밀도 리포 단백질): 높을수록 좋은 것으로 알려진 콜레스테롤, 40mg/dl 이상이 정상 범위
factor가 2개
- 투약효과가 있는가? 5mg, 10mg, 위약
- 연령그룹(young/old)에 따른 영향이 있는가?
- 가설 1. 신약 투약효과가 있나? HDL을 상승시키는 효과가 있나?
- 가설 2. 연령그룹에 따라 투약효과(HDL변화)에 차이가 있나?
- 가설 3. 신약의 투약과 연령그룹 간 상호작용 효과가 있나?
이원분산분석: aov(타겟변수~factor1 + factor2)
1
2
3
4
5
6dat <- read.csv("week7_4/chol_ex.csv")
attach(dat)
# two-way ANOVA
a6 <- aov(value ~ drug + age)
summary(a6)결과 해석
- drug effect: p-value~0이므로 HDL값에 통계적으로 유의한 차이가 있음
- age: p-value=0.19로 유의수준 0.05에서 유의한 차이는 없음
- aov(타겟변수~factor1 + factor2 + 상호작용)
- 두 개의 factor 간 상호작용의 유의성을 검정하기 위한 분석
1
2
3# two-way ANOVA with interaction
a7 <- aov(value ~ drug + age+ drug*age)
summary(a7)
- 두 개의 factor 간 상호작용의 유의성을 검정하기 위한 분석
- 결과 해석
- drug와 age 그룹 간 상호작용: p-value=0.286으로 유의수준 0.05에서 유의한 차이는 없음
두 요인의 상자그림
- 투약용량과 연령그룹에 따른 상자그림
1
2
3
4# two-way ANOVA
par(mfrow=c(1,2))
boxplot(value ~ drug, boxwex = 0.7, main="HDL by drug dose", col = c("yellow","orange", "green"))
boxplot(value ~ age, boxwex = 0.5, main="HDL by Age", col = c("blue", "coral"))
- drug effect: 10mg인 경우, HDL 상승효과가 가장 높음
1
2# tapply - give FUN value by drug
round(tapply(value, drug, mean),2) - age: young 그룹(18-40)의 HDL 상승효과가 더 높음
1
2# tapply - give FUN value by age
round(tapply(value, age, mean),2)상호작용 그래프
1
2
3
4# interaction plot
par(mfrow=c(1,2))
interaction.plot(drug, age, value)
interaction.plot(age, drug, value)
- 결과 해석
- 투약용량 10mg에서 young 그룹 상승효과가 old 그룹보다 훨씬 높음
- 5mg에서와 placebo에서는 연령그룹 차이가 거의 없음
1 | # Create an interaction plot for the HDL data |
1 | # two-way ANOVA model with interaction |
퀴즈
a00 <- aov(G3studytime+sex)sex, boxwex = 0.5, col = c(“yellow”, “coral”))
summary(a00)
boxplot(G3