Cox 모델을 사용하여 R에서 ROC 분석을 수행하는 방법


10

몇 가지 Cox 회귀 모델을 만들었으며 이러한 모델의 성능을보고 싶을 것입니다. ROC- 곡선 또는 c- 통계량은이 기사와 유사하게 유용 할 수 있다고 생각했습니다.

JN Armitage och JH van der Meulen, "Royal College of Surgeons Charlson Score의 관리 데이터를 사용하여 수술 환자의 병적 상태 확인", British Journal of Surgery, vol. 97, num. 5, ss. 772-781, Maj 2010.

Armitage는 로지스틱 회귀를 사용했지만 생존 패키지에서 모델을 사용할 수 있는지 궁금합니다. survivalROC 는 이것이 가능하다는 힌트를 주지만 정기적으로 Cox 회귀로 작업하는 방법을 알 수는 없습니다.

이 예제에서 ROC 분석을 수행하는 방법을 누군가에게 보여 주면 감사하겠습니다.

library(survival)
data(veteran)

attach(veteran)
surv <- Surv(time, status)
fit <- coxph(surv ~ trt + age + prior, data=veteran)
summary(fit)

가능한 경우 원시 c- 정적 출력과 멋진 그래프를 모두 감사하겠습니다.

감사!

최신 정보

답변 주셔서 대단히 감사합니다. @Dwin : 귀하의 답변을 선택하기 직전에 이해했는지 확인하고 싶습니다.

DWin의 제안에 따라 이해 한 계산 :

library(survival)
library(rms)
data(veteran)

fit.cph <- cph(surv ~ trt + age + prior, data=veteran, x=TRUE, y=TRUE, surv=TRUE)

# Summary fails!?
#summary(fit.cph)

# Get the Dxy
v <- validate(fit.cph, dxy=TRUE, B=100)
# Is this the correct value?
Dxy = v[rownames(v)=="Dxy", colnames(v)=="index.corrected"]

# The c-statistic according to the Dxy=2(c-0.5)
Dxy/2+0.5

나는 validate 함수와 부트 스트랩에 익숙하지 않지만 prof를 본 후. R-help에 대한 Frank Harrel의 대답 은 아마 Dxy를 얻는 방법이라고 생각했습니다. 상태 확인을위한 도움말 :

... 각 재 샘플에서 계산할 Somers의 Dxy 순위 상관 (이는 가능성 기반 통계보다 약간 오래 걸립니다). 행 Dxy에 해당하는 값은 2 * (C-0.5)와 같습니다. 여기서 C는 C- 인덱스 또는 일치 확률입니다.

나는 주로 열에 혼란스러워합니다. 올바른 값이 사용해야한다고 생각했지만 유효성 검사 출력을 실제로 이해하지 못했습니다.

      index.orig training    test optimism index.corrected   n
Dxy      -0.0137  -0.0715 -0.0071  -0.0644          0.0507 100
R2        0.0079   0.0278  0.0037   0.0242         -0.0162 100
Slope     1.0000   1.0000  0.2939   0.7061          0.2939 100
...

에서 R-도움말 질문 나는 지층이하지만 유효성 검사 기능에서 "유 = 60"매개 변수의 목적이 무엇인지에 대한 확신 해요 경우 나는 CPH에서 "SURV = TRUE"을 가져야한다고 이해했습니다. 이 점을 이해하고 실수하지 않았는지 확인하도록 도와 주면 감사하겠습니다.


2
아마도 rms 패키지와 그 cph()명령을 살펴볼 것입니다 .
chl

2
index.corrected강조해야 할 것입니다. 이는 미래의 성능에 대한 추정치입니다. 지층이 없기 때문에 u=60필요하지 않습니다 validate. 지층이있는 경우 생존 곡선이 교차 할 수 있으며 일반화 된 ROC 영역을 얻기 위해 특정 시점을 지정해야합니다.
Frank Harrell

답변:


2

@chl은 귀하의 질문에 대한 구체적인 답변을 지적했습니다. 'rms'패키지의 cph기능은 소량의 c- 인덱스로 변환 할 수있는 Somers-D를 생성합니다. 그러나 Harstat (생물 통계 관행에 c- 인덱스를 도입 한)는 이것이 대안에 대한 차별 력이 낮기 때문에 예후 조치를 평가하기위한 일반적인 전략으로는 현명하지 않다고 생각합니다. 방법 론적 지침을 위해 외과 문헌에 의존하는 대신 Harrell의 텍스트 "Regression Modeling Strategies"또는 Steyerberg의 "Clinical Prediction Models"에서 축적 된 지혜를 찾는 것이 현명합니다.


4
DxyC

귀하의 답변에 감사드립니다, 제 상황은 제가 비교하고 그들이 어떻게 수행하는지보고 싶은 3 가지 점수가 있다는 것입니다. 나는 Somers-D 부분을 살펴볼 시간이 없었고 시간이 지나면 다시 돌아올 것입니다 (빠른 모양이었고 유용한 것을 찾지 못했습니다). 또한 @FrankHarrell 책 "Regression Modeling Strategies", ISBN 13 : 978-0387952321을 주문했으며, 선택에 따라 안내해 드리겠습니다.
Max Gordon

2
Dxy = 2 * (c- 0.5)이므로 주어진 Dxy의 c 계산은 사소한 것이어야합니다.
DWin

3

χ2


올바른 방향으로 안내해 주셔서 +1 나는 방금 C 통계를 마쳤고 내가보고있는 더 자세한 점수는 C 통계가 0.4365081이었고 다른 통계는 0.4414625를 가졌습니다 (필자의 경우 0.5-Dxy / 2를 계산해야한다고 생각합니다). 140,000 개의 샘플을 계산하는 데 꽤 오랜 시간이 걸렸습니다. 나는 부트 스트랩을 10으로 낮추어야했고 그 영향이 무엇인지 확실하지 않습니다. 나는 당신의 책 (우편으로)을 읽을 수 있기를 기대하며, 방법론을 더 잘 이해하고 C- 통계량과 적절성 지수를 비교하는 데 도움이되기를 바랍니다.
Max Gordon

좋은. 예측 값의 분포를 보지 않고 .44 대 .43이 많은 것을 의미하는지는 쉽게 알 수 없습니다.
Frank Harrell

나는 그런 숫자에 대해서는 언급하기 어렵다는 것을 이해합니다. 분포를 살펴 보도록하겠습니다. 결과에 대한 나의 주요 해석은 내 모델에 의해 거의 설명되지 않으며 약간의 차이가 있더라도 크게 중요하지는 않다는 것입니다. 내 질문에서 언급 한 분석에서했던 것처럼 0.8 값에 도달하는 생존 환경에서 기대할 수있는 것이 흥미로울 것입니다 ...하지만 다시 내 생존은 이식 된 보철물의 생존입니다. 환자 생존이 아닙니다. 또한 추정치를 변경하는 로지스틱 회귀 분석을 사용했습니다.
Max Gordon

시간이 중요하거나 추적 시간이 주제마다 다르면 로지스틱 회귀가 작동하지 않습니다. 원래의 질문으로 돌아가서, 모형에 의해 매우 작은 변동이 설명된다면 예측 된 위험은 좁은 분포를 가질 것입니다.
Frank Harrell

방금 책을 받았습니다 ... 생존 ​​부분에 대한 빠른 고정이 있었지만 20 장에서 사례 연구를 시도 할 때 impute (w, sz) 부분에 오류가 발생합니다. 'variable sz has not have names () 속성 '. 나는 pt을 따랐다. 8 : getHdata (전립선)가있는 데이터 프레임을로드했으며 (도서에서 웹 사이트를 찾을 수 없음) w <-transcan (~ sz + sg + ap + sbp + dbp + age + wt + hg + ekg + pf + bm + hx, imputed = T, transformed = T, imcat = "tree", data = prostate)하지만 이름을 지정할 때 아무것도 찾지 못했습니다 ...
Max Gordon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.