2016년 3월 30일 수요일

아빠가 들려 주는 [통계] 로지스틱 회귀분석 후 ROC 커브 그리기

 
이틀 연속으로 이것을 질문하신 분이 있어서.. 답변을 드려야 겠네요.
어쩌면 최근에 뭔가 학회에서 이걸 강조한 것은 아닐까.. 하는 생각도 드네요.
이상하게도 새롭지 않은 것이지만, 논문도 약간 유행같은 것이 있다는 생각도 듭니다.
원래는 Cox regression도 같이 하려 하였으나, logistic regression만으로도 너무 길어서 그건 다음에 하겠습니다.
이 블로그 글을 잘 알면 사실 Cox regression은 거의 거저 먹기입니다.
 
자료는 이렇습니다. dBSTAT 예제에 나오는 것이죠.
CHD는 심장혈관질환이라고 치고, 나이 성별 등등이 요인일 것이라고 가정해 봅시다.
우리는 어떤 요인이 유의한지 등을 알아보고자 합니다.


 
SPSS에서는 이렇게 하고요.  dBSTAT에서는 이렇게 합니다.


 
Web-R에서는 여기입니다.
2.0으로 업그레이드 되면서, 영어/한국어 선택이 가능해 졌고, 엑셀파일 뿐아니라, dbf파일, sas, SPSS, Stata 파일도 읽을 수 있게 되었고,
메뉴도 대폭 늘어 나고 새로이 분류되었습니다.
그런데, 약간 기능상의 문제로 뒤쪽에는 1.0 버전으로 하였습니다.


 
SPSS에서는 save(저장) 메뉴에서, 표시한 두 개를 활성화 시켜 줍니다. 평소에 잘 하지 않는 거죠.
ROC나 예측 모형 만들 때 필요한 것입니다.


 
Categorical에서 두 명목 변수의 기준을 first로 잡아 줍니다.
왜 그렇게 해야하는지, 어떤 것이 편한지는 여러 번 강조했으니까 생략하겠습니다.


 
Option 에서는 항상 하는 것이 (1) Ci for exp(B) !
이건 제발 option에서 빼 주세요. IBM 관계자 여러분..
이번에 하게 될 것이 classification plots(2)
다른 옵션들은 이번에는 주제가 아니라서 생략합니다.


 
결과가 나왔습니다. 먼저 data에 보면 이렇게 두 개의 새로운 필드가 생겼습니다. (빨간 점선)
예측 값과 그것에 따른 분류이죠.
진짜 값(=결과값)은 왼쪽의 CHD 필드입니다.


 
분류표라는 것이 나왔습니다. 왼쪽은 SPSS, 오른쪽은 dBSTAT입니다.
이 표의 의미하는 바가 무엇일까요?
0.5 cut value로 했다는 힌트가 나와 있습니다.


 
Data> sort cases로 가봅시다. 그리고 PRE_1sort 해 보죠.


 
PRE_1을 기준으로 0.5 이하인 것을 0으로, 그 이상인 것을 1로 분류한 것입니다.
쉽게 말해서 반올림 비슷한 겁니다.
이 값과 원래값인 CHD를 가지고 분류해 본것이죠.


 
이 표도 의미도 평소 잘 못보는 것인데, 우리가 선택해서 나온 겁니다. 축에 우리가 구한 PRE_1값으로 배열되어 있습니다.
Group0.5 기준으로 0 1이고요.
실제값은 CHD값인데, 왼쪽에 0 많고, 오른쪽에 1이 많지만, 간간히 반대가 섞여 있습니다.
잘못 예측한 것이죠.


 
이것은 늘상 보게 되는 결과표이고요, 회귀계수들과 p값들, 우리가 선택해서 얻어낸 CI값도 오른쪽에 보입니다.
아래쪽의 것이 dBSTAT입니다. 결과는 같죠. .dBSTATPRE_1처럼 예측값을 만들어 주지는 않는데, 아마 업그레이드 되면서 될 것같습니다.


 
질문에서 나왔던 ROC 커브를 만들어 볼까요.
각각의 값을 이렇게 넣습니다.
몇 가지 옵션이 있는데 생략하겠습니다.


 
왼쪽의 길게 만들어진 값으로 오른쪽의 ROC 커브를 만드는 것이죠.


 
Sex를 뺐습니다. 모형에서 어떤 변수를 뺄지 말지에 대해서는 여러 견해가 있을 수 있는데, 일단 여기에서는 P값이 상당히 높아서 뺐다고 합시다.


 
이제 PRE_1PRE_2 두 개가 생겼군요. 두 숫자가 다릅니다.


 
Label은 필드명과 달리 표현이 가능하고, 띄어쓰기, 한글 등이 가능합니다.
PRE_1PRE_2 둘다 모두 ‘Predicted probability’로 되어 있기 때문에 둘의 이름을 달리 해 봅시다. 일부러 한글도 한번 넣어 보았습니다. 실험을 위해서……
Label을 잘 쓰면 그림도 보기 좋고 해석하기도 좋습니다.


 
이제는 ROC 그릴 때 두 개의 모형을 모두 넣고 그립니다.


 
역시 한글 이름도 잘 나오는군요. 파란색이 모형1입니다.
AUC(Area Under the Curve) p값은 두 모형을 비교한 p값이 아니라서, 우리에게는 거의 도움이 안됩니다.


 
SPSS의 자료를 dBSTAT로 불렀습니다. 특히 dBSTAT는 명목변수와 연속변수를 엄격하게 구분하기 때문에(이점은 장점이면서 단점입니다. SPSS에 익숙한 사람은 단점이고요. 처음부터 dBSTAT쓰는 사람은 상당히 편리하죠) 명목변수를 C로 바꾸어 줍니다.
 
 
이렇게 PRE_12를 각각 메뉴에 넣습니다.


 
SPSS 것과 같이 동일한 ROC 커브가 dBSTAT에 의해 그려지는데, 엑셀 파일로 그려 지기 때문에 색, 굵기 등등을 엑셀메뉴로 고칠 수 있습니다. 선의 색은 아래에 있는 표의 색과 같이 그려 집니다.


 
SPSS에 비해, 두 집단을 비교하는 통계값이 나오는 것이 사용자에게는 아주 바람직합니다.



 
Web-R에서도
빨간 상자의 것에 각각의 필드를 지정하면 됩니다.
빨간 점선 상자는 아예 ROC 자체에서 logistic regression까지 해서 ROC를 만들어 주는 것입니다.
편리할 수도 있고, 이해하지 못하는 사람은 더 복잡할 수도 있습니다.
일단 위의 것만 해 봅니다.
역시 ROC 그리기와 비교가 가능합니다.


 
이렇게 결과가 보여지고, 결과값이 표에 그려집니다.
ROC를 비교하기 위해서, DeLong’s의 방법을 사용했다고 되어 있습니다.
자 이렇게 하나의 자료를 이용해서, 두 가지 모형을 만들 수 있고, 그것들이 우수한지
어떤지를 ROC 커브를 이용해서 분석하였습니다.


 
이제 Web-R에 있는 약간 독특한 기능인 logistic regression을 하면서 그냥 알아서 ROC 그려주는 기능해 보겠습니다.
이렇게 logistic regression과 같은 방식으로 변수를 넣어 줍니다.


 
그러면 알아서 처음에 전부 다 넣은 모형(4개의 변수 모두)을 검은 색으로 표현하고, 나중에 적절히 유효한 변수만 남긴 모형(이 경우는 두 개 변수만 포함)을 빨간 색으로 표현하였습니다.
이 방법이 편리할 수는 있는데,
회귀 모형을 선택하는 것이 여러 옵션이 포함되기 때문에 기계적으로 선택할 수 있는 것은 아니므로 아주 권장된다고 할 수는 없습니다.
아주 잘 해석할 수 있다면 이런 작업도 고려해 볼 수 있겠지요. 어쨌든 web-R에 있는 독특한 기능이므로 같이 알아 보았습니다.


 
제가 2014년도에 쓴 작은 책인 진단도구 예측도구 만들기의 예제 중에 하나가
바로 동일한 방법으로 즉 logistic regression을 이용해서 현재의 자료를 이용해서 몇 년후 당뇨병이 생길지 말지를 예측하는 모델이었습니다.


 
하나의 자료를 이용해서 3개의 모형을 이용했으며, 아래쪽에 AROC라는 것이 ROC 커브의 면적으로 비교해 보는 거죠.


 
이것을 C-statistics라고 다른 말로 표현할 수 있습니다.
요기에 이런 설명도 해 두었습니다. .


NRI에 관한 이야기도 나오고요. NRI 계산하는 엑셀 쉬트, 회귀식을 이용한 발생 확률 구하는 엑셀 쉬트 만들기, 노모그램은 어떤 원리로 만들어지나.. 뭐 그 뒤에 별별 희안한 이야기들도 써 두었네요.
혹시 누군가 필요할지도 모를 것같아서

댓글 2개:

  1. 질문이 있습니다. 위에 안내해주신 글을 보면 첫번재 로지스틱 회귀분석 후, PRE_1, PGR_1 변수가 새로 생성되어 데이터에 입력이 되었더라구요. 하지만 저는 동일하게 진행했음에도 불구하고 데이터가 별도 생성되지 않았습니다 ㅠ 왜그럴까요? 그리고 좋은글 감사드립니다 ^^

    답글삭제
    답글
    1. SPSS에서 'SAVE(저장)'옵션을 사용해야 합니다.
      web-R과 dBSTAT는 그 옵션이 없는데,
      아마 둘다 곧 될 것같습니다. web-R에서는 아예 ROC 안에서 로지스틱을 할 수 있도록 되어 있습니다만, SAVE 기능도 있으면 여러 모로 좋습니다. 활용하기가..

      삭제