상관관계(correlation)과 상관분석(correlation analysis)
두 변수간의 선형적 관계를 '상관'이라고하며, 이러한 관계에 대한 분석을 상관분석이라고 합니다.
(ex. 광고비용 지출과 매출 , 1인당 GDP와 기대수명 )
두 사건에 대응되는 두 변수는 일반적으로 연속형 변수를 가정합니다.
R 프로그래밍
plot(cats$Hwt ~ cats$Bwt,
col="forestgreen", pch=19,
xlab='Body Weight (kg)', ylab="Heart Weight(g)",
main = "Body Weight and Heart Weight of Cats")
고양이의 몸무게가 증가할수록 심장무게 역시 증가하는 패턴을 보이고 있습니다. 산점도를 이용하면 이렇게 대략적으로 패턴을 확인할 수 있습니다.
하지만 선형 관계의 강도를 객관적으로 확인할 수는 없습니다.
상관계수
상관계수는 두 변수간의 선형관계의 강도를 추정합니다.
-1에서 +1 사이의 값을 가지며, 0일 경우에는 두 변수 간의 선형관계가 전혀 없다는 것을 뜻합니다.
- -의 상관계수 : 부의 선형관계 (negative linear relationship)
- +의 상관계수 : 정의 선형관계 (positive linear relationship)
대칭이어서 x와 y의 상관계수는 y와 x의 상관계수와 일치합니다.
상관계수는 선형변환에 의해 영향을 받지 않습니다.
R 프로그래밍
아래의 코드를 통해 고양이의 몸무게와 심장무게의 상관계수가 0.8임을 확인할 수 있습니다.
-1~1 사이의 값이 상관계수인데 0.8이면 굉장히 높은 상관관계를 보인다고 할 수 있습니다.
> cor(cats$Bwt, cats$Hwt)
[1] 0.8041274
cor()함수의 사용방법을 알아보겠습니다. ?cor를 입력하면 자세한 사용법을 볼 수 있습니다.
method 함수를 지정할 수 있는데요, 기본값은 pearson입니다. 일반적인 연속형 변수에서 사용되는 피어슨 상관계수를 측정합니다.
데이터가 서열척도로 측정되어있는 경우에는 kendall이나 spearman을 지정할 수 있습니다. 이들은 등위상관계수를 계산해줍니다.
Pearson 상관계수 vs Spearman 상관계수
Pearson 상관계수는 정규성의 가정이 필요합니다.
Spearman 상관계수는 정규성 가정을 충족하지 못하는 서열척도의 데이터를 바탕으로 계산됩니다.
- 순위 데이터를 바탕으로 계산되기 때문에 이상점(outlier)에 덜 민감
Pearson 상관계수와 Spearman 상관계수가 많이 다르다면 Pearson 상관계수에 큰 영향을 미치는 이상점이 데이터에 포함되어 있을 가능성이 있습니다.
R 프로그래밍
cor()함수는 상관관계에 대한 유의성 검정을 하지 않습니다. 유의성 검정은 cor.test() 함수를 이용해서 검정할 수 있습니다.
> cor.test(cats$Bwt, cats$Hwt)
Pearson's product-moment correlation
data: cats$Bwt and cats$Hwt
t = 16.119, 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
2개 이상의 상관계수와 유의성 검정을 동시에 수행
psych 패키지의 corr.test() 함수를 사용합니다.
데이터셋은 iris 데이터를 사용합니다.
처음에는 상관계수의 행렬이 출력됩니다. 이어서 상관계수의 행렬에 대응되는 유의 확률 행렬이 출력됩니다.
첫 행렬에서 Sepal.width 와 Sepal.Width의 상관관계는 -0.12입니다. 그에 대응되는 유의확률은 0.15인 것을 볼 수 있습니다.
유의수준 0.05에서 0.15는 유의수준보다 크기때문에 우리는 귀무가설을 기각하지 못하고 채택합니다.
다시말해 표본으로부터 계산된 -0.12는 유의수준 0.05에서 통계적으로 유의하지 않다라고 결론내릴 수 있습니다.
모집단에서 Sepal.width 와 Sepal.Width의 관계는 상관계수가 0일 가능성이 있다고 할 수 있습니다.
> library(psych)
> corr.test(iris[-5])
Call:corr.test(x = iris[-5])
Correlation matrix
Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length 1.00 -0.12 0.87 0.82
Sepal.Width -0.12 1.00 -0.43 -0.37
Petal.Length 0.87 -0.43 1.00 0.96
Petal.Width 0.82 -0.37 0.96 1.00
Sample Size
[1] 150
Probability values (Entries above the diagonal are adjusted for multiple tests.)
Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length 0.00 0.15 0 0
Sepal.Width 0.15 0.00 0 0
Petal.Length 0.00 0.00 0 0
Petal.Width 0.00 0.00 0 0
To see confidence intervals of the correlations, print with the short=FALSE option
corrgram 함수
corrgram() 함수는 변수간 상관관계를 조금 더 풍부하게 시각화합니다.
색상이 짙을수록 강한 상관관계를 나타내며, 대각선 방향에 따라 -,+ 상관관계를 가집니다.
library(corrgram)
corrgram(state.x77)
corrgram(state.x77, lower.panel = panel.shade,
upper.panel = panel.pie, text.panel = panel.txt,
order=TRUE, main = "Corrgram of US States")
편상관계수(partial correlation coefficient)
편상관계수는 두 변수 간의 순수한 상관관계를 말합니다.
하나 이상의 다른 변수의 영향을 통제한 상태에서 관심의 대상인 두 변수 간의 선형적 관련성을 측정합니다.
- 가짜 상관을 찾아내는 데 활용(ex. 연봉과 혈압 ~ 나이 )
- 숨겨진 관계를 찾는 데 활용(ex. 구매필요성과 구매의향 ~ 소득)
R 프로그래밍
mtcars2라는 데이터에서 편상관분석을 하려면 ggm 패키지에 있는 pcor()함수를 사용합니다.
pcor()의 인자로 변수의 이름 혹은 인덱스로 지정할 수 있습니다.
첫 인자 1,3은 mpg와 hp에 해당하며 편상관계수를 구해야 할 변수를 지정합니다. 뒤에 2,4에 해당하는 cyl과 wt는 통제할 변수를 뜻합니다.
두 번째 인자는 mtcars2의 공분산행렬을 넣어줍니다.
> cor(mtcars2)
mpg cyl hp wt
mpg 1.0000000 -0.8521620 -0.7761684 -0.8676594
cyl -0.8521620 1.0000000 0.8324475 0.7824958
hp -0.7761684 0.8324475 1.0000000 0.6587479
wt -0.8676594 0.7824958 0.6587479 1.0000000
> library(ggm)
> pcor(c(1,3,2,4), cov(mtcars2))
[1] -0.2758932
ppcor 패키지에 있는 pcor()함수를 사용하여 편상관계수와 그에 대응되는 유의확률을 구할 수 있습니다.
출력값을 보면 모든 변수쌍간의 편상관계수와 유의확률을 계산합니다.
mpg와 cyl간의 편상관계수는 해당 두 변수를 제외한 모든 변수가 통제됩니다.
> pcor(mtcars2)
$estimate
mpg cyl hp wt
mpg 1.0000000 -0.3073687 -0.2758932 -0.6285559
cyl -0.3073687 1.0000000 0.5340905 0.2224468
hp -0.2758932 0.5340905 1.0000000 -0.1574640
wt -0.6285559 0.2224468 -0.1574640 1.0000000
$p.value
mpg cyl hp wt
mpg 0.0000000000 0.098480097 0.140015155 0.0001994765
cyl 0.0984800975 0.000000000 0.002365994 0.2374063384
hp 0.1400151550 0.002365994 0.000000000 0.4059618058
wt 0.0001994765 0.237406338 0.405961806 0.0000000000
$statistic
mpg cyl hp wt
mpg 0.000000 -1.709183 -1.518838 -4.276365
cyl -1.709183 0.000000 3.342856 1.207328
hp -1.518838 3.342856 0.000000 -0.843747
wt -4.276365 1.207328 -0.843747 0.000000
$n
[1] 32
$gp
[1] 2
$method
[1] "pearson"