생존 coxph와 rms cph의 다른 예측 그림


9

이 예제에서 사용하는 약간 개선 된 termplot 버전을 만들었습니다 . 여기서 찾을 수 있습니다 . 나는 이전에 SO 에 게시 했지만 더 많이 생각할 때 이것이 실제 코딩보다 Cox 비례 위험 모델의 해석과 더 관련이 있다고 생각합니다.

문제

위험 비율 그림을 볼 때 신뢰 구간이 자연스럽게 0 인 기준점을 가질 것으로 예상 rms package합니다 survival package. coxph ()에 의한 올바른 동작입니까? 그렇다면 기준점은 무엇입니까? 또한 coxph ()의 더미 변수에 간격이 있으며 값이 이외의 값 입니까?이자형0

내 테스트 코드는 다음과 같습니다.

# Load libs
library(survival)
library(rms)

# Regular survival
survobj <- with(lung, Surv(time,status))

# Prepare the variables
lung$sex <- factor(lung$sex, levels=1:2, labels=c("Male", "Female"))
labels(lung$sex) <- "Sex"
labels(lung$age) <- "Age"

# The rms survival
ddist <- datadist(lung)
options(datadist="ddist")
rms_surv_fit <- cph(survobj~rcs(age, 4)+sex, data=lung, x=T, y=T)

cph 플롯

이 코드는 :

termplot2(rms_surv_fit, se=T, rug.type="density", rug=T, density.proportion=.05,
          se.type="polygon", yscale="exponential", log="y", 
          xlab=c("Age", "Sex"), 
          ylab=rep("Hazard Ratio", times=2),
          main=rep("cph() plot", times=2),
          col.se=rgb(.2,.2,1,.4), col.term="black")

이 줄거리를 제공합니다 :

cph () 용어

콕스 프 플롯

이 코드는 :

termplot2(surv_fit, se=T, rug.type="density", rug=T, density.proportion=.05, 
          se.type="polygon", yscale="exponential", log="y", 
          xlab=c("Age", "Sex"), 
          ylab=rep("Hazard Ratio", times=2),
          main=rep("coxph() plot", times=2),
          col.se=rgb(.2,.2,1,.4), col.term="black")

이 줄거리를 제공합니다 :

coxph () 용어

최신 정보

@Frank Harrell이 제안한 바와 같이 최근 의견에서 제안을 따라 조정 한 후

p <- Predict(rms_surv_fit, age=seq(50, 70, times=20), 
             sex=c("Male", "Female"), fun=exp)
plot.Predict(p, ~ age | sex,
             col="black",
             col.fill=gray(seq(.8, .75, length=5)))

이것은이 아주 좋은 음모를 주었다 :

격자 플롯

주석 후에 contrast.rms를 다시 살펴보고 플롯을 제공하는이 코드를 시도했습니다 ... 아마도 훨씬 더 할 수는 있지만 :-)

w <- contrast.rms(rms_surv_fit, 
                  list(sex=c("Male", "Female"), 
                       age=seq(50, 70, times=20)))

xYplot(Cbind(Contrast, Lower, Upper) ~ age | sex, 
       data=w, method="bands")

이 줄거리를 주었다 :

대비도

업데이트 2

Thernau 교수는 자신감이 부족한 음모에 대해 충분히 언급했습니다.

콕스의 스무딩 스플라인은 gam의 스플라인과 같이 sum (prediction) = 0이되도록 정규화됩니다. 따라서 분산이 매우 작은 고정 된 단일 지점이 없습니다.

아직 GAM에 익숙하지는 않지만 내 질문에 대답 하는 것 같습니다 . 이것은 해석의 문제인 것 같습니다.


3
여러 의견. rms와 Design 패키지의 차이점에 대해서는 먼저 biostat.mc.vanderbilt.edu/Rrms 를 읽으 십시오 . 둘째, plot.Predict 대신 plot ()을 사용하여 작업을 저장하십시오. 셋째, Predict (fit, age, sex, fun = exp)를 사용하여 두 성별에 대한 플롯을 쉽게 생성 할 수 있습니다. # exp = anti-log; 그런 다음 음모 (결과) 또는 음모 (결과, ~ 연령 | 성별). Predict에서는 "x = NA"를 사용하지 않습니다. rms는 격자 그래픽을 사용하므로 일반적인 par 그래픽 매개 변수와 mfrow는 적용되지 않습니다. biostat.mc.vanderbilt.edu/rms의 rms 과정 유인물에서 예를 참조하십시오 . contrast.rms의 경우 설명서를 더 연구하십시오.
Frank Harrell

1
입력 해 주셔서 감사합니다. 더 나은 예제로 코드를 업데이트하고 교수를 추가했습니다. 테 나우의 반응. 추신 : 나는 새로운 버전의 책을 계획하고 컷 포인트 바이어스 섹션을 확장하는 것이 참조 자료로 매우 유용 할 것입니다.
Max Gordon

1
당신은 사용할 수 있습니다 plotcontrast대신 plot.Predictcontrast.rms. 나는 대신 by또는 length내부를 seq사용 times하고 contrast두 개의 목록을 제공하므로 대비되는 대상을 정확하게 지정하십시오. xYplot신뢰 구간에 음영을 사용할 수도 있습니다 .
Frank Harrell

1
감사. 나는 plot.Predict를 사용하여 RStudio에서 올바른 도움을 얻습니다. 내 경우에는 전체 함수 이름을 쓰는 데 걸리는 시간보다 훨씬 중요합니다 (자동 완성 (탭)를 사용하여 실제로는 그렇지 않습니다) 많은 시간을 풀어 라).
Max Gordon

답변:


5

신뢰 구간이 0 너비 인 지점이 분명히 있어야한다고 생각합니다. rms 함수 만 사용하는 세 번째 방법을 시도 할 수도 있습니다. 대비 비율 도표를 얻기 위해 contrast.rms의 도움말 파일 아래에 예가 있습니다. 그것은 # 치료와 성별에 의한 별도의 추정치를 보여줍니다. 비율을 얻으려면 안티 로그가 필요합니다.


1
답변 주셔서 감사합니다. 교수님에게이 문제를 언급해야한다고 생각하십니까? 버그 / 오해 해석으로 간주 될 경우 Terry Therneau? 나는 또한 rms 패키지의 그래픽 솔루션을 살펴 보았는데 plots에 대비 contrast.rms의 사용법을 이해할 수 없습니다. plot.Predict는 비슷한 결과를 출력하는 것으로 보이지만 원하는 것을 정확하게 수행 할 수는 없습니다 ... 질문에 대한 내 업데이트를 참조하십시오.
Max Gordon

2
문의 해 주시면 몇 분 전에 공항에 오셔서 감사합니다. 다른 질문에 대해서는 위에서 언급하겠습니다.
Frank Harrell
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.