獨斷論

통계 R 사용설명서 18 - 상관관계correlation와 상관계수correlation coefficient 구하기 본문

과학과 기술/R 통계

통계 R 사용설명서 18 - 상관관계correlation와 상관계수correlation coefficient 구하기

부르칸 2016. 5. 27. 05:48
상관관계(correlation)이란 두 변수 사이에 선형관계가 어느정도 있는지를 보여주는 것인데 그 지표가 상관계수(correlation coefficient)이다. 절대값이 0과 1 사이의 값을 갖는데 0이면 선형관계가 없고 1이면 선형관계가 가장 큰것을 나타낸다.


상관계수를 구하는 함수는 cor()인데 이 함수를 이용하여 상관계수행렬(correlation coefficient matrix)도 구할수 있다.



상관계수 구하기


두 벡터 변수 사이에 상관계수를 구하려면 cor( )를 이용하는데 사용방법은 그냥 cor(x, y)하면 된다.


1

2

3

4

5

6

 > x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
 > y <- c(15.6, 36.2, 24.2, 80.1, 55, 70.9, 71.3, 90.5, 85.9, 150.3)
 > cor(x, y)
 [1] 0.8876614
 > cor(x, y, method = "pearson")
 [1] 0.8876614


3번재 줄에 두 변수 사이의 상관계수를 구하였다.

5번째 줄에 method = "pearson"이라고 옵션을 지정하여 pearson 상관계수를 구하라고 명시하였는데 두 결과가 같은 것으로보아 기본적으로  cor()는 pearson 상관계수를 구한다.  여기 옵션을 method = "kendall" 또는 method = "spearman"으로 바꾸면 Kendall's tau와 spearman rank-order 상관관계를 구힐수 있다.



상관계수행렬


상관계수행렬은 위에서 구한 상관관계를 행렬로 나타낸 것을 뜻한다. 위와 같이 변수가 2개일때는 간단하게 상관계수 1개만 나오지만 변수가 여러개일 경우에는 모든 가능한 조합으로 상관계수를 구하는 경우가 필요하다.


쉬운 예로 위 xy를 데이터프레임 형식으로 만들어 상관계수행렬을 만들어보자.


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

 > z <- data.frame(x, y)
 > z
     x     y
 1   1  15.6
 2   2  36.2
 3   3  24.2
 4   4  80.1
 5   5  55.0
 6   6  70.9
 7   7  71.3
 8   8  90.5
 9   9  85.9
 10 10 150.3
 > cor(z)
           x         y
 x 1.0000000 0.8876614
 y 0.8876614 1.0000000


16과 17번째 줄에 상관관계행렬을 표시하였다.  대각선상에는 모두 1이 표시되고 나머지 원소들이 상관계수이다.

앞서 상관계수 구하기에서 나온 값과 일치한다.


이제 변수가 좀 많은 것을 가지고 상관계수행렬을 구하여 보자.

R console에서 state.x77이라고 쳐보자.  1977년 미국의 50개 주에 대한 여러가지 조사를 통계로 나타낸 것이다.


1

2

3

4

5

6

7

8

 > head(state.x77)
            Population Income Illiteracy Life Exp Murder HS Grad Frost   Area
 Alabama          3615   3624        2.1    69.05   15.1    41.3    20  50708
 Alaska            365   6315        1.5    69.31   11.3    66.7   152 566432
 Arizona          2212   4530        1.8    70.55    7.8    58.1    15 113417
 Arkansas         2110   3378        1.9    70.66   10.1    39.9    65  51945
 California      21198   5114        1.1    71.71   10.3    62.6    20 156361
 Colorado         2541   4884        0.7    72.06    6.8    63.9   166 103766


Population은 인구, Income은 1인당 수입, Illiteracy는 문맹률, Life Exp는 평균수명, Murder는 인구 10만명당 살인사건, HS Grad는 고등학교 졸업 %, Frost는 섭씨 0도 이하로 내려간 날의 수, Area는 면적을 나타낸다.


이제 state.x77을 가지고 상관관계행렬을 구하면 좋은데.. 변수가 너무 많아서 tistory 화면 폭을 넘어가서 보기가 싫게 나오므로 ㅋㅋ 변수 4개만 선택하여 구하여보자.


1

2

3

4

5

6

7

 > my.state.x77 <- state.x77[ , 1:4]
 > cor(my.state.x77)
             Population     Income Illiteracy    Life Exp
 Population  1.00000000  0.2082276  0.1076224 -0.06805195
 Income      0.20822756  1.0000000 -0.4370752  0.34025534
 Illiteracy  0.10762237 -0.4370752  1.0000000 -0.58847793
 Life Exp   -0.06805195  0.3402553 -0.5884779  1.00000000

Comments