2016년 3월 31일 목요일

아빠가 들려 주는 [통계 SPSS] 로지스틱 회귀분석 후 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 계산하는 엑셀 쉬트, 회귀식을 이용한 발생 확률 구하는 엑셀 쉬트 만들기, 노모그램은 어떤 원리로 만들어지나.. 뭐 그 뒤에 별별 희안한 이야기들도 써 두었네요.
혹시 누군가 필요할지도 모를 것같아서

댓글 9개:

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

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

      삭제
  2. 안녕하세요!
    로지스틱 회귀분석시에 두가지 변수가 상관관계가 있어도 괜찮나요?? 예를 들어 A라는 질병에 혈압과 나이 두가지 변수를 넣고 로지스틱 회귀분석을 돌리는데 혈압과 나이의 상관관계가 있어도 문제가 안되지는 궁금합니다! 좋은글 감사합니다~!

    답글삭제
    답글
    1. 이건 기본적으로 중요한 문제..
      즉 다중공선성의 문제이기 때문에,
      "다중공선성"이라고 검색해 보시면 다양한 글이 있을 겁니다.

      삭제
  3. 안녕하세요! 좋은 글 감사합니다.
    다름이 아니라 비슷한 방법으로 cox regression한 두 모델을 ROC curve를 그려서 비교하려고 하는데, cox regression에는 probabilities 등을 체크하는 부분이 없어서 혹시 SPSS에서 cox regression으로 그릴 수 여쭤봅니다!

    답글삭제
    답글
    1. cox regression 에서는 시간대마다 ROC가 달라지게 됩니다. 그러므로 어떤 시간을 지정해 주고 그 시간대의 ROC를 그려주는 것을 제가 언젠가 만들어서 보여드린 적이 있는데.. 저도 검색해 봐야 해서..

      삭제
  4. 안녕하세요 좋은 글로 많은 도움을 받고 있습니다 . 다름이 아니고 로지스틱회귀분석 backward step으로 변수를 줄여서 회귀식을 만든 후에 변수를 더줄이고자 할때 줄인 변수를 넣고 회귀분석을 돌리면 회귀식이 변하는것 같아서요..이런경우 변수를 빼가면서 auc구할때마다 회귀식이 변하는게 정상적인 과정인지요 ?아니면 회귀식을 고정해놓고 변수만 빼는게 맞는데 제가 spss에 미숙해서 회귀식을 고정해놓고 변수를 빼는것을 못하고 있는건지 궁금합니다

    답글삭제
    답글
    1. 네, 그렇습니다. 변수가 추가될 때마다 일반적으로는 조금이나마, ROC가 더 좋아지죠.
      그 차이가 미미한 변수는 별로 중요하지 않은, 기여가 별로 없는 변수라고 할 수 있겠죠.

      삭제
  5. 변수를 뺄 때마다 당연히 회귀식도 달라지고 AUC도 달라집니다. AUC가 거의 비슷하고 ROC가 거의 차이가 없다면, 그 변수는 별로 중요한 변수가 아닐 가능성이 많겠지요.
    그런 식으로 변수를 하나씩 빼가면서 최적의 것을 만들 수는 있겠지만,
    그것은 과연 주어진 데이터에만 최적일 뿐 새로운 데이터에는 최적이 아닐 수도 있습니다.
    그래서 변수를 빼는 과정에 대해서도 고려할 것이 많습니다.

    답글삭제