exponenta event banner

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

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

Шаг 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

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

См. также

Связанные примеры

Подробнее