Кривые выживания, полученные с помощью функции выживания в выживаемости упаковки - PullRequest
1 голос
/ 11 марта 2019

Я использую функцию survfit в пакете R survival для создания кривых выживания из survfit.coxph объекта, выведенного на coxph. У меня есть два метода для создания кривой, которые дают разные результаты. Я верю, что первый - правильный ответ, но я не могу сказать, почему метод 2 не работает.

library(survival)
set.seed(1234)

## generate small data set
n <- 10
z <- rnorm(n,mean=0.4)
x <- rexp(n,exp(z))
y <- pmin(1,x)
del <- 1*(x < 1)
dat <- data.frame(y,del,z)

## fit cox model
fit <- coxph(Surv(y,del)~z,ties="breslow",data=dat)

## method 1
newdata <- dat[1,]
newdata[1,3] <- 0
out <- survfit(fit,newdata=newdata)
out$surv
##[1] 0.9557533 0.9048870 0.8545721 0.7599743 0.6397022 0.4218647 0.4218647


## method 2, why not same as method 1?
dat[1,3] <- 0
out <- survfit(fit,newdata=dat[1,])
out$surv
##[1] 0.9570757 0.9079589 0.8593546 0.7710287 0.6610956 0.4787354 0.4787354

1 Ответ

1 голос
/ 11 марта 2019

В обоих методах survfit функция получает два параметра: fit и newdata.

В методе 1 строка newdata[1,3] <- 0 изменяет только объект newdata, а объект dat и, следовательно, объект fit не изменяются.

В методе 2 вместо dat[1,3] <- 0 изменяется и объект newdata, и объект fit.

Таким образом, объекты newdata, полученные функцией survfit, идентичны в обоих методах, как правильно указали 42, но объекты fit не являются.
Если в начале вы создадите 3 одинаковых кадра данных, вы увидите это.

dat1 <- data.frame(y,del,z)
dat2 <- data.frame(y,del,z)
dat3 <- data.frame(y,del,z)

## fit cox model
fit <- coxph(Surv(y,del)~z,ties="breslow",data=dat1)

## method 1
newdata <- dat2[1,]
newdata[1,3] <- 0

out <- survfit(fit,newdata=newdata)
out$surv
##[1] 0.9557533 0.9048870 0.8545721 0.7599743 0.6397022 0.4218647 0.4218647


## method 2, same as method 1
dat3[1,3] <- 0
out <- survfit(fit,newdata=dat3[1,])
out$surv
##[1] 0.9557533 0.9048870 0.8545721 0.7599743 0.6397022 0.4218647 0.4218647
...