Левая цензура для данных о выживаемости в R
Я хочу провести анализ выживания (моделирование Каплана-Мейера и Кокса) на данных, которые подвергаются цензуре как слева, так и справа. Я смотрю на время возникновения аритмии сердца (AF) в присутствии или отсутствии определенного гена (Gene 0 или 1). Тем не менее, у некоторых субъектов уже выявлена аритмия при наборе, поэтому их следует оставить под цензурой. Я прочитал документацию пакета выживания, но не могу понять, как учесть левую цензуру. Некоторые составили пример данных ниже. Субъекты 1 и 3 имели AF на исходном уровне, поэтому их следует оставить под цензурой. Субъект 2 не испытал событие к концу наблюдения и поэтому подвергается цензуре. Испытуемые 5 и 6 оба испытали событие (в 8 и 3 месяца соответственно).
Gene<-c(0,0,1,1,0)
AF_at_baseline<-c(1,0,1,0, 0)
Followup_time<-c(11,3,8,15,7)
AF_time<-c(NA, NA, NA, 8, 3)
AF_data<-data.frame(Gene, AF_at_baseline, Followup_time, AF_time)
2 ответа
У меня была похожая проблема, и я решил ее так:
Как указано в survival
файл справки нужно указать time
а также time2
,
Вы можете думать о данных, оставленных цензурой, как о -infinity
до time
Вы измерили, и право цензуры идти от time
Вы измерили (вероятно, последующее наблюдение) до +infinity
, Бесконечность лучше всего кодируется NA
,
То, что решило мою проблему, создало два вектора: начальный вектор time
и вектор остановки time2
,
За time
Вы хотите, чтобы все те ценности, которые оставлены цензурой, были NA
, Право цензурированные наблюдения заполняются временем измерения, так же как события.
За time2
это наоборот.
Однако я не получаю ваши данные. Зачем вам следить за темами, если у них уже было событие? Это то, что вы делаете для субъектов 4 и 5, говоря, что время AF было 8 и 3, а Followup_time было 15 и 7.
Пытаясь помочь, я предполагаю следующее:
У вас 5 пациентов с
AF_at_baseline<-c(1,0,1,0,0) #where 1 indicates left censoring
Время наблюдения - это время события (или последнее время наблюдения для цензуры слева и справа)
Так что для данных с левой цензурой ваш Followup_time будет выглядеть так:
Followup_time <- c(NA, 3, NA, 15, 7)
Для правильной цензуры данных:
Followup_time2 <- c(11, NA, 8 ,15, 7)
#Since you indicated that only subject 2 didn't experience the event
Теперь вы можете позвонить Surv
Surv.Obj <- Surv(Followup_time, Followup_time2, type = 'interval2')
Surv.Obj
[1] 11- 3+ 8- 15 7 # with '-' indicating left censoring and '+' right censoring
Тогда вы можете позвонить survfit
и построить кривую Каплана-Мейера:
km <- survfit(Surv.Obj ~ 1, conf.type = "none")
km
Call: survfit(formula = Surv.Obj ~ 1, conf.type = "none")
n events median 0.95LCL 0.95UCL
5 4 7 7 NA
enter code here
summary(km)
Call: survfit(formula = Surv.Obj ~ 1, conf.type = "none")
time n.risk n.event survival std.err lower 95% CI upper 95% CI
7.0 4 3.00e+00 0.25 0.217 0.0458 1
7.5 1 4.44e-16 0.25 0.217 0.0458 1
15.0 1 1.00e+00 0.00 NaN NA NA
plot(km, conf.int = FALSE, mark.time = TRUE)
До сих пор я не узнал, как сделать Кокс PH с данными интервала. Смотрите мой вопрос здесь.
Если у вас есть как данные, подвергнутые цензуре слева, так и справа, вы можете рассматривать это как особый случай интервальной цензуры. Это тот случай, когда вы знаете время события только с интервалом. Если вы оставили цензуру слева, этот интервал равен (-Inf, t), а справа цензура - (t, Inf).
Таким образом, вы можете использовать мой пакет R icenReg
смоделировать ваши данные. Для модели Cox-PH это может подходить как
fit <- ic_sp(cbind(left, right) ~ covars,
data = myData, model = 'ph',
bs_samples = 500)
где left
а также right
являются левой и правой сторонами интервала, в котором событие произошло для человека. Если событие без цензуры, то просто установите left
равно right
для этого предмета.