2013-09-23 1 views
5

Я пытаюсь моделировать срок службы клиентов при подписке. Поскольку данные подвергаются цензуре, я буду использовать пакет выживаемости R для создания кривой выживания.Как ввести цензурные данные в модель выживания R?

оригинальный подписок набор данных выглядит следующим образом ..

id start_date end_date 
1 2013-06-01 2013-08-25 
2 2013-06-01 NA 
3 2013-08-01 2013-09-12 

Что я манипулировать, чтобы выглядеть следующим образом ..

id tenure_in_months status(1=cancelled, 0=active) 
1 2    1 
2 ?    0 
3 1    1 

..в для того, чтобы кормить модель выживания:

obj <- with(subscriptions, Surv(time=tenure_in_months, event=status, type="right")) 
fit <- survfit(obj~1, data=subscriptions) 
plot(fit) 

Что я должен внести в переменную tenure_in_months для сохраненных случаев, то есть случаев, когда подписка по-прежнему активна сегодня - должна ли она существовать до сегодняшнего дня или должна быть НС?

+0

он должен быть до того дня, когда вы собрали свои данные, я думаю, что это «сегодня». – drevicko

ответ

1

Если отсутствующая дата окончания означает, что подписка по-прежнему активна, вам необходимо взять время до текущей даты в качестве даты цензора.

NA не работает с объектом выживания. Я думаю, что эти случаи будут опущены. Это не то, что вы хотите! Потому что эти случаи содержат важную информацию о выживании.

SQL-код, чтобы получить время до события (использование в SELECT, части запроса)

DATEDIFF(M,start_date,ISNULL(end_date,GETDATE()) AS tenure_in_months 

КСТАТИ: я хотел бы использовать разницу в днях, для моего анализа. Не имеет смысла округлять время до нескольких месяцев.

+1

Статистический совет хорош, но код недействителен R. –

+0

Код - это SQL. Я думал, что вы сами сделали запрос, так что вы сможете его отрегулировать. – Wietze314

+0

Я не заметил, что SQL упоминается в вопросе .... – drevicko

8

Прежде всего я скажу, что не согласен с предыдущим ответом. Поскольку подписка по-прежнему активна сегодня, она не должна считаться владением до сегодняшнего дня или NA. Что мы точно знаем об этих подписках? Мы знаем, что они дожили до сегодняшнего дня, что эквивалентно, например, tenure_in_months для этих наблюдений, хотя мы точно не знаем, как долго они длится, они дольше, чем их срок службы до сегодняшнего дня.

Это ситуация, известная как правая цензура в анализе выживаемости. См: http://en.wikipedia.org/wiki/Censoring_%28statistics%29

Так что ваши данные нужно будет переводить с

id start_date end_date 
1 2013-06-01 2013-08-25 
2 2013-06-01 NA 
3 2013-08-01 2013-09-12 

к:

id t1 t2 status(3=interval_censored) 
1 2 2   3 
2 3 NA   3 
3 1 1   3 

Затем вам нужно будет изменить объект R surv от:

Surv(time=tenure_in_months, event=status, type="right") 

:

Surv(t1, t2, event=status, type="interval2") 

См. http://stat.ethz.ch/R-manual/R-devel/library/survival/html/Surv.html для получения более подробных сведений о синтаксисе. Очень хорошее резюме вычислительных деталей можно найти: http://support.sas.com/documentation/cdl/en/statug/63033/HTML/default/viewer.htm#statug_lifereg_sect018.htm

Интервальные цензурные данные могут быть представлены двумя способами. Для первого типа использования = интервал и коды, показанные выше. В этом использовании значение аргумента time2 игнорируется, если событие = 3.Второй подход состоит в том, чтобы рассматривать каждое наблюдение как временной интервал с (-инфекцией, t) для левой цензуры (t, бесконечность) для правой цензуры (t, t) для точных и (t1, t2) для интервала. Это подход, используемый для типа = interval2, причем NA занимает место бесконечности. Это оказалось более полезным.

+0

Ах, вы правы, я думаю. Правильная цензура должна означать время события в '[time, + inf)', но в R, я думаю, это точно так же, как точное событие на 'time' при использовании' type = 'interval''. Затем нужно 'interval2', см. Править. –

+0

Я считаю, что ваша запись для id 2 совершенно неверна. Вы должны знать, когда измерялась «NA». Запись t1 должна быть тогда минусом 2013-06-01. – drevicko

0

Необходимо знать дату сбора данных. tenure_in_months для id 2 должна быть эта дата минус 2013-06-01.

В противном случае, я считаю, что ваше кодирование данных верное. status из 0 для id 2 указывает, что он имеет правоцензуре (это означает, что у нас есть нижняя граница его жизни, но не верхняя граница).