데이터

상관분석

데이터할아버지 2023. 5. 21. 22:46

상관 분석(correlation analysis)은 두 변수 간의 관계 또는 연관성을 측정하는 데 사용되는 통계 기법이다. 한 변수의 변화가 다른 변수의 변화와 어떻게 관련되는지 이해하는 데 도움이 된다. 상관관계의 정도는 상관계수로 표현되며, 변수간 관계의 강도와 방향성을 나타낸다.

상관 분석은 데이터의 패턴과 추세를 파악하는 데 사용할 수 있으며 금융, 경제, 사회 과학, 의료 등 다양한 분야에서 자주 활용된다. 그러나 상관관계가 인과관계를 의미하지는 않는다는 점에 유의해야 한다.

상관관계

상관관계의 정도는 상관계수로 나타낸다. 상관계수의 종류에든 Pearson의 상관 계수, Spearman의 순위 상관 계수 및 Kendall의 타우 등이 있다.

상관계수

피어슨 상관계수
피어슨의 상관계수 :
종종 “r”로 표시되는 Pearson의 상관계수는 두 연속 변수 간의 선형적 상관관계를 정의한다. 피어슨의 상관계수는 두 변수가 정규성을 따른 다는 가정이 필요하며 그래서 모수적 방법이라 할 수 있다. r 값의 범 위는 -1에서 +1 사이이며, 여기서 +1은 완벽한 양의 선형 관계를 나타내고, -1은 완벽한 음의 선형 관계를 나타내고, 0은 선형 관계가 없음을 나타낸다.

스피어맨 상관계수
두 변수가 정규성을 따르지 않는 경우, 또는 순위 데인터에 대한 상관계수를 정의한다. 스피어만 순위 상관계수는 값에 순위를 매겨 그 순위에 대해 상관계수 값을 구하기 때문에 비모수적 방법이라고 할 수 있다. 순위를 이용하기 때문에 연속형 변수가 아닌 순서형 변수인 경우에도 상관계수를 구할 수 있다.

켄달의 타우 켄달의 타우 역시 비모수적 상관관계이다. 켄달 타우는 두 변수들 간의 순위를 비교하여 연관성을 계산한다. 켄달 타우를 이해하기 위해서는 concordant pair에 대한 이해가 필요하다.
각 변수의 비교 대상의 상하관계가 같으면 concordant pair라고 하고 다르면 discordant pair라고 한다. 예를 들어 사람들 키와 몸무게에 대한 상관계수를 알고 싶다고 해보자. 다음은 키와 몸무게 표이다.

구분 A B C D E  
1 2 3 4 5  
체중 3 4 1 2 5  

이제 켄달의 타우를 계산하기 위해서 다음과 같이 정리한다.

예제1을 두고 설명하면 키와 몸무게 모두 사람 A가 B보다 순위가 높다(서열이 높다). 이 경우는 concordant pair이다. 하지만 사람 B와 C를 비교하면 키는 B가 C보다 크지만 몸무게는 C가 B보다 크기 때문에 이 경우는 disconcordant pair가 된다. 켄달타우는 아래와 같이 계산을 한다.

예제1의 계산 결과 Tau = (6–4) / 10 = 0.2가 된다.
켄달 타우는 샘플 사이즈가 작거나 데이터의 동률이 많을 때 유용하다.

MASS 패키지에 포함되어있는 cats 데이터로 상관분석을 수행해보자. cats 데이터는 고양이의 성별에 따른 몸무게(Bwt: Kg)와 심장무게(Hwt: g)를 포함하고 있는 데이터이다.

library(tidyverse)
library(MASS)
data(cats)
str(cats)
'data.frame':   144 obs. of  3 variables:
 $ Sex: Factor w/ 2 levels "F","M": 1 1 1 1 1 1 1 1 1 1 ...
 $ Bwt: num  2 2 2 2.1 2.1 2.1 2.1 2.1 2.1 2.1 ...
 $ Hwt: num  7 7.4 9.5 7.2 7.3 7.6 8.1 8.2 8.3 8.5 ...

상관분석을 하기 전에 먼저 몸무게와 심장무게에 대한 산점도를 그려보자.

ggplot(cats, aes(Bwt, Hwt)) +
  geom_point(aes(color = Sex)) +
  geom_smooth()+
  labs(title = "고양이 무게와 심장무게") 

산점도에 geom_smooth()를 이용하여 회귀선까지 표현해보았다. 가시적으로 고양이의 무게와 심장의 무게는 상관관계가 있음을 확인 할 수 있다. 상관계수를 확인해보니, 0.804가 나왔다. 상관계수 계산할때 method 를 지정하지 않아 디폴트인 피어슨 상관계수로 계산을 한것이다. 서열척도로 측정된 데이터의 상관관계를 계산하기 위해서는 method를 “spearman”으로 지정하고 kendall 상관계수를 계산하려면 method를 “kendall”로 지정해서 수행하면 된다.

cor(cats$Bwt, cats$Hwt)                         # 기본값 피어슨 상관계수 
[1] 0.8041274
cor(cats$Bwt, cats$Hwt, method = "spearman")    # 스피어맨 상관계수
[1] 0.7908427
cor(cats$Bwt, cats$Hwt, method = "kendall")     # 켄달의 상관계수  
[1] 0.6079403
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 

상관검정결과 p-value가 유의수준 0.05보다 매우 작아 고양이의 체중과 고양이 심장의 무게는 상관이 없다는(상관계수가 0이라는) 귀무가설을 기각할 수 있다.

그럼 단순선형회귀를 해서 R-squred 값을 확인해보자.

cat_lm <- lm(Hwt ~ Bwt, data = cats)
summary(cat_lm)
Call:
lm(formula = Hwt ~ Bwt, data = cats)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.5694 -0.9634 -0.0921  1.0426  5.1238 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  -0.3567     0.6923  -0.515    0.607    
Bwt           4.0341     0.2503  16.119   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1.452 on 142 degrees of freedom
Multiple R-squared:  0.6466,    Adjusted R-squared:  0.6441 
F-statistic: 259.8 on 1 and 142 DF,  p-value: < 2.2e-16

선형회귀 결과 회귀식은 유의미하고 R-squared 값이 0.6466으로 나타났다. 상관계수는 두변수의 관련성 정도를 의미하는 값인데 반해, 선형회귀의 R-squared 값은 회귀식으로 얼마나 데이터를 예측할 수 있느냐를 의미하는 값으로 상당한 의미상의 차이가 있음을 알 수 있다.