Оновлення : Вибачте за інше оновлення, але я знайшов можливі рішення з дробовими поліномами та конкуруючим пакетом ризиків, з яким мені потрібна допомога.
Проблема
Я не можу знайти простий спосіб зробити залежний від часу аналіз коефіцієнтів в Р. Я хочу, щоб я міг взяти свій коефіцієнт змінних і зробити це в залежно від часу коефіцієнта (не змінної), а потім побудувати зміни в залежності від часу:
Можливі рішення
1) Розбиття набору даних
Я розглянув цей приклад (Se частина 2 лабораторного сеансу), але створення окремого набору даних здається складним, обчислювально дорогим і не дуже інтуїтивним ...
2) Моделі зі зниженим рейтингом - пакет coxvc
Пакет coxvc забезпечує елегантний спосіб вирішення проблеми - ось посібник . Проблема полягає в тому, що автор більше не розробляє пакунок (остання версія починається з 23.05.2007), після розмови електронною поштою я змусив цей пакет працювати, але один запуск займав 5 годин на моєму наборі даних (140 000 записи) і дає крайні оцінки в кінці періоду. Ви можете знайти трохи оновлений пакет тут - я здебільшого лише оновив функцію сюжету.
Це може бути лише питанням налаштування, але оскільки програмне забезпечення не забезпечує легких інтервалів довіри, і процес настільки трудомісткий, я зараз шукаю інші рішення.
3) Пакет таймрег
Вражаючий пакет timereg також вирішує проблему, але я не впевнений у тому, як її використовувати, і це не дає мені чіткої картини .
4) Модель дробового полінома (FPT)
Я знайшов відмінну дисертацію Аніки Буххольц на тему "Оцінка часових ефектів терапії та прогностичних факторів, що залежать від часу" , і це чудова робота, що охоплює різні моделі. Вона робить висновок, що пропонований FPT Sauerbrei та ін є найбільш підходящим для залежних від часу коефіцієнтів:
FPT дуже добре виявляє ефекти, що змінюються у часі, тоді як підхід Reduced Rank призводить до занадто складних моделей, оскільки він не включає вибір ефектів, що змінюються за часом.
Дослідження здається дуже повним, але для мене воно трохи недосяжне. Мені теж мало цікаво, оскільки вона трапляється працювати з 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 . Я думаю, що результати нормальні, але я не думаю, що мені вдасться пояснити графік timecox - він здається складним ...
Мої (поточні) запитання
- Як мені зробити аналіз FPT в R?
- Як я можу використовувати часовий коефіцієнт у cmprsk?
- Як побудувати результат (бажано з довірчими інтервалами)?
y~x
y~x*(t+t^2)-t
y~x+x:t+x:t^2