Cập nhật : Xin lỗi vì một bản cập nhật khác nhưng tôi đã tìm thấy một số giải pháp khả thi với đa thức phân số và gói rủi ro cạnh tranh mà tôi cần một số trợ giúp.
Vấn đề
Tôi không thể tìm thấy một cách dễ dàng để thực hiện phân tích hệ số phụ thuộc thời gian trong R. Tôi muốn có thể lấy hệ số biến của mình và thực hiện nó thành một hệ số phụ thuộc thời gian (không phải biến) và sau đó vẽ biểu đồ biến đổi theo thời gian:
Phương pháp khả thi
1) Chia dữ liệu
Tôi đã xem ví dụ này (Se phần 2 của phiên phòng thí nghiệm) nhưng việc tạo một bộ dữ liệu riêng biệt có vẻ phức tạp, tốn kém về mặt tính toán và không trực quan lắm ...
2) Các mô hình xếp hạng giảm - Gói coxvc
Các gói coxvc cung cấp một cách thanh lịch để đối phó với vấn đề này - đây là một nhãn hiệu . Vấn đề là tác giả không còn phát triển gói (phiên bản mới nhất là từ ngày 23/05/2007), sau một số cuộc trò chuyện email tôi đã nhận được gói để hoạt động nhưng một lần chạy mất 5 giờ trên tập dữ liệu của tôi (140 000 mục) và đưa ra ước tính cực đoan vào cuối kỳ. Bạn có thể tìm thấy một gói cập nhật nhẹ ở đây - Tôi hầu như chỉ cập nhật chức năng cốt truyện.
Nó có thể chỉ là một câu hỏi về tinh chỉnh nhưng vì phần mềm không dễ dàng cung cấp khoảng tin cậy và quá trình này rất tốn thời gian nên tôi đang tìm kiếm các giải pháp khác ngay bây giờ.
3) Gói timereg
Gói timereg ấn tượng cũng giải quyết được vấn đề nhưng tôi không chắc chắn về cách sử dụng nó và nó không mang lại cho tôi một cốt truyện mượt mà.
4) Mô hình thời gian đa thức phân số (FPT)
Tôi tìm thấy luận án xuất sắc của Anika Buchholz về "Đánh giá thời gian khác nhau về tác dụng dài hạn của các phương pháp trị liệu và các yếu tố tiên lượng" , một công việc tuyệt vời bao gồm các mô hình khác nhau. Bà kết luận rằng đề xuất FPT của Sauerbrei et al có vẻ phù hợp nhất với các hệ số phụ thuộc vào thời gian:
FPT rất giỏi trong việc phát hiện các hiệu ứng thay đổi theo thời gian, trong khi phương pháp Xếp hạng giảm dẫn đến các mô hình quá phức tạp, vì nó không bao gồm lựa chọn các hiệu ứng thay đổi theo thời gian.
Nghiên cứu có vẻ rất đầy đủ nhưng nó hơi ngoài tầm với của tôi. Tôi cũng có một chút thắc mắc kể từ khi cô ấy làm việc với Sauerbrei. Có vẻ như âm thanh và tôi đoán phân tích có thể được thực hiện với gói mfp nhưng tôi không chắc làm thế nào.
5) Gói cmprsk
Tôi đã nghĩ đến việc thực hiện phân tích rủi ro cạnh tranh của mình nhưng các tính toán đã tốn thời gian nên tôi chuyển sang hồi quy cox thông thường. Các crr có một tùy chọn cho các hiệp phương thức phụ thuộc thời gian:
....
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
....
Có một ví dụ bậc hai nhưng tôi không hoàn toàn theo dõi thời gian thực sự xuất hiện và tôi không chắc chắn về cách hiển thị nó. Tôi cũng đã xem tệp test.R nhưng ví dụ về cơ bản là giống nhau ...
Mã ví dụ của tôi
Đây là một ví dụ mà tôi sử dụng để kiểm tra các khả năng khác nhau
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))
Mã kết quả trong các biểu đồ này: So sánh các cài đặt khác nhau cho coxvc và của coxvc và các ô thời gian. Tôi đoán kết quả là ổn nhưng tôi không nghĩ rằng tôi có thể giải thích biểu đồ timecox - nó có vẻ phức tạp ...
Câu hỏi của tôi (hiện tại)
- Làm cách nào để phân tích FPT trong R?
- Làm cách nào để sử dụng đồng biến thời gian trong cmprsk?
- Làm thế nào để tôi vẽ kết quả (tốt nhất là với khoảng tin cậy)?
y~x
y~x*(t+t^2)-t
y~x+x:t+x:t^2