빅데이터 분석과 R 프로그래밍 2: Ⅶ. R을 이용한 통계분석

  • POSTECH에서 제공하는 MOOC 중, 빅데이터분석과 R프로그래밍 Ⅱ 과정입니다.

Ⅶ. R을 이용한 통계분석

1. 두 그룹간 평균비교(t-test)

단일표본의 평균검정

  • t.test(변수, mu=검정하고자 하는 평균값)

    1. 가설 1: G3(최종성적)의 평균은 10인가?
      • H0(null Hypothesis: 귀무가설): μ = 10
        1
        2
        3
        stud<-read.csv("week7_1/stud_math.csv",stringsAsFactors = TRUE)

        attach(stud)
        1
        2
        # single t-test
        t.test(G3, mu=10)
  • 결과 해석

    • t: t검정통계량, df: 자유도, p-value
      • p-value 유의 수준 0.05에서는 G3 평균이 10이라고 할 수 있는 근거가 있음
    • alternative hypothesis 대립가설: 모형균은 10이 아니다
    • 95% 신뢰구간: (9.96, 10.86), 표본평균값: 10.415

두 집단의 평균검정

  • 두 평균 차이 비교

  • 두 집단 표본평균 비교검정: t.test(타겟변수~범주형변수, data= )

    1. 가설 2: 거주지역(R, U)에 따른 G3(최종성적) 평균에 차이가 있는가?
1
2
3
# to test whether or not mean of G3 is same between Urban and Rural 
t.test(G3~address, data=stud)
boxplot(G3~address, boxwet=0.5, col=c("yellow", "coral"))
  • 결과 해석
    • 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"))
  • 결과 해석
    • p-value=0.018로 유의수준을 0.05로 했을 때, 성적(Rural) < 성적(Urban)이라고 할 수 있음
  1. 가설 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
2
3
# wilcoxon signed-rank test
# wilcox.test(G3, mu=10)
wilcox.test(G3~address)

퀴즈

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
2
3
4
5
bp<-read.csv("week7_2/bp.csv") 
attach(bp)

# two-sided
t.test(bp_pre, bp_post, mu=0, paired=T)
  • 결과 해석
    • p-value = 0.0015(매우 작음)로 유의수준 0.05보다 작기 때문에 H0를 기각
      → 투약 전과 투약 후 혈압에 유의한 차이가 있다고 볼 수 있음
  • 단측검정 옵션 주기
    • 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보다 매우 작으므로 H0를 기간
      → 투약효과가 매우 유의하다고 볼 수 있음

  • 예제 2: 비만 대상자(성인)들에게 12주 동안 극저 칼로리 식이요법(very low-calorie diet: VLCD)을 실시한 후 효과를 비교하였다. 이 프로그램에 체중감소에 효과가 있다고 할 수 있는가?
1
2
3
4
5
6
diet <- read.csv("week7_2/weight.csv")
attach(diet)

# paired t-test
# 양측 검정: 극저칼로리 식이요법이 체중감량에 유의한 효과가 있는지 없는지에 관한 검정
t.test(wt_pre, wt_post, mu=0, paired=T)
  • 결과 해석
    • p-value: 0.000001357 (0.001 = 1e-3)

3. 분산분석(ANOVA)

분산분석의 개념

  • ANOVA(Analysis of Variance)
    • 전체 분산(variance)을 분할(분석, analysis)하여 어떤 요인(factor)의 영향이 유의(significant)한지 검정하는 방법

factor가 한 개일 때

  • 분산분석모형 적용
    1. 거주 지역에 따른 학업성취도: 거주지역(factor: R/U), 학업성적(1-20)
      • 가설 1: 거주지역에 따라 G3에 유의한 차이가 있나?
      • aov(타겟변수~factor)
        1
        2
        3
        # ANOVA
        a1 <- aov(G3~address)
        summary(a1)
  • 결과 해석
    • p-value=0.035로 유의수준을 0.05로 할 때, 0,05보다 작으므로 거주지역에 따른 학업성적에 유의한 차이가 있다고 할 수 있음
1
2
# tapply - give FUN value by address
round(tapply(G3, address, mean),2)
  1. 통학 시간에 따른 학업성취도: 통학시간(factor: 1-4), 학업성적(1-20)
    • 가설 2: 통학 시간에 따라 G3에는 유의한 차이가 있나?
      1
      2
      3
      4
      traveltime<-as.factor(traveltime)

      a2 <- aov(G3~traveltime)
      summary(a2)
    • 결과 해석
  • p-value=0.139로 유의수준 0.05 하에서는 통학 시간에 따른 학업성적에는 유의한 차이가 없다고 할 수 있음
  • 단, p-value가 0.139로 너무 크지 않기 때문에 어느정도 차이가 존재함을 알 수 있음
1
2
# tapply - give FUN value by address
round(tapply(G3, traveltime, mean),2)

사후검정(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"))
  • 결과 해석
    • 모든 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)

a0 <- aov(G3~studytime)
summary(a0)

tapply(G3, studytime, mean)

4. 이원분산분석

  • 이원분산분석(two-way ANOVA)

  • 데이터: High-Density Lipoprotein (HDL) 콜레스테롤

    • HDL(고밀도 리포 단백질): 높을수록 좋은 것으로 알려진 콜레스테롤, 40mg/dl 이상이 정상 범위
  • factor가 2개

    1. 투약효과가 있는가? 5mg, 10mg, 위약
    2. 연령그룹(young/old)에 따른 영향이 있는가?
      • 가설 1. 신약 투약효과가 있나? HDL을 상승시키는 효과가 있나?
      • 가설 2. 연령그룹에 따라 투약효과(HDL변화)에 차이가 있나?
      • 가설 3. 신약의 투약과 연령그룹 간 상호작용 효과가 있나?
  • 이원분산분석: aov(타겟변수~factor1 + factor2)

    1
    2
    3
    4
    5
    6
    dat <- 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)
  • 결과 해석
    • 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"))
  1. drug effect: 10mg인 경우, HDL 상승효과가 가장 높음
    1
    2
    # tapply - give FUN value by drug
    round(tapply(value, drug, mean),2)
  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
2
3
4
# Create an interaction plot for the HDL data
par(mfrow=c(1,2))
interaction.plot(dat$drug, dat$age, dat$value)
interaction.plot(dat$age, dat$drug, dat$value)
1
2
3
# two-way ANOVA model with interaction
results = lm(value ~ drug + age + drug*age, data=dat)
anova(results)

퀴즈

a00 <- aov(G3studytime+sex)
summary(a00)
boxplot(G3
sex, boxwex = 0.5, col = c(“yellow”, “coral”))

Share