상관분석(Correlation Analysis)
이란 연속형인 두 변수 간에 어떤 선형적 또는 비선형적인 관계를 갖고 있는지 분석하는 방법이다. 상관분석을 실시하면 두 변수 간의 관계를 상관계수(Correlation Coefficient)
로 나타낸다. 상관계수는 -1에서 1까지의 값을 가지며 음(-)의 부호일 경우 반비례 관계인 음의 상관관계
를 나타내고, 양(+)의 부호일 경우 비례 관계인 양의 상관관계
를 나타낸다. 0일 경우 상관관계가 없다.
5개의 변수와 30개의 행으로 구성되어 있다.
> df <- read.csv('ch5-1.csv', header=TRUE)
> head(df)
chick_nm weight egg_weight movement food
1 a01 140 65 146 14
2 a02 128 62 153 12
3 a03 140 65 118 13
4 a04 135 65 157 13
5 a05 145 69 157 13
6 a06 138 65 143 13
> str(df)
'data.frame': 30 obs. of 5 variables:
$ chick_nm : chr "a01" "a02" "a03" "a04" ...
$ weight : int 140 128 140 135 145 138 125 148 133 145 ...
$ egg_weight: int 65 62 65 65 69 65 61 69 64 69 ...
$ movement : int 146 153 118 157 157 143 110 159 133 174 ...
$ food : int 14 12 13 13 13 13 11 15 11 13 ...
상관분석은 수치형 변수만 가능하므로 수치형 변수만을 담은 데이터 셋을 만든다.
> df2 <- df[, 2:5]
R에서 상관분석은 cor()
함수를 통해 가능하다.
> df_corr <- cor(df2)
> df_corr
weight egg_weight movement food
weight 1.0000000 0.9571693 0.3807186 0.8775735
egg_weight 0.9571693 1.0000000 0.4282457 0.8081467
movement 0.3807186 0.4282457 1.0000000 0.3190107
food 0.8775735 0.8081467 0.3190107 1.0000000
모두 양의 상관관계가 있는 것으로 나타났다.
상관계수를 구하는 방법에는
피어슨(Pearson)
,스피어만(Spearman)
,켄달(Kendall)
세 가지가 존재한다. cor() 함수에서 별도 method 옵션을 지정하지 않을 경우 피어슨 상관계수를 기본으로 한다. 스피어만 상관계수는 순서형 또는 서열 척도일 경우 사용하며, 피어슨 상관계수가 선형관계 크기만 측정하는 것에 비해 비선형적인 관계도 나타낼 수 있다.
상관분석 결과의 경우 상관행렬 형태로만 나타내게 되면 데이터의 해석을 왜곡할 우려가 있기 때문에 그림도 같이 확인해야 한다. plot()
함수를 통해 변수들 간의 관계를 산점도(Scatter Plot)
으로 나타낸다.
> plot(df2)
egg_weight와 food 변수는 몸무게 변수와 강한 양의 상관관계를 갖는 것으로 보인다. 반면 movement의 경우 상관계수로만 판단하였을 때 뚜렷한 선형관계가 있을 것으로 판단되었으나 데이터의 분포가 흩어져 있음을 확인할 수 있다.
corrplot
이라는 패키지를 사용하여 상관분석한 결과를 보기 좋게 표현할 수 있다.
> install.pacakges('corrplot')
> library(corrplot)
> corrplot(df_corr)
corrplot 패키지는 원의 색상과 크기를 통해 상관계수의 방향과 크기를 표현한다. 다양한 옵션을 사용하면 기본 산점도보다 훨씬 상관관계를 잘 표현할 수 있다.
> corrplot(df_corr, method='ellipse',
+ type='lower',
+ addCoef.col='white')
method
: 형태 표시 circle
, square
, ellipse
, number
, pie
type
: 구역 표시 full
, lower
, upper
addCoef.col
: 상관계수 색상 표시title
: 제목