지난 회에서는 IDL에서 선형회귀 작업을 LINFIT 함수를 사용하여 수행하는 방법을 살펴보았고, 그 선형회귀 결과에 대하여 카이제곱 분포를 기반으로 검정하는 방법도 알아보았습니다. 오늘은 카이제곱 분포 대신 F분포를 기반으로 검정하는 방법을 소개하고, 이를 위하여 선형회귀를 LINFIT 함수 대신 REGRESS 함수를 사용하여 수행하는 방법을 함께 소개하고자 합니다. 예제 데이터는 지난 회 게시물에서와 마찬가지로 X, Y 데이터를 그대로 사용하겠습니다. 그래서 이 데이터를 사용하여 표출 작업까지 동일한 방식으로 먼저 진행을 해보면 해당 코드는 다음과 같습니다.
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)
그리고 이 내용을 실행하여 표출된 그림은 다음과 같습니다. 일단 데이터 포인트들만 점으로 표출된 상태이며, 지난 회 게시물에서 봤던 그림과 역시 동일합니다.
그러면 오늘은 REGRESS 함수를 이용하여 선형 회귀식을 구해봅시다. 이 과정은 다음과 같습니다.
slope = REGRESS(x, y, CONST=const)
PRINT, 'Coefficients :', const, slope
이와 같이 REGRESS 함수에 x, y 데이터를 차례로 인수로 부여하면 됩니다. 그런데 잘 보면 사용법에 있어서 LINFIT 함수와는 약간의 차이가 있습니다. REGRESS 함수를 통하여 직접 돌려받는 결과값은 기울기 뿐이고, 상수의 값은 CONST 키워드를 통하여 돌려받아야 합니다. 어쨌든 출력된 내용을 확인해보면 다음과 같습니다.
Coefficients : 2.00244 0.386553
이 결과는 LINFIT 함수로 얻은 결과와 같습니다. 소수점 아래 6째 자리까지 가면 약간의 차이가 있긴 하지만 사실상 같다고 보면 됩니다. 따라서 선형 회귀식은 대략 Y = 2.00+0.39X와 같은 형태가 됩니다. 그리고 이 식을 만족하는 직선을 추가적으로 표출하기 위한 과정도 두가지를 생각해볼 수 있습니다. 첫번째 방법은 앞서 산출된 계수 값들을 활용하여 다음과 같이 직선상의 새로운 Y값들로 구성된 배열 yf를 계산하여 얻는 것입니다. 그런 다음 이 배열을 활용하여 직선 플롯을 중첩하여 표출하면 됩니다.
yf = const+slope*x
그리고 두번째 방법은 YFIT 키워드를 활용하는 방법입니다. LINFIT 함수의 경우와 마찬가지로 REGRESS 함수에서도 YFIT 키워드가 지원되며 역할도 같습니다. 사용법도 다음과 같이 거의 유사합니다.
slope = REGRESS(x, y, CONST=const, YFIT=yf)
어떤 방식으로 구하든간에 중첩하여 표출해보면 그 모습은 지난 회에서 봤던 그림과 똑같습니다.
p_yf = PLOT(xf, yf, /OVERPLOT)
그러면 이제는 REGRESS 함수를 사용하여 얻은 결과에 대한 검정 방법으로 넘어가 봅니다. 사실 REGRESS 함수에서도 카이제곱 분포 기반의 검정을 위한 키워드들이 지원됩니다. 지난 회 게시물에서 언급했던 CHISQ 및 MEASURE_ERRORS 키워드들이 REGRESS 함수에서도 지원되며 그 역할도 같습니다. 다만 LINFIT 함수에서 지원되는 PROB 키워드는 REGRESS 함수에서는 지원되지 않습니다. 이 PROB 키워드를 통해서 얻는 값은 회귀직선과 실제 데이터 사이의 유사성에 대한 확률입니다. 만약에 LINFIT 함수를 사용하지 않고 REGRESS 함수만을 사용했을 경우를 가정해보면, 이런 경우에는 CHISQ 키워드를 통하여 얻은 Chi-Square Statistic 값만을 이용하여 유사성 확률을 계산해야 합니다. 그 과정은 다음과 같습니다.
errs = MAKE_ARRAY(n, VALUE=0.5)
slope = REGRESS(x, y, CONST=const, CHISQ=chisq, MEASURE_ERRORS=errs, YFIT=yf)
prob = 1-CHISQR_PDF(chisq, n-2)
PRINT, 'CHISQR and PROB :', chisq, prob
여기서 MEASURE_ERRORS 키워드에 부여될 배열 err은 지난 회에서와 같이 일괄적으로 0.5를 갖는 것을 사용했습니다. 그리고 CHISQ 키워드를 통하여 얻은 값을 담은 변수 chisq를 CHISQR_PDF 함수에 투입하였는데, 이러한 방식에 대해서는 지난 회 게시물에서도 이미 설명이 충분히 되었기 때문에 이 정도로만 언급하겠습니다. 출력되는 결과값들은 다음과 같은데, 지난 회 게시물에서 얻었던 값들과 동일합니다.
CHISQR and PROB : 2.95042 0.937431
그래서 REGRESS 함수를 이용하여 선형회귀를 하고 그 결과에 대한 카이제곱 분포 기반의 검정을 하는 방법을 이와 같이 살펴보았습니다. 그런데 검정을 하는 방법은 카이제곱 분포 기반의 방법 말고도 또 있는데, 바로 F분포 기반의 검정 방법입니다. 사실 이 방법에 관해서 통계학적인 더 깊은 얘기를 드리지는 못할 것 같습니다. 다만 REGRESS 함수의 FTEST 키워드를 사용하여 검정 값인 F-value를 받아올 수 있다는 정도만 알아도 충분할 것 같습니다. 검정값 F-value를 얻기 위해서는 다음과 같이 REGRESS 함수에서 FTEST 키워드를 함께 사용하면 됩니다.
slope = REGRESS(x, y, CONST=const, FTEST=ftst, CHISQ=chisq, $
MEASURE_ERRORS=errs, YFIT=yf)
PRINT, 'FTEST :', ftst
이렇게 하여 출력된 내용은 다음과 같습니다.
FTEST : 66.2838
즉 F-value 값이 약 66.28로 계산되었습니다. 이 값을 사용하여 판단을 하면 됩니다. 판단하는 방식은 이 F-value 값을 F 기준값과 비교하는 것인데요. 비교를 위한 F 기준값은 다음과 같이 계산합니다.
alpha = 0.05
f = F_CVF(alpha, 1, n-2)
PRINT, 'F :', f
여기서 F_CVF 함수는 F 분포를 기반으로 컷오프 값이 특정 값보다 클 확률을 알고 있을 때 그 컷오프 특정 값을 산출하는 역할을 합니다. 즉F_CVF 함수의 첫번째 인수인 확률값을 주면 산출되는 값이 컷오프 특정 값이 됩니다. 그리고 두번째, 세번째 인수는 F 분포함수의 공식에 들어가게 되는 분모, 분자의 값인데, 여기서는 위와 같이 부여하면 됩니다. 여기서는 첫번째 인수로 0.05라는 값을 부여한 셈인데, 이것은 판단에 있어서 유의수준(Significance Level)을 5%로 가정했다는 의미입니다. 이 유의수준에 관해서는 지지난회(첫번째) 게시물에서 언급한 바 있으므로 그 내용을 참조하시면 됩니다. 산출된 변수 f의 값은 다음과 같이 약 5.32로 출력됩니다. 이 값이 F 기준값이 됩니다.
F : 5.31766
이제 F-value인 변수 ftst의 값 66.28과 F 기준값인 변수 f의 값 5.32를 서로 비교해보면 ftst의 값이 훨씬 큽니다. 이와 같이 F-value 값이 F 기준값보다 큰 경우에는 실제 데이터에 대하여 얻은 선형회귀 결과가 매우 유의미하다, 즉 선형회귀로 얻은 직선의 식이 데이터와 매우 유사하다 즉 직선의 식이 데이터를 잘 대변하고 있다고 결론을 내리면 됩니다. 그런데 만약 F-value 값이 F 기준값보다 작거나 엇비슷한 경우에는 선형회귀로 얻은 결과가 무의미하다 즉 직선의 식과 데이터 사이의 유사성이 있다고 보기 힘들다는 결론을 내리면 됩니다.
그래서 이 데이터에 대한 선형회귀 결과에 대하여 카이제곱 분포 기반의 검정법 및 F 분포 기반의 검정법을 적용하여 얻은 결론은 거의 동일한 것을 볼 수 있습니다. 물론 두가지 방법이 항상 동일한 결과를 준다고 100% 보장하지는 못합니다. 이미 봤듯이 카이제곱 분포 방법을 이용할 경우에는 MEASURE_ERRORS 키워드에 부여하는 에러의 표준 측정 오차(Standard Measurement Error)를 얼마로 가정하느냐에 따라 Chi-Square Statistic의 값이 민감하게 변화할 수 있기 때문에 최종 결론도 이 값에 따라 현저히 달라질 수 있습니다. 더구나 에러의 표준 측정 오차라는 값이 실제로 얼마인지 알기 힘들 경우가 더 많다는 문제도 있습니다. 반면 F 분포 기반의 검정법은 에러의 표준 측정 오차와 같은 값이 사용되지 않기 때문에, 그 값에 대한 자의적 판단에 의한 영향을 받지 않는다는 장점이 있습니다. 따라서 실전에서는 카이제곱 분포 기반의 검정보다는 F 분포 기반의 검정법이 좀 더 많이 사용된다고 합니다. 어쨌든 둘 중 적절한 방법을 적용하면 선형회귀 결과를 얻기만 하는 것에서 그치지 않고 결과에 대한 검정까지도 할 수 있다는 것을 염두에 둘 필요가 있습니다.
지금까지 3회에 걸쳐서 선형회귀 및 검정에 관한 내용을 소개하였습니다. 어쩌면 한 회 정도의 분량이 더 있을 것 같은데, 당장 이어서 올리기는 힘들 것 같고, 나중에 정리가 되면 그 때 올리기로 하겠습니다.
'IDL > Math' 카테고리의 다른 글
행렬곱의 속도 향상에 관하여 (IDL 8.7.3) (0) | 2020.02.26 |
---|---|
중복되지 않는 난수들의 생성법 (업데이트) (0) | 2020.01.02 |
상관관계 및 선형회귀 결과 산출 및 검정 [2] (0) | 2019.04.22 |
상관관계 및 선형회귀 결과 산출 및 검정 [1] (0) | 2019.04.18 |
IDL로 Monte Carlo 방법을 테스트해봅시다 (0) | 2019.03.18 |