서로 다른 두 종류의 데이터 X, Y가 있을 때 둘 사이의 연관성을 정량적으로 보기 위하여 상관관계 및 선형회귀 등의 기법을 많이 사용하게 됩니다. 그 개념에 대해서는 많이들 아시겠지만, 상관관계를 본다는 것은 두 데이터 사이의 연관성을 상관계수라는 값을 통하여 정량적으로 판단하는 작업이고, 선형회귀는 두 데이터 사이의 직선 관계식을 근사하여 얻는 작업입니다. 그런데 이렇게 산출된 상관계수나 선형회귀식이 과연 얼마나 믿을만한 결과인가에 대해서도 정량적인 진단이 가능한데, 이러한 작업을 검정(Test)라고 합니다. 그래서 필요할 경우에는 결과에 대한 검정까지 해야 할 수도 있습니다.


어쨌든 이러한 작업은 데이터 처리 및 분석에 있어서 매우 자주 하는 일이기 때문에 당연히 IDL에서도 이러한 작업을 할 수 있는 내장함수들이 지원됩니다. 아마 전에도 제가 이 블로그에서 언급을 했던 것 같은데 다시 한번 정리해보면 상관계수 산출은 CORRELATE 함수, 선형회귀식 산출은 LINFIT 또는 REGRESS 함수를 사용하면 됩니다. 다만 검정까지 해야 할 경우에는 이들 함수들이 관련 기능을 지원하는 부분도 있고 그렇지 못한 부분도 있습니다. 그래서 검정에 대한 방법까지 포함해서 이번에 상관관계 및 선형회귀에 관한 내용을 한번 종합적으로 다뤄보고자 합니다. 아마도 약 2~3회에 걸쳐서 나눠서 소개하게 될 것 같습니다.


그러면 먼저 상관관계의 산출 및 검정에 관한 내용부터 살펴보기로 하겠습니다. 이를 위하여 예제용 x, y 데이터를 다음과 같이 먼저 만들어 봅시다.  보시다시피 x, y 각각 총 10개의 값들로 구성되어 있습니다.


x = [1, 1, 2, 3, 4, 4, 5, 6, 6, 7]

y = [2.1, 2.5, 3.1, 3.0, 3.8, 3.2, 4.3, 3.9, 4.4, 4.8]


우선 데이터 포인트들의 분포를 보기 위하여 다음과 같이 플롯으로 표출을 먼저 해봅시다. 표출된 모습은 다음 그림과 같습니다.


win = WINDOW(DIMENSIONS=[600, 500], /NO_TOOLBAR)

p_y = PLOT(x, y, SYMBOL='circle', /SYM_FILLED, LINESTYLE=6, $

  XRANGE=[0, 8], YRANGE=[0, 6], $

  XTITLE='X data', YTITLE='Y data', FONT_SIZE=11, /CURRENT)



이 그림을 눈으로 봐도 서로 상관관계가 꽤 높을 것으로 보이긴 합니다. 그러면 이제 x, y 데이터 사이의 상관관계를 정량적으로 나타내는 상관계수를 구해 봅시다. 다음과 같이 CORRELATE 함수를 사용하면 간단하게 산출할 수 있습니다.


r = CORRELATE(x, y)

PRINT, 'R (CORRELATE) :', r


출력된 값을 보면 약 0.945 정도로 나옵니다. 사실 상관계수도 몇가지 종류가 있는데, 대표적으로 많이 사용하는 것은 Pearson 상관계수입니다. 원래 명칭을 좀 길게 쓰면 "Linear Pearson Correlation Coefficient"입니다. 즉 선형의 상관관계를 나타내는 대표적인 값입니다. 여기서 사용된 CORRELATE 함수에서 산출되는 값도 바로 Pearson 상관계수입니다. 원래 상관계수를 계산할 때에는 Covariance라는 값을 계산해야 하는데, CORRELATE 함수를 사용할 때에도 /COVARIANCE 키워드를 사용하면 상관계수 대신 Covariance 값을 얻을 수도 있습니다. 상관계수는 아시다시피 -1부터 +1 사이의 범위를 갖습니다. 그리고 절대값이 1에 근접할수록 상관관계가 높고, 절대값이 낮을수록 즉0에 가까울수록 상관관계가 낮은 것으로 판단합니다.


그런데 이렇게 상관계수를 산출하는 선에서 작업을 끝내지않고 한 단계 더 들어가본다면, 지금 우리가 얻은 상관계수가 과연 얼마나 믿을만한 값인가 즉 선형 상관관계의 신뢰성에 대한 확인이 필요할 수가 있습니다. 즉 선형 상관계수의 유의미성에 대한 검정 과정을 수행하여, 상관계수로 대변되는 선형 상관관계가 정량적으로 얼마나 신뢰할만한 수준인가를 보는 것입니다. 이러한 작업을 하기 위해서는 상관계수에 대한 T-검정(Student's T test)이라는 기법을 사용하게 됩니다. 사실 제가 통계학에 대하여 그리 깊은 소양을 갖고 있지는 않기 때문에 이론적인 부분에 대해서 너무 깊게 들어가지는 못할 것 같습니다. 어쨌든 이러한 T-검정 과정을 수행하려면 T-statistic이라는 값을 산출해야 합니다. 통계학에서 나오는 이론적인 공식을 그대로 사용한다면 이 과정은 다음과 같이 진행하면 됩니다.


n = N_ELEMENTS(x)

t0 = r/SQRT((1-r^2)/(n-2))

PRINT, 'T-statistic :', t0


여기서는 앞서 계산된 상관계수 r과 데이터 갯수인 n이 필요합니다. 그리고 이렇게 계산된 값을 출력해보면 약 8.14 정도임을 알 수 있습니다. 그런데 검정을 위해서는 기준값도 계산해야 합니다. 왜냐하면 지금 계산한 t0의 값이 특정 기준값보다 크냐 작냐에 따라 상관관계에 대한 신뢰성을 판별할 수 있기 때문입니다. 이 기준값은 다음과 같이 계산합니다.


alpha = 0.05

t = T_CVF(alpha/2., n-2)

PRINT, 'T :', t


여기서는 T_CVF라고 하는 내장함수가 사용이 되었습니다. 이 함수는 문법적으로는 T_CVF(p, DoF)와 같은 형태로 사용되는데, 그 의미는 자유도(Degree of Freedom)가 DoF인 Student T 분포상에서 임의의 값이 특정한 컷오프 값보다 더 클 확률이 p가 될 때 그 컷오프 값이 얼마인지를 산출하는 역할을 합니다. 즉 확률과 DoF값을 인수로 부여하여 T 분포상의 컷오프 값을 산출하는 역할을 합니다. 반대로 컷오프 및 DoF 값을 인수로 부여하여 확률값을 산출해야 할 경우에는 T_PDF 함수를 사용하면 된다는 것도 참고로 언급합니다. 그리고 T_CVF 함수에서 확률에 해당되는 인수로서 alpha라는 변수의 값이 사용이 되었는데, 이 alpha의 값이 0.05로 부여되어 있습니다. 이러한 값을 흔히 유의수준(Signficance Level)이라고도 합니다. 여기서 0.05라는 값은 5%를 의미합니다.


그러면 이렇게 산출된 t0와 t를 사용하여 상관관계의 유의미성을 판단하는 과정으로 가봅시다. 이를 위해서는 t0의 절대값이 t보다 크냐 작냐 여부를 보면 됩니다. 앞서 산출된 값을 보면 t0는 8.14이고 t는 2.31 정도입니다. 이와 같이 t0의 절대값이 t보다 큰 경우에는 "선형 상관관계가 매우 유의미하다"라고 판정을 내리면 됩니다. 즉 산출된 상관계수로 대변되는 선형 상관관계에 대한 신뢰도가 높기 때문에, 선형적인 상관관계가 있다고 충분히 믿을만하다고 결론을 내려도 된다는 얘기입니다. 만약 t0의 절대값이 t보다 작을 경우에는 선형 상관관계에 대한 신뢰도가 낮다는 얘기가 될 것입니다.


이와 같은 검정 과정은 위와 같이 T-statistic과 기준 T값을 계산하는 방식으로 처리할 수 있는데,이 방법 말고도 확률값으로 검정을 하는 것도 가능합니다. 이 경우에는 기준값은 alpha가 됩니다. 즉 지금과 같이 alpha가 0.05라면 유의수준 5%라는 값이 기준이 되는 것입니다. 그러면 실제 판단을 위한 확률값도 계산해야 하는데, 이 과정은 다음과 같습니다.


p = 2*(1-T_PDF(t0, n-2))

PRINT, 'P :', p


앞서 언급한 T_PDF 함수가 여기서 사용된 것을 볼 수 있습니다. 그리고 컷오프 값으로서 t0가 사용되었습니다. 이 과정을 거쳐 산출된 p의 값은 약 3.85E-5으로서 거의 0에 가까운 값입니다. 이제 p와 alpha 값을 서로 비교하면 됩니다. 만약 p가 alpha보다 작다면, 앞서 t0가 t보다 클 경우와 마찬가지로 "선형 상관관계가 매우 유의미하다"라고 판정을 내리면 됩니다. 물론 반대의 경우라면 선형 상관관계에 대한 신뢰도가 낮다고 판정을 내리면 되겠지요.


따라서 IF문을 사용해서 판정 결과를 출력하게 해본다고 한다면 대략 다음과 같이 해보면 될 것 같습니다. 먼저 t0와 t를 사용할 경우입니다.


IF ABS(t0) GT t THEN PRINT, 'linear correlation is significant' ELSE $

  PRINT, 'linear correlation is not significant'


그리고 p와 alpha를 사용할 경우입니다.


IF p LT alpha THEN PRINT, 'linear correlation is significant' ELSE $

  PRINT, 'linear correlation is not significant'


어차피 둘 중 하나의 방법만 사용하면 됩니다. 그리고 당연히 두 방법의 판정 결과는 동일합니다.


그래서 두 데이터 사이의 선형 상관관계를 산출하고 그 결과에 대한 신뢰성을 정량적으로 검정하는 작업은 위와 같은 과정을 통하여 처리하면 될 것이라 생각합니다. 이 정도면 상관관계에 관한 내용은 정리가 된 것 같습니다. 다음 회차에서는 선형회귀 및 검정에 관한 내용을 살펴보도록 하겠습니다.