Сообщение об ошибке в фрейме данных survfit для создания графиков выживания в R

#r #survival-analysis

#r #анализ выживания

Вопрос:

Получение этой ошибки при попытке запустить мой код: Error in model.frame.default(data = list(an = c(0, 0), gn = c(0, 0), pkd = c(0, : variable lengths differ (found for 'age.c')

Вот мой код:

 library(KMsurv)
library(survival)
data(kidrecurr)
attach(kidrecurr)
head(kidrecurr)
#Long Form
kid.dat <- data.frame(patient=rep(patient, 2), time=c(time1, time2), infect=c(infect1, infect2), age=age, gender=gender, gn=gn, an=an, pkd=pkd)

kid.surv <- Surv(kid.dat$time, kid.dat$infect)
age.c <- kid.dat$age-mean(kid.dat$age)
#Cox ph
kid.ph <- coxph(kid.surv~kid.dat$an kid.dat$gn kid.dat$pkd kid.dat$gender age.c)
#Frailty Model
kid.f <- coxph(kid.surv~kid.dat$an kid.dat$gn kid.dat$pkd kid.dat$gender age.c frailty(kid.dat$patient, dist="gamma"))
#Marginal Model
kid.m <- coxph(kid.surv~kid.dat$an kid.dat$gn kid.dat$pkd kid.dat$gender age.c cluster(kid.dat$patient))

#Summaries for confidence intervals, hazard ratios, and p-values
summary(kid.ph)
summary(kid.f)
summary(kid.m)

#Plot of survivals for gender for each model

newdat <- data.frame(an=0, gn=0, pkd=0, gender=0:1, age.c=0); newdat
fit.ph <- survfit(kid.ph, newdat)
fit.m <- survfit(kid.m, newdat)
##Frailty model items for plot
modf.bh <- basehaz(kid.f)
modf.surv0f25 <- exp(-modf.bh$hazard*.25)
modf.surv1f25 <- exp(-modf.bh$hazard*.25)^exp(kid.f$coef)
 

Моя цель — создать единый график оцененных функций выживания для мужчин и женщин из моделей coxph, модели хрупкости и маргинальной модели. Однако я получаю эту ошибку и не могу заставить остальные работать.
Любая помощь приветствуется! Я не уверен, в чем проблема. Я понимаю, что фрейм данных должен содержать только одну строку для каждого из уровней пола, а остальное «обнуляется», что у меня есть в моем data.frame.
Я попытался изменить переменную age, чтобы иметь 0 для 76 записей, а затем повторить пол, но это не создает график, который мне нужен (несколько строк выживания).

Комментарии:

1. не используйте $ в формуле, ваш код должен выглядеть так coxph(kid.surv ~ an gn pkd gender age.c, kid.dat) , тогда он будет работать

2. @rawr Вау! это создает много проблем с тех пор, и я считаю, что это исправило ситуацию. Большое спасибо! Я потратил так много времени, пытаясь понять это.