R에서 정규성을 테스트하는 방법(4가지 방법)


많은 통계 테스트에서는 데이터 세트가 정규 분포를 따른다고 가정합니다 .

R에는 이 가정을 확인하는 네 가지 일반적인 방법이 있습니다.

1. (시각적 방법) 히스토그램을 생성합니다.

  • 히스토그램이 대략 “종” 모양이면 데이터가 정규 분포를 따르는 것으로 간주됩니다.

2. (시각적 방법) QQ 플롯을 생성합니다.

  • 그림의 점이 대략 직선 대각선을 따라 있으면 데이터가 정규 분포를 따르는 것으로 간주됩니다.

3. (정식 통계 검정) Shapiro-Wilk 검정을 수행합니다.

  • 검정의 p-값이 α = 0.05보다 크면 데이터가 정규 분포를 따르는 것으로 가정됩니다.

4. (공식 통계 검정) Kolmogorov-Smirnov 검정을 수행합니다.

  • 검정의 p-값이 α = 0.05보다 크면 데이터가 정규 분포를 따르는 것으로 가정됩니다.

다음 예에서는 이러한 각 방법을 실제로 사용하는 방법을 보여줍니다.

방법 1: 히스토그램 만들기

다음 코드는 R에서 정규 분포 및 비정규 분포 데이터 세트에 대한 히스토그램을 만드는 방법을 보여줍니다.

 #make this example reproducible
set. seeds (0)

#create data that follows a normal distribution
normal_data <- rnorm(200)

#create data that follows an exponential distribution
non_normal_data <- rexp(200, rate=3)

#define plotting region
by(mfrow=c(1,2)) 

#create histogram for both datasets
hist(normal_data, col=' steelblue ', main=' Normal ')
hist(non_normal_data, col=' steelblue ', main=' Non-normal ') 

왼쪽의 히스토그램은 정규 분포(대략 “종” 모양)인 데이터 세트를 보여주고, 오른쪽 히스토그램은 정규 분포가 아닌 데이터 세트를 보여줍니다.

방법 2: QQ 플롯 생성

다음 코드는 R에서 정규 분포 및 비정규 분포 데이터 세트에 대한 QQ 플롯을 생성하는 방법을 보여줍니다.

 #make this example reproducible
set. seeds (0)

#create data that follows a normal distribution
normal_data <- rnorm(200)

#create data that follows an exponential distribution
non_normal_data <- rexp(200, rate=3)

#define plotting region
by(mfrow=c(1,2)) 

#create QQ plot for both datasets
qqnorm(normal_data, main=' Normal ')
qqline(normal_data)

qqnorm(non_normal_data, main=' Non-normal ')
qqline(non_normal_data)

왼쪽의 QQ 플롯은 정규 분포(점들이 직선 대각선을 따라 있음)인 데이터 세트를 나타내고 오른쪽의 QQ 플롯은 정규 분포가 아닌 데이터 세트를 나타냅니다.

방법 3: Shapiro-Wilk 테스트 수행

다음 코드는 R의 정규 분포 및 비정규 분포 데이터 세트에 대해 Shapiro-Wilk 테스트를 수행하는 방법을 보여줍니다.

 #make this example reproducible
set. seeds (0)

#create data that follows a normal distribution
normal_data <- rnorm(200)

#perform shapiro-wilk test
shapiro. test (normal_data)

	Shapiro-Wilk normality test

data: normal_data
W = 0.99248, p-value = 0.3952

#create data that follows an exponential distribution
non_normal_data <- rexp(200, rate=3)

#perform shapiro-wilk test
shapiro. test (non_normal_data)

	Shapiro-Wilk normality test

data: non_normal_data
W = 0.84153, p-value = 1.698e-13

첫 번째 검정의 p-값은 0.05 이상으로 데이터가 정규 분포를 따르고 있음을 나타냅니다.

두 번째 검정의 p-값은 0.05보다 작아 데이터가 정규 분포를 따르지 않음을 나타냅니다.

방법 4: Kolmogorov-Smirnov 테스트 수행

다음 코드는 R에서 정규 분포 및 비정규 분포 데이터 세트에 대해 Kolmogorov-Smirnov 테스트를 수행하는 방법을 보여줍니다.

 #make this example reproducible
set. seeds (0)

#create data that follows a normal distribution
normal_data <- rnorm(200)

#perform kolmogorov-smirnov test
ks. test (normal_data, ' pnorm ')

	One-sample Kolmogorov–Smirnov test

data: normal_data
D = 0.073535, p-value = 0.2296
alternative hypothesis: two-sided

#create data that follows an exponential distribution
non_normal_data <- rexp(200, rate=3)

#perform kolmogorov-smirnov test
ks. test (non_normal_data, ' pnorm ') 
	One-sample Kolmogorov–Smirnov test

data: non_normal_data
D = 0.50115, p-value < 2.2e-16
alternative hypothesis: two-sided

첫 번째 검정의 p-값은 0.05 이상으로 데이터가 정규 분포를 따르고 있음을 나타냅니다.

두 번째 검정의 p-값은 0.05보다 작아 데이터가 정규 분포를 따르지 않음을 나타냅니다.

비정규 데이터를 처리하는 방법

주어진 데이터 세트가 정규 분포를 따르지 않는 경우 다음 변환 중 하나를 수행하여 보다 정규 분포를 만들 수 있습니다.

1. 로그 변환: x 값을 log(x) 로 변환합니다.

2. 제곱근 변환: x의 값을 √x 로 변환합니다.

3. 세제곱근 변환: x 값을 x 1/3 으로 변환합니다.

이러한 변환을 수행함으로써 데이터세트는 일반적으로 보다 정규 분포를 띄게 됩니다.

R에서 이러한 변환을 수행하는 방법을 보려면 이 튜토리얼을 읽어보세요.

추가 리소스

R에서 히스토그램을 만드는 방법
R에서 QQ 플롯을 생성하고 해석하는 방법
R에서 Shapiro-Wilk 테스트를 수행하는 방법
R에서 Kolmogorov-Smirnov 테스트를 수행하는 방법

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다