График скорректированного риска

Со следующим кадром данных:

death <- c(1,0,1,0,0,0,0,1,0,0,0,1,1,0,1,0,0,1,0,1,1,1,1,0,1,1,1,0,0,1)
age<-c (70,50,60,60,55,46,50,60,59,61,62,55,66,60,59,58,61,59,58,60,60,58,60,60,61,61,59,60,61,64)
survival_time <- c(4,29,24,29,29,29,29,19,29,29,29,3,9,29,15,29,29,11,29,5,13,20,22,29,16,21,9,29,29,15)
diabetes <- c(0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0)
bloodpressure <- c(160,120,150,140,135,110,139,140,153,129,149,163,179,129,144,119,100,115,145,150,130,120,122,129,116,171,129,126,159,150)
data <- data.frame(death, survival_time, diabetes, bloodpressure,age)

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

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

Есть ли способ сделать это в R или SPSS?

Моя первая попытка не дает результата, на который я надеялся:

cfit4a <- coxph(Surv(survival_time, death) ~ age + diabetes + bloodpressure, data=data) 
surv4a <- survfit(cfit4a) 
plot(surv4a, col=c(1,2,4), mark.time=F, xscale=365.25, xlab="blood pressure", ylab="Survival")

Как я могу создать график, отображающий значения артериального давления по оси x? Как я могу отобразить скорректированный риск вместо выживания на оси Y? (Я добавил пример данных в исходный пост выше)


person herbertus    schedule 13.01.2019    source источник
comment
cran.r-project.org/web/packages/survival/ виньетки/adjcurve.pdf   -  person Ben Bolker    schedule 13.01.2019
comment
@BenBolker Я попробовал следующий код, который, к сожалению, не дал ожидаемого результата: cfit4a <- coxph(Surv(survival_time, death) ~ age + diabetes + bloodpressure, data=data) surv4a <- survfit(cfit4a) plot(surv4a, col=c(1,2,4), mark.time=F, xscale=365.25, xlab="blood pressure", ylab="Survival") Как мне создать график, отображающий значения артериального давления по оси X? Как я могу отобразить скорректированный риск вместо выживания на оси Y? (Я добавил пример данных в исходный пост выше)   -  person herbertus    schedule 13.01.2019
comment
Вы можете отредактировать свой вопрос ;-)   -  person Christoph    schedule 13.01.2019


Ответы (1)


Вы запрашиваете график скорректированного относительного риска для артериального давления в контексте многомерной модели, которая включает не только артериальное давление, но и возраст (в числовом виде) и диабет (в качестве показателя 1/0). Простой подход заключается в использовании predict.coxph с типом «риск» и отправке кадра данных с кровяным давлением, заданным в виде диапазона значений с age и diabetes, установленными на определенном уровне. Для этого прогноза важно, каковы указанные уровни, потому что эталонные значения для age и diabetes будут влиять на оценки относительного риска. Я считаю, что Терно использует средние значения ковариат, чтобы установить базовую опасность. Таким образом, вместо того, чтобы выбирать конкретное значение для этих ковариат, вы могли бы использовать mean(data$age) и mean(data$diabetes), что должно было заставить значение RR bloodpressure равняться 1 при среднем значении bloodpressure.

bp.df <- data.frame(bloodpressure=seq(120,210,by=5), age=60, diabetes=0)
pred.rr.bp <- predict(cfit4a, newdata=bp.df,type="risk", se.fit=TRUE)

plot( x = bp.df$bloodpressure, y=pred.rr.bp$fit, type="l", ylim=c(0,10), main="BP Relative Risk with age=60 and diabetes=0")
lines(x = bp.df$bloodpressure, 
          y=pred.rr.bp$fit+1.96*pred.rr.bp$se.fit,lty=3)
lines(x = bp.df$bloodpressure, 
          y=pred.rr.bp$fit-1.96*pred.rr.bp$se.fit,lty=3)

введите здесь описание изображения

Также можно использовать rms-pkg. Это требует некоторого дополнительного изучения, чтобы справиться с его особыми требованиями, но если вам действительно нужно, чтобы строки std-error соответствовали медиане bp, как показывает ваш пример, то его процедуры построения графиков действительно обеспечивают эту «функцию». Меня это всегда немного беспокоило, однако точные значения линий +/-1,96*s.e. на самом деле не так уж важны.

person IRTFM    schedule 13.01.2019