Модель пропорциональных рисков Кокса с зависящими от времени ковариатами

В этом примере показано, как преобразовать данные о выживании в форму процесса подсчета и затем создать модель пропорциональных рисков Кокса с зависящими от времени ковариатами.

Шаг 1. Сравните стандартное размещение и форму процесса подсчета.

Модель Кокса с зависящими от времени ковариатами требует, чтобы данные о выживании находились в форме процесса подсчета, а не в стандартном размещении. Чтобы увидеть различие между данными о выживании в стандартном размещении и в форме процесса подсчета, загрузите следующие выборочные данные.

load simplesurvivaldata

Эти выборочные данные содержат две таблицы: relapseS и relapseCP. Эти две таблицы представляют одни и те же простые данные о выживании в стандартном размещении и в форме процесса подсчета, соответственно.

Отображение данных в стандартном размещении.

relapseS
relapseS=2×5 table
    ID    Time    Censoring    Age    StopTreatment
    __    ____    _________    ___    _____________

    1       5         0        20          NaN     
    2      20         1        30           12     

Эти данные представляют двух пациентов, чей статус лечения изменяется с течением времени. Пациент 1 не принимал лечение в течение интервала с 0 по 5 неделю и рецидивировал в конце интервала. Пациент 2 принимал лечение в течение интервала от 0 до 12 недели, но не в течение интервала от 12 до 20 недели. Пациент 2 не рецидивировал и покинул исследование после 20 недели.

Теперь отобразите те же данные в форме процесса подсчета.

relapseCP
relapseCP=3×6 table
    ID    tStart    tStop    Censoring    Age    TreatmentStatus
    __    ______    _____    _________    ___    _______________

    1        0        5          0        20            0       
    2        0       12          1        30            1       
    2       12       20          1        30            0       

В форме процесса подсчета каждая строка представляет интервал риска (tStart,tStop] вместо одного значения времени события. Censoring 0, если событие наблюдается в конце интервала риска, и 1, если это не так TreatmentStatus. соответствует зависящей от времени ковариате, которая представляет ту же информацию с StopTreatment в стандартном размещении. Обратите внимание, что модель Кокса принимает зависящие от времени ковариаты, чтобы быть постоянными в каждом интервале риска.

Шаг 2. Загрузите выборочные данные.

Затем загрузите выборочные данные для преобразования.

load survivaldatacp

Эти выборочные данные содержат таблицу labS, которые моделируют данные о выживаемости, включая повторное измерение для каждого пациента в стандартном размещении.

Отобразите моделируемые данные о выживании в стандартном размещении.

labS
labS=6×7 table
    ID    Time    Censoring    Sex    Lab_0    Lab_50    Lab_100
    __    ____    _________    ___    _____    ______    _______

    1      46         0         1      0.3       NaN       NaN  
    2     138         1         0      0.2      0.23      0.39  
    3      94         0         1     0.18      0.22       NaN  
    4      50         0         0     0.21       0.2       NaN  
    5     106         0         0     0.25      0.21      0.42  
    6      98         0         0     0.21      0.22       NaN  

В стандартном размещении каждая строка таблицы показывает информацию для одного пациента.

  • ID указывает идентификатор пациента. Вы не включаете ID как вход модели Кокса. Включите ID в наборе данных, чтобы подтвердить, что набор данных правильно преобразован в форму процесса подсчета.

  • Time представляет время до события в днях, что соответствует переменной отклика.

  • Censoring имеет цензурную информацию для каждого пациента, где 1 указывает на цензурные данные, а 0 указывает, что точное время до события наблюдается в конце периода наблюдения.

  • Sex является независимым от времени предиктором, где 1 указывает на самку, а 0 указывает на самку.

  • Lab_0, Lab_50, и Lab_100 представление трех последовательных лабораторных результатов, измеренных на 0, 50 и 100 день, которые соответствуют зависящему от времени предиктору.

Шаг 3. Преобразуйте данные о выживании в форму процесса подсчета.

Чтобы преобразовать данные выживания labS для подсчета формы процесса выполните код ниже. Этот код преобразует Time в интервал риска (tStart,tStop] и объединяет три вектора зависящего от времени предиктора, Lab_0, Lab_50, и Lab_100, в один вектор, Lab.

mTime = [0 50 100]; % Measurement time
threeLabs = [labS.Lab_0 labS.Lab_50 labS.Lab_100]; 
nLabMeasure = sum(sum(~isnan(threeLabs))); % Number of lab measurements
data = zeros(nLabMeasure,6); % One row for each observation
oID = 0; % Observation ID 
for i = 1 : size(labS,1)
    idx = find(mTime <= labS.Time(i));
    for j = 1 : length(idx)-1
        oID = oID + 1;
        data(oID,:) = [labS.ID(i) mTime(j:j+1) 1 labS.Sex(i) threeLabs(i,j)];
    end
    oID = oID + 1;
    data(oID,:) = [labS.ID(i) mTime(length(idx)) labS.Time(i) ... 
            labS.Censoring(i) labS.Sex(i) threeLabs(i,length(idx))];
end
labCP = table(data(:,1),data(:,2),data(:,3),data(:,4),data(:,5),data(:,6), ...
    'VariableNames', {'ID','tStart','tStop','Censoring','Sex','Lab'});

Отобразите данные о выживании в форме процесса подсчета.

labCP
labCP=13×6 table
    ID    tStart    tStop    Censoring    Sex    Lab 
    __    ______    _____    _________    ___    ____

    1        0        46         0         1      0.3
    2        0        50         1         0      0.2
    2       50       100         1         0     0.23
    2      100       138         1         0     0.39
    3        0        50         1         1     0.18
    3       50        94         0         1     0.22
    4        0        50         1         0     0.21
    4       50        50         0         0      0.2
    5        0        50         1         0     0.25
    5       50       100         1         0     0.21
    5      100       106         0         0     0.42
    6        0        50         1         0     0.21
    6       50        98         0         0     0.22

В форме процесса подсчета каждая строка таблицы labCP показывает информацию одного наблюдения, соответствующего одному интервалу риска. Обратите внимание, что модель Кокса принимает Lab быть постоянным в интервале риска (tStart,tStop]. Значение в Censoring 0, если событие наблюдается в конце интервала риска, и 1, если событие не наблюдается.

Для примера пациент 3 имеет два лабораторных измерения на 0 и 50 день, так что существует две строки данных для пациента 3 в форме процесса подсчета. Модель Кокса предполагает, что результаты лаборатории 0,18 и 0,22 являются постоянными в интервале (0,50] и (50,94], соответственно. Censoring 1 в (0,50] и 0 в (50,94], потому что точное время наступления 3 пациента наблюдается в день 94.

Шаг 4. Настройте интервал риска нулевой длины.

Найдите пациента, у которого есть интервал риска нулевой длины.

idxInvalid = labCP.ID(find(labCP.tStart == labCP.tStop))
idxInvalid = 4

Проверьте данные для пациента 4.

labCP(find(labCP.ID==idxInvalid),:)
ans=2×6 table
    ID    tStart    tStop    Censoring    Sex    Lab 
    __    ______    _____    _________    ___    ____

    4        0       50          1         0     0.21
    4       50       50          0         0      0.2

Время до наступления пациента 4 совпадает с днем 50 измерения. Однако (50,50] является недопустимым интервалом риска для модели Кокса, потому что модель не принимает интервал нулевой длины. Установите допустимый интервал риска. В качестве суммы корректировки можно выбрать любое значение, меньше единицы времени. Выбор суммы корректировки произволен, и она не меняет результат.

idxAdjust = find(labCP.ID==idxInvalid);
labCP.tStop(idxAdjust(1)) = labCP.tStop(idxAdjust(1))-0.5;
labCP.tStart(idxAdjust(2)) = labCP.tStart(idxAdjust(2))-0.5;
labCP(idxAdjust,:)
ans=2×6 table
    ID    tStart    tStop    Censoring    Sex    Lab 
    __    ______    _____    _________    ___    ____

    4         0     49.5         1         0     0.21
    4      49.5       50         0         0      0.2

Шаг 5. Создайте модель пропорциональных рисков Кокса.

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

X = [labCP.Sex labCP.Lab];
T = [labCP.tStart labCP.tStop];
b = coxphfit(X,T,'Censoring',labCP.Censoring,'Baseline',0)
b = 2×1

    2.0054
   29.7530

Для получения дополнительной информации о том, как оценить модель пропорциональных опасностей Кокса, см. Модель пропорциональных опасностей Кокса для цензурированных данных.

См. также

Похожие примеры

Подробнее о