Güncelleme : Başka bir güncelleme için özür dilerim ama fraksiyonel polinomlar ve yardıma ihtiyacım olan rakip risk paketi ile bazı olası çözümler buldum.
Sorun
Zamana bağlı katsayı analizi R'de yapmanın kolay bir yolunu bulamıyorum. Değişkenlerimi katsayı almak ve zamana bağlı bir katsayıya (değişken değil) dönüştürmek ve zamana karşı varyasyon çizmek istiyorum:
Muhtemel çözümler
1) Veri kümesini bölme
Bu örneğe baktım (laboratuvar oturumunun 2. bölümü) ama ayrı bir veri kümesinin oluşturulması karmaşık, hesaplama açısından maliyetli ve çok sezgisel değil ...
2) İndirgenmiş Rank modelleri - coxvc paketi
Coxvc paket sorunla ilgilenen zarif bir yol sağlar - burada var manuel . Sorun şu ki, yazar artık paketi geliştirmiyor (son sürüm 05/23/2007'den beri), bazı e-posta görüşmelerinden sonra paketi çalıştırdım ama bir çalışma veri kümemde 5 saat sürdü (140 000 girişler) ve dönem sonunda aşırı tahminler verir. Burada biraz güncellenmiş bir paket bulabilirsiniz - çoğunlukla arsa işlevini güncelledim.
Bu sadece bir ayarlama sorunu olabilir, ancak yazılım kolayca güven aralıkları sağlamadığından ve süreç çok zaman aldığından, şu anda diğer çözümlere bakıyorum.
3) Zaman paketi
Etkileyici timereg paketi de sorunu ele alıyor, ancak nasıl kullanılacağından emin değilim ve bana pürüzsüz bir arsa vermiyor.
4) Kesirli Polinom Zamanı (FPT) modeli
Anika Buchholz'un " Tedavilerin zamanla değişen uzun vadeli etkilerinin ve prognostik faktörlerin değerlendirilmesi" konusundaki mükemmel tezini farklı modelleri kapsayan mükemmel bir iş buldum . Sauerbrei ve arkadaşlarının önerdiği FPT'nin zamana bağlı katsayılar için en uygun olduğu sonucuna varıyor :
FPT, zamanla değişen etkileri tespit etmede çok iyidir, Azalan Sıralama yaklaşımı, zamanla değişen efektlerin seçimini içermediğinden çok karmaşık modellerle sonuçlanır.
Araştırma çok eksiksiz görünüyor ama benim için biraz ulaşılamıyor. Sauerbrei ile çalıştığı için biraz merak ediyorum. Gerçi sağlam görünüyor ve analiz mfp paketi ile yapılabilir ama nasıl emin değilim.
5) cmprsk paketi
Rakip risk analizimi yapmayı düşünüyorum ama hesaplamalar zaman alıcıydı, bu yüzden düzenli cox regresyonuna geçtim. Crr zamana bağımlı değişkenler için bir seçenek thoug vardır:
....
cov2 matrix of covariates that will be multiplied
by functions of time; if used, often these
covariates would also appear in cov1 to give
a prop hazards effect plus a time interaction
....
İkinci dereceden bir örnek var, ancak zamanın gerçekte nerede göründüğünü tam olarak takip etmiyorum ve nasıl gösterileceğinden emin değilim. Ayrıca test.R dosyasına baktım ama örnek temelde aynı ...
Örnek kodum
Farklı olasılıkları test etmek için kullandığım bir örnek
library("survival")
library("timereg")
data(sTRACE)
# Basic cox regression
surv <- with(sTRACE, Surv(time/365,status==9))
fit1 <- coxph(surv~age+sex+diabetes+chf+vf, data=sTRACE)
check <- cox.zph(fit1)
print(check)
plot(check, resid=F)
# vf seems to be the most time varying
######################################
# Do the analysis with the code from #
# the example that I've found #
######################################
# Split the dataset according to the splitSurv() from prof. Wesley O. Johnson
# http://anson.ucdavis.edu/~johnson/st222/lab8/splitSurv.ssc
new_split_dataset = splitSuv(sTRACE$time/365, sTRACE$status==9, sTRACE[, grep("(age|sex|diabetes|chf|vf)", names(sTRACE))])
surv2 <- with(new_split_dataset, Surv(start, stop, event))
fit2 <- coxph(surv2~age+sex+diabetes+chf+I(pspline(stop)*vf), data=new_split_dataset)
print(fit2)
######################################
# Do the analysis by just straifying #
######################################
fit3 <- coxph(surv~age+sex+diabetes+chf+strata(vf), data=sTRACE)
print(fit3)
# High computational cost!
# The price for 259 events
sum((sTRACE$status==9)*1)
# ~240 times larger dataset!
NROW(new_split_dataset)/NROW(sTRACE)
########################################
# Do the analysis with the coxvc and #
# the timecox from the timereg library #
########################################
Ft_1 <- cbind(rep(1,nrow(sTRACE)),bs(sTRACE$time/365,df=3))
fit_coxvc1 <- coxvc(surv~vf+sex, Ft_1, rank=2, data=sTRACE)
fit_coxvc2 <- coxvc(surv~vf+sex, Ft_1, rank=1, data=sTRACE)
Ft_3 <- cbind(rep(1,nrow(sTRACE)),bs(sTRACE$time/365,df=5))
fit_coxvc3 <- coxvc(surv~vf+sex, Ft_3, rank=2, data=sTRACE)
layout(matrix(1:3, ncol=1))
my_plotcoxvc <- function(fit, fun="effects"){
plotcoxvc(fit,fun=fun,xlab='time in years', ylim=c(-1,1), legend_x=.010)
abline(0,0, lty=2, col=rgb(.5,.5,.5,.5))
title(paste("B-spline =", NCOL(fit$Ftime)-1, "df and rank =", fit$rank))
}
my_plotcoxvc(fit_coxvc1)
my_plotcoxvc(fit_coxvc2)
my_plotcoxvc(fit_coxvc3)
# Next group
my_plotcoxvc(fit_coxvc1)
fit_timecox1<-timecox(surv~sex + vf, data=sTRACE)
plot(fit_timecox1, xlab="time in years", specific.comps=c(2,3))
Kod şu grafiklerle sonuçlanır: coxvc ve coxvc ile timecox grafiklerinin farklı ayarlarının karşılaştırılması . Sanırım sonuçlar iyi ama timecox grafiğini açıklayabileceğimi sanmıyorum - karmaşık görünüyor ...
(Mevcut) sorularım
- R'de FPT analizini nasıl yapabilirim?
- Cmprsk'te zaman değişkenini nasıl kullanırım?
- Sonucu nasıl çizerim (tercihen güven aralıklarıyla)?
y~x
y~x*(t+t^2)-t
y~x+x:t+x:t^2