[R] 정규성 검정 (3) : 정량적 검정 (Shapiro-Wilk, Kolmogorov-Smirnov) - shapiro.test(), ks.test()
많은 통계 분석에서 전제조건으로 데이터의 정규성(normality)을 요구하곤 한다. 검정하는 여러 방법이 다음과 같이 존재하지만, 그중 어떤 하나만으로도 결론 내릴 수는 없다.
정규성 검정 방법
1) QQ plot : 2022.08.11 - [기술 통계/R] - [R] 정규성 검정 (1) : QQplot - qqnorm()
2) 히스토그램: 2022.08.11 - [기술 통계/R] - [R] 정규성 검정 (2) : 히스토그램 - hist(), dnorm()
3) 통계적 검정
본 글에서는 정량적 검정(Shapiro-Wilk, Kolmogorov-Smirnov test)으로 검정하는 방법에 대해 확인해볼 것이다.
코드를 보여드리기에 앞서 워킹 디렉토리부터 지정하겠다.
워킹 디렉토리에 관한 설명은 다음 링크된 포스트에서 볼 수 있다.
2022.08.05 - [통계 프로그램 사용 방법/R] - [R] 작업 디렉토리 (Working Directory) 지정 - getwd(), setwd()
setwd("C:/Users/user/Documents/Tistory_blog")
*실습용 데이터는 아래 링크를 클릭하면 다운로드할 수 있습니다.
2022.08.04 - [공지사항 및 소개] - 분석용 데이터 (update 22.08.10)
데이터를 불러와 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")
1) Shapiro-Wilk test
a라는 객체에 있는 데이터 중 "ALT"로 Shapiro-Wilk test를 시행할 것이다. 코드는 다음과 같다.
#R 설치 시 기본으로 설치되는 패키지를 사용하므로 별도 설치가 필요 없다.
shapiro.test(a$ALT)
결과
Shapiro-Wilk normality test
data: a$ALT
W = 0.9982, p-value = 0.3749
2) Kolmogorov-Smirnov test
a라는 객체에 있는 데이터 중 "ALT"로 Kolmogorov-Smirnov test를 시행할 것이다. 코드는 다음과 같다.
#R 설치 시 기본으로 설치되는 패키지를 사용하므로 별도 설치가 필요 없다.
ks.test(a$ALT, "pnorm", mean=mean(a$ALT), sd=sd(a$ALT))
결과
One-sample Kolmogorov-Smirnov test
data: a$ALT
D = 0.015397, p-value = 0.9717
alternative hypothesis: two-sided
해석방법
초급자: p-value>0.05이므로 정규성을 따른다.
중급자:
귀무 가설과 대립 가설은 다음과 같다.
-귀무 가설: ALT는 정규성을 따른다.
-대립 가설: ALT는 정규성을 따르지 않는다.
이때 제 1종 오류는 다음과 같다.
제 1종 오류
=귀무 가설이 참인데도 기각하고 대립 가설을 택함
=ALT는 정규성을 따르는데도 따르지 않는다고 결론 내림
p-value는 제 1종 오류를 범할 확률을 의미하므로 다음과 같이 결론내릴 수 있다.
결론: 정규성을 따르는 것이 진실인데, 따르지 않는다고 결론내렸을 확률이 0.05보다 크다.
=정규성을 따르는 것이 진실인데, 따르지 않는다고 결론내린 것은 잘못일 수 있다.
=정규성을 따르지 않는다고는 할 수 없다.
고급자:
-(비록 본 데이터는 n수가 충분하지만) n수가 굉장히 적다면 정규성 검정을 잘 통과하므로 결과를 맹신해서는 안 된다.
-본 데이터의 n수는 1,000명으로 2,000명 미만이므로 Shapiro-Wilk test의 결과를 인용한다. (SAS 기준, 2,000명까지는 Shapiro-Wilk test을 계산해주고, Kolmogorov-Smirnov test는 2,000명 이상이 필요하다.)
-또한, QQplot과 히스토그램의 결과도 고려하여 정규성 여부를 판단해야 한다.
정규성 검정은 p-value가 0.05보다 크기를 바라게 되는 몇 안 되는 통계 검정 중 하나다.
많이 쓰이는 통계 분석 중 이런 검정은 세 가지가 있다
1) 정규성 검정 (Normality test): Shapiro-Wilk test, Kolmogorov-Smirnov test
2) Ordinal logistic regression의 proportional odds assumption 검정인 Score test
3) Cox regression의 proportional hazard assumption 검정인 Schoenfeld residual test
p-value가 0.05보다 클 때, 이 분석들의 결론은 "정규성을 위반한다고 볼 수는 없었다.", "비례 오즈(위험) 가정을 위반한다고 볼 수는 없었다." 라고 표현하게 된다.
R 정규성 검정 (정량적 검정) 정복 완료!
작성일: 2022.08.11.
최종 수정일: 2022.08.11.
이용 프로그램: R 4.1.3, RStudio v1.4.1717
운영체제: Windows 10
'기술 통계 > R' 카테고리의 다른 글
[R] 도수분포표 (Frequency table), 분할표 (Contingency table) 만들기 - table(), prop.table(), xtabs(), margin.table() (0) | 2022.08.31 |
---|---|
[R] 고급 Q-Q Plot - Van der Waerden, Rankit, Tukey, Blom (0) | 2022.08.16 |
[R] 정규성 검정 (4) : 정량적 검정 (Lilliefors test) - lillie.test() (0) | 2022.08.12 |
[R] 정규성 검정 (2) : 히스토그램 - hist(), dnorm() (0) | 2022.08.11 |
[R] 정규성 검정 (1) : Q-Q plot - qqnorm(), qqline() (0) | 2022.08.11 |