3개 이상의 집단에서 평균을 비교하는 경우 t 검정 대신 분산분석 (ANOVA)를 사용합니다. 일원배치 분산분석 (One Way ANOVA) 역시 통계 분석의 기본적인 방법으로 널리 사용됩니다. 앞서 예제를 확장해서 각 30명 씩, A,B,C 반 남학생의 키를 측정했다고 가정합니다.
일단 테스트를 위한 가상 데이터를 만듭니다.
> set.seed(1234)
> A<-rnorm span="">-rnorm>
> set.seed(123)
> B<-rnorm span="">-rnorm>
> set.seed(12345)
> C<-rnorm span="">-rnorm>
문제는 이러면 각각의 A/B/C 라는 벡터만 만들어졌다는 것입니다. 이대로 anova에 사용되는 aov를 입력하면 에러가 납니다.
> out=aov(A,B,C)
Error: $ operator is invalid for atomic vectors
이제 데이터 프레임을 만드는 방법에 대해서 설명드리겠습니다. 우리는 아래와 같은 데이터를 만들어야 합니다.
키 (height) 반 (class)
1 173 A
2 171 B
3 168 C
.......
이와 같은 형태의 데이터는 실제 우리가 다루는 데이터에서 흔히 볼 수 있는 구조이며 이를 정돈된 데이터 혹은 말끔한 데이터 (Tidy data)라고 합니다. 물론 우리가 보는 기초 자료 가운데는 이렇게 잘 정리되지 않은 것도 상당수라 실제로는 정리하는 과정을 거쳐야 합니다. 여기서는 A/B/C 세 반 자료를 정돈된 형태로 바꿔보겠습니다.
방법은 각 반의 가상 데이터를 위의 형태로 정리한 후 rbind 명령어로 붙이는 것입니다. data.frame 명령어를 이용해서 3개의 데이터 프레임을 만들고 합칠 것입니다. 우선 data.frame을 만들겠습니다.
> DFA<-data .frame="" class="" height="" span="">-data>
> DFA
height....A Class.....A.
1 163.9647 A
2 171.3871 A
3 175.4222 A
4 158.2715 A
5 172.1456 A
6 172.5303 A
7 167.1263 A
8 167.2668 A
9 167.1777 A
10 165.5498 A
11 167.6140 A
12 165.0081 A
13 166.1187 A
14 170.3223 A
15 174.7975 A
16 169.4486 A
17 167.4450 A
18 165.4440 A
19 165.8141 A
20 182.0792 A
21 170.6704 A
22 167.5466 A
23 167.7973 A
24 172.2979 A
25 166.5314 A
26 162.7590 A
27 172.8738 A
28 164.8817 A
29 169.9243 A
30 165.3203 A
위에서 data.frame을 이용해서 각각 A 데이터에 있는 키와 여기에 속한 그룹에 A라는 범주형 데이터를 붙였습니다. 다만 나중에 합치기 위해서는 변수명도 통일해야 합니다. colnames 명령어를 이용해서 height와 class로 통일하겠습니다.
DFA<-data .frame="" class="" height="" span="">-data>
colnames(DFA)<-c height="" lass="" span="">-c>
DFA
DFB<-data .frame="" class="" height="" span="">-data>
colnames(DFB)<-c height="" lass="" span="">-c>
DFB
DFC<-data .frame="" class="" height="" span="">-data>
colnames(DFC)<-c height="" lass="" span="">-c>
DFC
이렇게 만든 데이터 프레임 셋을 연결합니다.
DF2<-rbind span="">-rbind>
이제 DF2라는 데이터 프레임에 90개의 관측치와 2개의 변수 (키와 반)를 지닌 데이터를 성공적으로 만들었습니다. (DF2를 R에서 실행시키면 알 수 있습니다) 일원배치 분산 분석을 해보겠습니다.
> out=aov(height~Class, data=DF2)
> summary(out)
Df Sum Sq Mean Sq F value Pr(>F)
Class 2 560.4 280.18 12.65 1.51e-05 ***
Residuals 87 1927.1 22.15
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
방법은 간단합니다. aov(결과변수~독립변수, data=데이터프레임 이름) 으로 객체를 만들고 summary로 내용을 보면 됩니다. 여기서는 반에 따라서 키의 차이가 있는지 보는 것이기 때문에 독립변수는 반이 되고 결과(종속)변수는 키가 됩니다.
결과에서 F 값이 12.65에 P 값은 1.51e-05가 나왔습니다. 즉 P=0.0000151입니다. P<0 .05="" nbsp="" span="">0>
다음에는 이 내용에 대해서 좀 더 깊이있게 들어가 보겠습니다.
댓글
댓글 쓰기