14.통계데이터분석 - 분산분석 - 반복측정 분산분석.R
0.01MB
14.통계데이터분석 - 분산분석 - 반복측정 분산분석.Rmd
0.02MB
14.통계데이터분석---분산분석---반복측정-분산분석.html
1.61MB

 

 

 

 

 

 

 

 

 

https://www.youtube.com/watch?v=3YsIUsSZ7kY&list=PLY0OaF78qqGAxKX91WuRigHpwBU0C2SB_&index=15

1. 반복측정 분산분석

  • 반복측정 분산분석 특징
    • 반복측정 분산분석 정의: 동일한 대상에 대해서 여러 번 반복 측정해서 반복 측정 집단간 차이가 존재하는지를 검정
    • 대응표본 평균검정 vs 반복측정 분산분석
      • 대응표본 평균검정이 동일 대상에 대해서 두 차례 측정에서 두 집단, 즉, 2개 대응표본 간 차이를 검정하는 것인 반면 반복측정 분산분석은 이러한 반복측정 횟수를 3번 이상으로 확장 해 3개 이상의 집단간 차이를 검정
    • 일반적 분산분석 vs 반복측정 분산분석
      • 일반적 형태의 분산분석이 다른 집단에 속한 대상들 간 집단간의 차이 분석이라면, 반복측정 분산분석은 동일 집단에 속한 대상 들간의 집단 내 차이를 규명하는데 관심 가짐
  • 슬라이드 왼쪽 실험 설명
    • 실험설계
      • 10명의 우울증 환자에 대해서 심리치료를 실시 후, 심리 치료 효과가 기간에 따라서 변화가 있었는지를 검정
      • 10명에 대해 4주 동안 심리 치료 실시 후, 현재 상태를 평가한 다음 기록
      • 그리고 동일한 환자에 대해 16주 경과 후 시점에서 환자의 상태를 평가한 다음 기록
      • 그러면 환자 별로 4주 시점, 16주 시점으로 두 개의 데이터를 얻게 됨
    • 반복측정 일원분산분석과 집단 내 요인
      • 집단 내 요인
        • 두 시점을 집단으로 생각하고, 집단 간 차이 검정 시, 4주 시점 후 16주 시점까지 환자 상태의 변화가 있었는지 검증 가능. 이때 집단을 나타내는 기간 변수를 집단 내 요인이라고 함
        • 집단 내 요인은 동일 대상에 대해서 반복 측정한 결과를 구분하는 변수
        • 여기에서 각 환자는 측정 차수에 따라서 구분되는 집단 모두에 할당 됨
      • 이 실험에서는 집단 구분 변수가 하나가 있기 때문에 일원분산분석이라고 할 수 있음
      • 그리고 집단구분변수에 두 범주의 특정 값들이 반복 측정된 것이기 때문에 반복측정 분산분석이라고 할 수 있음
      • 두 개념을 합해 이러한 실험 설계는 반복측정 일원분산분석에 해당 됨
  • 슬라이드 오른쪽 실험 설명
    • 반복측정 이원분산분석과 집단간 효과/집단내 효과
      • 반복측정 분산분석에 대상을 구분하는 집단변수 포함 시, 이원분산분석 형태로 집단간 효과와 집단내 효과를 동시 검증 가능
      • 집단간 요인
        • 예) 환자 10명을 심리치료 A와 심리치료 B, 두 가지 서로 다른 심리치료 방법에 할당 할 경우 이원분산분석 수행가능
        • 이때 이 심리치료에 해당되는 변수를 우리가 집단간 요인이라 함
        • 집단간 요인은 대상을 서로 구분되는 집단으로 분할하는 변수
        • 각 대상은 분할되는 집단 가운데 하나에만 할당
      • 이 실험 설계에는 2개 집단변수가 있어, 이원분산분석이라 볼 수 있음
      • 기간변수에 측정되는 값들은 반복적으로 측정되기에 반복측정 분산분석에 해당됨
      • 그래서 이 실험 설계는 반복측정 이원분산분석이라고 볼 수 있음
      • 일반적인 이원분산분석에서 마찬가지로 2개 주효과와 1개의 상호작용효과를 검정 가능

2. CO2 데이터셋의 구조

str(CO2)
## Classes 'nfnGroupedData', 'nfGroupedData', 'groupedData' and 'data.frame':   84 obs. of  5 variables:
##  $ Plant    : Ord.factor w/ 12 levels "Qn1"<"Qn2"<"Qn3"<..: 1 1 1 1 1 1 1 2 2 2 ...
##  $ Type     : Factor w/ 2 levels "Quebec","Mississippi": 1 1 1 1 1 1 1 1 1 1 ...
##  $ Treatment: Factor w/ 2 levels "nonchilled","chilled": 1 1 1 1 1 1 1 1 1 1 ...
##  $ conc     : num  95 175 250 350 500 675 1000 95 175 250 ...
##  $ uptake   : num  16 30.4 34.8 37.2 35.3 39.2 39.7 13.6 27.3 37.1 ...
##  - attr(*, "formula")=Class 'formula'  language uptake ~ conc | Plant
##   .. ..- attr(*, ".Environment")=<environment: R_EmptyEnv> 
##  - attr(*, "outer")=Class 'formula'  language ~Treatment * Type
##   .. ..- attr(*, ".Environment")=<environment: R_EmptyEnv> 
##  - attr(*, "labels")=List of 2
##   ..$ x: chr "Ambient carbon dioxide concentration"
##   ..$ y: chr "CO2 uptake rate"
##  - attr(*, "units")=List of 2
##   ..$ x: chr "(uL/L)"
##   ..$ y: chr "(umol/m^2 s)"
  • 84개 관측값과 다섯개변수로 구성
  • 식물이 저은의 생장 환경에서 견디는 정도를 나타내는 저은 내성 실험을 위해서 수집됨
  • 퀘벡 지역 6개 나무와 미시시피 지역 6개 나무의 CO2흡수율을 7개의 서로 다른 CO2농도 하에서 반복적으로 측정
  • 검정내용
    1. 지역 나무와 미시시피 지역 나무 간 CO2흡수율 차이가 있는지 검정하고
    2. 7개의 서로 다른 CO2농도에 따라서 CO2흡수율 차이가 있는지 검정
    3. 나무의 출신지역과 CO2흡수율 간 관계가 CO2농도에 따라서 달라지는 지도 검정
  • 변수정리 및 실험설계
구분 설명
종속변수 CO2흡수율 나타내는 uptake변수
독립변수 (집단변수) 나무의 출신지역인 Type변수와 CO2농도인 conc변수
Type변수 나무의 출신 지역. 퀘벡과 미시시피 2개 범주를 가짐
conc변수(CO2농도) 7개 범주로 구성. 95부터 1000까지 범주
Treatment변수 퀘벡 지역 나무 절반과 미시시피 지역 나무 절반은 실험 전 하룻밤 동안 저은 처리. 저은 처리 여부가 Treatment변수에 저장돼 있음. 저온처리 된 경우 chilled, 그렇지 않은 경우는 nonchilled로 저장. 분석 편의를 위해서 저온처리적용 나무만을 분석대상으로 함
Plant변수 나무의 고유 식별자변수
Type변수 범주형변수여서 변환과정 필요없지만 conc변수는 숫자 형태이기 때문에 분석을 위해 범주형변수인 factor로 변환
집단간 요인 대상을 서로 구분된 집단으로 분할하는 Type변수
집단내 요인 반복측정값을 구분하는변수인 conc변수

3. subset()함수 - 저은처리 데이터만 추출 / factor()함수-conc변수를 factor로 변환

  • 저은처리 데이터만 추출
CO2sub<- subset(CO2, Treatment=="chilled")
# conc변수를 factor로 변환
CO2sub$conc <- factor(CO2sub$conc)
str(CO2sub)
## Classes 'nfnGroupedData', 'nfGroupedData', 'groupedData' and 'data.frame':   42 obs. of  5 variables:
##  $ Plant    : Ord.factor w/ 12 levels "Qn1"<"Qn2"<"Qn3"<..: 4 4 4 4 4 4 4 6 6 6 ...
##  $ Type     : Factor w/ 2 levels "Quebec","Mississippi": 1 1 1 1 1 1 1 1 1 1 ...
##  $ Treatment: Factor w/ 2 levels "nonchilled","chilled": 2 2 2 2 2 2 2 2 2 2 ...
##  $ conc     : Factor w/ 7 levels "95","175","250",..: 1 2 3 4 5 6 7 1 2 3 ...
##  $ uptake   : num  14.2 24.1 30.3 34.6 32.5 35.4 38.7 9.3 27.3 35 ...
  • conc변수를 factor로 변환
CO2sub$conc <- factor(CO2sub$conc)
str(CO2sub)
## Classes 'nfnGroupedData', 'nfGroupedData', 'groupedData' and 'data.frame':   42 obs. of  5 variables:
##  $ Plant    : Ord.factor w/ 12 levels "Qn1"<"Qn2"<"Qn3"<..: 4 4 4 4 4 4 4 6 6 6 ...
##  $ Type     : Factor w/ 2 levels "Quebec","Mississippi": 1 1 1 1 1 1 1 1 1 1 ...
##  $ Treatment: Factor w/ 2 levels "nonchilled","chilled": 2 2 2 2 2 2 2 2 2 2 ...
##  $ conc     : Factor w/ 7 levels "95","175","250",..: 1 2 3 4 5 6 7 1 2 3 ...
##  $ uptake   : num  14.2 24.1 30.3 34.6 32.5 35.4 38.7 9.3 27.3 35 ...
  • 결과해석
    • 관측값에 개수가 절반으로 줄어듦
    • 집단내 요인 conc변수가 7개 레벨을 갖는 factor로 변환됨
CO2sub
##    Plant        Type Treatment conc uptake
## 22   Qc1      Quebec   chilled   95   14.2
## 23   Qc1      Quebec   chilled  175   24.1
## 24   Qc1      Quebec   chilled  250   30.3
## 25   Qc1      Quebec   chilled  350   34.6
## 26   Qc1      Quebec   chilled  500   32.5
## 27   Qc1      Quebec   chilled  675   35.4
## 28   Qc1      Quebec   chilled 1000   38.7
## 29   Qc2      Quebec   chilled   95    9.3
## 30   Qc2      Quebec   chilled  175   27.3
## 31   Qc2      Quebec   chilled  250   35.0
## 32   Qc2      Quebec   chilled  350   38.8
## 33   Qc2      Quebec   chilled  500   38.6
## 34   Qc2      Quebec   chilled  675   37.5
## 35   Qc2      Quebec   chilled 1000   42.4
## 36   Qc3      Quebec   chilled   95   15.1
## 37   Qc3      Quebec   chilled  175   21.0
## 38   Qc3      Quebec   chilled  250   38.1
## 39   Qc3      Quebec   chilled  350   34.0
## 40   Qc3      Quebec   chilled  500   38.9
## 41   Qc3      Quebec   chilled  675   39.6
## 42   Qc3      Quebec   chilled 1000   41.4
## 64   Mc1 Mississippi   chilled   95   10.5
## 65   Mc1 Mississippi   chilled  175   14.9
## 66   Mc1 Mississippi   chilled  250   18.1
## 67   Mc1 Mississippi   chilled  350   18.9
## 68   Mc1 Mississippi   chilled  500   19.5
## 69   Mc1 Mississippi   chilled  675   22.2
## 70   Mc1 Mississippi   chilled 1000   21.9
## 71   Mc2 Mississippi   chilled   95    7.7
## 72   Mc2 Mississippi   chilled  175   11.4
## 73   Mc2 Mississippi   chilled  250   12.3
## 74   Mc2 Mississippi   chilled  350   13.0
## 75   Mc2 Mississippi   chilled  500   12.5
## 76   Mc2 Mississippi   chilled  675   13.7
## 77   Mc2 Mississippi   chilled 1000   14.4
## 78   Mc3 Mississippi   chilled   95   10.6
## 79   Mc3 Mississippi   chilled  175   18.0
## 80   Mc3 Mississippi   chilled  250   17.9
## 81   Mc3 Mississippi   chilled  350   17.9
## 82   Mc3 Mississippi   chilled  500   17.9
## 83   Mc3 Mississippi   chilled  675   18.9
## 84   Mc3 Mississippi   chilled 1000   19.9
  • 결과해석
    • Plant변수에는 나무의 고유 식별자 id 저장
    • Type변수에는 나무의 출신 지역 저장 (퀘벡 지역과 미시시피 지역 2개의 범주)
    • Treatment변수에는 나무의 저온처리 여부 저장. 저은처리가 된 나무만을 분석대상으로 삼았기 때문에 모두 chilled가 저장
    • conc변수는 CO2농도가 95부터 1000까지 7개 범주로 저장. 각 CO2농도 별로 CO2흡수율이 uptake변수에 저장돼 있음
    • 그래서 하나의 나무별, 7개 CO2농도별, CO2흡수율이 반복적으로 측정됨. 퀘벡 지역 3개 나무에 대한 데이터가 수집되고, 미시시피 지역도 동일방식으로 3개 나무에 대한 데이터가 수집됨

4. aov() 함수 - 반복측정 분산분석 수행

  • 반복측정 분산분석에서는 반복적으로 측정되는 집단내 요인이 존재하기 때문에 그 부분을 포뮬러에 추가적으로 반영해줘야 함
  • y: 종속변수 / W: 집단내 요인 / B: 집단간 요인 / Subject: 각 측정대상에 대한 식별자 변수
  • y ~ W 간의 관계, y ~ B * W 간의 관계는 일반적인 일원분산분석과 이원분산분석을 사용하는 포뮬러 지정 방식임
  • 추가로 에러텀(Errortum) 내 특정대상에 대한 식별자 변수와 집단내 요인변수를 “/” 로 연결해 지정

에러텀(Errortum): 에러텀 또는 방해요인(‘오차항’)이라고 불리는 변수 u는 x 이외에 y에 영향을 미치는 요인을 말한다. x 이외에도 y에 영향을 끼치는 보이지 않는 요소를 다루는데 이를 “unobserved”, 즉 불관찰변수라고도 불림 (참조: https://m.blog.naver.com/shineebiblee/220312396219)

5. aov()함수 - 반복측정 분산분석 수행(R 사용)

CO2sub.aov <- aov(uptake ~ Type * conc + Error(Plant/conc), data=CO2sub)
summary(CO2sub.aov) # summary() 함수로 분산분석 결과 생성된 모델 객체로부터 분산분석표 추출
## 
## Error: Plant
##           Df Sum Sq Mean Sq F value  Pr(>F)   
## Type       1 2667.2  2667.2   60.41 0.00148 **
## Residuals  4  176.6    44.1                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Error: Plant:conc
##           Df Sum Sq Mean Sq F value   Pr(>F)    
## conc       6 1472.4  245.40   52.52 1.26e-12 ***
## Type:conc  6  428.8   71.47   15.30 3.75e-07 ***
## Residuals 24  112.1    4.67                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
  • 결과해석1
    • 1st 주효과인 나무의 출신 지역을 나타내는 Type변수 는 F값이 60.41이고 대응되는 유의확률이 0.001로써 유의수준 0.05 비해 작기 때문에 귀무가설 기각하고 대립가설 채택
    • 따라서 나무의 출신 지역에 따라서 CO2흡수율이 다르다고 할 수 있음
  • 결과해석2
    • 두번째 집단변수인 conc변수 역시 F값이 52.52고 p값이 매우 작기 때문에 귀무가설 기각하고 대립가설 채택
    • “CO2농도에 따라서도 CO2흡수율에 있어 차이가 있다”라고 할 수 있음
  • 결과해석3
    • 상호작용효과를 보여주는 Type:conc항 역시 F값이 15.30이고 유의확률이 매우 작기 때문에 유의수준 0.05 비해 작기 때문에 귀무가설 기각
    • 따라서 “이 나무의 출신유형과 CO2농도 간의 상호작용효과 역시 존재한다” 라고 볼 수 있음
    • “출신 지역과 CO2흡수율 간의 관계는 CO2농도에 따라서 달라진다” 라고 얘기 할 수가 있음

6. boxplot() - 주효과와 상호작용효과를 상자도표로 표현

  • 1st 인수: 일반적인 이원분산분석 수행과 동일한 방식으로 종속변수와 독립변수 간의 관계 지정
  • col: 색깔 지정. 2개의 색깔 지정해 나무의 출신지역별로 서로 다른 색상의 상자도표가 출력되도록 함
# windows(width=12, height=8) # 별도의 윈도우 창을 열어 상자도표 출력
boxplot(uptake ~ Type * conc, data=CO2sub,col=c("deepskyblue", "violet"))

https://i.ibb.co/SXnftqR/14-boxplot.png

  • 도표해석
    • 2개 색깔로 구분되어 있는 상자도표 출력
    • y축: CO2흡수율
    • x축: 나무의 출신 지역 유형과 CO2농도의 조합에 따른 모든 가능한 범주조합. (퀘벡만 보이고 미시시피 없는 것은 미시시피 글자가 길어서 화면상에 출력 되지 않음.

7. boxplot() - 주효과와 상호작용효과를 상자도표로 표현(미출력 문제 개선)

  • 축의 축제목을 일단 삭제하고 y축의 축제목도 의미 있도록 변경
  • x축에 있는 범주쌍의 값들이 나타날 수가 있도록 이 텍스트가 축과 직각이 되도록 변경
  • y축도 축가 직각에 대로 바꾸면 가독성 좋아짐
  • 추가로 범례를 지정 해 각 색깔이 어떠한 나무 유형을 나타내는지 표시
  • 인수 설명
    • las=2: 텍스트가 축과 직각이 되도록 함
    • cex.axis=0.7: 텍스트 크기를 줄임임
    • xlab: x축 제목 생략 해 범주의 종루만 표현하도록 함
    • ylab: y축 제목을 의미있는 형태로 변경
    • main: 그래프의 제목 지정
# windows(width=12, height=8)
boxplot(uptake ~ Type * conc, data=CO2sub,
        col=c("deepskyblue", "violet"), 
        las=2, cex.axis=0.7, 
        xlab="", ylab="Carbon dioxide uptake rate", 
        main="Effects of Plant Type and CO2 on Carbon dioxide uptake")
  • 인수설명
    • legend() 함수로 범례를 추가적으로 지정
    • inset=0.2: 약간 띄워 그래프 상 보기가 좋도록 함
    • legend: 범례 들어갈 내용을 입력. 범례로 나무의 출신 지역이 표시되기 때문에 퀘벡과 미시시피 입력
    • fill: 상자도표에서 지정한 색깔과 동일한 색상 지정
boxplot(uptake ~ Type * conc, data=CO2sub,
        col=c("deepskyblue", "violet"), 
        las=2, cex.axis=0.7, 
        xlab="", ylab="Carbon dioxide uptake rate", 
        main="Effects of Plant Type and CO2 on Carbon dioxide uptake")
legend("topleft", inset=0.02, 
       legend=c("Quebec","Missisippi"), 
       fill=c("deepskyblue", "violet"))
  • 도표해석
    • 전보다 좀 개선된 형태 그래프 출력됨
    • 파란색 상자 도표는 퀘벡, 빨간색 상자도표는 미시시피 나무를 나타냄
    • 주효과 확인
      • 퀘벡이 미시시피 나무보다 CO2흡수율이 현저히 더 높음
      • x축은 오른쪽으로 갈수록 CO2농도가 높아짐. CO2농도가 증가함에 따라서 CO2흡수율 또한 증가. “나무의 출신 지역”과 “CO2농도”에 따른 주효과를 그래프에서 확인 가능
    • 상호작용효과 확인
      • CO2농도가 증가함에 따라 퀘벡 나무가 미시시피 나무보다 CO2흡수율 증가폭이 더 커짐
      • CO2농도와 나무의 출신 지역 간 상호작용효과를 그래프상에서 확인가능

8. interation2wt() - 주효과와 상호작용효과를 상자도표로 표현

  • boxplot()함수와 마찬가지 방식으로 인수 지정
library(HH)
interaction2wt(uptake ~ Type * conc, data=CO2sub)

https://i.ibb.co/1ZKzRqZ/14-interaction2wt.png

  • 도표해석
    • 대각선에 있는 것은 주효과, 비대각선은 상호작용효과 표시
    • 좌하단 상자도표
      • 퀘벡 나무와 미시시피 나무간 유의적인 CO2흡수율 차이가 있음
      • 나무의 출신 지역의 주효과가 확인됨
    • 우상단 상자도표
      • CO2농도가 증가함에 따라서 CO2흡수율 또한 증가. 그래서 CO2농도의 주효과도 확인됨
    • 우하단 그래프
      • “CO2농도가 증가함에 따라서 퀘벡과 미시시피 나무 간의 CO2흡수율 차이는 점점 더 커짐”
      • 그래서 나무의 출신 지역과 CO2농도의 상호작용효과를 확인 됨

 

+ Recent posts