로지스틱 회귀를 실행할 때 전체 모델 적합 p 값을 얻습니다. 그럼에도 불구하고 나는 많은 논문에서 그들이 AUC의 p 값에 대해 보고하는 것을 읽었고, 내 이해에서 이것은 곡선 아래 면적이 실제로 0.50과 같다는 귀무 가설을 테스트하는 p-값입니다. 다른 소프트웨어는 기본적으로 이것을 제공하는 것 같습니다. 이 문제에 대한 귀하의 제안에 감사드립니다.
안녕 @eliyahu100 ,
(TLDR: AUCroc에 대한 경험적 p-값을 얻기 위해 다양한 방식으로 부트스트래핑 및 무작위 테스트를 사용할 수 있으며, 이를 통해 AUCroc에 대한 p-값이 전체 모델 테스트가 되는 이유를 확인할 수 있습니다.)
내 첫인상은 AUCroc 테스트에서 얻을 수 있는 모든 p-값이 개념적으로 분류기의 전체 모델 테스트(로지스틱 회귀이든 아니든)와 동일하다는 것입니다. 즉, AUCroc이 귀무 가설(무작위 분류) 하에서 예상되는 것과 다르다는 증거가 있는지 여부를 테스트하는 것은 우연히 단독으로 예상되는 것보다 모델이 더 많은 오류를 설명(즉, 분류)하는지 여부와 같습니다. 즉, AUCroc p-값을 계산하는 방법을 설명하는 다양한 방법을 찾을 수 있었습니다(예: 하지안-틸라키, 2013 ) 그리고 JMP는 기본적으로 이러한 계산을 수행하지 않는다고 안전하게 말할 수 있습니다(물론 스크립팅을 통해 모든 것이 가능하지만). 그러나 이러한 공식을 살펴보면 이러한 가설 테스트의 성능과 가정이 궁금합니다. JMP Pro에 액세스할 수 있는 경우 AUCroc에 대한 p-값을 얻는 데 사용되는 대규모 표본/정규 근사 공식을 능가할 가능성이 있는 바로 지금 바로 수행할 수 있는 작업이 있습니다. 바로 부트스트래핑 및/또는 시뮬레이션/무작위화 테스트입니다. 방법은 다음과 같습니다.
1. 분류기 모델을 맞춥니다. 나는 Big Class를 사용할 것이고 키로 성별을 예측할 것입니다. 빨간색 삼각형에서 AUCroc을 공개합니다.
Open("$SAMPLE_DATA\Big Class.jmp");
Logistic(Y( :sex ),X( :height ), Positive Level( "M" ),
Logistic Plot( 0 ), ROC Curve( 1 ),
SendToReport(
Dispatch( {}, "Whole Model Test", OutlineBox, {Close( 1 )} ),
Dispatch( {}, "Parameter Estimates", OutlineBox, {Close( 1 )} )
));
2. 먼저 Bootstrapping을 사용해 봅시다. 보고된 AUCroc 값을 마우스 오른쪽 버튼으로 클릭한 다음 부트스트랩을 선택합니다. 최소 2500개의 부트스트랩 샘플을 사용하고 특히 상대 빈도가 낮은 범주가 있는 경우 분수 가중치를 선호합니다.
그러면 부트스트랩된 AUCroc 값 테이블이 반환됩니다. 테이블에서 교체로 샘플링하고 모델과 AUCroc을 다시 계산하여 각 반복에서 얻은 값을 저장합니다. 본질적으로 이제 주어진 분류기에 대한 AUCroc의 샘플링 분포가 있습니다. p-값을 얻는 것은 이제 계산의 문제입니다. 하지만 JMP가 그렇게 하도록 합시다.
3. 분석 > 분포, AUC를 Y로 놓고 "히스토그램만"을 선택한 다음 확인을 클릭합니다.

이제 AUCroc에 대한 부트스트랩 신뢰 한계가 있어 보고에 유용합니다. 또한 원래 획득한 AUCroc이 특정 값과 다른지 여부를 알고 싶다면 해당 null 값이 현재 신뢰 구간 내에 있는지 확인하기만 하면 됩니다. 선택한 신뢰 수준.
그러나 당신은 p-값을 요구했습니다. 2500개 샘플 중 AUCroc이 0.50 이하인 횟수를 말 그대로 셀 수 있지만 더 잘할 수 있습니다. 테이블에 BootID 열이 있기 때문에 JMP는 이 분포 보고서에 특별한 출력을 추가하고 있습니다. JMP는 테이블의 첫 번째 행(원래 샘플 추정치)과 함께 해당 열을 사용하는 방법을 알고 있습니다. 원하는 경우 이를 부트스트랩이 아닌 일종의 무작위화 테스트로 만들기 위해 주변을 변경할 수 있습니다(그리고 비교를 위해 나중에 적절한 무작위화 테스트를 수행할 것입니다). 두 가지 간단한 변경만 하면 됩니다. "BootID•" 열의 이름을 "SimID•"로 바꾸고 테이블의 원래 추정 값을 테스트하려는 값으로 변경합니다. AUC 열의 첫 번째 행을 0.50으로 설정합니다. 다음은 테이블 상단의 모습입니다.
이제 Analyze > Distribution을 시작하고 Y에 대해 AUC를 다시 입력하고 히스트로그램만 확인합니다. 우리는 다음과 같은 결과를 얻을 것입니다:
JMP는 부트스트랩 결과가 아닌 "시뮬레이션 결과"를 제공합니다. 이는 BootID 열이 변경되었기 때문입니다(SimID는 오른쪽 클릭 시뮬레이트가 제공하는 것임). 우리는 여기에서 약간의 수정 작업을 하고 있으므로 이것이 일반적으로 JMP가 시뮬레이션 결과를 보고하는 방식이 아니라는 것을 알고 있지만(다음에 정상적으로 작동하는 방식을 살펴보겠습니다), 이 경우 JMP는 귀무 가설 값을 배치한 위치에 선을 그었습니다. AUCroc(0.50)의 p-값 Y<=Y0에서 AUCroc이 0.50 이하인 무작위 샘플(원본 데이터에서)을 얻은 시간의 비율을 볼 수 있습니다. 이것은 귀하의 null로 0.50이 주어진 경험적 단측 p-값입니다. 그러나 이것에 대한 또 다른 접근 방식이 흥미롭고 중요한 것을 산출할 수 있으므로 여기서 멈추지 말자.
경험적 p-값이 원하는 결과인 경우 다른 방법(솔직히 더 좋은 방법)은 보고된 AUCroc에서 오른쪽 클릭 > 시뮬레이션을 사용하는 것입니다. Bootstrapping과 매우 유사하게 테이블에서 대체하여 리샘플링을 포함합니다(또는 순열 테스트를 수행하려는 경우 대체하지 않음). 이 작업을 마우스 오른쪽 버튼 클릭 > 시뮬레이션으로 수행하려면 대체 샘플링을 처리할 시뮬레이터에 대한 새 수식 열을 생성해야 합니다. 이를 수행하는 간단한 방법은 표에서 Y 열을 선택하고 머리글 행 > 새 수식 열 > 무작위 > 대체 샘플을 마우스 오른쪽 단추로 클릭하는 것입니다.
이렇게 하면 새 열(Resample[sex])이 만들어지고 이 열에 대한 공식이 다시 나타날 때마다 M 및 F 레이블이 관찰된 기본 속도(즉, 대체 샘플링)를 기반으로 테이블에 무작위로 할당됩니다.
다음으로 로지스틱 회귀로 돌아가 보고서에서 AUCroc을 마우스 오른쪽 버튼으로 클릭합니다. Bootstrap을 선택하는 대신 Simulate를 선택합니다. 보고서에 사용된 열을 대체할 수식 열을 선택하라는 메시지가 표시됩니다. 이 경우에는 성별을 선택하고 Resample[sex]를 선택합니다. 최소 2500개의 샘플을 수행하지만 이 예에서는 결과 통계에 대한 보다 정확한 추정치를 얻기 위해 10k를 수행하겠습니다.
JMP가 완료되면 부트스트랩과 매우 유사한 테이블이 제공되지만 현재 가지고 있는 것은 원래 데이터가 주어진 AUCroc의 샘플링 분포가 아니라 주어진 AUCroc의 샘플링 분포입니다. 아니요 성별과 키 사이의 관계이지만 성별의 기본 비율을 존중합니다. ~이다 귀무 가설).Analyze > Distribution을 선택하고 AUC를 Y에 배치합니다. 하지만 여기서 주목해야 할 중요한 사항이 있으므로 이번에는 Histograms에 대한 확인란만 선택하지 않겠습니다.

경험적 p-값이 다시 보고되지만 이번에는 AUCroc의 추정치가 0.50(실제로는 0.50이 아님, 그 이유를 다시 설명하겠습니다)을 향하고 있는 반면 부트스트랩에서는 관찰된 추정치 주위를 맴돌았습니다. 다시 말하지만, 이 경우 귀무 가설 하에서 AUCroc에 어떤 일이 발생하는지 시뮬레이션하고 있으므로 이것이 의미가 있을 것입니다. 여기서 경험적 p-값은 이 샘플링 분포에서 원래 추정치를 초과하는 추정치를 얼마나 자주 얻었는지 보고합니다(p-값에 대한 일반적인 정의입니다. 값). 여기서 주목해야 할 두 가지 사항:
1. 경험적 p-값은 0.0190으로 원래 전체 모형 테스트의 p-값과 동일합니다.
이 p-값이 근접한 것은 우연이 아니지만, 수치적으로 소수점 이하 4자리까지 동일하다는 것은 운이 좋은 일입니다. 사실 그것들은 서로 다르고 다른 방식으로 얻었지만 처음에 말했듯이 AUCroc 대 우연에 의해 예상되는 것의 테스트는 전체 모델 테스트와 개념적으로 동일합니다. .
2. 여기서 샘플링 분포의 평균은 0.50이 아닙니다. 즉, 여기서 기대값은 0.50이 아니므로 주어진 경험적 p-값은 0.50의 null이 아니라 이 경우 약 0.57의 null입니다. 이것은 이 데이터 세트에서 남성과 여성의 비율 때문입니다. 키와 관련하여 무작위로 추측하지만 여성보다 남성이 더 많다는 것을 알고 있으면 남성을 더 자주 추측하고 50% 이상의 분류 정확도를 달성할 수 있습니다. (모델 절편이 이를 설명합니다). 참고: 이 샘플링 분포는 결정적으로 비정상 그러나 큰 샘플 근사 공식(처음에 참조한 것과 같은)에서 얻은 p-값은 이 샘플링 분포가 정상이라고 믿게 할 것입니다. 단순히 평균과 표준 편차를 사용하고 그런 식으로 p-값 조회를 수행하면 p = 0.0190이 아니라 p = 0.0033이 됩니다. 이것이 큰 차이이며 무작위화 테스트가 훌륭한 이유는 분포 형태에 대한 가정이 없기 때문입니다. 
한 가지 더: 부트스트랩과 무작위 테스트의 차이점은 유사해 보이는 정보를 제공할 수 있지만 중요합니다. 부트스트랩에서 BootI를 변경했습니다. 디 열을 SimID로 변경하여 JMP를 해킹하여 경험적 p-값 보고서를 제공하고 테이블의 값을 변경하여 null AUCroc을 정확히 0.50으로 설정했습니다. 우리가 얻은 것은 경험적 p-값이지만 표본 추정치의 관점에서 살펴보았습니다(신뢰 구간이 표본 추정치의 관점에서 나온 방식). 오른쪽 클릭 시뮬레이트를 통한 무작위화 테스트의 경우 null의 관점을 취하고 jmp가 AUCroc에 대한 귀무 가설 하에서 샘플링 분포를 생성하도록 한 다음 원래 추정치를 비교했습니다. 둘 다 더 정확하지는 않지만 미묘하게 다른 것을 제공하므로 둘 다 이해하는 것이 좋습니다.
그러나 가장 큰 차이점은 각 접근 방식이 취하는 통계적 관점의 개념적 차이가 아니라 부트스트랩 변형에서 null로 0.50을 지정한다는 것입니다. 부트스트랩 테이블을 사용하고 귀무 가설 값을 무작위 테스트(0.57079)에서 얻은 귀무값 아래의 값으로 설정하면 어떻게 될까요?
글쎄요, 저와 같이 무작위성이 확실하다고 믿는 사람이라면 동일한 null에 대해 부트스트랩된 샘플에서 생성된 경험적 p-값이 실제 무작위화 테스트와 매우 유사할 것이라고 예상해야 합니다. 결국 개념적으로 같은 것을 다른 관점에서 추정하는 것이 아닐까요?
잘 보세요, p = 0.0192. 무작위성에 대한 믿음이 유지되었습니다.:)
이것이 도움이 되길 바랍니다.
@줄리안
실제로 내 질문은 p-값에 관한 것이었고 이것은 아직 해결되지 않았습니다. 도움이 될 것입니다.
@dale_lehman 쓴 :
문제는 AUC를 얻는 방법이 아니라 0.5와 크게 다른지 여부에 대한 ap 값을 결정하는 방법이라고 생각합니다. 나는 p-값의 열렬한 팬은 아니지만 답도 알고 싶습니다.이를 제공하는 테스트가 있는 것 같지만 JMP에서 이를 얻을 수 있는 곳이 없습니다.
문제는 AUC를 얻는 방법이 아니라 ap 값이 0.5와 크게 다른지 여부를 결정하는 방법이라고 생각합니다. 나는 p-값의 열렬한 팬은 아니지만 답도 알고 싶습니다.이를 제공하는 테스트가 있는 것 같지만 JMP에서 이를 얻을 수 있는 곳이 없습니다.
Statistics Index에는 이를 수행하는 방법에 대한 예가 있습니다.통계 색인에 익숙하지 않은 경우 다음에서 사용할 수 있습니다.
도움말==>통계 색인
다음은 색인 항목에서 가져온 예입니다.
Names Default To Here( 1 );
Open(
"$SAMPLE_DATA/Big Class.jmp"
);
Logistic(
Y( :sex ),
X( :height ),
Positive Level( "F" ),
ROC Curve
);
