반응형

[SAS] 일표본 윌콕슨 부호 순위 검정 (비모수 일표본 중앙값 검정: One-sample Wilcoxon Signed Rank Test) - PROC UNIVARIATE

 어떤 분포의 평균이 특정 값인지 확인하는 방법을 이전에는 일표본 T검정 (One-Sample T test)로 시행했었다. (2022.09.30 - [모평균 검정/SAS] - [SAS] 일표본 T검정 (One-sample T-test) - PROC TTEST) 하지만 여기에는 중요한 가정이 필요한데, 분포가 정규성을 따르는 것이다. 하지만 분포가 정규성을 따르지 않는다면 어떻게 해야 할까? 그럴 때 사용하는 것이 One-Sample Wilcoxon Signed Rank Test (일표본 윌콕슨 부호 순위 검정)이다. 

 

 이번 포스팅에서는 One-Sample Wilcoxon Signed Rank Test (일표본 윌콕슨 부호 순위 검정)에 대해서 알아볼 것이다.

 

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

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

 

분석용 데이터 (update 22.12.18)

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

medistat.tistory.com

 

시작하기 위해 라이브러리를 만들고, 파일을 불러온다.

라이브러리 만드는 방법: 2022.08.05 - [통계 프로그램 사용 방법/SAS] - [SAS] 라이브러리 만들기 - LIBNAME

파일 불러오는 방법: 2022.08.05 - [통계 프로그램 사용 방법/SAS] - [SAS] 데이터 불러오기 및 저장하기 - PROC IMPORT, PROC EXPORT

*라이브러리 지정하기;
LIBNAME hong "C:/Users/User/Documents/Tistory_blog";

*파일 불러오기;
PROC IMPORT
DATAFILE="C:\Users\user\Documents\Tistory_blog\Data.xlsx"
DBMS=EXCEL
OUT=hong.df
REPLACE;
RUN;

 

목표: 모집단에서 신경심리검사 1 원점수의 중앙값이 55이라고 할 수 있는가?

 이번 포스팅의 목적은 1000명의 데이터를 가지고, 이 1000명이 기원한 모집단에서 신경심리검사 1 원점수의 중앙값이 55이라고 할 수 있는지 판단하는 것이다.

 

전제조건 (정규성) - 코드

 만약 정규성을 따른다면 t-test를 하면 되므로 정규성 여부를 파악하도록 한다. 정규성 검정에 관한 분석 내용은 다음 글에서 살펴볼 수 있다.  2022.08.12 - [기술 통계/SAS] - [SAS] 정규성 검정 - PROC UNIVARIATE

PROC UNIVARIATE DATA=hong.df NORMAL PLOT;
VAR NP1_raw;
HISTOGRAM NP1_raw/ NORMAL (MU=EST SIGMA=EST);
RUN;

 

정규성 검정 - 결과

 

 N수가 2,000개 미만이므로 Shapiro-Wilk 통계량의 p-value를 보면 0.05 이하이며, Q-Q Plot은 대부분의 데이터가 선상에 있지 않고, 히스토그램에서도 정규성을 따르지 않는 것처럼 보인다. 따라서 일표본 T검정 (One-sample T-test)를 시행할 수 없고, 일표본 윌콕슨 부호 순위 검정 (One-Sample Wilcoxon Signed Rank Test)을 시행해야 한다.

 

일표본 윌콕슨 부호 순위 검정 (One-Sample Wilcoxon Signed Rank Test)의 귀무가설과 대립 가설

 

이번 일표본 윌콕슨 부호 순위 검정 (One-Sample Wilcoxon Signed Rank Test)의 귀무가설, 대립 가설은 다음과 같다.

귀무가설: $H_0=$ 모집단의 NP1_raw 중앙값은 55이다.

대립 가설:  $H_1=$ 모집단의 중앙값은 55보다 크거나 작다. (양측 검정)

 

일표본 윌콕슨 부호 순위 검정 (One-Sample Wilcoxon Signed Rank Test) 코드

PROC UNIVARIATE DATA=hong.df MU0=55;
VAR NP_1_raw;
RUN;

PROC UNIVARIATE DATA=hong.df MU0=55; : hong 라이브러리의 df데이터를 사용하고, 검정할 중앙값은 55다.
VAR NP1_raw; : NP1_raw에 대해 검정을 시행하라.

결과

우리가 보아야 할 내용은 부호 순위의 p값이다. 0.0001보다 작으므로 귀무가설을 기각하고 대립 가설을 선택하며 중앙값이 55는 아니라고 결론 내릴 수 있다.

 

알려진 중앙값에 대해 일표본 윌콕슨 부호 순위 검정 코드

위 정규성 검정에서 중앙값은 49.96328로 거의 50에 근사한다. 그렇다면 50에 대해 검정하면 어떤 결과를 내보일까?

PROC UNIVARIATE DATA=hong.df MU0=50;
VAR NP1_raw;
RUN;

 

결과

p-value가 0.6560>0.05로 귀무가설을 채택하는 것이 합리적이며, 중앙값이 50이 아니라고는 할 수 없는 상황이다.

 

중요한 가정: 대칭성

위 논의에서 빠진 정말 중요한 가정이 하나 있다. 신경심리검사 1 원점수 (NP1_raw)의 분포가 어떤 점수를 기점으로 좌우대칭이라는 것이다. 윌콕슨 부호 순위 검정은 좌우대칭일 때 그 검정력이 극대화되며, 좌우대칭이 아니면 정확도가 떨어진다. 신경심리검사 1 원점수 (NP1_raw)의 분포를 히스토그램을 통해 알아보자. 이는 위의 정규성 검정에서 나와있으며 결과는 다음과 같다.

봉우리가 세 개인 Trimodal shape을 하고 있고, 중앙값인 50을 기준으로 대칭인 것처럼 보인다. 따라서 위 분석에는 문제가 없는 듯하다.

 

가정이 성립하지 않는다면?

우리가 궁금하고, 문제가 되는 상황은 가정이 성립하지 않는 상황이다. 실제로 이럴 때가 많기 때문이다. 신경심리검사 2 원점수인 NP2_raw데이터의 분포를 확인해보자.

PROC UNIVARIATE DATA=hong.df NORMAL PLOT;
VAR NP2_raw;
HISTOGRAM NP2_raw/ NORMAL (MU=EST SIGMA=EST);
RUN;

이는 심하게 오른쪽으로 치우쳐진 right skewed data다. 이때 중위수(1.004532)에 대해 Wilcoxon signed rank test를 시행하면 어떻게 될까?

PROC UNIVARIATE DATA=hong.df MU0=1.004532;
VAR NP2_raw;
RUN;

참 중앙값으로 "NP2_raw의 중앙값이 참 중앙값과 같니?"라고 물어보았는데 "아니요"라고 대답하는 참사가 벌어진다. 이는 분포에 대칭성이 없기 때문이다. 이럴 때 선택할 수 있는 옵션이 많지 않긴 한데, 그중 하나는 변환 (transformation)이다. 이런 right skewed data는 로그 변환 (log-transformation)을 하면 대칭성이 갖추어지는 경우가 많다. 로그 변환을 하고 히스토그램을 그려 분포를 확인해보자. (로그 변환에 관한 글은 다음 링크에서 확인할 수 있다.2022.10.06 - [통계 프로그램 사용 방법/SAS] - [SAS] 변수 계산 (산술 연산) - DATA, SET)

DATA hong.df;
SET hong.df;
log_NP2_raw=log(NP2_raw);
RUN;

PROC UNIVARIATE DATA=hong.df NORMAL PLOT;
VAR log_NP2_raw;
HISTOGRAM log_NP2_raw/ NORMAL (MU=EST SIGMA=EST);
RUN;

 

충분히 대칭성을 띄고 있다고 할 수 있다.  "혹시 정규성을 띄지 않을까?"라는 생각으로 정규성을 확인해보면 다음과 같음을 알 수 있다. 

히스토그램에서는 정규분포를 따르는 것 같아 보이지만, QQ plot에서 직선 위에 있지 않은 점들이 많고, Shapiro-wilk test에서 p-value가 매우 작게 나오므로 정규성을 띠지 않는다고 판단하는 것이 맞다. 따라서 일표본 t검정(One-sample t-test)이 아닌 일표본 윌콕슨 부호 순위 검정 (One sample Wilcoxon signed rank test)을 시행해야 한다. 위와 같이 log_NP2_raw의 중앙값에 대해 검정해보자.

 

코드

PROC UNIVARIATE DATA=hong.df MU0=0.00452;
VAR log_NP2_raw;
RUN;

p-value가 0.7366으로 귀무가설을 기각할 수 없게 되어 중앙값은 0.00452가 아니라고 할 수 없다고 결론을 내리게 된다.

 

 

그 외 다룰 내용 1: 정규성을 안 따르면 꼭 Wilcoxon test를 시행해야 하나?

 T-test의 전제조건은 표본 평균이 정규분포를 따르는 것이다. 그런데 중심 극한 정리에 따라 표본의 수 (우리 데이터에서는 n=1,000)가 커질수록 표본 평균의 분포는 정규성을 띠게 된다. 따라서 n수가 적당히 크기만 하면 표본이 정규분포를 따르는지와 관계없이 표본평균은 정규성을 따른다고 할 수 있다. 이런 이유로 정규성과 관계없이 n수가 크기만 하면 t-test의 이용이 정당화되기도 한다. 합리적인 말이다.

 그런데 왜 정규분포를 따르는지 왜 다들 확인할까? 만약 모분포가 정규분포였다면 표본도 정규분포를 따를 확률이 높아진다. 물론 꼭 그런 건 아니지만 말이다. 따라서 표본이 정규분포를 따른다면, 모분포를 정규분포를 따른다고 할 수 있고, 그렇다면 n수가 작아도 표본 평균의 분포도 정규성을 따르니 t-test를 사용해도 되는 안전한 환경이 구축된다. 이런 이유로 정규성을 확인하게 된다.

 

그 외 다룰 내용 2: Wilcoxon signed rank test는 짝지어진 자료의 검정방법 아닌가?

 맞다. 하지만 one sample test에도 사용될 수 있다. 모수적 방법에서 대응 표본 T 검정 (paired T test)가 사실 일표본 T 검정 (One sample T test)와 같다는 것과 일맥상통하는 이야기다. (대응 표본 T검정은 다음 링크에서 확인할 수 있다.2022.10.07 - [반복 측정 자료 분석/SAS] - [SAS] 대응 표본 T검정 (Paired samples T-test) - PROC TTEST)

 

그 외 다룰 내용 3: SAS의 결과는 왜 SPSS/R과 다른가?

SPSS와 R의 Wilcoxon signed rank test와 통계량, p값이 조금씩 다를 수 있다. SPSS와 R의 Wilcoxon signed rank test 내용은 다음 링크에서 확인할 수 있다.

2022.11.29 - [모평균 검정/R] - [R] 일표본 윌콕슨 부호 순위 검정 (비모수 일표본 중앙값 검정: One-Sample Wilcoxon Signed Rank Test) - wilcox.test()

2022.12.02 - [모평균 검정/SPSS] - [SPSS] 일표본 윌콕슨 부호 순위 검정 (비모수 일표본 중앙값 검정: One-Sample Wilcoxon Signed Rank Test)

 

다르게 나오는 것이 맞다.

 1) 통계량: SPSS와 R은 계산된 통계량을 바로 제시한다. 하지만 SAS는 부호 순위 통계량의 기댓값인 $\frac {n(n+1)}{4}$를 뺀 값을 제시한다. 따라서 다를 수밖에 없다.

 2) R에서는 중앙값 자체를 코드에 넣었지만, 본 포스팅에서는 중앙값이라고 제시된 반올림된 값을 코드에 넣었다.

 3) (가장 중요한 내용) R과 SPSS는 윌콕슨 부호 순위 통계량을 정규분포에 근사시키지만, SAS는 t 분포에 근사 시키며 이용하는 분산도 아주 조금은 다르다. 

 4) 하지만, 표본의 수가 20이하일 때에는 근사 시키지 않은 정확한 p-value (exact p-value)을 사용한다. R에서도 50 미만인 표본에 대해서는 exact method를 사용하므로 20 미만의 표본의 수를 가진 데이터로 검정할 때에는 같은 결과를 내주게 된다.

 

코드 정리

*라이브러리 지정하기;
LIBNAME hong "C:/Users/User/Documents/Tistory_blog";

*파일 불러오기;
PROC IMPORT
DATAFILE="C:\Users\user\Documents\Tistory_blog\Data.xlsx"
DBMS=EXCEL
OUT=hong.df
REPLACE;
RUN;

**NP1_raw;

*정규성 검정;
PROC UNIVARIATE DATA=hong.df NORMAL PLOT;
VAR NP1_raw;
HISTOGRAM NP1_raw/ NORMAL (MU=EST SIGMA=EST);
RUN;

*Wilcoxon signed rank test;
PROC UNIVARIATE DATA=hong.df MU0=55;
VAR NP_1_raw;
RUN;

*중앙값 근사치(50)으로 검정하기;
PROC UNIVARIATE DATA=hong.df MU0=50;
VAR NP1_raw;
RUN;



**NP2_raw;

*NP2_raw 대칭성 확인;
PROC UNIVARIATE DATA=hong.df NORMAL PLOT;
VAR NP2_raw;
HISTOGRAM NP2_raw/ NORMAL (MU=EST SIGMA=EST);
RUN;

*NP2_raw 비대칭이지만 wilcoxon test 시행하기;
PROC UNIVARIATE DATA=hong.df MU0=1.004532;
VAR NP2_raw;
RUN;

*로그변환 후 히스토그램으로 대칭성 확인하기, 정규성 검정하기;
DATA hong.df;
SET hong.df;
log_NP2_raw=log(NP2_raw);
RUN;

PROC UNIVARIATE DATA=hong.df NORMAL PLOT;
VAR log_NP2_raw;
HISTOGRAM log_NP2_raw/ NORMAL (MU=EST SIGMA=EST);
RUN;

*로그변환된 변수로 Wilcoxon test 시행하기;
PROC UNIVARIATE DATA=hong.df MU0=0.00452;
VAR log_NP2_raw;
RUN;

 

[SAS] 일표본 윌콕슨 부호 순위 검정 (비모수 일표본 중앙값 검정: One-Sample Wilcoxon Signed Rank Test) 정복 완료!

 

작성일: 2022.12.19.

최종 수정일: 2022.12.19.

이용 프로그램: SAS v9.4

운영체제: Windows 10

반응형

+ Recent posts