Как использовать строковую переменную в анализе выживания в R?

Я хочу применить параметрический анализ выживаемости в R. Мои данные - это данные исследования рака легких ветерана. Вот первые 20 столбцов данных:

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

Думаю, мне нужно преобразовать celltype в категориальные фиктивные переменные, как это предлагается здесь:

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

Во-первых, мне интересно, есть ли способ использовать celltype как в исходной форме. Если да, то как?

Во-вторых, как я могу создать фиктивные переменные, упомянутые выше?

Вот как вы получаете все данные:

library(survival)
veteran

а вот как модель подогнали в R:

weibull <- survreg(S ~c2 + c3 + c4, dist="w")

и вот результат:

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


person Günal    schedule 04.12.2014    source источник


Ответы (3)


Вы можете создать матрицу модели, содержащую 4 фиктивные переменные для celltype с model.matrix:

model.matrix( ~ 0 + celltype, veteran)

Результат:

    celltypesquamous celltypesmallcell celltypeadeno celltypelarge
1                  1                 0             0             0
2                  1                 0             0             0
3                  1                 0             0             0
4                  1                 0             0             0
5                  1                 0             0             0
.
.
.
person Sven Hohenstein    schedule 04.12.2014

Чтобы изменить коэффициенты, вы можете использовать следующий код:

DataFrame$celltype[DataFrame$celltype == "large"] <- 1

с помощью этого кода вы можете изменить каждую часть вашего фрейма данных. Имейте в виду, что вам нужно изменить режим значения с факторного на числовой, если вы хотите что-то вычислить.

DataFrame$celltype <- as.numeric(DataFrame$celltype)

лучший пай

PS: я не уверен, что это был вопрос

person alias_paj    schedule 04.12.2014

Вам не нужно делать ничего особенного. Просто введите это имя переменной в формулу. (Меня не впечатляют способности вашего инструктора к программированию на R, если вас этому учили):

> weibull <- survreg(Surv(time,status) ~celltype, dist="w", data=veteran)
> weibull
Call:
survreg(formula = Surv(time, status) ~ celltype, data = veteran, 
    dist = "w")

Coefficients:
      (Intercept) celltypesmallcell     celltypeadeno     celltypelarge 
        5.4065502        -1.0831923        -1.2162022        -0.2627843 

Scale= 1.03048 

Loglik(model)= -734.2   Loglik(intercept only)= -748.1
    Chisq= 27.87 on 3 degrees of freedom, p= 3.9e-06 
n= 137 
person IRTFM    schedule 04.12.2014
comment
спасибо за код, но ваш вывод отличается от того, что было в моих конспектах лекций. Как вы думаете, чем отличается? Я поместил вывод в свой пост выше. - person Günal; 04.12.2014
comment
Похоже, очень похожий результат для меня. Отличается только параметр (Intercept), а все логические статистические данные одинаковы. Вы так и не показали, как был создан этот объект S, так что теперь вы действительно просите нас прочитать ваши мысли. - person IRTFM; 05.12.2014
comment
Это потому, что S не было указано в конспектах лекций. Посмотрев на данные, я подумал, что S = Surv(время,статус). Простите за это - person Günal; 05.12.2014