[R] 상관 분석

반응형

 

1. Correlation Analysis

  • 상관분석(Correlation Analysis)은 두 확률 변수 사이의 관련성을 파악하는 방법입니다. 상관 계수(Correlation coefficient)는 두 변수 간 관련성의 정도를 의미하며 이를 계산하는 방법에는 피어슨 상관계수, 스피어만 상관계수, 켄달의 순위 상관계수 등이 있습니다.
    • 여기서 흔히 상관계수라 하면 피어슨 상관계수를 말합니다.
  • 상관계수 값이 크면 데이터 간의 관계는 존재한다는 의미이지만 상관계수가 크다고 해서 변수 간에 인과관계가 존재한다는 뜻은 아닙니다.
    • A가 커짐에 따라 B가 커지는 것을 보고 A가 B를 커지게 한다라고 판단할 수 있으나, 실제로 또 다른 변수 C가 A와 B를 동시에 증가시키고 있을 수 있기 때문입니다.
  • 두 확률변수 간에 다음 식이 성립하면 독립(independence)이라고 합니다.
  • \[P(X, Y) = P(X) \times P(Y)\]

2. Pearson Correlation Coefficient

  • 피어슨 상관계수(Pearson Correlation Coefficient)는 두 변수 간의 선형적 상관관계를 측정하며 \([-1, 1]\) 사이의 값을 가집니다.
    • 0보다 큰 상관계수 값은 한 변수가 커지면 다른 변수도 선형적으로 증가함을 뜻합니다.
    • 0보다 작은 상관계수 값은 한 변수가 커지면 다른 변수가 선형적으로 감소함을 뜻합니다.
    • 상관계수가 1이면 두 변수를 좌표평면에 나타냈을 때 직선의 형태로 나타나게 됩니다.
    • 상관계수 0 값은 두 변수 간 상관계수가 없음을 나타냅니다.
  • 피어슨 상관계수는 선형 관계를 판단하므로 \(Y = a + bX\) 같은 형태의 관계를 잘 찾아냅니다. 하지만 \(Y = a + bX^2\)과 같은 비선형 관계에서는 값의 증가 형태가 선형의 형태가 아니므로 피어슨 상관계수가 적절하지 않을 수 있습니다.
  • 피어슨 상관계수의 식은 다음과 같이 정의됩니다.
  • \[\rho(X, Y) = \frac{cov(X, Y)}{\sigma_{X} \sigma_{Y}}\]
  • R에서는 상관계수를 cor() 함수를 이용하여 계산합니다.
    • x, y : 숫자벡터, 행렬 또는 데이터프레임
    • method : 방법에 따라 다르게 정의하며 기본 값은 method = “pearson” 입니다.
    x <- c(1, 2, 3, 4, 5)
    y <- c(4, 5, 2, 1, 3)
    
    cor(x, y, method = "pearson")
    ## [1] -0.6
    • 두 벡터 간의 피어슨 상관계수를 구한 결과 입니다.
    cor(iris[, 1:4])
    ##              Sepal.Length Sepal.Width Petal.Length Petal.Width
    ## Sepal.Length    1.0000000  -0.1175698    0.8717538   0.8179411
    ## Sepal.Width    -0.1175698   1.0000000   -0.4284401  -0.3661259
    ## Petal.Length    0.8717538  -0.4284401    1.0000000   0.9628654
    ## Petal.Width     0.8179411  -0.3661259    0.9628654   1.0000000
    • R에 기본적으로 내장되어 있는 iris 데이터에서 Species를 제외한 모든 변수의 피어슨 상관계수를 구한 결과 입니다.
  • cor(x, y, method = c("pearson", "kendall", "spearman"))

2. 1. Visualization of correlation coefficient

  • corrgram 패키지 안에 내장되어 있는 corrgram() 함수는 상관계수를 시각화 하는데 유용한 함수입니다.
    • x : 행 단위로 관측값들이 저장된 데이터 프레임 또는 상관계수 행렬
    • panel : 각 셀을 표현할 패널
    • lower.panel, upper.panel : 우측 상단과 좌측 상단에 그릴 패널
    library(corrgram)
    
    corrgram(iris, upper.panel = panel.conf)
    • iris 데이터의 상관계수를 그림의 우측 상단에 배치하고(upper.panel = panel.conf), 대각선에는 변수의 이름을 적고, 좌측 하단에는 상관 계수를 그림으로 표현하는 예시입니다.
  • corrgram(x, panel, lower.panel, upper.panel)

3. Spearman’s Rank Correlation Coefficient

  • 스피어만 상관계수(Spearman’s Rank Correlation Coefficient)는 상관계수를 계산할 두 데이터의 실제 값 대신 두 값의 순위(rank)를 사용하여 상관계수를 계산하는 방식입니다.
  • 역시 피어슨 상관계수와 마찬가지로 \([-1, 1]\) 범위 값을 가지며 해석도 같습니다.
  • 스피어만 상관계수는 피어슨 상관계수와 달리 비선형 관계의 연관성을 파악할 수 있습니다.
  • 또한 관측값의 순위를 매길 수 있다면 연속형 자료가 아닌 이산형 자료 또는 순서형 자료에도 적용이 가능합니다.
  • 스피어만 상관계수는 다음과 같이 정의합니다. (\(x_{i}\)\(y_{i}\)는 각 변수의 \(i\)번째 데이터 순위를 의미합니다)
  • \[\rho = \frac{\sum_{i} (x_{i} - \bar{x}) (y_{i} - \bar{y})}{\sqrt{\sum_{i} (x_{i} - \bar{x})^2 } \sqrt{\sum_{i} (y_{i} - \bar{y})^2}}\]
  • R에서 쓰이는 함수는 마찬가지로 cor() 함수를 쓰되 method argument가 method = "spearman"으로 하셔야 됩니다.
    ##       [,1] [,2]
    ##  [1,]    1  100
    ##  [2,]    2   81
    ##  [3,]    3   64
    ##  [4,]    4   49
    ##  [5,]    5   36
    ##  [6,]    6   25
    ##  [7,]    7   16
    ##  [8,]    8    9
    ##  [9,]    9    4
    ## [10,]   10    1
    cor(m, method = "spearman")
    ##      [,1] [,2]
    ## [1,]    1   -1
    ## [2,]   -1    1
  • m <- matrix(c(1:10, (10:1)^2), 
                ncol = 2)
    m

4. Kendal’s Rank Correlation Coefficient

  • 켄달의 순위 상관계수(Kendal’s Rank Correlation Coefficient)에 대해서 간략하게 말씀드리겠습니다.
  • \((X, Y)\) 형태의 순서쌍으로 데이터가 있다고 가정합니다. 이런 경우에 \(x_i \gt x_j\), \(y_i \gt y_j\) 또는 \(x_i \lt x_j\), \(y_i \lt y_j\) 가 성립하면 부합 \(x_i \gt x_j\), \(y_i \lt y_j\) 또는 \(x_i \lt x_j\), \(y_i \gt y_j\) 가 성립하면 비부합 이라고 정의합니다.
    • 즉, \(x\)가 커질 때 \(y\)도 커지면 부합(concordant), \(x\)가 커질 때 \(y\)가 작아지면 비부합(discordant)
  • 켄달의 순위 상관계수 \(\tau\)는 다음과 같이 구합니다.
  • \[\tau = \frac{\text(부합 관측치쌍의 수) - (비부합 관측치쌍의 수)}{\frac{1}{2}n(n-1)}\]
  • 다른 상관계수들과 마찬가지로 \([-1, 1]\) 범위를 가지며 cor() 함수를 쓰되 method argument가 method = "kendall"으로 하셔야 됩니다.
    ## [1] 0.8
  • x <- c(1, 2, 3, 4, 5)
    y <- c(1, 0, 3, 4, 5)
    
    cor(x, y, method = "kendall")

5. Correlation Test

  • 상관계수 검정을 수행하는 함수는 cor.test()로 상관 계수의 통계적 유의성을 판단할 수 있습니다.
    • 귀무가설 \(H_0\) : 상관 계수가 0이다.
    • 대립가설 \(H_1\) : 상관 계수가 0이 아니다.
    cor.test(x, y, 
             alternative = c("two.sided", "less", "greater"),
             method = c("pearson", "kendall", "spearman"))
    • alternative : 대립가설이 양측검정인지 단측검정인지 설정하는 것
    • method : 상관 계수의 종류, 기본값은 피어슨 상관계수
    x <- c(1, 2, 3, 4, 5)
    y <- c(1, 0, 3, 4, 5)
    
    cor.test(x, y, method = "pearson")
    ## 
    ##  Pearson's product-moment correlation
    ## 
    ## data:  x and y
    ## t = 3.9279, df = 3, p-value = 0.02937
    ## alternative hypothesis: true correlation is not equal to 0
    ## 95 percent confidence interval:
    ##  0.1697938 0.9944622
    ## sample estimates:
    ##       cor 
    ## 0.9149914
    x <- c(1, 2, 3, 4, 5)
    y <- c(1, 0, 3, 4, 5)
    
    cor.test(x, y, method = "spearman")
    ## 
    ##  Spearman's rank correlation rho
    ## 
    ## data:  x and y
    ## S = 2, p-value = 0.08333
    ## alternative hypothesis: true rho is not equal to 0
    ## sample estimates:
    ## rho 
    ## 0.9
    x <- c(1, 2, 3, 4, 5)
    y <- c(1, 0, 3, 4, 5)
    
    cor.test(x, y, method = "kendall")
    ## 
    ##  Kendall's rank correlation tau
    ## 
    ## data:  x and y
    ## T = 9, p-value = 0.08333
    ## alternative hypothesis: true tau is not equal to 0
    ## sample estimates:
    ## tau 
    ## 0.8

반응형

'Basic' 카테고리의 다른 글

[R] 문자열 처리  (0) 2017.07.12
[R] 추정 및 검정  (0) 2017.07.12
[R] 적합도 검정  (0) 2017.07.04
[R] 범주형 자료에서 독립성 검정  (0) 2017.07.04
[R] 표본 추출  (0) 2017.07.03
TAGS.

Comments