獨斷論

간단한 상관관계correlation와 공분산행렬covariance matrix (통계 R 초급 - 10) 본문

과학과 기술/R 통계

간단한 상관관계correlation와 공분산행렬covariance matrix (통계 R 초급 - 10)

부르칸 2013. 11. 26. 12:23

상관관계(correlation)는 두 변수사이에 어떠한 관계가 있는지 알아보는 것이며 여기에서는 관계가 서로 선형(linear)인것만 가정한다. 

R의 MASS 패키지에 있는 cats이라는 데이터를 사용할 것이므로 다음과 같이 입력하면 된다. 

> library("MASS")

> data(cats)

고양이 성별에 따른 몸무게와 심장무게를 갖는 데이터이다. str(cats)라고 입력하면 어떠한 데이터인지 알수 있는데 Bwt는 몸무게이고 Hwt는 심장무게이다. 

몸무게와 심장무게를 그래프로 그리려면 아래와 같이 하면 된다. 

> with(cats, plot(Bwt, Hwt))



그래프로부터 강한 선형관계가 있음을 알수있고 이를 수치적으로 알아보기위하여 Pearson product moment correlation coefficient를 구하여보자. 

> with(cats, cor(Bwt, Hwt))

[1] 0.8041274

Pearson's r은 0에서 1 사이이므로 0.8은 큰 선형관계가 있음을 나타낸다. 

0.8이라는 값이 통계적으로 의미가 있는지 알아보려면 correlation test를 수행해보면 된다. 

> with(cats, cor.test(Bwt, Hwt))


Pearson's product-moment correlation


data:  Bwt and Hwt

t = 16.1194, df = 142, p-value < 2.2e-16

alternative hypothesis: true correlation is not equal to 0

95 percent confidence interval:

 0.7375682 0.8552122

sample estimates:

      cor 

0.8041274 

p-value가 0.05보다 매우 작으므로 alternative hypothesis를 받아들일수 있으며 두 변수사이에 선형관계가 0이 아니라는 것은 통계적으로 매우 의미있다고 볼수있다. 


기본적으로 cor.test()는 two.side 방법을 사용하고 confidence level이 95%이다. 이를 변경하여 수행하려면 다음과 같이 하면된다 .

> with(cats, cor.test(Bwt, Hwt, alternative="greater", conf.level=.8))


Pearson's product-moment correlation


data:  Bwt and Hwt

t = 16.1194, df = 142, p-value < 2.2e-16

alternative hypothesis: true correlation is greater than 0

80 percent confidence interval:

 0.7776141 1.0000000

sample estimates:

      cor 

0.8041274 

p-value가 아주 작은 값이므로 alternative hypothesis를 받아들일수 있으며 이때 correlation coefficient의 값은 0보다 크다는 것은 통계적으로 의미가 있음을 알수있다. 


데이터의 변수가 여러개라면  correlation coefficient도 여러개가 되며 이것을 행렬로 정리한 것이 correlation matrix이다. 이와 비슷하게 공분산covariance을 행렬로 정리한 것이 공분산행렬(covariance matrix)이다. covariance matrix는 variance-covariance matrix라고도 하는데 대각선상에 분산이 들어가기 때문이다 


이제 cats 데이터를 메모리 상에서 지우고 cement라는 데이터를 불러들이도록 하자. 

> rm(cats)    # 데이터를 지운다

> data(cement) # 데이터를 불러들인다

> str(cement)

'data.frame': 13 obs. of  5 variables:

 $ x1: int  7 1 11 11 7 11 3 1 2 21 ...

 $ x2: int  26 29 56 31 52 55 71 31 54 47 ...

 $ x3: int  6 15 8 8 6 9 17 22 18 4 ...

 $ x4: int  60 52 20 47 33 22 6 44 22 26 ...

 $ y : num  78.5 74.3 104.3 87.6 95.9 ...

correlation matrix와 covariance matrix는 다음과 같이 구한다. 

> cor(cement)

           x1         x2         x3         x4          y

x1  1.0000000  0.2285795 -0.8241338 -0.2454451  0.7307175

x2  0.2285795  1.0000000 -0.1392424 -0.9729550  0.8162526

x3 -0.8241338 -0.1392424  1.0000000  0.0295370 -0.5346707

x4 -0.2454451 -0.9729550  0.0295370  1.0000000 -0.8213050

y   0.7307175  0.8162526 -0.5346707 -0.8213050  1.0000000

> cov(cement)

          x1         x2         x3          x4          y

x1  34.60256   20.92308 -31.051282  -24.166667   64.66346

x2  20.92308  242.14103 -13.878205 -253.416667  191.07949

x3 -31.05128  -13.87821  41.025641    3.166667  -51.51923

x4 -24.16667 -253.41667   3.166667  280.166667 -206.80833

y   64.66346  191.07949 -51.519231 -206.808333  226.31359

covariance matrix를 correlation matrix로 바꾸려면 아래와 같이 수행하면 된다. 

> cov.matr = cov(cement)

> cov2cor(cov.matr)

           x1         x2         x3         x4          y

x1  1.0000000  0.2285795 -0.8241338 -0.2454451  0.7307175

x2  0.2285795  1.0000000 -0.1392424 -0.9729550  0.8162526

x3 -0.8241338 -0.1392424  1.0000000  0.0295370 -0.5346707

x4 -0.2454451 -0.9729550  0.0295370  1.0000000 -0.8213050

y   0.7307175  0.8162526 -0.5346707 -0.8213050  1.0000000

각각의 변수에 대해서 scatter plot를 그려보면 위 계산한 공분산행렬을 이해하는데 더 도움이 된다. 

> pairs(cement)



Comments