Обновление : Извините за другое обновление, но я нашел несколько возможных решений с дробными полиномами и конкурирующим пакетом риска, с которым мне нужна помощь.
Проблема
Я не могу найти простой способ сделать зависящий от времени анализ коэффициентов в R. Я хочу иметь возможность взять мой коэффициент переменных и превратить его в зависящий от времени коэффициент (не переменный), а затем построить график зависимости от времени:
Возможные решения
1) Разделение набора данных
Я посмотрел на этот пример (часть 2 лабораторного занятия), но создание отдельного набора данных кажется сложным, вычислительно дорогостоящим и не очень интуитивно понятным ...
2) Модели пониженного ранга - пакет coxvc
Пакет coxvc предоставляет элегантный способ решения проблемы - вот руководство . Проблема в том, что автор больше не разрабатывает пакет (последняя версия с 23.05.2007), после некоторого разговора по электронной почте я получил пакет для работы, но один запуск занял 5 часов в моем наборе данных (140 000 записи) и дает экстремальные оценки в конце периода. Вы можете найти немного обновленный пакет здесь - я в основном только что обновил функцию сюжета.
Это может быть просто вопрос настройки, но поскольку программное обеспечение не может легко обеспечить доверительные интервалы, а процесс занимает так много времени, я сейчас смотрю на другие решения.
3) Timereg пакет
Впечатляющий пакет timereg также решает проблему, но я не уверен, как его использовать, и он не дает мне четкого сюжета.
4) Модель дробного полиномиального времени (FPT)
Я нашел отличную диссертацию Аники Буххольц «Оценка изменяющихся во времени долгосрочных эффектов терапии и прогностических факторов» , которая отлично справляется с различными моделями. Она приходит к выводу, что предлагаемый FPT Sauerbrei и др. Представляется наиболее подходящим для зависящих от времени коэффициентов:
FPT очень хорошо обнаруживает изменяющиеся во времени эффекты, в то время как подход с уменьшенным рангом приводит к слишком сложным моделям, поскольку он не включает выбор изменяющихся во времени эффектов.
Исследование кажется очень полным, но оно для меня немного недосягаемо. Я также немного удивляюсь, так как она работает с Sauerbrei. Хотя это кажется здравым, и я думаю, что анализ мог бы быть сделан с пакетом mfp, но я не уверен, как.
5) пакет cmprsk
Я думал о проведении моего конкурирующего анализа рисков, но расчеты были трудоемкими, поэтому я переключился на регулярную регрессию Кокса. У crr есть опция для зависящих от времени ковариат:
....
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
....
Есть квадратичный пример, но я не совсем понимаю, где на самом деле появляется время, и я не уверен, как его отобразить. Я также посмотрел на файл test.R, но пример там в основном то же самое ...
Мой пример кода
Вот пример, который я использую, чтобы проверить различные возможности
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))
Код приводит к следующим графикам: Сравнение различных настроек для coxvc и графиков coxvc и timecox . Я думаю, что результаты в порядке, но я не думаю, что смогу объяснить график таймкокса - он кажется сложным ...
Мои (текущие) вопросы
- Как мне выполнить анализ FPT в R?
- Как мне использовать ковариату времени в cmprsk?
- Как мне построить результат (желательно с доверительными интервалами)?
y~x
y~x*(t+t^2)-t
y~x+x:t+x:t^2