반응형

[SAS] 윌콕슨 순위 합 검정, 맨 휘트니 U 검정 (비모수 독립 표본 중앙값 검정: Wilcoxon rank sum test, Mann-Whitney U test) - NPAR1WAY()

 두 분포의 평균이 다른지 확인하는 방법을 이전에는 독립 표본 T검정 (Two-Sample T test)로 시행했었다. (2022.10.04 - [모평균 검정/SAS] - [SAS] 독립 표본 T검정 (Independent samples T-test) - PROC TTEST) 하지만 여기에는 중요한 가정이 필요한데, 각각의 분포가 정규성을 따르는 것이다. 하지만 분포가 정규성을 따르지 않는다면 어떻게 해야 할까? 그럴 때 사용하는 것이 Wilcoxon rank sum test (윌콕슨 순위 합 검정)이다.  윌콕슨 순위 합 검정 (Wilcoxon rank sum test)는 이후에 Mann과 Whitney가 개정을 하였고 그때 U 통계량을 사용하므로 맨 휘트니 U 검정(Mann-Whitney U test)이라고도 한다. 또한 세 사람의 이름을 붙여 Wilcoxon-Mann-Whitney Test (WMW test)라고도 한다. 

 

 이번 포스팅에서는 윌콕슨 순위 합 검정 (Wilcoxon rank sum 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;

 

목표: 음주 여부에 따라 Gamma-glutamyl transferase(GGT)의 중앙값이 모집단 수준에서 서로 다르다고 말할 수 있는가?

 

정규성 - 코드

 만약 GGT의 분포가 정규성을 따른다면, 독립 표본 T 검정으로 이를 확인할 수 있을 것이다. 독립 표본 (Indepent samples, Two tamples) T 검정의 전제조건은 각각의 독립 표본의 분포가 정규성을 따른다는 것이다. 즉, 여기에서는 음주 여부에 따라 GGT의 정규성을 검정하도록 하겠다.

 - 정규성 검정에 관한 분석 내용은 다음 글에서 살펴볼 수 있다. 2022.08.12 - [기술 통계/SAS] - [SAS] 정규성 검정 - PROC UNIVARIATE

 - PROC UNIVARIATE명령문에서 "CLASS"옵션을 사용하는 방법은 다음 글에서 살펴볼 수 있다. 2022.09.23 - [기술 통계/SAS] - [SAS] 기술 통계 (평균, 표준편차, 표준오차, 최댓값, 최솟값, 중위수, 분위수 등) - PROC UNIVARIATE, PROC MEANS

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

 

정규성 검정 - 결과

1) ALCOHOL=0 (비음주자 군)

 

 

2) ALCOHOL=1 (음주자 군)

 N수가 2,000개 미만이므로 Shapiro-Wilk 통계량의 p-value를 보면 0.05 이하이며, Q-Q Plot은 대부분의 데이터가 선상에 있지 않고, 히스토그램에서도 정규성을 따르지 않는 것처럼 보인다. 따라서 독립 표본 T검정 (Two-sample T-test)를 시행할 수 없고, 맨 휘트니 U 검정 (Mann-Whitney U test)을 시행해야 한다.

 

 

맨 휘트니 U 검정 (Mann-Whitney U test) 코드

PROC NPAR1WAY DATA=hong.df WILCOXON CORRECT=NO;
CLASS ALCOHOL;
VAR GGT;
RUN;

PROC NPAR1WAY DATA=hong.df WILCOXON CORRECT=NO; : 비모수 검정을 시행한다. 데이터는 hong라이브러리의 df를 사용하고, 윌콕슨 검정 (맨 휘트니 U 검정)을 시행한다. 연속성 수정은 하지 않는다.(연속성 수정에 관한 내용은 다음 링크를 확인하길 바란다.2022.08.30 - [통계 이론] - [이론] 연속성을 수정한 카이 제곱 검정 (Chi-squared test with Yates's correction for continuity))
CLASS ALCOHOL; : ALCOHOL값에 따라 검정을 시행한다. (음주 여부에 따라 시행한다.)
VAR GGT; : GGT값을 검정한다.

 

*만약 연속성 수정을 원한다면 "CORRECT=NO"를 빼버리면 된다.

결과

 

빨간 박스 안 양측 검정 p-value가 매우 작으므로 유의한 결과임을 알 수 있다. 따라서 귀무가설을 기각하고 대립 가설을 택해야 한다. 여기에서 귀무가설과 대립 가설은 무엇일까?

 

귀무가설 $H_0=$ 두 분포는 동일하다.

대립 가설$H_1=$  두 분포는 평균만 다를 뿐, 분포는 똑같이 생겼다.

즉, 대립 가설이 의미하는 것은 두 분포는 평행이동 관계에 있다는 것이다. 그래야 중앙값이 달라진 것인지 확인할 수 있다. 

평행이동 관계

이 말은, 맨 휘트니 U 검정에도 필요한 가정이 있다는 말이다. 두 분포는 동일하게 생겼어야 한다.

조금 어렵게 이야기하면, 두 분포의 first moment는 다르지만, 그보다 고차원의 central moment는 같아야 한다.

만약 생김새가 다르면 맨 휘트니 U 검정을 사용하면 안 되고, Robuts rank order test 등을 시행해야 한다. (물론 현실에서는 이런 내용을 무시한 채 '정규성을 따르지 않으니 맨 휘트니 U 검정을 사용한다'는 연구자가 대다수다.) 이에 관한 내용은 다음 링크를 확인하길 바란다. 링크 추가 예정

 

 그런데 위 히스토그램을 보면 음주자와 비음주자의 GGT분포는 right skewed 된 분포로 어느 정도 비슷하게 생겼다. 모든 central moment를 조사하는 것은 현실적으로 힘들지만, 2nd cental moment인 분산의 차이를 검정해보면 다음과 같음을 알 수 있다. 등분산성 검정 방법은 다음 링크를 확인하길 바란다.

2022.10.04 - [모평균 검정/SAS] - [SAS] 독립 표본 T검정 (Independent samples T-test) - PROC TTEST

2022.10.05 - [모평균 검정/SAS] - [SAS] 등분산성 검정 (Homogeneity of variance) - PROC GLM

코드

PROC TTEST DATA=hong.df;
CLASS HTN;
VAR GGT;
RUN;

결과

p-value는 0.7922로 분산에 차이가 없다고 결론 내리는 것이 합당하다.

따라서 두 분포의 모양이 같다고 생각하면 본 맨 휘트니 U 검정으로 음주자와 비음주자의 GGT값에는 차이가 있다고 결론 내릴 수 있다.

 

 

만약, 분포가 다르게 생기면 어떤 결과가 초래되길래 그렇게 강조하는 걸까?

R에서 시행한 내용을 참조하면 다음과 같다.

2022.12.01 - [모평균 검정/R] - [R] 로버스트 순위 순서 검정 (비모수 독립 표본 중앙값 검정: Robust rank order test, Flinger-Pollicello test) - rrod.test()

R에서 NP3_raw는 right skewed, NP4_raw는 left skewed로 서루 매우 다르게 생겼음을 알 수 있다.

분산, 중앙값이 완벽히 일치하며, 등분산성 검정에서도 분산에 차이가 없다고 나온다. 하지만 맨 휘트니 U 검정 결과 p-value는 매우 작게 나온다. 만약 맨 휘트니 U 검정이 "중앙값이 같은지 확인하는 검정"이라고만 알고 있다면 중앙값이 완전히 같은 이런 경우에도 "중앙값에 차이가 있다."라고 결론 내릴 것이다. 하지만 이 경우 귀무가설을 기각하고 "두 분포는 다르게 생겼다."라고 결론 내려야 옳은 결론에 다다른다. 

 

 따라서 만약 생긴 모양이 같고 중앙값만 다르다면, 유의미한 맨 휘트니 U 검정의 결과는 중앙값의 차이로 귀결될 수 있다. 하지만 모양이 다르다면 중앙값의 차이로 귀결될 수 없음을 유의하길 바란다.

 

코드 정리

*라이브러리 지정하기;
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;

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

*맨 휘트니 U 검정;
PROC NPAR1WAY DATA=hong.df WILCOXON CORRECT=NO;
CLASS ALCOHOL;
VAR GGT;
RUN;

 

[SAS] 윌콕슨 순위 합 검정, 맨 휘트니 U 검정 (비모수 독립 표본 중앙값 검정: Wilcoxon rank sum test, Mann-Whitney U test) 정복 완료!

작성일: 2022.12.20.

최종 수정일: 2022.12.22.

이용 프로그램: SAS v9.4

운영체제: Windows 10

반응형
반응형

[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

반응형
반응형

[R] 편상관 계수, 부분 상관 계수 (Partial correlation coefficient) - pcor.test()

 

세상의 많은 지표들은 서로 상관되어있는 경우가 많다. 비흡연자에 비해 흡연자가 폐암에 잘 걸리고, 부모의 키가 클수록 아이의 키도 크다. 소득 수준이 높은 나라일수록 평균 수명도 길고, 수학 점수가 높은 학생은 물리 점수가 높으며, 식당에서 음식을 많이 시킬수록 계산해야 하는 금액도 커진다. 변수의 형태에 따라 피어슨 상관 계수 (Pearson's correlation coefficient)를 구하거나 스피어만 상관 계수 (Spearman's correlation coefficient), 혹은 켄달의 타우 (Kendall's tau)를 구하기도 한다. 관련 내용은 다음 링크에서 확인할 수 있다.

2022.12.15 - [상관분석/R] - [R] 피어슨 상관 계수 (Pearson's correlation coefficient) - cor.test()

2022.12.16 - [상관분석/R] - [R] 스피어만 상관 계수, 켄달의 타우 (Spearman's rank correlation coefficient, Kendall's tau) - cor.test()

 

 그런데 만약 다음과 같은 상황이라면 어떨까?

목표: 수축기 혈압이 심혈관 질환 위험에 미치는 영향을 알아보고자 한다. 

상황: 수축기 혈압이 높은 사람은 일반적으로 BMI도 높다. 그런데, 높은  BMI는 심혈관 질환의 위험 인자다.

문제: 높아진 심혈관 질환 위험이 수축기 혈압 때문인지, BMI 때문인지 구분할 수가 없다.

 

 이런 상황에서 BMI를 교란 요인 (confounding factor, confounding variable, confounder)이라고 하며, 교란요인의 영향을 보정하는 것은 의학 통계 전반에 있어서 아주 중요한 문제다. 

 

 상관 계수 (correlation coefficient)를 구할 때 교란 변수를 보정하는 방법은 편상관 계수 혹은 부분 상관 계수(partial correlation coefficient)를 구하는 것이다. 이에 대해서 알아보도록 하겠다.

 

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

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

 

분석용 데이터 (update 22.12.18)

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

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")

 

목표:  BMI의 영향을 배제 혹은 교정하고도 수축기 혈압은 심혈관 질환 위험과 상관 관계를 갖는가?

 

편상관 계수를 구하는 함수는 pcor.test()인데, 이는 ppcor이라는 패키지에 있으므로 먼저 설치를 한다. 패키지 설치에 관한 내용은 다음 링크에서 확인할 수 있다. 2022.08.05 - [통계 프로그램 사용 방법/R] - [R] 패키지 설치하기 - install.packages(), library()

install.packages("ppcor")
library("ppcor")

 

코드 - 일반적인 피어슨 상관 계수 구하기

먼저 수축기 혈압과 심혈관 질환 위험 간의 상관 계수를 구해보자. 이는 이전 포스팅에서 다룬 cor.test() 함수를 사용하면 된다. 2022.12.15 - [상관분석/R] - [R] 피어슨 상관 계수 (Pearson's correlation coefficient) - cor.test()

cor.test(df$SBP, df$CVD_RISK)

결과

	Pearson's product-moment correlation

data:  df$SBP and df$CVD_RISK
t = 121.69, df = 998, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.9637531 0.9716095
sample estimates:
     cor 
0.967917

상관 계수가 0.967로 매우 높다. 

 

그렇다면, BMI의 영향을 배제하는 코드는 어떻게 될까?

코드 - 편상관 계수 / 부분 상관 계수

pcor.test(df$SBP, df$CVD_RISK, df$BMI)

pcor.test(df$SBP, df$CVD_RISK, df$BMI) : df 데이터의 SBP와 df 데이터의 CVD_RISK간의 상관계수를 구하라. 근데, df 데이터의 BMI의 영향은 배제시킨 편상관 계수 / 부분 상관 계수를 구하라.

 

결과

   estimate       p.value statistic    n gp  Method
1 0.8524241 4.948042e-283  51.47844 1000  1 pearson

       estimate                  p.value     statistic       n gp  Method

1 0.8524241  4.948042e-283  51.47844 1000  1 pearson

 

BMI로 보정하면, SBP와 CVD_RISK사이의 상관 계수는 0.8524241로 보정하기 전의 0.968보다는 소폭 감소한 모양이다. BMI가 CVD_RISK를 증가시키는 설명력을 배제하였기 때문이다. 이때의 p-value는 4.948042e-283로 매우 작으므로 0이 아니라는 대립 가설을 택할 수 있고, 구해진 상관 계수는 Pearson 상관 계수다.

 

두 개 이상의 교란 변수를 보정

만약, 두 개 이상의 교란 변수를 보정하고자 한다면 보정할 변수들을 list로 만들어 넣으면 된다. BMI뿐만 아니라 흡연력인 SMOK도 보정변수로 넣고 싶다면 다음과 같은 코드를 쓰면 된다. (SMOK는 순서형 변수이므로 Pearson이 적절하지 않으므로 Spearman이나 Kendall 사이에서 골라야 하는데, 같은 값을 갖는 사람(tie)이 많으므로 Kendall의 tau를 구하도록 한다.)

pcor.test(df$SBP, df$CVD_RISK, list(df$BMI,df$SMOK), method="kendall")

 

결과

   estimate       p.value statistic    n gp  Method
1 0.6301046 3.236403e-195  29.80631 1000  2 kendall

 

얼마나 높아야 높다고 할 수 있는가?

상관계수가 "얼마나 높아야 높다고 할 수 있는가?"라는 의문이 들 수 있다. 즉, "how high is high?"라는 질문에 대한 답은 사실 정해져 있진 않다. 연구자마다 기준은 다른데, 그중 한 가지는 다음과 같다.

상관 계수의 절댓값 $ ( \vert \rho \vert )$ 해석
$0.0<\vert \rho \vert\le0.2$ Very weak
$0.2<\vert \rho \vert\le0.4$ Weak
$0.4<\vert \rho \vert\le0.6$ Moderate
$0.6<\vert \rho \vert\le0.8$ Strong
$0.8<\vert \rho \vert\le1.0$ Very strong

 

[R] 편상관 계수, 부분 상관 계수 (Partial correlation coefficient) 정복 완료!

작성일: 2022.12.18.

최종 수정일: 2023.10.17.

이용 프로그램: R 4.2.2

RStudio v2022.07.2

RStudio 2022.07.2+576 "Spotted Wakerobin" Release

운영체제: Windows 10, Mac OS 12.6.1

반응형
반응형

[R] 스피어만 상관 계수, 켄달의 타우 (Spearman's rank correlation coefficient, Kendall's tau) - cor.test()

 

 세상의 많은 지표들은 서로 상관되어있는 경우가 많다. 비흡연자에 비해 흡연자가 폐암에 잘 걸리고, 부모의 키가 클수록 아이의 키도 크다. 소득 수준이 높은 나라일수록 평균 수명도 길고, 수학 점수가 높은 학생은 물리 점수가 높으며, 식당에서 음식을 많이 시킬수록 계산해야 하는 금액도 커진다.

 그런데, 세상만사 칼같이 딱딱 떨어지는 게 아니다. 폐암에 걸리지 않는 꼴초도 있는가 하면, 부모의 키는 크지만 아이의 키는 작을 수 있다. 수학만 잘하고 물리는 못 할 수도 있다. 이렇게 예외가 있는 관계가 있는가 하면, 예외가 있을 수 없는 관계도 있다. $10,000$원짜리 삼겹살을 $x$인분 시키면 계산해야 하는 금액은 반드시 $10,000x$가 되는 게 일례가 될 수 있다. 

불확실성이 존재하는 관계

 

예외가 없는 관계

 

 예외가 많은 부모와 자녀의 키 문제로 돌아가 보자. 부모의 키로 자녀의 키를 유추하면 틀리는 경우가 많이 생기게 된다. 다시 말해, 불확실성이 높아진다. 반대로 삼겹살 주문량으로 예측한 계산 금액은 틀릴 수가 없다. 우리는 얼마나 정확하게 예측할 수 있는지를 계량하고자 한다. 그 방법 중 하나로, 두 변수가 연속 변수일 때 사용하는 피어슨 상관 계수 (Pearson's correlation coefficient)가 있다. 이는 이전 포스팅에서 다루었다. 2022.12.15 - [상관분석/R] - [R] 피어슨 상관 계수 (Pearson's correlation coefficient) - cor.test()

 

 하지만 세상 모든 변수가 연속형 변수는 아니다. "월 수입이 얼마입니까?"라는 설문에 주관식으로 "_____만원"으로 답했다면 이는 연속변수일 것이다. 하지만 "월 수입이 다음 중 어디에 속하십니까?"라는 설문에 대해 다음과 같은 객관식으로 답을 하게 되어있다면 이는 연속형 변수가 아닌 순위형 변수가 될 것이다.

 1) 100만 원 미만

 2) 100만 원 이상 300만 원 미만

 3) 300만 원 이상 700만 원 미만

 4) 700만 원 이상 1,500만 원 미만

 5) 1,500만 원 이상

 

 월 소득 50만원인 사람 A에게는 1이란 값이 부여될 것이고, 월 소득 1,700만 원인 사람 B에게는 5라는 값이 부여될 것이다. 부여된 1과 5의 평균을 구하는 것이 의미가 있을까? 만약 의미가 있다고 치고 구해보면 1과 5의 평균은 3이다. 따라서 평균 소득은 300만 원 이상 700만 원 미만일 것이라고 예측할 수 있는데, 사실  이 두 명의 평균 소득은 875만 원이므로 4번 구간에 속한다. 이런 차이가 발생하게 되므로, 점수 같은 연속형 변수 값 자체가 아니라 석차와 같은 순위형 변수의 상관관계를 보고 싶을 때에는 피어슨 상관 계수를 사용할 수 없다. 왜냐하면 피어슨 상관 계수는 평균, 표준편차, 공분산을 사용하기 때문이다. 대신에 스피어만 상관 계수 (Spearman's rank correlation coefficient)나 켄달의 타우 (Kendall's tau)를 사용해야 한다. 

 

스피어만 상관 계수 (Spearman's rank correlation coefficient - 주로 rho로 나타낸다.)나 켄달의 타우 (Kendall's tau)는 두 변수 사이의 상관관계의 정도를 나타내는 지표다. 이는 -1과 1 사이의 값을 갖는데 -1 혹은 1에 가까워질수록, 달리 표현하면 상관 계수의 절댓값이 커질수록, 즉 0에서 멀어질수록 "예측할 수 있는 정도"가 높아진다. 1에 가까워지는 것은 양의 상관관계인데 "예측도"가 증가하는 것을 의미하고, -1에 가까워지는 것은 음의 상관관계인데 "예측도"가 증가하는 것을 의미한다. 

 

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

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

 

분석용 데이터 (update 22.12.16)

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

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")

 

목표:  월 수입(순위형 변수)과 거주 지역 단위에는 관계가 있는가?

월 수입 :INC_CAT

0: 하위 3분위

1: 중앙 3분위

2: 상위 3분위

 

거주 지역 단위: RESID

0: 대도시

1: 중소도시

2: 시골

 

스피어만 상관 계수와 켄달의 타우를 구하는 코드는 다음과 같다.

 

코드

#Spearman's rank correlation coefficient
cor.test(df$RESID, df$INC_CAT, method="spearman")

#Kendall's tau
cor.test(df$RESID, df$INC_CAT, method="kendall")

cor.test(df$RESID, df$INC_CAT, method="spearman") : df데이터의 RESID와 df 데이터의 INC_CAT변수 간의 상관계수를 구하는데, Spearman's rank correlation coefficient를 구하라.
cor.test(df$RESID, df$INC_CAT, method="kendall") : df데이터의 RESID와 df 데이터의 INC_CAT변수간의 상관계수를 구하는데, Kendall의 tau를 구하라.

결과

	Spearman's rank correlation rho

data:  df$RESID and df$INC_CAT
S = 316858538, p-value < 2.2e-16
alternative hypothesis: true rho is not equal to 0
sample estimates:
       rho 
-0.9011531 


	Kendall's rank correlation tau

data:  df$RESID and df$INC_CAT
z = -30.976, p-value < 2.2e-16
alternative hypothesis: true tau is not equal to 0
sample estimates:
       tau 
-0.8711902

Spearman's rank correlation rho

data:  df$RESID and df$INC_CAT
S = 316858538, p-value < 2.2e-16
alternative hypothesis: true rho is not equal to 0
sample estimates:
       rho 
-0.9011531 


Kendall's rank correlation tau

data:  df$RESID and df$INC_CAT
z = -30.976, p-value < 2.2e-16
alternative hypothesis: true tau is not equal to 0
sample estimates:
       tau 
-0.8711902

 

-중요한 것은 맨 아래 숫자인 상관계수 -0.9011531와 -0.8711902이다. -1에 가까울수록 음의 상관관계가 존재함을 나타내는데, 이 정도면 꽤 높은 음의 상관관계가 있다고 할 수 있다.

- 따라서 대도시에 사는 사람일수록 수입이 많다고 할 수 있다.

- p value는 $2.2 \times 10^{-16}$보다 작으므로 매우 유의함을 알 수 있다. 따라서 귀무가설을 기각하고 대립 가설을 택해야 하는데, 이 검정의 귀무가설은 "상관 계수는 0"이라는 것이다. 따라서 상관 계수가 0은 아니라고 결론 내릴 수 있다.

 

얼마나 높아야 높다고 할 수 있는가?

위에서 0.79 정도면 꽤 높은 상관관계가 있다고 할 수 있다고 했는데, "얼마나 높은 것이 높은 것인가?"라는 의문이 들 수 있다. 즉, "how high is high?"라는 질문에 대한 답은 사실 정해져 있진 않다. 연구자마다 기준은 다른데, 그중 한 가지는 다음과 같다.

스피어만 상관 계수/켄달의 타우의 절댓값 $ ( \vert \rho \vert )$ 해석
$0.0<\vert \rho \vert\le0.2$ Very weak
$0.2<\vert \rho \vert\le0.4$ Weak
$0.4<\vert \rho \vert\le0.6$ Moderate
$0.6<\vert \rho \vert\le0.8$ Strong
$0.8<\vert \rho \vert\le1.0$ Very strong

 

둘 중 하나만 순위형 변수인 경우

 

만약 둘 중 하나만 순위형 변수고 다른 하나는 연속형 변수인 경우 어떻게 해야 할까? 예를 들어, 거주 지역 단위와 대기 중 미세먼지의 양 사이의 상관관계를 구하고자 할 때에도 스피어만 상관 계수 (Spearman's rank correlation coefficient)나 켄달의 타우 (Kendall's tau)를 사용해야 한다. 

 

 

스피어만 상관 계수 vs 켄달의 타우

둘 중에 어떤 것을 사용해야 할까?

스피어만 상관 계수는 tie가 없다고 가정한다. 즉, 같은 순위를 갖는 사람이 없는 것이다. 위 예시의 경우 대도시, 중소도시, 시골에 사는 사람이 1명씩은 아니니 스피어만 상관 계수는 적절하지 않다. 이럴 때에는 켄달의 타우가 더 적절하다. 또한, 표본의 수가 적을 때에도 켄달의 타우가 조금 더 적절하다.

 

[R] 스피어만 상관 계수, 켄달의 타우 (Spearman's rank correlation coefficient, Kendall's tau) 정복 완료!

 

작성일: 2022.12.16.

최종 수정일: 2023.10.17.

이용 프로그램: R 4.2.2

RStudio v2022.07.2

RStudio 2022.07.2+576 "Spotted Wakerobin" Release

운영체제: Windows 10, Mac OS 12.6.1

반응형
반응형

 

[R] 피어슨 상관 계수 (Pearson's correlation coefficient) - cor.test()

 

 세상의 많은 지표들은 서로 상관되어있는 경우가 많다. 비흡연자에 비해 흡연자가 폐암에 잘 걸리고, 부모의 키가 클수록 아이의 키도 크다. 소득 수준이 높은 나라일수록 평균 수명도 길고, 수학 점수가 높은 학생은 물리 점수가 높으며, 식당에서 음식을 많이 시킬수록 계산해야 하는 금액도 커진다.

 그런데, 세상만사 칼같이 딱딱 떨어지는 게 아니다. 폐암에 걸리지 않는 꼴초도 있는가 하면, 부모의 키는 크지만 아이의 키는 작을 수 있다. 수학만 잘하고 물리는 못 할 수도 있다. 이렇게 예외가 있는 관계가 있는가 하면, 예외가 있을 수 없는 관계도 있다. $10,000$원짜리 삼겹살을 $x$인분 시키면 계산해야 하는 금액은 반드시 $10,000x$가 되는 게 일례가 될 수 있다. 

불확실성이 존재하는 관계

 

예외가 없는 관계

 

 예외가 많은 부모와 자녀의 키 문제로 돌아가 보자. 부모의 키로 자녀의 키를 유추하면 틀리는 경우가 많이 생기게 된다. 다시 말해, 불확실성이 높아진다. 반대로 삼겹살 주문량으로 예측한 계산 금액은 틀릴 수가 없다. 우리는 얼마나 정확하게 예측할 수 있는지를 계량하고자 한다. 그 방법 중 하나가 피어슨 상관 계수 (Pearson's correlation coefficient)다. 

 

피어슨 상관 계수 (Pearson's correlation coefficient)는 두 변수 사이의 상관관계의 정도를 나타내는 지표다. 이는 -1과 1 사이의 값을 갖는데 -1 혹은 1에 가까워질수록, 달리 표현하면 상관 계수의 절댓값이 커질수록, 즉 0에서 멀어질수록 "예측할 수 있는 정도"가 높아진다. 1에 가까워지는 것은 양의 상관관계인데 "예측도"가 증가하는 것을 의미하고, -1에 가까워지는 것은 음의 상관관계인데 "예측도"가 증가하는 것을 의미한다. 여기에서 예측하는 방법은 선형 방법이다. 즉, 한 변수의 값 $x$를 알 때, 적절한 실수 $a, b$에 대해 $y$값이 $y=ax+b$ 일 것이라고 예측할 수 있다는 것이다. 여기에서 피어슨 상관 계수에 대해 대표적으로 오해하는 점 두 가지를 들 수 있다. 

 

 1) 피어슨 상관 계수가 크면 기울기($a$값)이 크다. 기울기는 위 삼겹살 예시에서 1인분당 가격을 의미하는 것인데, 1인분 추가 주문 시 증가되는 전체 주문 금액으로 이해할 수 있다. 그런데 피어슨 상관 계수에는 이에 대한 정보가 전혀 없다. 피어슨 상관 계수는 (1) 양의 상관관계인지 음의 상관관계인지, (2) 얼마나 "예측도"가 큰지, 즉 데이터들이 얼마나 직선상에 모여있는지 에 대한 정보만 제공한다. 

 

 2) 피어슨 상관 계수가 0이면, 두 변수 사이에는 어떠한 상관 관계도 없다. 위에서 설명했듯이, 피어슨 상관 계수는 선형 방법으로 예측할 수 있는 정도를 표현한다. 따라서 선형 관계가 아닌 2차 함수 관계, 사인 함수 관계, 원형 함수 관계 등이 존재한다면, 두 변수 사이의 어떤 관련성은 분명히 존재하는 것이지만, 피어슨 상관 계수는 0일 수 있다. 

 

 본격적으로 피어슨 상관 계수를 구해보자. 

 

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

 

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

 

분석용 데이터 (update 22.12.01)

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

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")

 

목표:  혈중 ALT와 AST에는 선형 상관관계가 존재하는가?

피어슨 상관 계수 (Pearson's correlation coefficient)를 구하는 코드는 다음과 같다.

 

코드

cor.test(df$ALT, df$AST)

cor.test(df$ALT, df$AST) : df 데이터의 ALT와 df 데이터의 AST사이의 피어슨 상관 계수를 구하라. 

 

결과

	Pearson's product-moment correlation

data:  df$ALT and df$AST
t = 40.364, df = 990, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.7639495 0.8111146
sample estimates:
      cor 
0.7886897

Pearson's product-moment correlation

data:  df$ALT and df$AST

t = 40.364, df = 990, p-value < 2.2e-16

alternative hypothesis: true correlation is not equal to 0

95 percent confidence interval:  0.7639495 0.8111146

sample estimates:       

cor 

0.7886897 

 

-중요한 것은 맨 아래 숫자인 상관계수 0.7886897이다. 1에 가까울수록 양의 상관관계가 존재함을 나타내는데, 0.79 정도면 꽤 높은 "선형" 상관관계가 있다고 할 수 있다.

- p value는 $2.2 \times 10^{-16}$보다 작으므로 매우 유의함을 알 수 있다. 따라서 귀무가설을 기각하고 대립 가설을 택해야 하는데, 이 검정의 귀무가설은 "상관 계수는 0"이라는 것이다. 따라서 상관 계수가 0은 아니라고 결론 내릴 수 있다.

 

얼마나 높아야 높다고 할 수 있는가?

위에서 0.79 정도면 꽤 높은 상관관계가 있다고 할 수 있다고 했는데, "얼마나 높은 것이 높은 것인가?"라는 의문이 들 수 있다. 즉, "how high is high?"라는 질문에 대한 답은 사실 정해져 있진 않다. 연구자마다 기준은 다른데, 그중 한 가지는 다음과 같다.

피어슨 상관 계수의 절댓값 $ ( \vert \rho \vert )$ 해석
$0.0<\vert \rho \vert\le0.2$ Very weak
$0.2<\vert \rho \vert\le0.4$ Weak
$0.4<\vert \rho \vert\le0.6$ Moderate
$0.6<\vert \rho \vert\le0.8$ Strong
$0.8<\vert \rho \vert\le1.0$ Very strong

 

피어슨 상관 계수 산출의 가정

 피어슨 상관 계수를 산출할 때, 기본적으로 가정은 존재하지 않는다. 수학적으로 표현하면 공분산을 각각의 표준 편차로 나눠준 것이니, 어떠한 가정도 필요하지 않다. 다만 해석에 유의해야 한다. 피어슨 상관 계수가 1 또는 -1에 가까운 값이 나왔을 때의 해석은 어디까지나 "선형 상관관계가 있다."는 것이다. 심지어 1에 가까운 값이더라도, 선형 상관관계보다 두 변수 사이의 관계를 더 잘 표현하는 관계가 있을 수 있다. 예를 들어, 어떤 변수 x와 y의 피어슨 상관 계수는 0.89로 매우 높은데, 둘 사이의 그래프는  아래와 같이 그려진다고 하자.

둘 사이의 상관 계수가 1(완벽한 선형 예측이 가능)은 아니지만, x와 y사이에는 이차 함수의 관계가 있는 것으로 보인다. "예측도"측면에서 상관 계수가 1은 아니므로 선형 예측은 완벽하지 않지만, 이차 함수의 관계로 보면 완벽하게 예측할 수 있는 관계다. 

 

또한, 피어슨 상관 계수가 0에 가까운 값이 나왔을 때의 해석은 어디까지나 "선형 상관관계가 없다."는 것이다.  예를 들어 상관계수가 0인 다음 두 변수 x와 y의 그래프는 다음과 같이 그려진다고 한다.

"예측도"측면에서 상관 계수가 0이므로 선형 예측이 불가능해야 하지만, 이차 함수의 관계로 보면 완벽하게 예측할 수 있는 관계다. 따라서 피어슨 상관 계수를 "예측도", "관련성"이라는 의미로 사용하려 한다면, 두 변수 사이의 산점도를 꼭 그려보는 것이 좋다.

 

두 변수 사이의 산점도 (플롯) 그리기.

산점도를 그리는 방법은 이전 포스팅에서 소개한 바 있다. 2022.12.07 - [[R] 그래프 작성] - [R] [plot() 함수] 산점도 그리기 (1) - plot(), colors() AST와 ALT의 산점도를 그리면 다음과 같다.

plot(df$ALT, df$AST)

어떤 선형 관계가 있는 것으로 보인다. 아마 선을 잘 그린다면 다음과 같이 그려질 것이다.

선을 그리는 코드 :&nbsp;abline(a=as.numeric(b), b=as.numeric(c), col=2, lwd=3)

 

그렇다면 우리가 산출한 피어슨 상관 계수는 AST와 ALT의 관련성을 잘 나타낸다고 할 수 있다. 즉, 이차 함수 관계 등 다른 비선형적 관계가 있는데도 불구하고 우리가 선형 상관 계수를 구해서 1보다 낮은 값이 나온 것이 아니라, 원래 선형 관계인데 어느 정도의 불확실성 때문에 1보다는 낮은 값이 나온 것이라고 결론지을 수 있다. 따라서 산점도를 꼭 그려보고 어떠한 관계 속에 있는지 확인하고 상관 계수를 해석하는 것은 매우 중요하다. 

 

가정이 정말 없는가?

 가정이 필요하다는 글, 책들이 정말 많을 것이다. 그럼에도 불구하고 나는 가정이 필요 없다는 말을 계속해왔다. 정말 가정이 없는 것일까? 답은 "그렇다"이다. 정말 없다. 하지만, Pearson's correlation coefficient가 적절할 때, 적절하지 않을 때는 분명히 존재한다. 피어슨 상관 계수는 두 변수가 연속형 변수일 때 좋다. 그리고 이상치(outlier)가 없을 때 정말 좋다. 이상치(outlier)는 피어슨 상관 계수의 값을 크게 변화시킬 수 있으며, 특히 표본의 수가 많지 않을 때 이런 일은 더 빈번하게 나타날 수 있다. 이럴 때에는 스피어만 상관 계수 (Spearman correlation coefficient)나 켄달의 타우 (Kendall's tau)가 더 적절할 수 있다. 이 두 가지 방식은 특히 순서형 변수일 때 더 큰 효용성을 갖는다. 

 아마도 위와 같은 이유로 피어슨 상관 계수 (Pearson's correlation coefficient)의 전제조건으로 정규성을 많이 이야기하는지도 모른다. 정규성을 따른다면 적어도 이상치로부터 어느 정도 자유로울 수 있고, 왜곡된 상관 계수가 산출되지 않을 수 있다.

 

[R] 피어슨 상관 계수 (Pearson's correlation coefficient) 정복 완료!

작성일: 2022.12.15.

최종 수정일: 2023.10.17.

이용 프로그램: R 4.2.2

RStudio v2022.07.2

RStudio 2022.07.2+576 "Spotted Wakerobin" Release

운영체제: Windows 10, Mac OS 12.6.1

반응형
반응형

R에서 기본으로 제공하는 함수인 plot()은 그 기능이 매우 막강하여 산점도뿐만 아니라 수많은 종류의 그래프를 그릴 수 있게 해 준다. plot()이 할 수 있는 범주는 매우 막대하므로, 우선 산점도에 대한 내용만 다루기로 한다. 산점도만 다룬다고 쳐도, 이번 포스팅 한 번으로 끝날 것 같지 않아 몇 차례에 나눠 소개하고자 한다.

 

목차

1. 산점도 그리기 plot() (1)

1) plot()의 기본 원리 - 점 찍기

2) 제목과 부제목

 

1) plot()의 기본 원리 - 점찍기

 plot()에 점의 좌표를 입력하면 좌표평면에 점을 찍어준다. 예를 들어 (3,2)에 점을 찍고 싶다면 다음 코드를 실행하면 된다.

plot(3,2)

 

만약 여러 개의 점을 찍고 싶다면 어떻게 해야 할까? plot() 함수의 첫 번째 argument는 x좌표, 두 번째 argument는 y좌표다. 다음과 같이 4개의 점을 찍으려는 상황을 상정해보자.

x y
1 2
4 3
2 6
6 2

 x좌표를 하나의 벡터로 모아 c(1,4,2,6)을 plot()의 첫 번째 자리에, y좌표를 하나의 벡터로 모아  c(2,3,6,2)를 plot()의 두 번째 자리에 넣으면 된다.

plot(c(1,4,2,6),c(2,3,6,2))

혹은 c(1,4,2,6)을 x라는 객체에 저장하고, c(2,3,6,2)를 y라는 객체에 저장하여 x와 y로 plot() 함수를 구동할 수도 있다. 그러면 각 축의 이름이 달라지는 것을 볼 수 있다. 이 plot(x,y)를 이번 포스팅 내내 쭉 사용할 것이다.

x<-c(1,4,2,6)
y<-c(2,3,6,2)
plot(x,y)

혹은 이런 데이터 프레임이 df로서 주어졌다면 df의 x와 y를 불러와 그릴 수도 있다. 

x y
1 2
4 3
2 6
6 2

x와 y를 열로서 합쳐(cbind) 데이터프레임 df를 만들고(data.frame), 이로 산점도를 그리면 다음과 같다.

x<-c(1,4,2,6)
y<-c(2,3,6,2)
df<-data.frame(cbind(x,y))
plot(df$x,df$y)

2) 제목과 부제목

 (1) 제목과 부제목 달기

위 그래프에는 제목과 부제목이 없어 무엇을 나타내는 것인지 알 수가 없다. 이 그래프가 2022년 1월부터 6월까지 환자 A의 알코올 중독 점수 (AUDIT)을 나타낸 것이라면 제목을 "AUDIT Trend", 부제목을 "2022, JAN-JUN"라고 달고 싶을 것이다. 그럴 때에는 "main"과 "sub" argument를 이용하면 된다.

plot(x,y,main="AUDIT Trend", sub="2022, JAN-JUN")

 

 (2) 제목과 부제목 색깔 바꾸기

제목과 부제목의 색을 바꾸기 위해서는 어떤 색을 선택할 수 있는지 알아야 한다. 수많은 색을 선택할 수 있지만 R에서 기본으로 제공하고 있는 색은 657개며, 웬만한 경우 이 정도면 충분할 듯하다. 657개의 색을 확인하는 방법은 다음과 같다.

colors()
 [1] "white"                "aliceblue"            "antiquewhite"        
  [4] "antiquewhite1"        "antiquewhite2"        "antiquewhite3"       
  [7] "antiquewhite4"        "aquamarine"           "aquamarine1"         
 [10] "aquamarine2"          "aquamarine3"          "aquamarine4"         
 [13] "azure"                "azure1"               "azure2"              
 [16] "azure3"               "azure4"               "beige"               
 [19] "bisque"               "bisque1"              "bisque2"             
 [22] "bisque3"              "bisque4"              "black"               
...

 

이중에 "blue", "orange"를 각각 제목과 부제목의 색으로 하고자 한다. 이때에는 각각 col.main, col.sub이라는 argument를 사용하면 된다.

plot(x,y,main="AUDIT Trend", sub="2022, JAN-JUN", col.main="blue", col.sub="orange")

 

 (3) 제목과 부제목의 크기 바꾸기

 제목의 크기는 키우고, 부제목의 크기는 줄이고 싶다면, 각각 cex.main, cex.sub argument를 사용하면 된다.

plot(x,y,
     main="AUDIT Trend", sub="2022, JAN-JUN", 
     col.main="blue", col.sub="orange", 
     cex.main=1.5, cex.sub=0.5)

cex.main의 default값은 1.2, cex.sub의 default값은 1이다. 키우면 글자의 크기도 커지고, 줄이면 글자도 작아진다.

 

[R] [plot() 함수] 산점도 그리기 (1) 정복 완료!

 

작성일: 2022.12.07.

최종 수정일: 2022.12.07.

이용 프로그램: R 4.2.2

RStudio v2022.07.2

RStudio 2022.07.2+576 "Spotted Wakerobin" Release

운영체제: Windows 10, Mac OS 12.6.1

반응형
반응형

[SPSS] 크루스칼 왈리스 검정 (비모수 일원 배치 분산 분석: Kruskal-Wallis Test)

셋 이상의 분포에서 평균이 다른지 확인하는 방법은 ANOVA (ANalysis Of VAriance)였다. 

2022.11.30 - [모평균 검정/SPSS] - [SPSS] 일원 배치 분산 분석 (One-way ANOVA, ANalysis Of VAriance)

2022.11.30 - [모평균 검정/SPSS] - [SPSS] 등분산 가정이 성립하지 않는 일원 배치 분산 분석 (Welch's ANOVA, Brown-Forsythe ANOVA)

그런데, 여기에는 각각의 분포가 정규성을 따른다는 중요한 가정이 필요하다. 하지만 정규성을 따르지 않는다면 어떻게 해야 할까? 그럴 때 사용하는 것이 크루스칼-왈리스 검정(Kruskal-Wallis Test)이다.  이번 포스팅에서는 크루스칼 왈리스 검정과 그 사후 분석 (post hoc analysis)까지 알아보고자 한다.

 

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

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

 

분석용 데이터 (update 22.12.01)

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

medistat.tistory.com

 

데이터를 불러오도록 한다. 불러오는 방법은 다음 링크를 확인하도록 한다.

2022.08.04 - [통계 프로그램 사용 방법/SPSS] - [SPSS] 데이터 불러오기 및 저장하기

 

목표:  흡연 상태(SMOK)에 따라 니코틴 중독 점수 (NICOT_ADDICT) 중앙값이 모집단 수준에서 서로 다르다고 말할 수 있는가?

 

 만약 NICOT_ADDICT의 분포가 정규성을 따른다면, ANOVA로 이를 확인할 수 있을 것이다. 따라서 정규성 여부를 먼저 확인해보자.

1) 정규성

 정규성 검정은 다음 링크에서 내용을 확인할 수 있다.

2022.08.11 - [기술 통계/SPSS] - [SPSS] 정규성 검정

2022.08.18 - [기술 통계/SPSS] - [SPSS] 고급 Q-Q Plot - Van der Waerden, Rankit, Tukey, Blom

 

1) 분석(A) > 기술통계량(E) > 데이터 탐색 (E)

 

2) 분석하고자 하는 변수인 NICOT_ADDICT을 "종속변수"에 넣고, 흡연 상태에 따라 분석할 것이므로 SMOK을 "요인(F)"에 넣는다. 그 뒤 "도표(T)..."를 선택한다.

 

3) "히스토그램(H)", "검정과 함께 정규성 도표(O)" 체크박스를 클릭하고 "계속(C)"를 누르고, 돌아가 "확인"을 누른다.

 

결과

 1) Q-Q Plot

2) 히스토그램

 

3) Shapiro-Wilk 검정

 

 N수가 2,000개 미만이므로 Shapiro-Wilk 통계량의 p-value를 보면 0.05 이하이며, Q-Q Plot은 대부분의 데이터가 선상에 있지 않고, 히스토그램에서도 정규성을 따르지 않는 것처럼 보인다. 따라서 일원 배치 분산 분석 (ANOVA)을 시행할 수 없고, 크루스칼 왈리스 분석 (Kruskal-Wallis Test)을 시행해야 한다.

 

지금까지 많은 분석을 할 때 분산이 같은지 여부 (등분산성)을 중요하게 여겼었다. 하지만 크루스칼 왈리스 분석은 분산이 달라도 어느 정도 괜찮다. 물론 분산에 아주 큰 차이가 나면 위험해지지만, 어느 정도는 robust 하므로 웬만하면 그냥 써도 괜찮다.

 

크루스칼 왈리스 (Kruskal Wallis) 검정

1) 분석(A) > 비모수검정(N) > 독립표본(I)

 

2) 이때 나오는 창의 첫 페이지인 "목적"은 건들지 않는다.

 

3) "필드"를 누르고 분석하고자 하는 NICOT_ADDICT를 "검정 필드(T)"로 넘긴다. 흡연 상태에 따라 검정할 것이므로 SMOK을 "집단(G)"로 옮긴다. 

 

4) "사용자 정의에 의한 검정(C)"를 누르고 "Kruskal-Wallis 일원배치 분산분석(k표본)(W)"을 체크한다.

 

 

 

결과

p-value가 0.000 (<0.001)으로 0.05보다 작으므로 귀무가설을 기각하고 대립 가설을 채택한다. 그렇다면 여기에서 귀무가설 및 대립 가설은 무엇이었는가?

 

귀무가설: $H_0=$ 세 집단의 모집단 수준에서 중앙값은 "모두" 동일하다.

대립가설:$H_1=$ 세 집단의 모집단 수준에서 중앙값이 모두 동일한 것은 아니다.

 

우리는 대립 가설을 채택해야 하므로 "세 집단의 모집단 수준에서 중앙값이 모두 동일한 것은 아니다."라고 결론 내릴 것이다.

 

사후 분석

그런데, 세 집단의 중앙값이 모두 동일하지 않다는 말은 세 집단 중 두 개씩 골라 비교했을 때, 적어도 한 쌍에서는 차이가 난다는 것이다. 따라서 세 집단 중 두 개씩 골라 비교를 해보아야 하며, 이를 사후 분석 (post hoc analysis)이라고 한다. 세 집단에서 두 개씩 고르므로 가능한 경우의 수 $_3C_2=3$이다. 

(1) 비흡연자 vs 과거 흡연자

(2) 비흡연자 vs 현재 흡연자

(3) 과거 흡연자 vs 현재 흡연자

 

비모수 검정인 Kruskal Wallis 검정의 사후 분석으로 쓰이는 방법은 다음 네 가지가 있다.

1) Pairwise Wilcoxon Test

2) Conover Test

3) Dunn Test

4) Nemenyi Test

 

이중 SPSS에서 기본으로 제공하는 사후검정 방법은 Dunn Test이다. 이때 p value 보정 방법은 Bonferroni를 사용하고 있다. 

그리고, Kruskal-Wallis에서 유의한 차이를 보이는 경우 SPSS는 사후분석을 자동으로 실행한다.

위 표에서 봐야 하는 값은 마지막 열인 "조정된 유의확률"이다.

0-1 비흡연자 (0)와 과거 흡연자 (1) 비교
0-2 비흡연자 (0)와 현재 흡연자 (2) 비교
1-2 과거 흡연자 (1)와 현재 흡연자 (2) 비교

모든 p-value가 0.05보다 작으므로 다음과 같이 결론 내릴 수 있다.

비흡연자 (0)와 과거 흡연자 (1)  사이에는 NICOT_ADDICT 중앙값에 차이가 있다.

비흡연자 (0)와 현재 흡연자 (2) 사이에는 NICOT_ADDICT 중앙값에 차이가 있다.

과거 흡연자 (1)와 현재 흡연자 (2)) 사이에는 NICOT_ADDICT 중앙값에 차이가 있다.

 

하지만 위 결과에서 볼 수 있듯이, 영가설 (귀무가설)은 "표본1 및 표본2에서 분포가 같다"이다. 만약 분포가 똑같이 생겼는데, 중앙값만 다른 경우라면, 즉 평행이동을 한 경우라면 귀무가설의 기각은 '중앙값에 차이가 난다'를 의미한다. 

그런데 만약 중앙값이 갖더라도 분포가 매우 심하게 다르다면 어떻게 될까? 영가설에 반하므로 p-value가 매우 낮게 나오게 된다. 따라서 서로 다른 분포의 모양을 고려할 수 있는 방법이 존재해야 하는데, SPSS에서는 시행을 할 수가 없다. 이는 R로 비슷하게나마 구현할 수 있는데, 다음 링크를 확인하기 바란다. 2022.12.01 - [모평균 검정/R] - [R] 크루스칼 왈리스 검정 (비모수 일원 배치 분산 분석: Kruskal-Wallis Test) - kruskal.test(), pairwise.wilcox.test(), ConoverTest(), DunnTest(), NemenyiTest()

 

어떤 사후 분석을 쓸 것인가

 이 논의에 대해 정답이 따로 있는 것은 아니다. 적절한 방법을 사용하여 논문에 제시하면 되고, 어떤 것이 정답이라고 콕 집어 이야기할 수는 없다. 다만, 사후 분석 방법이 여러 가지가 있다는 것은 '사후 분석 방법에 따라 산출되는 결과가 달라질 수 있다.'는 것을 의미하고, 심지어는 '어떤 사후 분석 방법을 채택하냐에 따라 유의성 여부가 달라질 수도 있다.'는 것을 의미한다. 심지어, Kruskal-Wallis test에서는 유의한 결과가 나왔는데, 사후 분석을 해보니 유의한 차이를 보이는 경우가 없을 수도 있다. 따라서 어떤 사후 분석 방법 결과에 따른 결과인지 유의하여 해석할 필요가 있다.

 

왜 굳이 Kruskal Wallis test를 쓰는 것인가?

이 시점에서 이런 의문이 들 수 있다.

"각각의 그룹별로 평균을 비교하면 되지, 굳이 왜 Kruskal Wallis test라는 방법까지 사용하는 것인가?"

 아주 논리적인 의문점이다. 하지만, 반드시 Kruskal-Wallis test를 사용해야 한다. 그 이유는 다음과 같다. 본 사례는 흡연 상태에 따른 조합 가능한 경우의 수가 3인데, 각각 유의성의 기준을 α=0.05로 잡아보자. 이때 세 번의 비교에서 모두 귀무가설이 학문적인 진실인데(평균에 차이가 없다.), 세 번 모두 귀무가설을 선택할 확률은 $\left(1-0.05 \right)^3 \approx 0.86 $이다. (이해가 어려우면 p-value에 대한 설명 글을 읽고 오길 바란다. 2022.09.05 - [통계 이론] - [이론] p-value에 관한 고찰)

 그런데, Kruskal-Wallis test의 귀무가설은 "모든 집단의 중앙값이 같다."이다. 따라서 모든 집단의 중앙값이 같은 것이 학문적 진실일 때, 적어도 한 번이라도 대립 가설을 선택하게 될 확률은 $1-0.86=0.14$ 가 된다. 즉, 유의성의 기준이 올라가게 되어, 덜 보수적인 결정을 내리게 되고, 다시 말하면 대립 가설을 잘 선택하는 쪽으로 편향되게 된다. 학문적으로는 '다중 검정 (multiple testing)을 시행하면 1종 오류가 발생할 확률이 증가하게 된다.'라고 표현한다.

 따라서, 각각을 비교해보는 것이 아니라 한꺼번에 비교하는 Kruskal-Wallis test를 시행해야 함이 마땅하다. 

 

여기에서 한 번 더 의문이 들 수 있다.

 "사후 분석을 할 때에는 1종 오류가 발생하지 않는가?"

그렇다. 1종 오류가 발생할 확률이 있으므로, p-value의 기준을 더 엄격하게 (0.05보다 더 작게) 잡아야 한다. P-value를 보정하는 방법은 일반적으로는 Bonferroni, holm, hochberg, hommel, BH, BY, FDR 등이 있고, Kruskal-Wallis test의 사후 분석 방법으로는 특별히  Pairwise Wilcoxon Test, Conover Test, Dunn Test, Nemenyi Test을 사용하고 있다. 이 중에서 SPSS는 Dunn Test를 이용하고 있다. R에서는 다른 방법을 사용할 수 있으니 궁금한 독자는 다음 링크를 확인하길 바란다. 2022.12.01 - [모평균 검정/R] - [R] 크루스칼 왈리스 검정 (비모수 일원 배치 분산 분석: Kruskal-Wallis Test) - kruskal.test(), pairwise.wilcox.test(), ConoverTest(), DunnTest(), NemenyiTest()

 

[SPSS] 크루스칼 왈리스 검정 (비모수 일원 배치 분산 분석: Kruskal-Wallis Test) 정복 완료!

 

작성일: 2022.12.06.

최종 수정일: 2022.12.06.

이용 프로그램: IBM SPSS v26

운영체제: Windows 10

반응형
반응형

[SPSS] 윌콕슨 부호 순위 검정 (비모수 짝지어진 표본 중앙값 검정: Wilcoxon signed rank test)

 

 

 짝지어진 두 분포의 평균이 다른지 확인하는 방법을 이전에는 대응 표본 T검정 (Paireed Sample T test)로 시행했었다. (2022.11.30 - [반복 측정 자료 분석/SPSS] - [SPSS] 대응 표본 T검정 (Paired samples T-test)) 하지만 여기에는 중요한 가정이 필요한데, 두 변수의 차이가 정규분포를 이룬다는 것이다. 하지만 차이의 분포가 정규성을 따르지 않는다면 어떻게 해야 할까? 그럴 때 사용하는 것이 Wilcoxon signed rank test (윌콕슨 부호 순위 검정)이다.  

 

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

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

 

분석용 데이터 (update 22.12.01)

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

medistat.tistory.com

 

 

데이터를 불러오도록 한다. 불러오는 방법은 다음 링크를 확인하도록 한다.

2022.08.04 - [통계 프로그램 사용 방법/SPSS] - [SPSS] 데이터 불러오기 및 저장하기

 

목표: 모집단에서 GGT와 간기능 개선제 복용 후 GGT 중앙값에 차이가 있다고 할 수 있는가?

 

이번 포스팅의 목적은 1000명의 데이터를 가지고, 이 1000명이 기원한 모집단에서 GGT와 간 기능 개선제 복용 후 GGT의 중앙값에 차이가 있다고 할 수 있는지 판단하는 것이다.

 

전제: 정규성 검정 (차이)

 검정하고자 하는 두 변수의 차이가 정규성을 띤다면 paired t-test를 하면 되므로 정규성 여부를 파악하도록 한다. 따라서 GGT와 간 기능 개선제 복용 후 GGT(GGT_POSTMED)의 차이를 구하고 정규성 검정을 시행한다.

차이를 구하는 방법:

2022.11.30 - [통계 프로그램 사용 방법/SPSS] - [SPSS] 변수 계산 (산술 연산)

정규성 검정을 하는 방법:

2022.08.11 - [기술 통계/SPSS] - [SPSS] 정규성 검정

2022.08.18 - [기술 통계/SPSS] - [SPSS] 고급 Q-Q Plot - Van der Waerden, Rankit, Tukey, Blom

 

차이 구하기

1) 변환(T) > 변수 계산(C)

 

2) GGT에서 GGT_POSTMED를 빼고 그것을 GGT_DIF에 저장한다.

 

정규성

1) 분석(A) > 기술통계량(E) > 데이터 탐색 (E)

 

2) 분석하고자 하는 변수인 GGT_DIF을 "종속변수"에 넣고, "도표(T)..."를 선택한다.

 

3) "히스토그램(H)", "검정과 함께 정규성 도표(O)" 체크박스를 클릭하고 "계속(C)"를 누르고, 돌아가 "확인"을 누른다.

 

결과

 

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

 

윌콕슨 부호 순위 검정 (Wilcoxon Signed Rank Test)

1) 분석(A) > 비모수검정(N) > 대응표본(R)

 

2) 이때 나오는 창의 첫 페이지인 "목적"은 건들지 않는다.

3) "필드"를 누르고 분석하고자 하는 GGT와 GGT_POSTMED를 오른쪽으로 넘긴다.

4) "사용자 정의에 의한 검정(C)"를 누르고 "Wilcoxon 대응표본 부호순위(2 표본)(W)"을 체크하고 "실행"을 누른다. 

 

결과

중요한 건 p-value다. 유의확률인 p-value가 0.000(<0.001)로 0.05보다 작으므로 GGT와 GGT_POSTMED는 차이가 있다고 할 수 있다. 지난번 일표본 윌콕슨 부호 순위 검정에서도 밝혔듯이 윌콕슨 부호 순위 검정은 가정이 필요 없는 검정이 아니다. 대칭이라는 가정이 필요하다.(2022.12.02 - [모평균 검정/SPSS] - [SPSS] 일표본 윌콕슨 부호 순위 검정 (비모수 일표본 중앙값 검정: One-Sample Wilcoxon Signed Rank Test)) 따라서 대칭 여부를 확인해야 하는데, 위 GGT_DIF의 히스토그램을 보면 좌우대칭임을 확인할 수 있다. 따라서 원 결론 그대로 차이가 난다고 결론을 내리면 된다.

 

 그런데, 눈치를 챈 독자도 있겠지만, 비모수 일표본 검정도, 대응 표본 검정도 모두 윌콕슨 부호 순위 검정을 실시한다. 이는 모수적인 방법에서 대응 표본 T 검정 (paired T test)가 사실 일표본 T 검정 (One sample T test)와 같다는 것과 일맥상통하는 이야기다. 이 말을 비틀어 생각하면, 일표본 윌콕슨 부호 순위 검정으로 대응표본 윌콕슨 부호 순위 검정을 시행할 수 있다는 말이다. 즉 위에서 만들 DDT_DIF변수로 0에 대해 일표본 윌콕슨 부호 순위 검정을 시행하면 같은 결과를 내는 것을 확인할 수 있다.

 

1) 분석(A) > 비모수검정(N) > 일표본(O)

 

2) 이때 나오는 창의 첫 페이지인 "목적"은 건들지 않는다.

 

3) "필드"를 누르고 분석하고자 하는 GGT_DIF를 오른쪽으로 넘긴다.

 

4) "사용자 정의에 의한 검정(T)"를 누르고 "평균과 가설값 비교(Wilcoxon 부호 순위 검정)"을 체크하고, 가설 중위수에는 검정하고자 하는 값인 0을 적는다. 그리고 "실행"을 누른다. 

 

결과

위와 같은 결론을 내리고 있다.

 

 

[SPSS] 윌콕슨 부호 순위 검정 (비모수 짝지어진 표본 중앙값 검정: Wilcoxon signed rank test) 정복 완료!

작성일: 2022.12.06.

최종 수정일: 2022.12.06.

이용 프로그램: IBM SPSS v26

운영체제: Windows 10

반응형

+ Recent posts