반응형

[R] 정규성 검정 (2) : 히스토그램 - hist(), dnorm()

 

 많은 통계 분석에서 전제조건으로 데이터의 정규성(normality)을 요구하곤 한다. 검정하는 여러 방법이 다음과 같이 존재하지만, 그중 어떤 하나만으로도 결론 내릴 수는 없다.

 

정규성 검정 방법

1) QQ plot : 2022.08.11 - [기술 통계/R] - [R] 정규성 검정 (1) : QQplot - qqnorm()

2) 히스토그램

3) 정량적 검정: 2022.08.11 - [기술 통계/R] - [R] 정규성 검정 (3) : 정량적 검정 (Shapiro-Wilk, Kolmogorov-Smirnov) - shapiro.test(), ks.test()

 

본 글에서는 히스토그램으로 검정하는 방법에 대해 확인해볼 것이다.

 

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

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

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

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

 

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

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

 

분석용 데이터 (update 22.08.10)

2022년 08월 10일 버전입니다. 변수는 계속하여 추가될 예정입니다. 다음 카테고리에 있는 글에서 이용된 데이터입니다. - 기술 통계 - 통계 프로그램 사용 방법

medistat.tistory.com

 

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

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

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

2022.08.08 - [통계 프로그램 사용 방법/R] - [R] 데이터 불러오기 : CSV - read_csv(), read.csv(), fread()

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

 

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

a라는 객체에 있는 데이터 중 "ALT"의 히스토그램을 그려볼 것이다. 코드는 다음과 같다.

#R 설치 시에 자동으로 설치되는 패키지에 있는 함수들이므로 별도의 패키지를 설치할 필요가 없다.

hist(a$ALT, prob=TRUE)
ALTrange<-seq(min(a$ALT),max(a$ALT),length=max(max(a$ALT)-min(a$ALT),100))
ND<-dnorm(ALTrange,mean=mean(a$ALT),sd=sd(a$ALT))
lines(ALTrange, ND, lwd=2)

코드 설명

이해하지 않아도 된다.

모르겠으면, 그저 "a$ALT"을 원하는 변수명으로 바꾸어 코드를 실행하면 된다.

 

(1)hist(a$ALT, prob=TRUE): "a"라는 객체의 "ALT열"에 있는 데이터로 히스토그램을 그리시오.

(2)ALTrange<-seq(min(a$;ALT),max(a$ALT),length=max(max(a$ALT)-min(a$ALT),100)): ALT의 최댓값에서 최솟값을 뺀 값

(3)ALTrange<-seq(min(a$ALT),max(a$ALT),length=max(max(a$ALT)-min(a$ALT),100)): "ALT의 최댓값에서 최솟값을 뺀 값"과 100중 큰 것

(4)ALTrange<-seq(min(a$ALT),max(a$ALT),length=max(max(a$ALT)-min(a$ALT),100)): 등차수열을 만들 건데, 가장 작은 값은 ALT의 최솟값과 같고, 가장 큰 값은 ALT의 최댓값과 같다. 수열에 있는 숫자의 개수(length)는  (3)에서 구한 값

(5)ALTrange<-seq(min(a$ALT),max(a$ALT),length=max(max(a$ALT)-min(a$ALT),100))(4)에서 구한 수열을 ALTrange에 저장한다.

(6)ND<-dnorm(ALTrange,mean=mean(a$ALT),sd=sd(a$ALT)): 평균은 ALT의 평균, 표준편차는 ALT의 표준편차인 정규분포의 확률밀도함수값을 ALTrange 수열 내 각 항에 대해 구한다.
(7)lines(ALTrange, ND, lwd=2): x축에는 ALTrange, y축에는 ND를 넣고 선으로 잇되 선의 굵기는 2로 한다.


 

결과

 

해석방법

히스토그램 막대가 정규분포 곡선 상에 있음: 정규성 따름

히스토그램 막대가 정규분포 곡선 에서 벗어남: 정규성 따르지 않음

 

따라서, "대부분의 히스토그램 막대가 정규분포 곡선 상에 있으므로 정규성을 따른다고 할 수 있다."

 

 

 

R 정규성 검정 (히스토그램) 정복 완료!

 

작성일: 2022.08.11.

최종 수정일: 2022.08.31.

이용 프로그램: R 4.1.3, RStudio v1.4.1717

운영체제: Windows 10

 

반응형

+ Recent posts