Применение одномерной функции coxph к нескольким ковариатам (столбцам) одновременно

Во-первых, я собрал по этой ссылке Применение функции к нескольким столбцам, которая использует Функция «функция», возможно, сделает то, что я ищу. Тем не менее, я не смог совершить скачок от размышлений об этом в представленном виде к тому, чтобы заставить его действительно работать в моей ситуации (или даже не зная, с чего начать). Я новичок в R, поэтому заранее извиняюсь, если это действительно «новый» вопрос. Мои данные представляют собой набор данных, который состоит из переменной события (рецидив опухоли) и переменной времени (время наблюдения/время до рецидива), а также факторов риска рецидива (стадия t, размер опухоли, возраст при dx и т. д.). Некоторые факторы риска являются категориальными, а некоторые – постоянными. Я выполнял свой одномерный анализ вручную, по одной, как в этом примере univariateageatdx‹-coxph(survobj~agedx), а затем собирал данные. Это становится очень утомительным для нескольких факторов и делает это для нескольких разных типов повторения. Я полагал, что должен быть такой способ кодирования, чтобы у меня была одна строка кода с уравнением Кокса, а затем я применяла его ко всем интересующим меня переменным и выдавала результат, содержащий результаты одномерного анализа для каждого фактора. Я попытался использовать cbind для привязки переменных (т.е. x<-cbind("agedx","tumor size"), затем запустить cox coxph(recurrencesurvobj~x), но это, конечно, просто выполнило многомерный анализ этих переменных и не разделило их как настоящие одномерные анализы.

Я также попробовал следующий код, основанный на аналогичной проблеме, которую я нашел на другом сайте, но он выдал показанную ошибку, и я не знаю, что с этим делать. Это на правильном пути?

f <- as.formula(paste('regionalsurvobj ~', paste(colnames(nodcistradmasvssubcutmasR)[6-9], collapse='+')))

Затем я запустил его coxph(f). Дал мне результаты многомерного анализа cox.

Спасибо! ** edit: я только что исправил ошибку, мне нужно было использовать номера столбцов, а не имена. Изменения отражены в приведенном выше коде. Однако он по-прежнему запускает переменные, выбранные как многомерный анализ, а не как настоящий одномерный анализ...


person zhopdemo8    schedule 24.09.2015    source источник
comment
Он работает как анализ с несколькими переменными, потому что вы добавили «+» в качестве свертывания.   -  person Heroka    schedule 24.09.2015


Ответы (1)


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

#example using transplant data from survival package
#make new event-variable: death  or no death
#to have dichot outcome
transplant$death <- transplant$event=="death"

#making formulas
univ_formulas <- sapply(c("age","sex","abo"),function(x)as.formula(paste('Surv(futime,death)~',x))
)
#making a list of models
univ_models <- lapply(univ_formulas, function(x){coxph(x,data=transplant)})

#extract data (here I've gone for HR and confint)
univ_results <- lapply(univ_models,function(x){return(exp(cbind(coef(x),confint(x))))})
person Heroka    schedule 24.09.2015
comment
Это сработало! Большое спасибо, сэкономил мне часы, ха-ха. Теперь мне просто нужно переварить, как вы это сделали, и код, стоящий за этим, чтобы я мог воспроизвести это снова. - person zhopdemo8; 24.09.2015
comment
Последующий вопрос: как мне изменить его на 95% доверительные интервалы и как заставить его показывать p-значение теста Вальда? - person zhopdemo8; 25.09.2015
comment
Я уже пытался разделить все шаги. Если что-то непонятно, спрашивайте. О вашем последнем вопросе: попробуйте сначала извлечь желаемый результат из одной модели, а затем распространите его на список моделей. - person Heroka; 25.09.2015
comment
Достаточно честно, было ясно, что мне просто нужно больше узнать о проектировании функций и нотации, чтобы я мог настроить его именно так, как мне нужно. Опубликованный вами процесс работал отлично. Мне просто нужно, чтобы извлеченный доверительный интервал был в формате интервала 95%, и мне нужно было значение p, а также коэффициент, но я это выясню. Еще раз спасибо! - person zhopdemo8; 25.09.2015
comment
@Heroka Спасибо за ваш вклад. Я попробовал это, и это хорошо, но было бы здорово, если бы вы могли отредактировать свой ответ, чтобы показать, как извлечь значение p для каждой оцененной переменной, а затем как экспортировать в файл csv. Цените ваш вклад. - person Mohamed Rahouma; 10.06.2020
comment
Я попробовал это, и я получил значение p. univ_results <- lapply(univ_models,function(x){cbind(exp(cbind(coef(x),confint(x))),Pval=coef(summary(x))[5])});univ_results - person Mohamed Rahouma; 11.06.2020
comment
См. эту ссылку. - person Mohamed Rahouma; 11.06.2020