14.통계데이터분석 - 분산분석 - 반복측정 분산분석.R
0.01MB
14.통계데이터분석 - 분산분석 - 반복측정 분산분석.Rmd
0.02MB
14.통계데이터분석---분산분석---반복측정-분산분석.html
1.61MB
14.통계데이터분석 - 분산분석 - 반복측정 분산분석
2022-07-22
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농도 하에서 반복적으로 측정
- 검정내용
- 지역 나무와 미시시피 지역 나무 간 CO2흡수율 차이가 있는지 검정하고
- 7개의 서로 다른 CO2농도에 따라서 CO2흡수율 차이가 있는지 검정
- 나무의 출신지역과 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() 함수 - 반복측정 분산분석 수행
- 현재 집단변수가 2개이기 때문에 반복측정 이원분산분석을 수행함
- 반복측정 분산분석은 aov() 함수를 이용해 수행
- 1st 인수: 일반 분산분석과 같이 종속변수와 집단변수간 관계를 포뮬러 형식으로 지정
- 반복측정 일원분산분석과 반복측정 이원분산분석을 위한 R 포뮬러 형식 (슬라이드 설명)
- 반복측정 분산분석에서는 반복적으로 측정되는 집단내 요인이 존재하기 때문에 그 부분을 포뮬러에 추가적으로 반영해줘야 함
- 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 사용)
- https://youtu.be/3YsIUsSZ7kY?list=PLY0OaF78qqGAxKX91WuRigHpwBU0C2SB_&t=694
- 변수 및 인수 설명 : 종속변수 uptake / 집단간 요인 Type변수 / 집단내 요인 conc변수 / data 인수 데이터셋 지정 / 에러텀 내 식별자변수와 집단내 요인 변수 추가
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농도의 상호작용효과를 확인 됨