Как сравнить кривые выживания для трех групп, используя (тест Гехана и веса Тарона и Вара) - PullRequest
1 голос
/ 15 марта 2020

Я пытаюсь сравнить кривые выживания для трех групп в данных на следующем рисунке: введите описание изображения здесь

Прежде всего, я запускаю следующий код, чтобы определить данные:

time_Untreated<- c(20, 21, 23, 24, 24, 26, 26, 27, 28, 30)

censor_Untreated<- c(rep(1,10), rep(0,0)) censor_Untreated

time_Radiated<- c(26,28, 29, 29, 30, 30, 31, 31, 32, 35) censor_Radiated<- c(rep(1,9), rep(0,1)) censor_Radiated

time_Radiated_BPA<- c(31, 32, 34, 35, 36, 38, 38, 39, 42, 42) censor_Radiated_BPA<- c(rep(1,8), rep(0,2)) censor_Radiated_BPA

Затем я попытался объединить 3 группы в одну код, чтобы я мог сравнить кривые выживания 3 групп. Я использовал следующий код:

library(KMsurv)

library(survival) library(coin)

KM.fit.Untreated<-survfit(Surv(time_Untreated,censor_Untreated)~1, conf.type="none") plot(KM.fit.Untreated,lty =1:3, lwd=c(3,3,3), col=c(1,4,10), xlab="U", ylab = "Survival") legend(1500, 0.95, c("g = 1, Untreated", "g = 2, Radiated", "g=3, BPA"), lty=1:3, lwd=c(3,3,3),col = c(1,4,10))

KM.fit.Radiated<-survfit(Surv(time_Radiated,censor_Radiated)~1, conf.type="none") plot(KM.fit.Radiated,lty =1:3, lwd=c(3,3,3), col=c(1,4,10), xlab="R", ylab = "Survival") legend(1500, 0.95, c("g = 1, Untreated", "g = 2, Radiated", "g=3, BPA"), lty=1:3, lwd=c(3,3,3),col = c(1,4,10))

KM.fit.Radiated_BPA<-survfit(Surv(time_Radiated_BPA,censor_Radiated_BPA)~1, conf.type="none") plot(KM.fit.Radiated_BPA,lty =1:3, lwd=c(3,3,3), col=c(1,4,10), xlab="B", ylab = "Survival") legend(1500, 0.95, c("g = 1, Untreated", "g = 2, Radiated", "g=3, BPA"), lty=1:3, lwd=c(3,3,3),col = c(1,4,10))

##logrank using the formulas## test.Untreated<-survdiff(Surv(time_Untreated,censor_Untreated)~1) test.Untreated

test.Radiated<-survdiff(Surv(time_Radiated,censor_Radiated)~1) test.Radiated

test.Radiated_BPA<-survdiff(Surv(time_Radiated_BPA,censor_Radiated_BPA)~1) test.Radiated_BPA

Проблема в том, что я получаю сообщение об ошибке при запуске последнего кода (логранк с использованием формул) , что означает «Ошибка в выживаемом» (Surv (time_Untreated, censor_Untreated) ~ 1): нет групп для тестирования

Как правильно это сделать?

1 Ответ

1 голос
/ 15 марта 2020

Вам необходимо настроить данные в длинном формате, что-то вроде этого:

myData <- data.frame(time=c(time_Untreated, time_Radiated, time_Radiated_BPA),
                     status=c(censor_Untreated, censor_Radiated, censor_Radiated_BPA),
                     group= rep(1:3, each=10))
str(myData)
'data.frame':   30 obs. of  3 variables:
 $ time  : num  20 21 23 24 24 26 26 27 28 30 ...
 $ status: num  1 1 1 1 1 1 1 1 1 1 ...
 $ group : int  1 1 1 1 1 1 1 1 1 1 ...

survdiff(Surv(time, status)~group, data=myData)

Call:
survdiff(formula = Surv(time, status) ~ group, data = myData)

         N Observed Expected (O-E)^2/E (O-E)^2/V
group=1 10       10     2.66    20.300    27.365
group=2 10        9     7.60     0.258     0.431
group=3 10        8    16.74     4.566    16.587

 Chisq= 33.4  on 2 degrees of freedom, p= 6e-08

KM.fit <- survfit(Surv(time,status)~group, data=myData, conf.type="none")

cols <- c(1,4,10)
plot(KM.fit, lty=1:3, lwd=3, col=cols, xlab="U", ylab = "Survival")
legend('bottomleft', c("g = 1, Untreated", "g = 2, Radiated", "g=3, BPA"), lty=1:3, lwd=3, col = cols, bty="n")

Если я изменил значения статуса, просто измените их при создании векторы. Например,

censor_Untreated <- c(rep(0,10), rep(1,0))

Поскольку обычно результатом анализа выживания является событие, которое кодируется как 1. A 0 означает цензуру. R допускает три разные версии. 0/1, 1/2 или ЛОЖЬ / ИСТИНА. См. Справочную страницу Surv.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...