반응형

 

[R] 등분산성 검정 (Homogeneity of variance) - levene.test(), bartlett.test()

 T-test, ANOVA 등 몇몇 분석에서는 분포들의 분산이 같다는 가정 (등분산성)이 필요하다. 이럴 때에는 등분산성 검정을 해야 하는데, 많이들 사용하는 방법은 크게 다섯 가지가 존재한다.

 

1) F test

2) Levene의 등분산 검정

3) O'Brien의 등분산 검정(R에서 검정 불가)

4) Brown and Forsythe의 등분산 검정

5) Bartlett의 등분산 검정

 

이 중 F test, Levene의 등분산성 검정은 T-test에 관한 글에서 다루었으므로 본 포스팅에서는 다루지 않겠다. Fooled F와 Levene 등분산성 검정에 관한 내용은 다음 링크에서 확인할 수 있다. 2022.11.12 - [모평균 검정/R] - [R] 독립 표본 T검정 (Independent samples T-test) - t.test(), var.test(), levene.test()

 

 결국 우리가 확인하고자 하는 것은, "수축기 혈압 분포의 분산이 고혈압 환자군과 일반인 사이에서 다르다고 할 수 있는가?"이다. 이에 대해 설면하도록 하겠다.

 

*실습용 데이터는 아래 링크를 클릭하면 다운로드할 수 있습니다.

2022.08.04 - [공지사항 및 소개] - 분석용 데이터 (update 22.10.11)

 

분석용 데이터 (update 22.10.11)

2022년 10월 11일 버전입니다. 변수는 계속하여 추가될 예정입니다. 다음 카테고리에 있는 글에서 이용된 데이터입니다. - 기술 통계 - 범주형 자료 분석 - 모평균 검정 - 반복 측정 자료 분석 - 통계

medistat.tistory.com

 

코드를 보여드리기에 앞서 워킹 디렉토리부터 지정하겠다.

워킹 디렉토리에 관한 설명은 다음 링크된 포스트에서 볼 수 있다.

2022.08.05 - [통계 프로그램 사용 방법/R] - [R] 작업 디렉토리 (Working Directory) 지정 - getwd(), setwd()

setwd("C:/Users/user/Documents/Tistory_blog")

 

데이터를 불러와 df에 객체로 저장하겠다.

데이터 불러오는 방법은 다음 링크에서 볼 수 있다.

2022.08.05 - [통계 프로그램 사용 방법/R] - [R] 데이터 불러오기 : EXCEL - read_excel(), read.xlsx()

2022.08.10 - [통계 프로그램 사용 방법/R] - [R] 데이터 저장하기 : CSV 파일 - write.csv(), write_csv()

2022.08.10 - [통계 프로그램 사용 방법/R] - [R] 데이터 불러오기 : SAS file (.sas7bdat) - read.sas7bdat(), read_sas()

 

install.packages("readr")
library("readr")
df<-read_csv("Data.csv")

 

코드 - 등분산성 검정

Brown&Forsythe 의 등분산 검정은 "levene.test()"라는 함수를 쓰는데, 이는 "lawstat"이라는 패키지에 있으므로 설치를 한다. Bartlett의 등분산 검정을 시행할 때 사용하는 "bartlett.test()"는 기본 내장 함수이므로 별도의 설치가 필요 없다.

설치에 관한 내용은 다음 링크에서 확인할 수 있다. 2022.08.05 - [통계 프로그램 사용 방법/R] - [R] 패키지 설치하기 - install.packages(), library()

 

install.packages("lawstat")
library("lawstat")

 

등분산성을 검정하는 코드는 다음과 같다.

#Brown&Forsythe
levene.test(df$SBP, df$HTN)

#Bartlett
bartlett.test(df$SBP, df$HTN)

#Brown&Forsythe
levene.test(df$SBP, df$HTN) : df 데이터의 SBP(수축기 혈압) 변수를 df 데이터의 HTN(고혈압 여부) 변수에 따라 Brown&Forsythe 등분산 검정을 시행하라.

#Bartlett
bartlett.test(df$SBP, df$HTN) : df 데이터의 SBP(수축기 혈압) 변수를 df 데이터의 HTN(고혈압 여부) 변수에 따라 Bartlett 등분산 검정을 시행하라.

 

결과 

	Modified robust Brown-Forsythe Levene-type test based on
	the absolute deviations from the median

data:  df$SBP
Test Statistic = 0.010831, p-value = 0.9171

	Bartlett test of homogeneity of variances

data:  df$SBP and df$HTN
Bartlett's K-squared = 3.5705e-07, df = 1, p-value =0.9995

Modified robust Brown-Forsythe Levene-type test based on
the absolute deviations from the median

data:  df$SBP
Test Statistic = 0.010831, p-value = 0.9171

Bartlett test of homogeneity of variances

data:  df$SBP and df$HTN
Bartlett's K-squared = 3.5705e-07, df = 1, p-value =0.9995

 

결과가 복잡해 보이지만 위에 색깔 처리해놓은 숫자만 봐도 충분하다.

Brown-Forsythe 검사 결과 p-value는 0.9171이고

Bartlett test 검사 결과 p-value는 0.9995이다.

 

즉 어떤 방법을 사용하더라도, 모두 p-value가 0.05 이상으로 귀무가설을 기각하지 못해 모분산이 서로 같다고 결론 내릴 수 있다. 

 

코드 정리

#워킹 디렉토리 지정
setwd("C:/Users/user/Documents/Tistory_blog")

#데이터 불러오기
install.packages("readr")
library("readr")
df<-read_csv("Data.csv")

#levene.test() 함수를 위한 패키지 설치
install.packages("lawstat")
library("lawstat")

#Brown&Forsythe 등분산 검정
levene.test(df$SBP, df$HTN)

#Bartlett 등분산 검정
bartlett.test(df$SBP, df$HTN)

 

[R] 등분산성 검정 (Homogeneity of variance: Brown&Forsythe, Bartlett test) 정복 완료!

 

작성일: 2022.11.20.

최종 수정일: 2022.11.20.

이용 프로그램: R 4.2.2

RStudio v2022.07.2

RStudio 2022.07.2+576 "Spotted Wakerobin" Release

운영체제: Windows 10, Mac OS 12.6.1

반응형

+ Recent posts