- 개요
상관분석은 두 변수의 관계를 [-1, 1] 사이의 값으로 나타냅니다. 분석시 데이터들의 스케일에 차이로 영향을 받기 때문에 이에 조정이 필요합니다.이 분석에는 다양한 방법이 있지만 대표적 모수 방법인 Pearson 상관분석에 대해 알아봅니다.
이 방법은 공분산은 두 변수의 표준편차로 나누어 [-1, 1]의 범위에서 대응되는 상관계수를 계산합니다.
두 변수 x, y의 공분산은 다음과 같습니다.
$$\text{cov(x, y)} = \frac{\sum^n_{i=1} (x_i -\bar{x})(y_i - \bar{y})}{n-1}$$
위 식에서 $\bar{x}$, $\bar{y}$는 변수 x, y의 평균입니다.
n은 각 변수의 변수 갯수입니다.
이 분석에 각 변수의 갯수는 동일해야 합니다.
이 결과를 바탕으로 pearson 상관계수는 다음과 같이 계산됩니다.
$$ \text{cor (x, y)} = \frac{\text{cov(x, y)}{\sigma_x |sigma_y}$$
위의 계산은 프로그램 R과 python을 사용하여 다음과 같이 계산됩니다.
- R
계산에 사용할 변수들은 다음과 같습니다.x<-c(-2.27390067, ..., 2.27390067)
y<-c(16340, ..., 18965)
> cor.test(x, y)
Pearson's product-moment correlation
data: x and y
t = 43.65, df = 58, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.9751144 0.9911187
sample estimates:
cor
0.9851183
이 분석결과는 매우 높은 상관계수를 보입니다.
이 분석은 t분포를 근거로 하고 있으며 자유도(df), p-value를 나타내고 있습니다.
또한 대립가설은 상관성이 0이 아니다. 즉, 두 변수는 관계가 있다는 것입니다.
그러므로 위의 결과는 매우 낮은 p-value를 보이므로 대립가설의 채택할 수 있습니다.
결론적으로 위 두 변수는 상관성이 있다고 할 수 있으며 상관계수 값을 보면 그 상관성이 매우 높음을 알 수 있습니다.
- python
파이썬의 자료형의 표현은 R과는 차이가 있습니다. 동일한 객체 x, y를 numpy array 형으로 적용하여였습니다.
>>> x=array([-2.27390067, ..., 2.27390067])
>>> y = array([16340, ..., 18965], dtype=int64)
scipy모듈의 함수 stats.probplot()를 사용하여 계산할 수 있습니다.
>>> from scipy.stats import norm
>>>stats.pearsonr(x[0][0], x[0][1])
(0.98511825464031455, 4.6495729909051628e-46)
결과의 해석 부분은 R의 경우와 같습니다.
귀무가설 : 두 객체의 상관성은 0이다
대립가설 : 두 객체의 상관성은 0이 아니다.
댓글
댓글 쓰기