2016-03-15 1 views
2

Этот вопрос касается того, что происходит с эталонным уровнем отношения опасностей в регрессии Cox PH с использованием факторов, когда базовый уровень по умолчанию получает подмножество, и особенно, если это поведение можно изменить в операции подмножества coxph.Могу ли я переопределить опорный уровень фактора * в * подмножестве Cox PH?

Приложение является причиной особых опасностей, поэтому я хотел бы гибко анализировать несколько подмножеств переменных - по одному для каждого из конкурирующих рисков - без создания нескольких экземпляров набора данных All Cause. (Примечание: это исследовательское, а не проверки гипотезы.)

Определить надуманный ФР, который ведет себя разумно (например, статистически значимые, не слишком много предупреждений) ...

smpls = 50 
df <- data.frame(time=c(sample.int(10,smpls, replace=TRUE), 
         sample.int(20,smpls, replace=TRUE), 
         sample.int(30,smpls, replace=TRUE)), 
       status=1, 
       x=as.factor(c(rep("A",smpls), 
           rep("B",smpls), 
           rep("C",smpls)))) 

нагрузки соответствующая библиотека .. .

require(survival) 

ли базовый случай, который выводит коэффициенты HR для в и с, с фактором а в качестве эталона ...

coxph(Surv(time, status) ~ x, df) 

Тогда подмножество из фактора А. Это, кажется, имеет эффект выбора коэффициента C в качестве эталона для коэффициента для фактора В.

coxph(Surv(time, status) ~ x, df, subset=x!="A") 

В этом последнем примере, как бы я «сила» ссылка будет B вместо C?

ответ

2

Одним из вариантов является использование mutate из dplyr пакета, который позволяет изменять кадр данных на лету:

library(dplyr)   

Keep все три уровня, но установить опорный уровень для B:

coxph(Surv(time, status) ~ x, data = mutate(df, x = relevel(x, ref="B"))) 

Избавьтесь от уровня A и установите контрольный уровень на B: Мы также используем здесь droplevels, так что фактор-фактор A не только удаляется из кадра данных, но также опускается как возможный уровень для x. Вам не нужно вызывать droplevels, но затем вы получите предупреждение, а итоговый вывод будет содержать строку отсутствующих значений для уровня A.

coxph(Surv(time, status) ~ x, 
    data = df %>% 
    filter(x != "A") %>% 
    mutate(x = droplevels(relevel(x, ref="B")))) 
+0

Приятный ответ, и я рад, что спросил, потому что не думаю, что у меня было бы это под моим собственным паром. Также хороший пример использования оператора трубы (как я понимаю, это называется). –

Смежные вопросы