레이블이 SPSS인 게시물을 표시합니다. 모든 게시물 표시
레이블이 SPSS인 게시물을 표시합니다. 모든 게시물 표시

2016년 6월 16일 목요일

아빠가 들려 주는 [통계] SPSS에서 카이제곱 검정 , Fisher exact test

 
가장 쉬울 것같은 카이제곱 검정이 SPSS에서는 조금 복잡합니다.
아니, table로 정리되어 있을 때 복잡하다는 거죠.
 
우리가 만들고 싶은 표는 (1)에서 보이는 것과 같은 3X3 table 인데, SPSS에서는 이렇게 표 형식으로 입력이 안되기 때문에 (2)의 형태로 입력해야 합니다.
언젠가는 (1) 형태에서 바로 작업이 가능하길 희망해 봅니다.
변수1,변수2열에 0,1,2를 그림과 같은 규칙으로 먼저 넣고,
3열에는 순자를 넣는데, (1)에서의 숫자를 차례로 넣습니다.
그림 (1)(2)의 숫자 배열이 화살표 방향이라는 것을 주목합니다.
익숙해 지면 (1)은 그릴 필요가 없습니다.
 
‘data’에서 ‘weight cases’를 클릭합니다.
3열을 이용해서 가중치를 줍니다.
 
Analysiscrosstabs 클릭합니다.
1열과 2열을 차례로 rowcolumn에 넣습니다.
이제 exactstatistics 를 클릭합니다.


 
Exact 에서는 Exact를 선택합니다. 시간은 적당히 넣습니다.
2X2 table에서는 Exact를 선택하지 않아도 Exact를 계산해 주지만,
2X3 이상에서는 이렇게 선택해 주어야 계산해 줍니다.
statistics 창에서는 Chi-square를 선택합니다.
이정도 옵션이 최소의 옵션입니다.
그다음 진행하면 답이 나옵니다.


 
요렇게 결과가 나왔습니다. 논문에서는 0.47이라고 했으므로,
Fisher exact test를 사용한 것임을 알 수 있습니다.
굳이 이렇게 자세히 쓴 것은
보통 SPSS 설명한 통계책에서 2X3 이상의 Fisher exact test이 불가능하다고 쓴 책도 보았고,
사용법을 설명하지 않은 책도 보았기 때문입니다.


 
또는(1)처럼 글자를 넣는 방법도 있습니다.
나머지는 동일합니다.
별로 권하지는 않습니다.


 
글자를 넣기 위해서는 변수탭(2)에서 1열과 2열을 string(3)으로 바꾸고 길이도 조금 늘여 줍니다.
그러면 입력이 됩니다.
 
이번에는 차트도 한번 만들어 보죠(4)
 
변수의 배치가 알파벳 순서로 바뀌었고(5)
Linear-by-Linear Association  가 없어졌습니다. 카이제곱 trend test라 명목변수에서는 적합하지 않기 때문입니다.

이렇게 차트가 만들어 지고 더블클릭하면 차트 에디터가 나와서 편집이 가능하지만, 이것보다는 엑셀에서
편집하는 것이 쉽고 더 예쁘죠.

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