일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 기자
- ANOVA
- 낙랑군
- 우분투
- 풍백
- post hoc test
- 지리지
- 통계학
- spss
- R
- 히스토그램
- 패수
- 기자조선
- Histogram
- 선형회귀분석
- 태그를 입력해 주세요.
- categorical variable
- 유주
- 독사방여기요
- 신라
- 한서
- t test
- 한서지리지
- 후한서
- repeated measures ANOVA
- linear regression
- 단군
- 고구려
- 통계
- 창평
- Today
- Total
獨斷論
간단한 상관관계correlation와 공분산행렬covariance matrix (통계 R 초급 - 10) 본문
상관관계(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)