Думаю, у вас возникла эта проблема, потому что элементы surv
, lower
и upper
объекта, возвращаемого survfit
, не являются векторами, они являются матрицами. Это дает вам выживание кривых , а не точечные прогнозы. Столбцы в этих матрицах связаны с указанными c комбинациями ковариат, появляющимися в строках фрейма данных, которые вы передали в survfit
, тогда как строки этих матриц представляют полный диапазон (последовательных) временных шагов, наблюдаемых в вашем исходные данные. Если вы хотите, чтобы подгонянные значения для определенного c времени, t , вам нужно вытащить t -ую строку этой матрицы, то есть fitted$surv[t,]
.
Чтобы решить вашу конкретную проблему c, один из вариантов - создать новый фрейм данных только с теми комбинациями ковариат, которые вам нужны, затем применить к нему вашу модель, а затем извлечь строки, представляющие временные шаги. ты хочешь. Итак, вот ...
library(survival)
# Generate data
set.seed(123)
mydata <- data.frame(Site = as.factor(sample(c("SiteA", "SiteB", "SiteC"), 100, replace = TRUE)),
Treatment = as.factor(sample(c("Treat.A", "Treat.B"), 100, replace = TRUE)),
Time = sample(seq(3), 100, replace = TRUE),
Surv = sample(c(0, 1), 100, replace = TRUE)) # Alive is 0, death is 1
# Model
mymodel <- coxph(Surv(Time , Surv) ~ Treatment*Site, data = mydata)
# use expand.grid to get a table with all possible combinations of Site and Treatment
newdata <- with(mydata, expand.grid(Site = unique(Site), Treatment = unique(Treatment)))
# add a vector for your time of interest for clarity's sake; it won't actually factor into survfit
newdata$time = 3
# run survfit on that new table
fitted <- survfit(mymodel, newdata = newdata)
# extract the fitted values for the time slice of interest to you, here 3
newdata$fit <- fitted$surv[3,]
newdata$lower <- fitted$lower[3,]
newdata$upper <- fitted$upper[3,]
# result
print(newdata)
Site Treatment time fit lower upper
1 SiteA Treat.B 3 0.3149307 0.15064889 0.6583612
2 SiteC Treat.B 3 0.1721691 0.04597197 0.6447887
3 SiteB Treat.B 3 0.3979556 0.18679672 0.8478130
4 SiteA Treat.A 3 0.6117692 0.37752270 0.9913616
5 SiteC Treat.A 3 0.3390650 0.15646255 0.7347769
6 SiteB Treat.A 3 0.3128776 0.13297313 0.7361819