메뉴
brunch
매거진
빅데이터 분석 기사 자격증 도전기
실행
신고
라이킷
8
댓글
공유
닫기
You can make anything
by writing
C.S.Lewis
브런치스토리 시작하기
브런치스토리 홈
브런치스토리 나우
브런치스토리 책방
계정을 잊어버리셨나요?
by
첨물
May 09. 2021
빅분기 실기연습(3)
R프로그램_분산 분석(세 개 그룹의 평균 비교)
이번에 세 개의 그룹의 처음 상태의 몸무게와 거식증 치료 방법에 따른 몸무게 변화에 대해 boxplot 및 일원 분산 분석을 통해 유의한 결과를 가지는지 보도록 하겠다.
먼저 데이터는 R에 있는 ano
r
exia를 불러오기
data(anorexia,package="MASS")
anorexia
df<-anorexia
>
anorexia
Treat Prewt Postwt
1 Cont 80.7 80.2
2 Cont 89.4 80.1
3 Cont 91.8 86.4
4 Cont 74.0 86.3
5 Cont 78.1 76.1
6 Cont 88.3 78.1
7 Cont 87.3 75.1
8 Cont 75.1 86.7
9 Cont 80.6 73.5
10 Cont 78.4 84.6
11 Cont 77.6 77.4
12 Cont 88.7 79.5
13 Cont 81.3 89.6
14 Cont 78.1 81.4
15 Cont 70.5 81.8
16 Cont 77.3 77.3
17 Cont 85.2 84.2
18 Cont 86.0 75.4
19 Cont 84.1 79.5
20 Cont 79.7 73.0
21 Cont 85.5 88.3
22 Cont 84.4 84.7
23 Cont 79.6 81.4
24 Cont 77.5 81.2
25 Cont 72.3 88.2
26 Cont 89.0 78.8
27 CBT 80.5 82.2
28 CBT 84.9 85.6
29 CBT 81.5 81.4
30 CBT 82.6 81.9
31 CBT 79.9 76.4
32 CBT 88.7 103.6
33 CBT 94.9 98.4
34 CBT 76.3 93.4
35 CBT 81.0 73.4
36 CBT 80.5 82.1
37 CBT 85.0 96.7
38 CBT 89.2 95.3
39 CBT 81.3 82.4
40 CBT 76.5 72.5
41 CBT 70.0 90.9
42 CBT 80.4 71.3
43 CBT 83.3 85.4
44 CBT 83.0 81.6
45 CBT 87.7 89.1
46 CBT 84.2 83.9
47 CBT 86.4 82.7
48 CBT 76.5 75.7
49 CBT 80.2 82.6
50 CBT 87.8 100.4
51 CBT 83.3 85.2
52 CBT 79.7 83.6
53 CBT 84.5 84.6
54 CBT 80.8 96.2
55 CBT 87.4 86.7
56 FT 83.8 95.2
57 FT 83.3 94.3
58 FT 86.0 91.5
59 FT 82.5 91.9
60 FT 86.7 100.3
61 FT 79.6 76.7
62 FT 76.9 76.8
63 FT 94.2 101.6
64 FT 73.4 94.9
65 FT 80.5 75.2
66 FT 81.6 77.8
67 FT 82.1 95.5
68 FT 77.6 90.7
69 FT 83.5 92.5
70 FT 89.9 93.8
71 FT 86.0 91.7
72 FT 87.3 98.0
여기서 Cont는 대조군, CBT는 인지치료, FT는 가족치료이고 치료 전후 몸무게가 Prewet과 Postwet으로 구별되어 있음
그리고 분산분석을 하기 위하여 패키지를 불러옴 (lawstat)
install.packages("lawstat")
library(lawstat)
세 그룹 간의 평균을 비교하기 위해서는 각 그룹이 분산 정도가 등분산성인지 먼저 검증해야 함.
leventest라는 것이고, p>0.05 보다 커야 등분산성임 (여기서는 0.1785)
leveneTest(Postwt~Treat,data=anorexia)
> leveneTest(Postwt~Treat,data=anorexia)
Levene's Test for Homogeneity of Variance (center = median)
Df F value Pr(>F)
group 2 1.7671
0.1785
69
다음은 세 개의 그룹의 평균을 비교하기에 앞서 boxplot으로 그래프를 그려서 대충 결과를 알아보자
boxplot(Prewt~Treat,data=anorexia)
boxplot(Postwt~Treat,data=anorexia)
음... 치료 전 세 그룹은 몸무게가 비슷한데, 치료 후 FT 그룹만 약간 올라간 느낌이 든다.
좀 더 Boxplot을 예쁘게 그려보자
boxplot(df[,-1], boxfill = NA, border = NA)
#빈 박스 그리기
boxplot(df[df$Treat=="Cont", -1], xaxt = "n", add = TRUE, boxfill="red",
boxwex=0.15, at = 1:ncol(df[,-1]) - 0.25) #shift these left by -0.15
boxplot(df[df$Treat=="CBT", -1], xaxt = "n", add = TRUE, boxfill="blue",
boxwex=0.15, at = 1:ncol(df[,-1]) + 0) #shift to the right by +0.15
boxplot(df[df$Treat=="FT", -1], xaxt = "n", add = TRUE, boxfill="green",
boxwex=0.15, at = 1:ncol(df[,-1]) + 0.25) #shift to the right by +0.15
#세 개의 그룹을 R, G, B 색을 넣어 치료 전, 후 그래프 그리기
legend("topleft",legend=c("대조군","인지치료", "가족치료"),fill=c("red","blue", "green"),border="white",box.lty=1,cex=1)
#범례 표시하기
음. 이렇게 보니, 확실히 치료 전 세 개의 그룹은 몸무게가 비슷했지만 가족치료를 받은 그룹만 몸무게가 늘었다는 것을 알 수 있었다.
그러면 치료 전 세 개의 그룹의 평균을 비교해보고, 치료 후 세 개의 그룹의 몸무게의 평균은 차이가 있는지를 알아보자.
#일원분산분석(aov 함수)
out1=aov(Prewt~Treat,data=df)
out1
summary(out1)
out2=aov(Postwt~Treat,data=df)
out2
summary(out2)
> summary(out1)
Df Sum Sq Mean Sq F value Pr(>F)
Treat 2 32.6 16.29 0.599
0.552
Residuals 69 1874.3 27.16
> summary(out2)
Df Sum Sq Mean Sq F value Pr(>F)
Treat 2 919 459.5 8.651
0.000444 ***
Residuals 69 3665 53.1
---
Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
치료 전 세 그룹의 몸무게의 평균은 유의차 없음 (p=0.552>0.05)
치료 후 세 그룹의 몸무게의 평균은 유의차 있음 (p=0.000444<0.05)
그런데 이렇게 세 개 그룹의 평균 비교 함수는 aov 이외 anova와 oneway 도 있다.
#일원분산분석(anova 함수)
out3=anova(lm(Prewt~Treat,data=df))
out4=anova(lm(Postwt~Treat,data=df))
summary(out3)
summary(out4)
#일원분산분석(oneway.test 함수)
out5=oneway.test(Prewt~Treat,data=df)
out6=oneway.test(Postwt~Treat,data=df)
summary(out5)
summary(out6)
keyword
데이터분석
빅데이터
브런치는 최신 브라우저에 최적화 되어있습니다.
IE
chrome
safari