Loading [MathJax]/jax/output/CommonHTML/jax.js
본문 바로가기

Statistic 전공

다변량 정규성 검정

*sas 공식 블로그에 있는 글을 요약해서 번역한 포스트 입니다.

** 원본 링크 : https://blogs.sas.com/content/iml/2012/03/02/testing-data-for-multivariate-normality.html

 

Testing data for multivariate normality

I've blogged several times about multivariate normality, including how to generate random values from a multivariate normal distribution.

blogs.sas.com

개인 프로젝트 중 다변량 정규검정을 시행할 일이 있어 인터넷을 뒤지던 중 위의 포스트를 찾았다.

 

핵심아이디어는 다음과 같다.

 

* notation

X : 데이터

n  : X 의 데이터 수

p : X의 차원 수

cov = X의 공분산 행렬

u : X의 평균 행벡터

 

다변량 데이터 X가 다변량 정규분포를 따른다는 하에서, 

X의 평균점 까지의 마할라노비스 거리의 제곱은 자유도가 P인 카이제곱 분포를 따른다.

 

X의 평균점 까지의 마할라노비스 거리 의 제곱!
=
Xu' *inverseCov * Xu

 

카이제곱 분포의 성질을 아는 사람이라면 이는 자명한 성질이다.

 Z1......Zn,Z1 Znn

 

이를 이용하여, 자유도가 p 인 카이제곱 분포의 분위 수n 벡터와, 마할라노비스 거리 벡터의 분위수 벡터로

probability QQplot을 그렸을 때, 그래프가 직선에 가깝게 나타난다면, X는 다변량 정규분포를 따른다고 예상할 수 있다.

 

이걸 SAS로 표현하면 다음과 같다.

proc iml;
use X;
read all into x;
mean = mean(x);
cov = cov(x);
md = (x - J(149,1)*mean) * inv(cov) * (x - J(149,1)*mean)`;
md2 =diag(md)*J(149,1);
call sort(md2, 1);
s = (T(1:149) - 0.375) / (149 + 0.25);
chisqQuant = quantile("ChiSquare", s, ncol(X));
call scatter(md2, chisqQuant);
run;

이를 보면, 내가 분석한 데이터 셋은 어느정도 정규성을 따른다고 봐도 될 것 같다.

 

'Statistic 전공' 카테고리의 다른 글