Vous apprendre à utiliser le langage R pour créer un modèle de risque concurrentiel et dessiner un nomogramme

Le modèle de risque concurrentiel fait référence à l'événement final qui lui fait concurrence dans un événement clinique. Il s'agit de l'événement qui provoquera le changement du résultat initial, c'est ce qu'on appelle le modèle de risque concurrentiel. Par exemple, nous voulons observer la récidive de la tumeur d'un patient, mais le patient est décédé subitement dans un accident de voiture pendant la période d'observation, ou est décédé d'autres maladies, nous ne pouvons donc pas observer la récidive. Dans ce cas, les données manquantes ne peuvent pas être traitées uniquement comme censurées à droite. Dans ce cas, l'estimation des données sera erronée. C'est que nous devrions donner la priorité au modèle de risque concurrentiel pour l'analyse des données, plutôt qu'à la régression COX. Les modèles de risque concurrentiel sont souvent utilisés dans l'exploration de données. Nous présenterons à l'avenir comment utiliser les modèles de risque concurrentiel pour l'exploration de données dans le didacticiel d'exploration de base de données SEER.
Insérez la description de l'image ici
Nous utilisons l'ensemble de données sur le cancer de la vessie vessie1 qui accompagne la survie en langage R. Afin de le faire répondre aux exigences du modèle de risque concurrentiel, nous avons fait un petit tri. Ce que nous voulons observer, c'est la récidive de la tumeur, donc la mort est sa facteur de concurrence du risque.
Nous importons d'abord le R requis, puis importons les données

library(foreign)
library(survival)
library("cmprsk")
library(rms)
be<-read.csv("E:/r/test/jzfx.csv",sep=',',header=TRUE)

Insérez la description de l'image ici
Voyons à quoi ressemblent les données.
Insérez la description de l'image ici
Le nom des données est interprété comme
suit : id: numéro du patient; traitement: 1. placebo 2. vitamine B 6. 3. thiotépa;
nombre: nombre initial de tumeurs taille: la plus grande initiale taille de la tumeur (cm) récidive: nombre de récidives
début, arrêt: début, arrêt: heure de début et de fin de chaque intervalle de temps état (résultat): 1. Survie 2. Récidive 3. Mort rtumeur: Le nombre de tumeurs trouvées à la récidive rsize : la plus grande taille de la tumeur lors de la récidive

## 不同治疗方案的复发率和竞争事件发生率
cum<-cuminc(be$etime,be$status,be$treatment)
plot(cum)

Insérez la description de l'image ici

Peut aussi embellir
Insérez la description de l'image ici

## 多因素竞争风险模型-复发的发生率(或竞争事件的发生率,failcode = 2)
time<-be$etime
status<-be$status
x <- be[, c('treatment', 'number', 'size','recur')]
fit2 <- crr(time,status,x,failcode = 1)#这里failcode = 1代表肿瘤复发
summary(fit2)

Insérez la description de l'image ici
D'accord, nous avons le modèle, maintenant nous allons faire venir 1 patient pour le tester

fit3<-predict(fit2,c(1,2,1,0)) #对应数据X的4个指标
plot(fit3,lty=1,color="darkcyan",ylab="Cumulative probability of recurrence")

Insérez la description de l'image ici
## Ensuite, faisons un nomogramme.
Premièrement, nous devons pondérer les données. Pourquoi avons-nous besoin d'une pondération? Le principe est très compliqué. Je ne connais pas le principe du modèle de risque concurrentiel, mais les grandes vaches disent que nous besoin de le peser.

library(mstate)
bc<-be
bc<-bc[-1,]
bc<-bc[-129,]
be.w<-crprep("etime",status = "status",data =bc,trans = c(1,2),cens = 0,id="id",
             keep = c('treatment', 'number', 'size','recur'))#进行加权

Insérez la description de l'image ici

be.w$Time<-be.w$Tstop-be.w$Tstart#添加个时间,好进行COX回归
dd<-datadist(be.w)
options(datadist="dd")
f <- cph(Surv(Tstart,Tstop,status==1) ~ treatment+number+size+recur, x=T, y=T, 
         surv=T, data=be.w, time.inc=36)#建立COX回归
surv<- Survival(f)#生成预测函数
nom <- nomogram(f, fun=list(function(x) surv(36, x),
                            function(x) surv(60, x)),
                funlabel=c("3-year survival Probability", 
                           "5-year survival Probability"))#制作列线图
plot(nom)

Insérez la description de l'image ici
Ce nomogramme est un peu moche, principalement parce que la probabilité est trop faible. Si vous êtes intéressé, vous pouvez l'ajuster vous-même
### Nomogramme médian

med <- Quantile(f) # 计算中位生存时间
nom2 <- nomogram(f, fun=function(x) med(lp=x),funlabel="Median Survival Time")
plot(nom2)

Insérez la description de l'image ici

Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/dege857/article/details/112257071
conseillé
Classement