brunch

You can make anything
by writing

C.S.Lewis

by 첨물 May 09. 2021

빅분기 실기연습(3)

R프로그램_분산 분석(세 개 그룹의 평균 비교)

이번에 세 개의 그룹의 처음 상태의 몸무게와 거식증 치료 방법에 따른 몸무게 변화에 대해 boxplot 및 일원 분산 분석을 통해 유의한 결과를 가지는지 보도록 하겠다.


먼저 데이터는 R에 있는 anorexia를 불러오기


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)

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari