Cox modeli ile R'de ROC analizi nasıl yapılır


10

Birkaç Cox regresyon modeli oluşturdum ve bu modellerin ne kadar iyi performans gösterdiğini görmek istiyorum ve belki de bu makalelerin kullanımına benzer bir ROC eğrisi veya c-istatistiği yararlı olabilir:

JN Armitage och JH van der Meulen, “Kraliyet Cerrahlar Koleji Charlson Skoru ile idari veriler kullanan cerrahi hastalarda ko-morbiditenin belirlenmesi”, British Journal of Surgery, cilt. 97, num. 5, ss. 772-781, Maj 2010.

Armitage lojistik regresyon kullanılır ama hayatta kalma paketinden bir model kullanmak mümkündür acaba, survivalROC bu mümkün olmanın bir ipucu verir ama ben normal Cox regresyon ile çalışmalarına olsun anlamaya olamaz.

Birisi bana bu örnek üzerinde bir ROC analizi yapmak nasıl gösterirseniz minnettar olacaktır:

library(survival)
data(veteran)

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

Mümkünse hem ham c-statik çıktıyı hem de hoş bir grafiği takdir ediyorum

Teşekkürler!

Güncelleme

Cevaplarınız için çok teşekkür ederim. @Dwin: Cevabınızı seçmeden hemen önce anladığımdan emin olmak istiyorum.

DWin'in önerisine göre anladığım gibi hesaplama:

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

Doğrulama işlevini ve bootstrapping'i bilmiyorum ama prof'e baktıktan sonra. Frank Harrel'in burada R-yardımındaki cevabı muhtemelen Dxy'yi almanın yolu olduğunu düşündüm. Durumların doğrulanması için yardım:

... Somers 'Dxy rütbe korelasyonu her bir yeniden örneklemde hesaplanacaktır (bu olasılık bazlı istatistiklerden biraz daha uzun sürer). Dxy sırasına karşılık gelen değerler 2 * (C - 0.5) 'e eşittir, burada C C-endeksi veya uyum olasılığıdır.

Sanırım çoğunlukla sütunlarla kafam karıştı. Düzeltilmiş değerin kullanmam gereken değer olduğunu anladım, ancak validate çıktısını gerçekten anlamadım:

      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
...

In R yardım sorusu ben tabakalar var ama validate işlevinde "u = 60" parametresinin amacı ne olduğuna belirsiz mıyım Cph "Gözetim = DOĞRU" olması gerektiğini anladım. Bunları anlamama ve herhangi bir hata yapmadığımı kontrol etmeme yardımcı olursanız minnettar olurum.


2
Muhtemelen rms paketi ve cph()komutuna bir göz atacağım .
chl

2
index.correctedvurgulanması gereken şeydir. Bunlar gelecekteki muhtemel performans tahminleridir. katmanınız u=60olmadığı için gerekli değildir validate. Tabakalarınız varsa, hayatta kalma eğrileri kesişebilir ve genelleştirilmiş ROC alanını elde etmek için belirli bir zaman noktası belirtmeniz gerekir.
Frank Harrell

Yanıtlar:


2

@chl sorunuzun belirli bir cevabına işaret etti. 'Rms' paketinin cphişlevi önemsiz bir şekilde bir c-endeksine dönüştürülebilen bir Somers-D üretecektir. Ancak, Harrell (c-endeksini biyoistatistiksel pratiğe dahil eden) bunun prognostik önlemleri değerlendirmek için genel bir strateji olarak yanlış olduğunu düşünmektedir, çünkü alternatifler arasında ayrımcılık için düşük bir güce sahiptir. Metodolojik rehberiniz için cerrahi literatüre güvenmek yerine, Harrell'in "Regresyon Modelleme Stratejileri" veya Steyerberg'in "Klinik Tahmin Modelleri" metninde birikmiş bilgeliği aramak akıllıca olacaktır.


4
Not için teşekkürler. ve önceden belirlenmiş tek bir modelin tahmine dayalı ayrımcılığını tanımlamak için kötü olmadığını düşünüyorum . Ama dediğin gibi, bundan daha fazlasını yapmak için güçleri yok. CDxyC
Frank Harrell

Yanıtlarınız için teşekkür ederim, durumum, karşılaştırmak ve nasıl performans gösterdiğini görmek istediğim üç farklı puanım olması. Somers-D bölümüne bakmak için zamanım olmadı ve bir kez zaman geçirdim (hızlı bir göz vardı ve yararlı bir şey bulamadık) geri döneceğim. Ayrıca @FrankHarrell kitabı, "Regresyon Modelleme Stratejileri", ISBN 13: 978-0387952321 sipariş ettim ve umarım seçimlerimde bana yol gösterecektir.
Max Gordon

2
Dxy = 2 * (c-0.5) olduğundan, verilen Dxy'nin hesaplanması önemsiz olmalıdır.
DWin

3

İhtiyaçlarınıza bağlı olarak, bir modeli daha büyük bir modelin içine gömmek ve ek değişkenlerin katma değeri için "yığın" olabilirlik oranı testi yapmak size güçlü bir test verecektir. Kitabım bu yaklaşımdan kaynaklanan bir endeksten bahsediyor ("yeterlilik endeksi").χ2


+1 beni doğru yönde yönlendirdiğin için. C-istatistiği yapmayı yeni bitirdim ve baktığım daha ayrıntılı puan 0.4365081 iken C-istatistiği 0.4414625 (sanırım 0,5-Dxy / 2 saymalıyım). 140 000 örneğim üzerinde hesaplama yaparken oldukça uzun sürdüm; Bootstraps'ı 10'a düşürmek zorunda kaldım ve bunun etkisinin ne olduğundan emin değilim. Kitabınızı okumak için sabırsızlanıyorum (postada) ve umarım metodolojiyi daha iyi anlamama ve C istatistiklerini yeterlilik endeksi ile karşılaştırmamda yardımcı olacaktır.
Max Gordon

İyi. Tahmin edilen değerlerin dağılımlarına bakmadan .44 ve .43'ün çok anlamlı olup olmadığını söylemek kolay değildir.
Frank Harrell

Anladığım kadarıyla böyle sayılar hakkında yorum yapmak zor. Dağılıma bakmaya çalışacağım. Sonucun ana yorumu, modelim tarafından çok az şey açıklanması ve küçük bir fark olsa da, muhtemelen büyük ölçüde önemli olmadığıdır. Bir hayatta kalma ortamında ne beklemek ilginç olurdu - soruma atıfta bulunduğum analizde yaptıkları gibi .8 değerine ulaşmak oldukça uzak görünüyor ... ama sonra hayatta kalmam implante edilmiş bir protezin hayatta kalması ve hastanın hayatta kalması değil. Ayrıca tahmini değiştiren lojistik regresyon kullandılar.
Max Gordon

Zaman önemliyse veya takip süresi deneklere göre değişirse lojistik regresyon işe yaramaz. Orijinal soruya geri dönersek, model tarafından çok az değişiklik açıklanırsa, öngörülen risklerin dar bir dağılımı olacaktır.
Frank Harrell

Kitabını aldım ... Hayatta kalma kısmında hızlı bir kilit aldım, ancak bölüm 20'deki Vaka çalışmanızı denediğimde, impute (w, sz) kısmında bir hata alıyorum: 'değişken sz yok a names () özelliği '. Bölüm izledim. 8: veri çerçevesini getHdata (prostat) ile yükledi (kitapta web sitesini bulamadı), w <- transcan (~ sz + sg + ap + sbp + dbp + yaş + wt + hg + ekg + pf + bm + hx, imputed = T, dönüştürülmüş = T, imcat = "ağaç", veri = prostat) ancak isimlendirmede bir şey bulamadım ...
Max Gordon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.