[R] - 통계데이터분석 - 상관관계(correlation)과 상관분석(correlation analysis)

반응형

상관관계(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을 지정할 수 있습니다. 이들은 등위상관계수를 계산해줍니다.

스크린샷 2023-08-08 오전 9 34 17

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)

image


corrgram(state.x77, lower.panel = panel.shade, 
         upper.panel = panel.pie, text.panel = panel.txt,
         order=TRUE, main = "Corrgram of US States")

image

편상관계수(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"

반응형