데이터실무

DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!

다변량 분석

데이터 분석
통계분석
다변량 분석
작성자
admin
작성일
2021-02-15 14:23
조회
22998

개요

다변량분석(Multivariate analysis)이란 여러 현상이나 사건에 대한 측정치를 개별적으로 분석하지 않고 동시에 한번에 분석하는 통계적 기법을 말한다. 즉 여러 변인들 간의 관계성을 동시에 고려해 그 효과를 밝히는 것이다. 이때 여러 변인을 동시에 고려하려다 보니 다변량 분포는 평면상의 면적이 아니라 공간상의 입체적 표현이 필요하게 된다. 그러나 이 경우에도 4차원 이상의 데이터는 이를 시각적으로 표현하기 어렵게 된다. 이 경우 실제로는 공간상에 표현이 불가능하더라도 논리적으로는 3차원 공간의 분석기법을 확장해 이용하게 된다.
결국 다변량 분석은 여러 변인들의 효과를 동시에 분석하기에 종속변인에 대한 효과가 개별평균(혹은 변량)이 아니라, 여러 변인들간의 선형조합(평균벡터)으로 해석된다는 점에서 단변량 또는 이변량 분석과는 차이가 있다.
다변량데이터의 통계처리에는 선형대수에서의 벡터와 확률개념이 그 밑바탕이 된다. 그리고 그러한 이론적 배경 위에서 주성분분석(PCA, Principal Component Analysis), 요인분석(Factor Analysis), 경로모형과 구조방정식 모형(SEM, Structural Equation Model) 및 다양한 판별분석이론 ? 예컨대 선형판별분석(LDA, Linear Discriminant Analysis) 및 중다판별분석(Multiple Discriminant Analysis) 등이 응용분야로 발전해 왔다.

여러 가지 종류의 다변량 분석기법

[그림 Ⅳ-2-9] 여러 가지 종류의 다변량 분석기법

여기서는 다변량데이터에 대해 그 모습을 손쉽게 파악하기 위해 R에서 제공하는 편리한 명령어들을 요약통계 내지 기술(기술)통계의 관점 살펴본 후 다변량데이터의 상관관계를 계산하는 방법을 소개하고 응용분야로서는 판별분석에 R을 이용하는 방법을 알아보는 것으로 한다.


다변량데이터의 요약통계

다변량데이터를 표현하고 분석하는 방법은 일변량 및 이변량과 유사하다. 단지 여러 변수를 나누어 분석하는 대신 한꺼번에 (동시에) 분석한다는 차이가 있을 뿐이다.


R의 기본 명령어를 이용하는 방법

다변량데이터의 요약을 위해 R에서 제공되는 명령어를 크게 세 가지로 나누어 살펴 본다.



조사 또는 연구 결과를 요약(범주형 데이터로 표현)

table()은 데이터를 요약표(contingency table)로 나타내는 명령이고 ftable() 함수는 데이터의 변량이 커질 때 이것이 하나의 그림에 표현될 수 있도록 납작하게(Flattened) 변형시킨 것을 말한다.
아래의 R 코드에서는 student.expense라는 데이터에 대해 이들 함수를 이용하는 모습을 보여주고 있다. 이 데이터는 학생들의 용돈 지출 내역을 조사한 데이터로서 휴대폰, 케이블 TV시청, 인터넷 및 자동차 등에 지출하는 모습을 보여주는데 table() 함수와 ftable()을 통해 그 내용을 요약하고 있다.

범주형 데이터

범주형 데이터

위에서 ftable() 사용 시 col.vars=를 통해 컬럼 이름을 표에 맞추도록 하고 있다.

독립적인 여러 표본을 비교

boxplot()은 어쩌면 기술통계와 관련해 R 에서 가장 많이 그리고 가장 효과적으로 사용되는 함수 중 하나다. 아래 예에서는 ewr 데이터를 통해 그 활용을 보여주는데 ewr데이터는 미국 뉴욕 공항의 이착륙 데이터다.

코드

코드

다음 [그림 Ⅳ-2-10]에서는 항공사별 이착륙 소요시간에 대해 boxplot() 함수를 적용해 최대값/최소값과 사분위값 및 중앙값 등을 한 눈에 알아보도록 표현하고 있다.

상자도표를 이용한 항공사별 이착륙 소요시간 비교

[그림 Ⅳ-2-10] 상자도표를 이용한 항공사별 이착륙 소요시간 비교


표본 내에서 수 많은 변수(변인)의 관계를 찾아봄

Scatterplot을 통해 두 변수 또는 그 이상 여러 변수 사이의 관계를 손쉽게 분석할 수 있다. 아래 예에서는 babies 데이터를 이용하는데 여기에는 1,200여 명의 임신과 출산에 대한 정보가 수록돼 있다.
데이터 정제를 위해 데이터 값이 ‘999’인 것을 NA로 표시한 후 임신기간이 길어짐에 따라 아기의 몸무게가 어떻게 변화하는가를 살펴 보고 있다.

코드

산점도(scatter plot)를 이용한 두 변량의 관계 분석

[그림 Ⅳ-2-11] 산점도(scatter plot)를 이용한 두 변량의 관계 분석

아래에서는 한 걸음 나아가 위의 데이터에 산모의 흡연 여부에 따른 변화를 동시에 보여주고 있다.

코드

그림 Ⅳ-2-11에 산모흡연 여부를 추가시킨 모습

[그림 Ⅳ-2-12] 그림 Ⅳ-2-11에 산모흡연 여부를 추가시킨 모습

여러 개의 산포도를 한 화면에 보여주는 명령어가 pairs()인데 아래에서는 이러한 모습을 붓꽃 (Iris)데이터를 통해 보여주고 있다.

코드

pairs()를 통해 여러 산포도를 한 화면에 보여주는 모습

[그림 Ⅳ-2-13] pairs()를 통해 여러 산포도를 한 화면에 보여주는 모습



모델 내 공식을 지정하는 방법

두 번째 변수의 값이 여러 차원(level)을 갖는 것일 때는 그 관계를 표현해 주는 별도의 모델 표현식(model-formula)을 이용하는 것이 좋다. 특히 대표적인 것이 plot() 및 boxplot()과 같은 것인데 이들은 모두 원형(generic) 함수다. 원형함수란 객체지향 프로그래밍 기법을 기반으로 함수에 적용되는 대상 객체가 어떤 것이냐에 따라 적용되는 함수 내용이 자동으로 달라지는 것을 의미한다. 다음은 boxplot에 대해 모델 표현식을 적용한 예다.

코드

상자도표에 모델식 적용한 모습

[그림 Ⅳ-2-14] 상자도표에 모델식 적용한 모습

?

한편 분할표 내지 교차참조표(cross-table)는 흔히 사용되는 요약표인데 R에서도 여러 가지 명령어를 통해 구현할 수 있다. 여기서는 가장 대표적인 xtabs()를 이용하는 예를 살펴본다.
데이터는 UCBAdmissions16)로서 1973년도 미국의 버클리(Berkeley)대학교의 대학원 지망생의 합격여부를 남여별로 분류한 것인데 xtabs() 함수를 이용해 합격자 수의 비율상에 성별 차이가 존재하는지를 분석하고 있다.

코드


Lattice 그래픽의 이용

Lattice 그래픽은 Cleveland의 Trellis 그래픽 기법에 의거한 것으로서 그래픽이 여러 개의 panel로 구성되는 것을 전제로 각 panel 이 변수의 조건에 상응하도록 한다는 특징을 가진다. lattice 함수는 호출 시에 model-formula 인터페이스를 지정하게 돼 있다. Lattice 패키지에는 많은 함수가 있는데 여기서는 bwplot()의 이용 예를 보고자 한다. bwplot()은 변수의 차원(level) 별로 Box and Whisker plot 을 그려주는 것인데 여기서는 흡연 유무 별로 연간소득과 임신기간의 관계를 분석하고 있다.

코드

Lattis 그래픽을 이용한 흡연유무 및 소득이 임신기간에 미치는 영향 분석

[그림 Ⅳ-2-15] Lattis 그래픽을 이용한 흡연유무 및 소득이 임신기간에 미치는 영향 분석


다변량데이터의 상관관계 계산

다변량 상관관계(multivariate correlation) 혹은 다중상관관계(multiple correlation) 분석은 셋 또는 그 이상의 변수 간 관계를 분석하는 것을 말한다. 우선 MANOVA를 살펴본다.
앞서 둘 이상의 집단의 평균을 비교하기 위해 ANOVA를 이용하는 것을 보았는데 여기서 한 걸음 나아간 것이 MANOVA다.

ANOVA는 종속변수가 1개인 반면에 MANOVA는 종속변수가 2개 또는 그 이상인 경우 집단평균들을 비교하는 것으로서 다음과 같은 가정이 전제되는 경우에 이용하게 된다.


  • 관측치가 서로 독립적이다.
  • 각 집단의 분산과 공분산 행렬이 동일하다.
  • 모든 종속변수들은 다변량 정규분포를 따른다.

여기서 ANOVA와 MANOVA의 차이점을 나열하면 다음과 같다.


  • MANOVA는 종속변수의 조합에 대한 효과를 동시에 검정한다. 즉 대부분의 종속변수들이 서로 상관관계가 있기 때문에 MANOVA는 ANOVA보다 집단에 결합된 차이와 집단 간의 차이를 밝히는데 더 유용하다.
  • MANOVA 설계의 특징은 종속변수가 벡터변수라는 점이다.
  • ANOVA로 여러 개의 종속변수를 평가하려면, 각각 따로 따로 분석을 해야 하기 때문에 ANOVA로 분석하게 되면 오차의 확률이 커진다. 그러나 MANOVA는 단 한번의 분석만을 하므로 이러한 위험성이 제거된다.

아래의 예는 HSAUR 패키지17)의 skulls 데이터를 다루는 것으로, 이집트의 5개 왕조 시대 것으로 예측되는 유해의 해골 치수에 대한 데이터다.

코드

코드

코드


판별분석

개요

판별분석이란 모수통계에서의 분류기법 중 하나로서 여러 그룹에 속하는 개체들이 있다고 할 때 이들에 관해 측정된 변수 값을 이용해서 각각이 속한 집단을 가장 잘 판별할 수 있도록 모델을 수립하고 이를 평가하는 작업을 말한다. 즉 대표적인 감독형 학습(supervised learning) 모델링 기법 가운데 하나다. 따라서 판별분석을 위해서는 여러 집단에 관해 공통적으로 측정된 변수들을 설명변수로 하게 되는데 다음을 전제로 해 진행된다.


  • 측정변수들의 벡터는 각각 다변량 정규분포를 따른다.
  • 변수들 간의 분산-공분산행렬은 동일하다.

판별함수는 Fisher의 선형판별함수가 대표적인데 다음과 같이 표현된다.

Fisher의 선형판별함수

?

클래스 내의 분포(within-class scatter)와 클래스 간 분포(between-class scatter)를 비교하되 그룹 간 분리도를 최대로 하는 판별계수를 발견해 낸다. 판별함수의 유의성 판단은 관측자료에서 유도된 판별함수 즉, 모델에 관찰값을 적용해 실제 값과 비교하는 방식으로 이뤄진다.
유의할 점은 판별분석에서의 종속변수는 범주형 데이터 타입이라는 점에서 수치형 데이터를 종속변수로 하는 회귀분석과 구별된다는 점이다.


R을 이용한 예

아래 예에서는 붓꽃 (Iris) 에 대해 4가지 속성(꽃받침의 넓이와 길이 그리고 꽃잎의 넓이와 길이)을 이용해 붓꽃을 종류(C, S, V)별로 분류하는 모델을 수립ㆍ검정하는 모습이다.

코드

코드

?

판별분석을 위한 lda() 함수는 MASS 패키지에 수록되어 있으며 표준형은 다음과 같다.

함수표준형/옵션파라미터

?

또한 Iris3 데이터(iris3라는 이름으로서 R에서 기본적으로 제공되는 3차원 형태의 데이터 세트다)를 읽어서 Iris라는 이름으로 데이터프레임을 생성하고 분석에 앞서 있는 그대로의 모습을 보기 위해 plot() 함수를 이용했다. plot() 내에서는 col-Iris[,5]를 통해 5번째 변수인 붓꽃 종류(Sp: spieces)를 기준으로 색깔 구별을 지정한 결과, 다음 그림으로 출력됐다. 얼핏 보기에도 색깔 별로 세 종류의 붓꽃이 확연히 구별되는 것을 알 수 있다. 이제 본격적으로 판별모델을 수립하게 된다.

색깔로 구분ㆍ표시한 Iris 종별 분석

[그림 Ⅳ-2-16] 색깔로 구분ㆍ표시한 Iris 종별 분석

?

splom() 함수는 'scatter plot matrix' 즉 matrix에 대한 산포도를 그려주는 lattice 패키지 내의 함수이며, 적용 결과는 다음의 그림으로 나타나 있다.

Lattis 패지지의 splom() 함수를 이용한 매트릭스 데이터의 산포도

[그림 Ⅳ-2-17] Lattis 패지지의 splom() 함수를 이용한 매트릭스 데이터의 산포도

?

판별분석의 핵심함수는 MASS 패키지의 lda() 함수이며, 여러 가지 형태로 인자를 지정할 수 있다. 여기서는 가장 단순한 형태로 Sp를 목적변수(내지 종속변수)로 하되 설명변수로는 “.”을 통해 나머지 변수를 동원하는 방식으로 붓꽃 종류를 최대한 정확하게 분류ㆍ예측할 수 있는 판별함수를 수립했다. prior=를 통해서는 사전확률을 지정할 수 있다. 여기서는 3가지 붓꽃에 대해 동일한 확률 (각 1/3)을 적용했다.

이제 lda() 함수를 통해 2가지의 판별함수(LD1, LD2)가 계산됐는데 이들의 'Proportion of trace' 값을 통해 LD1이 거의 모든 (98%) 변량을, 즉 그룹간의 차이점을 설명해 주고 있음을 알 수 있다.
이제 이 판별함수의 class가 z 객체에 저장됐고, 이를 이용해 훈련데이터를 제외한 나머지 Iris 데이터(Iris[-train,])에 적용한 최종결과가 z.p에 저장됐다.


기타

판별분석은 통상 두 가지 목적으로 이용될 수 있다. 첫째, 두 개 이상의 집단에 속한 항목에 대해 어느 집단에 더 잘 속하는지를 판별해 주는 변인을 보여준다. 이를 ‘기술적 분석(descriptive discriminant analysis)’이라고 한다. 둘째로는 소속집단이 불명확할 때 이 항목이 속한 집단을 예측하는 것으로서 이를 ‘예언적(predictive) 판별분석’이라고 한다.
판별분석에는 두 개의 집단(생존집단과 사망집단)을 판별하는 경우도 있고 3개 이상의 집단을 판별하는 경우도 있는데 후자를 중다판별분석(Multiple discriminant analysis)이라고 부른다.
이론은 비교적 단순하지만 예측 정확도가 높아서 실무에서 많이 사용되고 있다. 실제 적용하는 방식에는 Fisher의 판별함수 외에도 중다회귀방식, Mahalanobis의 D2방식 등 다양한 알고리즘이 제시돼 있다.
또한 선형(linear) 관계의 한계를 벗어난 이차(Quadratic) 판별식의 생성과 이용을 위한 qda() 함수도 MASS 패키지 내에 제시돼 있다.

코드