[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.