อัปเดต : ขออภัยสำหรับการอัปเดตอื่น แต่ฉันพบวิธีแก้ปัญหาที่เป็นไปได้ด้วยพหุนามเศษส่วนและแพ็คเกจเสี่ยงการแข่งขันที่ฉันต้องการความช่วยเหลือ
ปัญหา
ฉันไม่สามารถหาวิธีง่าย ๆ ในการวิเคราะห์ค่าสัมประสิทธิ์เวลาได้ใน R ฉันต้องการให้สามารถใช้สัมประสิทธิ์ตัวแปรของฉันและทำมันเป็นค่าสัมประสิทธิ์ขึ้นอยู่กับเวลา (ไม่ใช่ตัวแปร) แล้วพล็อตการเปลี่ยนแปลงกับเวลา:
การแก้ปัญหาที่เป็นไปได้
1) การแยกชุดข้อมูล
ฉันได้ดูตัวอย่างนี้ (Se ส่วนที่ 2 ของเซสชันแล็บ) แต่การสร้างชุดข้อมูลแยกต่างหากดูเหมือนซับซ้อนซับซ้อนคำนวณค่าใช้จ่ายและไม่ง่ายมาก ...
2) Reduced Rank models - แพ็คเกจ coxvc
แพคเกจ coxvcให้เป็นวิธีที่สง่างามของการจัดการกับปัญหา - นี่เป็นคู่มือ ปัญหาคือผู้เขียนไม่ได้พัฒนาแพ็คเกจ (เวอร์ชั่นล่าสุดคือตั้งแต่วันที่ 23/23/2007) หลังจากการสนทนาทางอีเมลบางครั้งฉันได้รับแพ็คเกจเพื่อใช้งาน แต่การทำงานหนึ่งครั้งใช้เวลา 5 ชั่วโมงในชุดข้อมูลของฉัน (140 000 รายการ) และให้การประมาณการที่มากในตอนท้ายของช่วงเวลา คุณสามารถค้นหาแพ็คเกจที่อัปเดตได้ที่นี่ - ฉันเพิ่งปรับปรุงฟังก์ชั่นการแปลงเป็นส่วนใหญ่
อาจเป็นเพียงคำถามของการปรับเปลี่ยน แต่เนื่องจากซอฟต์แวร์ไม่สามารถให้ช่วงความมั่นใจได้อย่างง่ายดายและกระบวนการนี้ใช้เวลานานดังนั้นตอนนี้ฉันจึงดูโซลูชันอื่น ๆ
3) แพ็คเกจ timereg
แพ็คเกจ timereg ที่น่าประทับใจยังแก้ปัญหาได้ แต่ฉันไม่แน่ใจว่าจะใช้งานอย่างไรและมันก็ไม่ได้ช่วยให้ฉันวางแผนได้อย่างราบรื่น
4) โมเดลพหุนาม Fractional Time (FPT)
ฉันพบวิทยานิพนธ์ปริญญานิพนธ์ที่ยอดเยี่ยมของ Anika Buchholz เกี่ยวกับ"การประเมินผลกระทบระยะยาวที่แตกต่างกันของการรักษาและปัจจัยการพยากรณ์โรค"ซึ่งเป็นงานที่ยอดเยี่ยมซึ่งครอบคลุมโมเดลที่แตกต่างกัน เธอสรุปว่าFPT ที่เสนอของ Sauerbrei et alดูเหมือนจะเหมาะสมที่สุดสำหรับค่าสัมประสิทธิ์ตามเวลา:
FPT นั้นดีมากในการตรวจจับเอฟเฟกต์ที่หลากหลายตามเวลาในขณะที่วิธีการลดอันดับนั้นจะส่งผลให้ตัวแบบซับซ้อนเกินไปเนื่องจากไม่ได้รวมการเลือกเอฟเฟกต์ที่เปลี่ยนแปลงตามเวลา
การวิจัยดูเหมือนจะสมบูรณ์มาก แต่ฉันก็เอื้อมไม่ออกเลย ฉันยังสงสัยเล็กน้อยเนื่องจากเธอทำงานกับ Sauerbrei ดูเหมือนว่าจะฟังดูดีและฉันคิดว่าการวิเคราะห์สามารถทำได้ด้วยแพ็คเกจ mfpแต่ฉันก็ไม่แน่ใจ
5) แพคเกจ cmprsk
ฉันได้คิดถึงการวิเคราะห์ความเสี่ยงของคู่แข่ง แต่การคำนวณนั้นใช้เวลานานดังนั้นฉันจึงเปลี่ยนมาใช้วิธีการถดถอยแบบค็อกซ์เป็นประจำ CRRมีตัวเลือกสำหรับการ thoug เวลาตัวแปรขึ้นอยู่นี้:
....
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 ได้อย่างไร
- ฉันจะใช้เวลา covariate เป็น cmprsk ได้อย่างไร
- ฉันจะพล็อตผลลัพธ์ได้อย่างไร (ควรมีช่วงความมั่นใจเป็นพิเศษ)
y~x
y~x*(t+t^2)-t
y~x+x:t+x:t^2