JMP 일본 커뮤니티 여러분
샘플 수가 적은 데이터에서의 cross-validation법에 대해 가르쳐 주시겠습니까?
증례 수 44, positive23, Negative 21.
추출한 인자수가 많았기 때문에, 데이터의 신뢰성(2 평가자간의 ICC) 및 ROC-AUC치로부터, 2metrics를 선택해, logistic 해석을 실시해 양 인자 모두 결과에 대해 유의하고, 양자의 combination에서는 ROC-AUC>0.85와 최우선의 결과였습니다. Reviewer로부터는 과적응을 막기 위해 cross-validation이 필요하다는 지적을 받고, 증례가 적기 때문에 LOOCV(하나 따로 두는 방법)를 선택하기로 했습니다.
분석 > 일반화 회귀 > Lasso > LOOCV를 수행하면 다음 결과가 표시됩니다. 이 방법은 가본 적이 없기 때문에 표시된 결과를 어떻게 해석해야 하는지 잘 모릅니다. 자세한 분, 가르쳐 주시지 않겠습니까.

덧붙여서 이항 logistic의 결과는 다음과 같습니다.

잘 부탁드립니다.
■ Lasso 회귀(「라소」혹은 「라스―」라고 발음)는, 큰 분류로서는, 벌칙 첨부 회귀(penalized regression)나 정규화 회귀(regularized regression)라고 불리는 회귀 기법의 하나입니다. 벌칙 회귀(정규화 회귀)에는 다른 리지 회귀(ridge regression)와 탄성 넷 회귀(elastic net regression)가 있습니다.
일반적인 로지스틱 회귀는 로그 우도가 최대가 되는 회귀 계수(파라미터)를 구합니다. 대수 우도가 최대가 되는 파라미터 값을 구하는 추정 방법을 최대 우도 추정(maximum likelihood esitmation)이라고 합니다. 학습 데이터로부터 계산된 로그 우도가 클수록 학습 데이터에 대한 적합도는 좋다고 할 수 있습니다. 따라서 최대 우도 추정은 학습 데이터에 가장 적합한 회귀 계수(파라미터)를 구하는 추정 방법이라고 할 수 있습니다.
로지스틱 회귀의 최대 우도 추정은 데이터가 대규모이면 수리적으로 좋은 성질이 있습니다 (일치성, 유효성, 점근 정규성).
벌칙 첨부 회귀(정칙화 회귀)는 부의 로그 우도에 벌칙항을 더한 것을 목적함수로 함으로써 오버피팅(over-fitting, 과잉적합, 과적합)을 회피하고 예측 정밀도를 높이기 위한 수법입니다. Lasso 회귀의 경우에는 절편을 제외한 파라미터 추정치의 절대치의 합에 정수(벌칙 파라미터)를 곱한 것이 벌칙항으로서 사용됩니다. 이 벌칙 파라미터를 0으로 하면(즉, 벌칙을 약하게 하면) 통상의 최대 우도 추정이 되고, 벌칙 파라미터를 무한대로 하면(즉 벌칙을 굳게 하면) 절편을 제외한 파라미터 추정치가 모두 제로가 됩니다.
게시한 스크린샷 보고서에서 왼쪽으로 갈수록 벌칙 매개변수가 크고 오른쪽으로 갈수록 벌칙 매개변수가 작아집니다.
"음의 로그 우도"(negative log-likelihood)는 로그 우도의 부호를 반대로 한 것입니다. "척도화된 음의 로그 우도"(scaled negative lo-g-likelihood)는 관측(1행)당 음의 로그 우도를 평균한 것입니다. 로그 우도는 클수록 모델이 데이터에 적합함을 나타내지만, 부호를 반대로 한 음의 로그 우도는 값이 작을수록 모델이 데이터에 적합함을 나타냅니다.
최대 우도 추정이나 처벌 회귀로 파라미터 추정값을 구할 때는 학습 데이터에 대한 음의 로그 우도를 이용합니다. 게시한 보고서의 오른쪽 플롯에서는 학습 데이터의 음수 로그 우도뿐만 아니라 검증 데이터의 음수 로그 우도도 플롯됩니다. 모델을 복잡하게 할수록(벌칙을 느슨하게 하고, 설명 변수를 늘릴수록), 학습 데이터에 대한 음의 로그 우도는 작아집니다. 그러나 검증 데이터에 대한 음의 로그 우도는 그렇지 않습니다.
일반적으로 데이터가 상당히 풍부하고 모델도 간단하며 실제 모델을 지정한 경우 다음 그림과 같이 학습 데이터와 검증 데이터의 음수 로그 우도는 동일합니다.
그러나, 데이터가 적은 상황에서는, 비록 진정한 모델을 적용했다고 해도, 다음 그림과 같이, 검증 데이터의 부의 대수 우도는, 학습 데이터의 부의 대수 우도보다도 커져, 게다가 검증 데이터의 플롯은 U자상이 되는 경우가 많습니다.
검증 데이터의 음의 로그 우도가 학습 데이터보다 더 크다는 것은 모델이 학습 데이터에 과도하게 맞춰져 있음을 시사하며, 학습 데이터에 적합하지만 좋지만 검증 데이터에 적합하지는 않음을 시사한다. 또한 검증 데이터에서 U자형이 되는 것은 모델이 복잡해질수록 검증 데이터에 대한 적합성이 나빠지는 것을 나타낸다.
■AUC에 대한 신뢰 구간에 의해, 구해진 AUC 추정치가 어느 정도 수상한가를 대략 견적할 수 있는 것이 아닐까 생각합니다. 「일반화 회귀」로 로지스틱 회귀 모델을 적용한 경우에는 다음의 순서로 AUC의 신뢰 구간을 구할 수 있습니다.
(1) "로지스틱 회귀" 아웃 라인의 빨간색 삼각 버튼을 클릭합니다.
(2) 불러온 메뉴에서 [열 저장] → [예측식 저장] 을 선택합니다.
이 조작에 의해, 데이터 테이블에 확률 예측식의 열이 작성된다.
(3) 풀다운 메뉴의 [분석 (A)] 메뉴 → [예측 모델] → [모델 비교] 를 선택합니다.
(4) 불려온 기동 윈도우 좌측의 「열의 선택」 리스트 박스에서 확률 예측값을 포함한 2열( 「확률(열명 = 이벤트명)」 및 「확률(열명 = 비이벤트명)」 을 선택하고, [Y, 예측자] 버튼을 클릭한다.
(5) [좋아요] 버튼을 클릭합니다.
(6) [모델 비교] 개요의 빨간색 삼각형 버튼을 클릭하고 [AUC 비교] 를 선택합니다.
■ 만약 요구되고 있는 것이, 「하나 취해 두어 법으로 구해진 확률 예측치를 바탕으로 AUC를 구해 주세요」라고 하는 것이라면, JMP에서는 특히 그러한 처리를 실시하는 GUI는 준비되어 있지 않습니다. JMP에서 수행하는 경우 JMP 스크립팅 언어(JMP Scripting Language; JSL)라는 스크립팅 언어로 프로그래밍해야 합니다.
다음은 프로그램 예제입니다. 어디까지나 예로서의 샘플입니다.
데이터 테이블에 부여된 「행의 속성」을 클리어 하므로, 미리 분석 대상으로 하는 데이터 테이블만을 준비해 주세요. 그 때, 제외 속성이 부여된 행등은 미리 제외해 주세요.
다음 예제에서는 행을 하나씩 순서대로 제외하고 로지스틱 회귀 모델을 적용한 다음 제외된 행에 대한 확률 예측값을 찾습니다. 그 후, 구한 확률 예측값에 근거하여 ROC 곡선이나 AUC를 구하고 있습니다.
다음 예제는 어디까지나 샘플입니다.
또한 작동하려면 열 이름과 이벤트를 나타내는 데이터 값을 적절한 값으로 변경해야 합니다. 덧붙여 결측치가 있는 행은 디폴트에서는 모두 제거되어 분석이 행해집니다 (리스트와이즈 제거로 분석이 행해집니다).
Names Default To Here(1);
dt = Current Data Table();
eta = J(NRow(dt),1,.);
For(i = 1, i <= NRow(dt), i++,
dt << Clear Row States; // 行属性のクリア
Row State(i)= Excluded State(1); // 第i行に除外属性を付与
// ロジスティックモデルのあてはめ
plat = dt << Fit Model(
<
<INVISIBLE></INVISIBLE>
<DIV>
</DIV>
<DIV>■ 어쨌든 설명 변수가 2 변수 인 로지스틱 회귀 모델에서 n = 50 정도(이벤트와 비이벤트가 n=25 정도)라면 비록 참 모델을 맞추어도 추정 오차가 크고, 또 그 2변수 모델이 좋은 모델인지 아닌지를 판단하는 것(예를 들면, 다른 설명 변수를 사용하는 편이 좋은 것은 아닌가?, 다른 설명 변수를 추가하는 편이 좋지 않을까? 등)도 어렵다. 추정된 모델이 미래에 프로덕션 예측 모델로 실용적인지 여부를 판단하는 것도 상당히 어렵지 않을까 생각합니다. 위의 방법이나 그 밖의 여러 가지 방법으로 내적 타당성(internal validation)이 비록 확인할 수 있었다고 해도, 겸손의 신중한 판단이 될 수밖에 없을까 생각합니다.</DIV>
<DIV>
</DIV>
<DIV>■ 의료 분야에서의 예측 모델 구축의 가이드라인으로서는 TRIPOD가 있습니다만, 상기의 답변을 작성할 때에, TRIPOD 가이드 라인에 주의를 기울이지 않았습니다. 예측 모델 구축에 있어서, 체크해야 할 일은 그 밖에도 여러가지 있다고 생각합니다.</DIV>
<DIV>
</DIV>