기본 콘텐츠로 건너뛰기

one way ANOVA, levene's test, post_hoc ; in R

one way ANOVA,


1. 귀무가설(H0) : 모집단에서 모든 group의 평균은 같다. 즉 그룹간에 차이가 없다.
   대립가설(H1) :  모집단에서 모든 group의 평균은 차이가 있다.

2. 가정
  - 각 group들은 모두 독립적이어야 한다.
  - 각 group의 sample size가 서로 같거나, 비슷해야한다.
  - 모수적 검증이기 때문에 정규성을 만족해야만 한다.(sample size>30)
  - 모집단에서 group들의 분산이 같다는 등분산 조건을 만족해야만 한다.
     (Leveno's test 실시 or Bartlett test 실시)


그림1

위그림과 같이 anova 분석은종류(factor(요인), group(factor level, 요인수준))에 따라서나뉜다.















분산분석은 측정된 자료값들의 전체 변동을 비교하자 하는 요인수준(factor level) 간의 차이에의해서 발생하는 변동과 그 밖의 요인에 의해서 발생하는 변동으로 나누어서 자료를 분석하는 것이 기본원리




기본원리 1,2,와 같이 측정된 값에서 각각의 평균을 뺀 후에


제곱하여 더한다.







<분산북석표>





분산분석표의 제일 오른쪽에 있는 F0 통계량을 이용해서 전체 수준들간의 평균이 같은지 아니면 다른지 검정한다.  기본 개념은, F0 통계량은 처리평균제곱(MSTR)의 크기에 영향을 받는다.
 처리평균제곱(MSTR)이 커지면 오차평균제곱(MSE)은 작아지게 되며, 따라서 F0통계량은 분자가 커지고 분모가 작아지기 때문에  당연히 커지게 된다.  즉, F0통계량 값이 크다는 것은 수준평균들간에 평균의 차이가 크다는 의미이다.






위 결과표를 보면 f값이 108.8이고 p-value가 1.2e-13이기 때문에 대립가설1을 채택할 수 있다.


예시 )
attach(mydata)
res<- mytable(BMI_gr ~ sbp1,data=mydata, method=1, digits=1, max.ylev = 5)
res
install.packages("car") 
# car는 등분산 검정을 하기 위해서 package를 설치

library(car)
mydata$SRH <-as.factor(mydata$SRH)
# levene test를 실시하기 위해서는  변수 형태를 factor로 변경해야만 한다.

leveneTest(sbp1~BMI_gr, data=mydata)   # 등분산성 검정
# mydata 안의 BMRI_gr의 그룹으로 나누어진 sbp1 의 값을 등분산 검정을 진행한다.

result.anova <- aov(sbp1 ~ BMI_gr, data=mydata) 
# ANOVA 분석을 진행하는aov 함수를 사용한다.

summary(result.anova)                               # 분산분석결과 출력


post_hoc.tukey<-TukeyHSD(result.anova,"BMI_gr",ordered=TRUE)


post_hoc.tukey                                     # Tukey방법에 의한 사후검정




plot(post_hoc.tukey)
detach(mydata)



#
결과

Levene's Test for Homogeneity of Variance (center = median)
       Df F value Pr(>F)
group   2  1.0627 0.3466
   
             Df Sum Sq Mean Sq F value Pr(>F)
BMI_gr        2    605   302.7     1.8  0.167
Residuals   358  60194   168.1

                  diff       lwr       upr     p adj
정상-저체중   6.363946 -6.470471 19.198363 0.4737192
과체중-저체중 8.251621 -4.351666 20.854908 0.2730891
과체중-정상   1.887676 -1.735444  5.510796 0.4384698

levene's test는 p-value가 0.3이기 때문에 분산에서 차이가 없다. 다음통계분석을 진행해도 된다.
정상-과체중의 차이는 6.36이고 유의수준에서는 0.47이기 때문에 차이가 없었다. 가 답니다.




댓글

이 블로그의 인기 게시물

Kernel Density Estimation(커널밀도추정), Density plot in R

 Kernel Density Estimation(커널밀도추정) Density Estimation(밀도추정)  : 통계란, 데이터는 어떤변수가 가질 수 있는 다양한 가능성 중에 하나가 현실 세계에 구체화된 값이다. 그리고 우리는 그 변수의 성질을 파악하기위해서 부단히 노력을 한다. 하나의 데이터로 특성을 파악하기에는 어렵기 때문에 수많은 데이터를 이용해서 데이터의 특성을 파악하고자 노력을 한다. 이렇게 얻어진 데이터를 이용해서 데이터들의 분포로 부터 원래변수의 분포특성을 추정하고자 하는 것이 density estimation 이라고 한다.  - 밀도(density)는 수학적으로는 질량/부피 이지만,  밀도추정(density estimate), 기계학습, 확률, 통계 등에서 말하는 밀도(density)는 확률밀도(probagiltity density function)을 추정하는 것과 동일하다. f(a)는 x=a에서의 확률밀도(probability density)이다. 즉 x가 a라는 값을 가질 상대적인 가능성(relative likelihood)를 나타낸다.  즉 다시말하면 x=a 일 확률은 0이지만, x=a에서의 밀도는 0이 아니다. 또한 x가 a,b 사이의 값을 가질 확률은 그 구간의 확률밀도함수의 적분값으로 계산된다. 어떤 변수의 확률밀도함수(PDF)를 구할 수 있으면 그 변수가 가질 수 있는 값의 범위 및 확률, 기계학습 추정등에서 가장 핵심정인 요소중의 하나이다. Parametric vs Non-parametric 밀도추정. 밀도추정(density estimation)방법은 크게 parametric 방법과 non-parametric 방법으로 나뉜다. parametric density estimate는  확률밀도함수(PDF)에 대한 모델을 정해놓고 데이터들로부터 모델의 파라미터만 추정하는 방식이다.  즉 예를 들면 일일 교통량이 정규분포를 따른다고 가정해버리면...

python; cv2.cvtColor ;RGB 영상 이미지 처리 방법

디지털 영상  - 디지털 영상은 2차원 행렬의 형태로 표현되는데, 격자 하나를 하나의 픽셀이라고 부릅니다. 이를 3차원 영상처리에서는 복셀로 부르게 되는데요.  - 각자의 기준점에서 영상 좌표를 지정하고 그리고 변경함에 따라서 선택적으로 영상을 처리할 수 있게 됩니다. Digital Image의 유형은  Binary Image : 0 혹은 1로 나누어진 이미지를 의미하고,   Gray scale image :  color image - RGB color : - HSV color :   H(ue) : 0 : red, 120도 : Green, 240도 : Blue)   S(aturation) : 채도를 의미하고 색이 흐리다 , 진하다를 의미   V(alue) : 명도를 의미, 색이 어둡다 깊다를 의미 사용법 cv2.cvtColor(scr, code) parameter scr : input image code :  - grayscale을 BGR로 변환하기 위해서는 cv2.COLOR_BGR2GRAY를 사용하면 된다. 예제 aaa = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) pl.imshow(aaa) -원래 이미지 결과 이미지

python; cv2.getStructuringElement

사용법 cv2.getStructutinElement(shape,ksize[,anchor]) parameter shape :  - MORPH_RET : 사각형  - MORPH_ELLIPSE : 타원형  - MORPH_CROSS : 십자 ksize => 커널의 사이즈를 의미 예제 :  element = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(7,7)) pl.imshow(element)